mirror of
https://github.com/ditatompel/insights.git
synced 2025-01-08 03:12:06 +07:00
Merge pull request #16 from viechoco/main
Article translation How to Setup Your Own WireGuard VPN Server to Indonesia
This commit is contained in:
commit
2f500663fe
2 changed files with 340 additions and 5 deletions
|
@ -0,0 +1,335 @@
|
|||
---
|
||||
title: "Cara Setup VPN Server WireGuard Sendiri"
|
||||
description: "Tutorial cara bagaimana men-setup server VPN WireGuard sendiri menggunakan VPS server seharga 6 dolar"
|
||||
# linkTitle:
|
||||
date: 2023-06-05T19:04:57+07:00
|
||||
lastmod:
|
||||
draft: false
|
||||
noindex: false
|
||||
# comments: false
|
||||
nav_weight: 1000
|
||||
# nav_icon:
|
||||
# vendor: bootstrap
|
||||
# name: toggles
|
||||
# color: '#e24d0e'
|
||||
series:
|
||||
- WireGuard VPN
|
||||
categories:
|
||||
- Privasi
|
||||
- SysAdmin
|
||||
- Networking
|
||||
- Self-Hosted
|
||||
tags:
|
||||
- VPN
|
||||
- WireGuard
|
||||
images:
|
||||
# menu:
|
||||
# main:
|
||||
# weight: 100
|
||||
# params:
|
||||
# icon:
|
||||
# vendor: bs
|
||||
# name: book
|
||||
# color: '#e24d0e'
|
||||
authors:
|
||||
- ditatompel
|
||||
- vie
|
||||
---
|
||||
|
||||
Cukup menggunakan VPS seharga *6 dolar* per bulan, Anda bisa memiliki **VPN** server sendiri menggunakan **WireGuard VPN**. Ikuti caranya di artikel berikut ini untuk menginstall, dan mensetting VPS **Ubuntu 22.04** menjadi **VPN server** Anda.
|
||||
|
||||
<!--more-->
|
||||
---
|
||||
|
||||
Setelah [beberapa seri artikel tentang **VPN IPsec**](https://insights.ditatompel.com/en/series/ipsec-vpn/) (dalam bahasa Inggris), hari ini saya ingin berbagi bagaimana cara mensetting [**WireGuard VPN**](https://www.wireguard.com/) sebagai server VPN. Jika dibandingkan dengan [L2TP/xAuth](https://insights.ditatompel.com/en/tutorials/ipsec-l2tp-xauth-ikev2-vpn-server-auto-setup/) dan [IKEv2 VPN](https://insights.ditatompel.com/en/tutorials/set-up-ikev2-vpn-server-and-clients/) (artikel saya sebelumnya tentang **IPsec VPN** dalam bahasa Inggris), dari sisi performa, **WireGuard VPN jauh lebih unggul** karena menggunakan **UDP** dan bukan **TCP**.
|
||||
|
||||
## Prasyarat
|
||||
- Sebuah **VPS** dengan alamat IP publik.
|
||||
- Nyaman dan terbiasa dengan Linux *command-line*.
|
||||
- Pengetahuan dasar _subnetting_ di **IPv4** (_jujur saja, sayya tidak begitu familiar dengan subnetting di IPv6, jadi artikel ini hanya untuk IPv4_).
|
||||
|
||||
Untuk pemilihan *cloud provider* mana yang akan Anda gunakan, itu terserah Anda. Di artikel ini, saya akan mengguakan **Droplet** di [**DigitalOcean**](https://m.do.co/c/42d4ba96cc94) (*refferal link*) untuk VPN server saya. (Anda bisa mendapatkan kredit sebesar 200 dolar yang valid untuk 60 hari secara cuma-cuma dengan menggunakan *link* referensi saya).
|
||||
|
||||
> _**CATATAN**: Anda harus tahu bahwa **cloud provider biasanya membebankan biaya *extra* jika Anda melebihi batasan quota** yang telah mereka berikan._
|
||||
|
||||
> _VPS server yang saya gunakan untuk artikel ini akan saya hapus ketika artikel ini dipublikasikan._
|
||||
|
||||
## Memesan dan Menjalankan VPS Baru (DigitalOcean Droplet, opsional)
|
||||
> _Jika Anda sudah memiliki VPS, Anda bisa lompati langkah pada sesi ini dah langsung menuju langkah berikutnya: "[Setup WireGuard Server](#setup-wireguard-server)._
|
||||
|
||||
1. Masuk ke *project* Anda dan buat **Droplet** baru dengan memilih **Create new Droplet**.
|
||||
2. Untuk menghindari *latency* yang tinggi, **pilihlah region yang paling dekat dengan lokasi Anda**. Jika Anda di Indonesia, maka saat ini region terdekat di DigitalOcean adalah Singapore. Namun untuk tutorial kali ini saya ingin mencoba menggunakan Droplet yang lokasinya berada di Frankfurt.
|
||||
3. Pilih sistem operasi untuk Droplet Anda, saya akan menggunakan **Ubuntu** `22.04 LTS`.
|
||||
4. Pilih paket (**Droplet size**). Saya akan mulai dari yang rendah saja, **1 CPU** dengan **1GB of RAM** dan **bandwidth 1TB per bulan** ($6/bulan).
|
||||
Sesuaikan paket / *Droplet Size* yang sesuai dengan kebutuhan Anda untuk menghindari kemungkinan terkena biaya ekstra atas pemakaian bandwidth yang melebihi kapasitas paket (1TB per bulan cukup untuk saya).
|
||||
5. Pilih metode autentikasi Anda untuk mengakses VPS, Saya lebih memilih menggunakan **SSH _public_ dan _private key_** daripada menggunakan authentikasi menggunakan *password*.
|
||||
6. Untuk opsi sisanya, biarkan *default* apa adanya. _Saya yakin **Anda tidak memerlukan opsi backup dan managed database** untuk VPN server ini._
|
||||
|
||||
> _**WireGuard** tidak membutuhkan **disk I/O** yang tinggi, jadi **VPS NVMe** tidak begitu penting (**SSD** sudah sangat cukup)._
|
||||
|
||||
## Setup WireGuard Server
|
||||
> _**CATATAN PENTING**: Karena saya tidak begitu familiar dengan subnetting di **IPv6**, saya hanya akan menggunakan **IPv4** saja._
|
||||
|
||||
Setelah VPS kamu sudah siap dan sudah berjalan, saya sarankan untuk melakukan update OS terlebih dahulu menggunakan perintah `apt update && apt upgrade`, kemudian *restart* (`reboot`) VPS anda.
|
||||
|
||||
<!--
|
||||
ARTIKEL BELUM DIBUAT, UPDATE NANTI
|
||||
> _Jika Anda ingin bisa mengatur **WireGuard** peers (client) di server Anda dengan mudah, Anda mungkin tertarik untuk membaca "[Cara install WireGuard-UI untuk mengatur server VPN WireGuard dengan mudah]({{< ref "#/tutorials/installing-wireguard-ui-to-manage-your-wireguard-vpn-server/index.id.md" >}})"._
|
||||
-->
|
||||
|
||||
### Install WireGuard
|
||||
Install WireGuard dengan menggunakan perintah `sudo apt install wireguard`. Setelah WireGuard berhasil diinstall, kita perlu membuat *private* dan *public key* untuk WireGuard server kita.
|
||||
|
||||
> _Tips: Anda bisa membuat public key yang cantik (**vanity address**) untuk **WireGuard** menggunakan alat seperti [warner/wireguard-vanity-address](https://github.com/warner/wireguard-vanity-address)._
|
||||
|
||||
#### Membuat *Private Key*
|
||||
Anda bisa menggunakan perintah `wg genkey` untuk membuat *private key* Anda. Simpan *private key* Anda di tempat yang aman. Misalnya: di `/etc/wireguard/do_private.key` dengan *file permission* `600`.
|
||||
```shell
|
||||
# membuat private key
|
||||
wg genkey | sudo tee /etc/wireguard/do_private.key
|
||||
# mengubah file permission
|
||||
sudo chmod 600 /etc/wireguard/do_private.key
|
||||
```
|
||||
*Private key* tersebut nantinya kita butuhkan untuk membuat *public key* untuk server WireGuard kita. Contoh WireGuard *private key* yang digunakan untuk artikel ini:
|
||||
```
|
||||
uO0GDXBc+ZH5QsLmf+qRyCtFmUV1coadJvQp8iM0mEg=
|
||||
```
|
||||
|
||||
#### Membuat *Public Key*
|
||||
Sekarang, buat *public key* dari *private key* yang telah kita buat sebelumnya.
|
||||
|
||||
```shell
|
||||
sudo cat /etc/wireguard/do_private.key | wg pubkey | sudo tee /etc/wireguard/do_public.key
|
||||
```
|
||||
|
||||
*Public key* tersebut akan kita butuhkan untuk mengkonfigurasi koneksi WireGuard *client* (*peers*) kita. Contoh WireGuard *public key* yang digunakan untuk artikel ini:
|
||||
```
|
||||
7c023YtKepRPNNKfGsP5f2H2VtfPvVptn8Hn6jjmaz8=
|
||||
```
|
||||
|
||||
### Mengkonfigurasi WireGuard Server
|
||||
Sebelum mengkonfigurasi server WireGuard Anda, Anda perlu memilih / menentukan *private network IP range* untuk koneksi WireGuard yang akan Anda gunakan. Anda harus menggunakan [private network IP ranges](https://en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses) yang **valid**. Contoh:
|
||||
- Antara `10.0.0.0` - `10.255.255.255` (`10.0.0.0/8`)
|
||||
- Antara `172.16.0.0` - `172.31.255.255` (`172.16.0.0/12`)
|
||||
- Antara `192.168.0.0` - `192.168.255.255` (`192.168.0.0/16`)
|
||||
|
||||
> _Tips: Hindari menggunakan IP range yang sudah Anda gunakan dan IP range yang sering digunakan oleh sebuah aplikasi. Misalnya: Bawaan installasi Docker menggunakan network `172.17.0.0/16`. Jika Anda menggunakan Docker, Anda harus menggunakan IP range lain untuk jaringan WireGuard Anda supaya tidak terjadi bentrok._
|
||||
|
||||
Di artikel ini, saya akan menggunakan `10.10.88.0/24` untuk jaringan WireGuard saya.
|
||||
|
||||
Anda juga perlu menentukan *port* berapa (**UDP**) yang akan digunakan oleh WireGuard. Banyak perangkat jaringan di luar sana (seperti **Netgate**, **QNAP**, dan lain-lain) menggunakan **UDP** *port* **51280** untuk konfigurai WireGuard *default* mereka. Untuk artikel ini, saya akan menggunakan `UDP` port `51822`.
|
||||
|
||||
Sekarang, kita sudah memiliki semua informasi dasar yang kita butuhkan supaya server WireGuard dapat dijalankan:
|
||||
- Server Public IP: `xxx.xx.xx0.246`
|
||||
- Server Private key: `uO0GDXBc+ZH5QsLmf+qRyCtFmUV1coadJvQp8iM0mEg=`
|
||||
- Server Public Key: `7c023YtKepRPNNKfGsP5f2H2VtfPvVptn8Hn6jjmaz8=`
|
||||
- Server Listen Port: `UDP` port `51822`
|
||||
- WireGuard Network: `10.10.88.0/24`
|
||||
|
||||
Buat file dengan nama `wg0.conf` untuk konfigurasi WireGuard anda di folder `/etc/wireguard` dan isi dengan contoh konfigurasi berikut ini:
|
||||
```plain
|
||||
# /etc/wireguard/wg0.conf
|
||||
|
||||
[Interface]
|
||||
PrivateKey = <YOUR_SERVER_PRIVATE_KEY> # Pada contoh artikel ini: uO0GDXBc+ZH5QsLmf+qRyCtFmUV1coadJvQp8iM0mEg=
|
||||
Address = <YOUR_SERVER_WG_IP_ADDRESS> # Pada contoh artikel ini: 10.10.88.1/24
|
||||
ListenPort = <SERVER_UDP_LISTEN_PORT> # Pada contoh artikel ini: 51822
|
||||
SaveConfig = true
|
||||
```
|
||||
> _**Catatan**: Dari konfigurasi diatas, perhatikan bahwa saya mengambil IP `10.10.88.1` untuk alamat IP server saya (di jaringan WireGuard)._
|
||||
|
||||
Ubah `<YOUR_SERVER_PRIVATE_KEY>`, `<YOUR_SERVER_IP_ADDRESS>`, `<SERVER_UDP_LISTEN_PORT>` dengan konfigurasi sesuai keinginan Anda.
|
||||
|
||||
#### Mengijinkan *IP forwarding*
|
||||
Di artikel ini, kita ingin memperbolehkan *peers* (*client* / perangkat yang terkoneksi ke jaringan WireGuard kita) untuk menggunakan WireGuard server sebagai *default gateway* mereka. Jadi semua lalu-lintas jaringan keluar (kecuali ke jaringan lokal **LAN/WLAN** Anda) dapat menggunakan server WireGuard ini. Jika Anda menggunakan WireGuard untuk *peer-to-peer* saja, Anda tidak memerlukan langkah ini.
|
||||
|
||||
Edit `/etc/sysctl.conf` dan di akhir file tersebut, tambahkan `net.ipv4.ip_forward=1`. Setelah itu jalankan perintah `sudo sysctl -p` untuk memuat ulang konfigurasi baru di `/etc/sysctl.conf` yang baru saja kita ubah.
|
||||
```shell
|
||||
sudo sysctl -p
|
||||
```
|
||||
|
||||
Setelah itu, Anda perlu mengatur ulang konfigurasi *firewall* supaya *peers* (client) dapat melakukan koneksi ke server WireGuard dan lalu-lintas jaringan client ter-*routing* dengan benar.
|
||||
|
||||
#### Mengkonfigurasi Firewall
|
||||
Secara *default*, aplikasi **UFW** (program untuk memudahkan konfigurasi *firewall*) sudah terinstall di Ubuntu. Anda perlu menambahkan *port* yang digunakan oleh WireGuard supaya port tersebut terbuka dapat diakses dari mana saja.
|
||||
```shell
|
||||
sudo ufw allow OpenSSH
|
||||
sudo ufw allow proto udp to any port 51822
|
||||
```
|
||||
Jika WireGuard port yang Anda konfigurasi bukan `51822`, ubah dan sesuaikan perintah diatas.
|
||||
|
||||
> _Perhatikan bahwa saya juga menambahkan **OpenSSH** ke *allow list* untuk menghindari terputusnya koneksi SSH ke server jika sebelumnya Anda belum mengkonfigurasi / mengaktifkan *firewall*._
|
||||
|
||||
Aktifkan / restart `ufw` dengan perintah:
|
||||
```shell
|
||||
ufw enable # untuk mengaktifkan firewall, atau
|
||||
ufw reload # untuk merestart firewall
|
||||
```
|
||||
|
||||
Selanjutnya, Anda perlu mengetahui *interface* mana yang digunakan oleh server Anda sebagai *default route*-nya. untuk mengetahuinya, Anda bisa menggunakan perintah `ip route list default`. Contoh hasil dari perintah `ip route list default` saya:
|
||||
```plain
|
||||
default via 164.90.160.1 dev eth0 proto static
|
||||
```
|
||||
Perhatikan kata setelah `dev`, itu adalah *default network interface*-nya. Dari contoh diatas, *default network interface* server saya adalah `eth0`.
|
||||
|
||||
Sekarang, tambahkan konfigurasi berikut ke `/etc/wireguard/wg0.conf` pada bagian `[Interface]`:
|
||||
```plain
|
||||
PostUp = ufw route allow in on wg0 out on eth0
|
||||
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
|
||||
PreDown = ufw route delete allow in on wg0 out on eth0
|
||||
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
|
||||
```
|
||||
|
||||
Ubah `eth0` dari konfigurasi di atas dan sesuaikan dengan *default network interface* server Anda.
|
||||
|
||||
Konfigurasi `/etc/wireguard/wg0.conf` Anda seharusnya mirip seperti berikut:
|
||||
```plain
|
||||
# /etc/wireguard/wg0.conf
|
||||
|
||||
[Interface]
|
||||
PrivateKey = <YOUR_SERVER_PRIVATE_KEY> # Pada contoh artikel ini: uO0GDXBc+ZH5QsLmf+qRyCtFmUV1coadJvQp8iM0mEg=
|
||||
Address = <YOUR_SERVER_WG_IP_ADDRESS> # Pada contoh artikel ini: 10.10.88.1/24
|
||||
ListenPort = <SERVER_UDP_LISTEN_PORT> # Pada contoh artikel ini: 51822
|
||||
SaveConfig = true
|
||||
|
||||
PostUp = ufw route allow in on wg0 out on eth0
|
||||
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
|
||||
PreDown = ufw route delete allow in on wg0 out on eth0
|
||||
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
|
||||
```
|
||||
|
||||
Sekarang, server WireGuard kita sudah siap, cobalah untuk menjalankan *service* WireGuard menggunakan `wg-quick` (via `systemd`):
|
||||
```shell
|
||||
sudo systemctl start wg-quick@wg0.service
|
||||
```
|
||||
Perhatikan bahwa `wg0` diatas diambil dari nama konfigurasi file pada folder `/etc/wireguard` (tapi tanpa *file extension* `.conf`). Jika nama konfigurasi WireGuard-nya adalah `internal.conf`, Anda dapat menjalankan konfigurasi WireGuard tersebut menggunakan perintah `systemctl start wg-quick@internal.service`.
|
||||
|
||||
Setelah perinta diatas, pastikan *service* WireGuard berjalan dengan perintah `systemctl status wg-quick@wg0.service`:
|
||||
```plain
|
||||
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
|
||||
Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
|
||||
Active: active (exited) since Mon 2023-06-05 14:52:31 UTC; 2h 2min ago
|
||||
Docs: man:wg-quick(8)
|
||||
man:wg(8)
|
||||
https://www.wireguard.com/
|
||||
https://www.wireguard.com/quickstart/
|
||||
https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
|
||||
https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
|
||||
Process: 714 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
|
||||
Main PID: 714 (code=exited, status=0/SUCCESS)
|
||||
CPU: 131ms
|
||||
|
||||
Jun 05 14:52:30 fra1-do1 systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
|
||||
Jun 05 14:52:30 fra1-do1 wg-quick[714]: [#] ip link add wg0 type wireguard
|
||||
Jun 05 14:52:30 fra1-do1 wg-quick[714]: [#] wg setconf wg0 /dev/fd/63
|
||||
Jun 05 14:52:30 fra1-do1 wg-quick[714]: [#] ip -4 address add 10.10.88.1/24 dev wg0
|
||||
Jun 05 14:52:30 fra1-do1 wg-quick[714]: [#] ip link set mtu 1420 up dev wg0
|
||||
Jun 05 14:52:31 fra1-do1 wg-quick[714]: [#] ufw route allow in on wg0 out on eth0
|
||||
Jun 05 14:52:31 fra1-do1 wg-quick[790]: Skipping adding existing rule
|
||||
Jun 05 14:52:31 fra1-do1 wg-quick[790]: Skipping adding existing rule (v6)
|
||||
Jun 05 14:52:31 fra1-do1 wg-quick[714]: [#] iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
|
||||
Jun 05 14:52:31 fra1-do1 systemd[1]: Finished WireGuard via wg-quick(8) for wg0.
|
||||
```
|
||||
|
||||
![WireGuard systemd](wireguard-systemd.png#center)
|
||||
|
||||
> *Anda bisa menjalankan perintah `sudo systemctl enable wg-quick@wg0.service` agar service WireGuard berjalan otomatis setelah server dinyalakan atau *reboot*.*
|
||||
|
||||
## Konfigurasi WireGuard Peer (*client*)
|
||||
Pada sesi ini, saya akan menggunakan Linux (`wg-quick` via ``systemd`) sebagai contoh melakukan koneksi ke server WireGuard yang sudah kita konfigurasi sebelumnya. Untuk metode lain (seperti menggunakan **NetworkManager**), sistem operasi lain, atau koneksi dari ponsel, saya akan menambahkannya di lain artikel.
|
||||
|
||||
Mengkonfigurasi WireGuard *peer (client)* di Linux menggunakan `wg-quick` via `systemd` hampir sama seperti mengkonfigurasi server WireGuard. Perbedaannya adalah: Anda tidak memerlukan konfigurasi *IP forwarding* maupun *firewall* (kecuali Anda memiliki kebutuhan tertentu di mesin Linux Anda). Yang perlu Anda lakukan hanyalah menginstall WireGuard, membuat *private* dan *public key*, dan menentukan **DNS** server mana yang ingin Anda gunakan.
|
||||
|
||||
### Membuat *Private* and *Public Key* (*Client Side*)
|
||||
Jika Anda sudah mempunyai pasangan *public & private key* untuk WireGuard sebelumnya, Anda bisa menggunakan *public & private key* tersebut dan langsung ke sesi berikutnya: "[Mengkonfigurasi WireGuard Peer (client)](#mengkonfigurasi-wireguard-peer-client)".
|
||||
|
||||
> _Tips: Anda bisa membuat public key yang cantik (**vanity address**) untuk **WireGuard** menggunakan alat seperti [warner/wireguard-vanity-address](https://github.com/warner/wireguard-vanity-address)._
|
||||
|
||||
#### Membuat Peer Private key
|
||||
Anda bisa menggunakan perintah `wg genkey` untuk membuat *private key* Anda. Simpan *private key* Anda di tempat yang aman. Misalnya: di `/etc/wireguard/do_private.key` dengan *file permission* `600`.
|
||||
```shell
|
||||
# membuat private key
|
||||
wg genkey | sudo tee /etc/wireguard/do_private.key
|
||||
# mengubah file permission
|
||||
sudo chmod 600 /etc/wireguard/do_private.key
|
||||
```
|
||||
*Private key* tersebut nantinya kita butuhkan untuk membuat *public key* untuk server WireGuard kita. Contoh WireGuard *private key* yang digunakan untuk artikel ini:
|
||||
```
|
||||
WApLrVqFvXMbvsn+62DxfQCY8rsFqmHCEFAabAeA5WY=
|
||||
```
|
||||
Change `/etc/wireguard/do_private.key` file permission with `sudo chmod 600 /etc/wireguard/do_private.key`.
|
||||
|
||||
#### Generate Peer Public Key
|
||||
Sekarang, buat *public key* dari *private key* yang telah kita buat sebelumnya.
|
||||
```shell
|
||||
sudo cat /etc/wireguard/do_private.key | wg pubkey | sudo tee /etc/wireguard/do_public.key
|
||||
```
|
||||
|
||||
*Public key* tersebut akan kita butuhkan untuk ditambahkan ke konfigurasi server WireGuard kita. Contoh WireGuard *public key* yang digunakan untuk artikel ini:
|
||||
```
|
||||
6gnV+QU7jG7BzwWrBbqiYpKQDGePYQunebkmvmFrxSk=
|
||||
```
|
||||
|
||||
### Mengkonfigurasi WireGuard Peer (client)
|
||||
Sebelum mengkonfigurasi WireGuard *peer* (*client*), Anda perlu memilih / menentukan *alamat IP private* untuk koneksi WireGuard peer yang akan Anda gunakan. Anda harus menggunakan alamat IP yang tidak terpakai dari *private network IP range* WireGuard server Anda. Di artikel ini, `10.10.88.1/24` sudah digunakan oleh server WireGuard, dan kita tidak bisa menggunakan alamat IP tersebut untuk *peer* / *client* kita. Maka dari itu, saya akan menggunakan `10.10.88.2/24` (atau `10.10.88.2/32`).
|
||||
|
||||
Sekarang, kita sudah memiliki semua informasi dasar yang kita butuhkan supaya untuk konfigurasi WireGuard *peer*:
|
||||
- Server Public IP: `xxx.xx.xx0.246`
|
||||
- Server Public Key: `7c023YtKepRPNNKfGsP5f2H2VtfPvVptn8Hn6jjmaz8=`
|
||||
- Server Listen Port: `UDP` port `51822`
|
||||
- WireGuard Network: `10.10.88.0/24`
|
||||
- Client IP address: `10.10.88.2/24`
|
||||
|
||||
Buat file dengan nama `wg-do1.conf` untuk konfigurasi WireGuard Anda di folder `/etc/wireguard` dan isi dengan contoh konfigurasi berikut ini:
|
||||
```plain
|
||||
# /etc/wireguard/wg-do1.conf
|
||||
|
||||
[Interface]
|
||||
PrivateKey = <YOUR_PEER_PRIVATE_KEY> # Pada contoh artikel ini: WApLrVqFvXMbvsn+62DxfQCY8rsFqmHCEFAabAeA5WY=
|
||||
Address = <YOUR_PEER_IP_ADDRESS> # Pada contoh artikel ini: 10.10.88.2/24
|
||||
DNS = 1.1.1.1 8.8.8.8 # You can use any public / your own DNS resolver if you want
|
||||
|
||||
[Peer]
|
||||
PublicKey = <YOUR_SERVER_PUBLIC_KEY> # Pada contoh artikel ini: 7c023YtKepRPNNKfGsP5f2H2VtfPvVptn8Hn6jjmaz8=
|
||||
AllowedIPs = 0.0.0.0/0 # Route all external traffic to here
|
||||
Endpoint = <YOUR_SERVER_PUBLIC_IP_ADDRESS>:<SERVER_UDP_LISTEN_PORT> # Pada contoh artikel ini: xxx.xx.xx0.246:51822
|
||||
PersistentKeepalive = 15
|
||||
```
|
||||
|
||||
Ubah `<YOUR_PEER_PRIVATE_KEY>`, `<YOUR_PEER_IP_ADDRESS>`, `<YOUR_SERVER_PUBLIC_KEY>`, `<YOUR_SERVER_PUBLIC_IP_ADDRESS>`, dan `<SERVER_UDP_LISTEN_PORT>` dan sesuaikan dengan milik Anda.
|
||||
|
||||
Catatan:
|
||||
- `AllowedIPs` = `0.0.0.0/0` artinya semua lalu-lintas jaringan akan melalui *peer* tersebut (dalam hal ini, server WireGuard kita).
|
||||
Anda bisa menentukan / memilih *routing* menuju IP/*network* tertentu supaya melewati *peer* tertentu (Jika Anda terkoneksi ke banyak *peer* / server).
|
||||
Sebagai contoh, jika Anda hanya ingin mengarahkan lalu-lintas jaringan menuju IP 1.0.0.1 dan 8.8.4.4 melalui *peer* tertentu dan menggunakan konesi internet dari ISP Anda sebagai *default route*-nya, Anda bisa menghapus `0.0.0.0/0` dan menambahkan `1.0.0.1/32,8.8.4.4/32` (dipisahkan dengan tanda koma) untuk nilai dari `AllowedIPs`.
|
||||
- `PersistentKeepalive` = `15` : Berapa detik sekali *peer* mengirimkan *ping* ke server, supaya server dapat mencapai / berkomunikasi dengan peer yang berada dibalik **NAT**/firewall.
|
||||
- `DNS` Anda juga dapat menentukan DNS server yang ingin Anda gunakan dengan menentukan alamat IP DNS server pada konfigurasi `DNS`.
|
||||
|
||||
Sekarang, konfigurasi *peer* (*client*) sudah selesai, Anda dapat mencoba melakukan koneksi ke WireGuard server dengan `wg-quick` via `systemd`:
|
||||
```shell
|
||||
sudo systemctl start wg-quick@wg-do1.service
|
||||
```
|
||||
|
||||
> _**Note 1**: Perhatikan bahwa `wg-do1` diatas diambil dari nama konfigurasi file pada folder `/etc/wireguard` (tapi tanpa *file extension* `.conf`). Jika nama konfigurasi WireGuard-nya adalah `vpn-wireguard.conf`, Anda dapat menjalankan konfigurasi WireGuard tersebut menggunakan perintah `systemctl start wg-quick@vpn-wireguard.service`._
|
||||
|
||||
> _**Note 2**: Scara default `wg-quick` menggunakan `resolvconf` untuk menambahkan entri DNS baru. Hal ini akan menyebabkan masalah dengan "network managers" dan "DHCP clients" yang tidak menggunakan `resolvconf`, karena mereka akan menulis ulang (overwrite) file `/etc/resolv.conf` (yang akan menghapus record DNS yang sudah ditambahkan oleh `wg-quick`._
|
||||
> _Solusinya adalah menggunakan "software networking" yang kompatible dengan `resolvconf`._
|
||||
|
||||
> _**Note 3**: Pengguna Linux yang menggunakan `systemd-resolved` harus memastikan bahwa `systemd-resolvconf` terinstall di sistem operasi yang digunakan._
|
||||
|
||||
Untuk memverifikasi bahwa konfigurasi sudah benar dan bekerja, coba melakukan pengecekan IP publik Anda dari *browser* atau terminal menggunakan `wg show` atau `curl ifconfig.me`.
|
||||
|
||||
![wg show](wg-show.png#center)
|
||||
|
||||
![What is my IP](wg-vpn-do-ip.png#center)
|
||||
|
||||
## Kesimpulan
|
||||
WireGuard adalah protokol VPN favorit saya. Performanya cepat dan lebih hemat *resource* jika dibandingkan dengan protokol VPN lainnya. Ia juga bisa digunakan untuk koneksi *peer-to-peer*, koneksi *client-server* atau membuat *mesh network* yang aman.
|
||||
|
||||
Ketika dikombinasikan dengan **Nginx** sebagai *reverse proxy*, Anda bahkan bisa mengekspose / server HTTP di jaringan lokal Anda yang berada dibalik **NAT**/*firewall* ke internet.
|
||||
|
||||
Akan tetapi, melakukan *maintenance* pada jaringan WireGuard yang besar bisa sangat kompleks dan susah dilakukan. Namun, ada *software* yang dapat membantu Anda untuk membantu mengatur hal itu, salah satu contohnya adalah [Netmaker](https://www.netmaker.io/).
|
||||
|
||||
### Catatan Tambahan
|
||||
- Jika Anda memiliki kesulitan teknis untuk menmelakukan *setup* VPN server WireGuard sendiri, saya dapat membantu Anda untuk melakukannya dengan imbalan sedikit uang. (_Saya juga menerima **Monero XMR** sebagai **imbalan** jika Anda tidak memiliki mata uang Rupiah_).
|
||||
- Untuk dapat menghubungi saya, silahkan kunjungi [https://www.ditatompel.com/pages/contact](https://www.ditatompel.com/pages/contact).
|
|
@ -68,7 +68,7 @@ Adapt the VPS size to fit with your need to avoid extra charge of overuse bandwi
|
|||
> _**WireGuard** did **NOT need high disk I/O, so NVMe disk is NOT necessary**._
|
||||
|
||||
## Setup your WireGuard Server
|
||||
> _**IMPORTANT NOTE**: Since I'm not familiar with **IPv6** subnetting, I'll only use use IPv4._
|
||||
> _**IMPORTANT NOTE**: Since I'm not familiar with **IPv6** subnetting, I'll only use **IPv4**._
|
||||
|
||||
Once your VPS ready and running, it's recommended to update your OS first using `apt update && apt upgrade` command and `reboot` your VPS.
|
||||
|
||||
|
@ -102,7 +102,7 @@ Write down the output, we'll need that later to configure WireGuard connection f
|
|||
```
|
||||
|
||||
### Configuring WireGuard Server
|
||||
Before configuring your **WireGuard** server, you need to **decide your private network address range for your WireGuard** connection (*tunnel* interface). You should choose valid [private network IP ranges](https://en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses). For example:
|
||||
Before configuring your **WireGuard** server, you need to **decide your private network IP range for your WireGuard** connection (*tunnel* interface). You should choose valid [private network IP ranges](https://en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses). For example:
|
||||
- Between `10.0.0.0` - `10.255.255.255` (`10.0.0.0/8`)
|
||||
- Between `172.16.0.0` - `172.31.255.255` (`172.16.0.0/12`)
|
||||
- Between `192.168.0.0` - `192.168.255.255` (`192.168.0.0/16`)
|
||||
|
@ -177,7 +177,7 @@ PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
|
|||
|
||||
Replace `eth0` from above configuration with your server default network interface.
|
||||
|
||||
Your `/etc/wireguard/wg0.conf` shoud look like this:
|
||||
Your `/etc/wireguard/wg0.conf` should look like this:
|
||||
```plain
|
||||
# /etc/wireguard/wg0.conf
|
||||
|
||||
|
@ -193,7 +193,7 @@ PreDown = ufw route delete allow in on wg0 out on eth0
|
|||
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
|
||||
```
|
||||
|
||||
Now our WireGuard server is ready. Try to start your WireGuard server using `systemd`:
|
||||
Now our WireGuard server is ready. Try to start your WireGuard server using `wg-quick` (via `systemd`):
|
||||
```shell
|
||||
sudo systemctl start wg-quick@wg0.service
|
||||
```
|
||||
|
@ -233,7 +233,7 @@ Jun 05 14:52:31 fra1-do1 systemd[1]: Finished WireGuard via wg-quick(8) for wg0.
|
|||
To automatically start WireGuard service when the system start, you can execute `sudo systemctl enable wg-quick@wg0.service` command.
|
||||
|
||||
## Setup WireGuard Peer (*client*)
|
||||
In this section, I'll use Linux machine to connect to our configured WireGuard server using `systemd` service. For other method such as connecting using **NetworkManager** GUI, Different OS and mobile devices, I'll add that later to another article.
|
||||
In this section, I'll use Linux machine using `wg-quick` via `systemd` as an example to connect to our configured WireGuard server. For other method such as connecting using **NetworkManager** GUI, Different OS and mobile devices, you can read my next article: "[Configure WireGuard VPN Clients]({{< ref "/tutorials/configure-wireguard-vpn-clients/index.md" >}})".
|
||||
|
||||
Configuring WireGuard peer (client) in Linux using `systemd` is almost the same as setting up WireGuard server. The different is you didn't need to configure firewall and IP forward for peers. All you need to do is install WireGuard, create private and public key, configure DNS server you want to use, add start the service.
|
||||
|
||||
|
|
Loading…
Reference in a new issue