Skip to main content
  1. Posts/

Setup WireGuard VPN

·5 mins·
wireguard wireguard vpn
Table of Contents

WireGuard adalah protokol VPN open-source yang dirancang untuk memberikan koneksi yang lebih aman, lebih cepat, dan lebih sederhana dibandingkan protokol VPN tradisional seperti OpenVPN atau IPSec. Dikembangkan oleh Jason A. Donenfeld dan dirilis pertama kali pada tahun 2016, WireGuard kini telah menjadi bagian dari kernel Linux, sehingga semakin populer berkat efisiensi dan keandalannya.

Panduan ini akan membahas proses instalasi dan konfigurasi WireGuard menggunakan dua workstation dengan detail berikut:

Topologi Workstation
#

Workstation A

  • eth0 : 192.168.160.131/24
  • wg0 : 10.0.0.1/24

Workstation B

  • eth0 : 192.168.160.129/24
  • wg0 : 10.0.0.2/24

Instalasi WireGuard
#

Lakukan instalasi sesuai dengan jenis distribusi Linux yang Anda gunakan.

Linux (RPM-based)
#

Misalnya: AlmaLinux, Rocky Linux, CentOS Stream, RHEL.

dnf -y install epel-release elrepo-release
dnf -y install wireguard-tools kmod-wireguard

Linux (DEB-based)
#

Misalnya: Debian, Ubuntu.

apt -y install wireguard

Using WireGuard
#

Aktifkan modul kernel WireGuard:

modprobe wireguard

Generate Private Key
#

Lakukan pada kedua Workstation:

wg genkey > privatekey
Public key akan dihasilkan berdasarkan private key tersebut.

Konfigurasi Interface wg0
#

Workstation A

ip link add wg0 type wireguard
ip addr add 10.0.0.1/24 dev wg0
wg set wg0 private-key ./privatekey
ip link set wg0 up

Workstation B

ip link add wg0 type wireguard
ip addr add 10.0.0.2/24 dev wg0
wg set wg0 private-key ./privatekey
ip link set wg0 up

Cek Public Key
#

Gunakan perintah berikut untuk melihat public key yang nanti akan digunakan sebagai peer.

Workstation A

# wg show
interface: wg0
  public key: /FDHZRntW7H3WNOmzLWWo0d5UGicyt+BOvl0Khynsik=
  private key: (hidden)
  listening port: 45960

Workstation B

# wg show
interface: wg0
  public key: JSi9B7Vic3nfPuPVLyerYEqR13yFIY5sUk2FNaaL42Y=
  private key: (hidden)
  listening port: 33497

Menghubungkan Workstation A ↔ Workstation B
#

Konfigurasi peer dilakukan dengan menambahkan public key, endpoint, dan allowed-ips.

Workstation A

wg set wg0 peer JSi9B7Vic3nfPuPVLyerYEqR13yFIY5sUk2FNaaL42Y= \
  endpoint 192.168.160.129:33497 \
  persistent-keepalive 25 \
  allowed-ips 10.0.0.2/32

Workstation B

wg set wg0 peer /FDHZRntW7H3WNOmzLWWo0d5UGicyt+BOvl0Khynsik= \
  endpoint 192.168.160.131:45960 \
  persistent-keepalive 25 \
  allowed-ips 10.0.0.1/32

Testing Koneksi
#

Test dari Workstation A

# ping -c4 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=1.12 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.754 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.959 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.702 ms

Status pada Workstation B

# wg show
interface: wg0
  public key: JSi9B7Vic3nfPuPVLyerYEqR13yFIY5sUk2FNaaL42Y=
  private key: (hidden)
  listening port: 33497

peer: /FDHZRntW7H3WNOmzLWWo0d5UGicyt+BOvl0Khynsik=
  endpoint: 192.168.160.131:45960
  allowed ips: 10.0.0.1/32
  latest handshake: 30 seconds ago
  transfer: 4.48 KiB received, 3.05 KiB sent
  persistent keepalive: every 25 seconds

Using wg-quick
#

Selain konfigurasi manual, Anda juga dapat menggunakan wg-quick untuk mempermudah proses setup interface WireGuard. Tool ini memungkinkan Anda membuat konfigurasi yang persisten serta memulai koneksi hanya dengan satu perintah.

Generate Private Key & Public Key
#

Lakukan pada kedua Workstation:

wg genkey | tee privatekey | wg pubkey > publickey

Perintah di atas akan menghasilkan dua file:

  • privatekey
  • publickey

Konfigurasi wg-quick
#

Buat file konfigurasi untuk masing-masing workstation.

Workstation A

Buat file:

nano /etc/wireguard/server.conf

Isi konfigurasi:

[Interface]
Address = 10.0.0.1
ListenPort = 45960
PrivateKey = YKAPzFfqrUBkiw18kGCOuJTkuCV8ldXB03gLJkCNH1w=

# PresharedKey = $(wg genpsk)
[Peer]
PublicKey = JSi9B7Vic3nfPuPVLyerYEqR13yFIY5sUk2FNaaL42Y=
PresharedKey = LDbol67eaLt351b21xUwnQLdkB/bUzgCepzWx7Ekkxc= 
AllowedIPs = 10.0.0.2/32
Endpoint = 192.168.160.129:33497

Workstation B

Buat file:

nano /etc/wireguard/client.conf

Isi konfigurasi:

[Interface]
Address = 10.0.0.2
ListenPort = 33497
PrivateKey = 6LQjtoSje8BjYXISKzE+/YwhTw8VRO0bEHYOMKCnHEo=

[Peer]
PublicKey = /FDHZRntW7H3WNOmzLWWo0d5UGicyt+BOvl0Khynsik=
PresharedKey = LDbol67eaLt351b21xUwnQLdkB/bUzgCepzWx7Ekkxc=
AllowedIPs = 10.0.0.1/32
Endpoint = 192.168.160.131:45960
PersistentKeepalive = 25

Mengaktifkan WireGuard
#

Setelah file konfigurasi siap, aktifkan interface WireGuard dengan wg-quick.

Workstation A

wg-quick up server

Workstation B

wg-quick up client

Enable WireGuard Saat Boot
#

Agar interface WireGuard otomatis aktif saat sistem booting, gunakan perintah berikut:

Workstation A

systemctl enable wg-quick@server

Workstation B

systemctl enable wg-quick@client

Untuk memastikan status service:

systemctl status wg-quick@server
# atau
systemctl status wg-quick@client

VPN
#

Terdapat dua pendekatan:

  1. Setup otomatis menggunakan script Nyr
  2. Setup manual untuk memahami alurnya secara penuh

Setup Otomatis (Script Nyr)
#

Script ini akan:

  • Menginstal paket WireGuard
  • Membuat konfigurasi server
  • Membuat konfigurasi klien (client.conf)
  • Mengaktifkan firewall + NAT secara otomatis

Jalankan perintah berikut pada Workstation A (Server VPN):

wget https://git.io/wireguard -O wireguard-install.sh && bash wireguard-install.sh

Script akan memunculkan prompt seperti:

  • IP publik server
  • Port WireGuard (default 51820)
  • DNS untuk klien
  • Nama konfigurasi klien

Anda dapat menggunakan nilai default atau menyesuaikannya.

Setelah instalasi selesai, file client.conf akan berada di direktori yang sama:

# ls -l
total 32
-rw-r--r-- 1 root root   324 Nov 25 09:19 client.conf
-rw-r--r-- 1 root root 26724 Nov 25 09:18 wireguard-install.sh

Download file ke Workstation B:

scp root@YOUR_SERVER_IP:/root/client.conf /etc/wireguard/

Aktifkan WireGuard pada Workstation B:

wg-quick up client

Klien kini terhubung ke VPN.

Setup Manual
#

Aktifkan IP Forwarding

echo "net.ipv4.ip_forward=1" | tee -a /etc/sysctl.conf
sysctl -p

Konfigurasi WireGuard Server. File: /etc/wireguard/server.conf

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = AEi/B7B0ulkppXRN4WWnyrZIg3x8o+fOQquiL9Gt43o=

# NAT + firewall
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# PresharedKey = $(wg genpsk)
[Peer]
PublicKey = xtLLY1oDdDdVBGxnKafexOO2mx63WySv1qUf9+oVUjw=
PresharedKey = LDbol67eaLt351b21xUwnQLdkB/bUzgCepzWx7Ekkxc=
AllowedIPs = 10.0.0.2/32

Konfigurasi Klien (Workstation B). File: /etc/wireguard/client.conf

[Interface]
Address = 10.0.0.2/32
PrivateKey = SFFCKS3L4iIrvYLaQOU1RQo+P0uw0VojYILKxFurdVg=
DNS = 1.1.1.1

[Peer]
PublicKey = 48XNnKVRJjXk892Ku7DO7CzU6B2OehgRnd/0ln8FryM=
PresharedKey = LDbol67eaLt351b21xUwnQLdkB/bUzgCepzWx7Ekkxc=
AllowedIPs = 0.0.0.0/0
Endpoint = 192.168.160.129:51820
PersistentKeepalive = 25
  • 0.0.0.0/0 = seluruh trafik melewati VPN (full-tunnel).

Setelah file konfigurasi siap, aktifkan interface WireGuard dengan wg-quick.

Workstation A

wg-quick up server

Workstation B

wg-quick up client

Troubleshooting
#

Jika muncul error saat menjalankan wg-quick seperti contoh berikut:

# wg-quick up client
[#] ip link add client type wireguard
[#] wg setconf client /dev/fd/63
[#] ip -4 address add 10.7.0.2/24 dev client
[#] ip -6 address add fddd:2c4:2c4:2c4::2/64 dev client
[#] ip link set mtu 8920 up dev client
[#] resolvconf -a client -m 0 -x
Failed to set DNS configuration: Could not activate remote peer.
[#] ip link delete dev client

Masalah ini biasanya terjadi karena layanan systemd-resolved belum aktif.

Aktifkan systemd-resolved dengan menjalankan perintah berikut:

systemctl unmask systemd-resolved
systemctl enable --now systemd-resolved

Setelah itu, jalankan kembali perintah:

wg-quick up client

Related

OpenVPN 2.4.5 cannot connect because of weak algorithm
·2 mins
vpn vpn linux
How to Copy Text in Tmux to System Clipboard
·3 mins
tmux linux tmux
Mengubah Data SMBIOS System Information di libvirt
·2 mins
libvirt libvirt kvm
Install GSocket di Linux
·5 mins
gsocket linux gsocket
Cara Mengelola WordPress Menggunakan WP Toolkit CLI
·2 mins
wordpress wordpress
Menerapkan Rate Limiting dengan NGINX
·4 mins
nginx nginx