WireGuard® adalah VPN yang sangat sederhana namun cepat dan modern yang menggunakan kriptografi tercanggih. Ini bertujuan untuk menjadi lebih cepat, lebih sederhana, lebih ramping, dan lebih berguna daripada IPsec, sambil menghindari sakit kepala yang parah. Ia bermaksud untuk menjadi jauh lebih berkinerja daripada OpenVPN. WireGuard dirancang sebagai VPN tujuan umum untuk dijalankan pada antarmuka yang disematkan dan juga komputer super, cocok untuk berbagai keadaan. Awalnya dirilis untuk kernel Linux, sekarang lintas platform (Windows, macOS, BSD, iOS, Android) dan dapat diterapkan secara luas. Saat ini sedang dalam pengembangan besar-besaran, tetapi sudah dapat dianggap sebagai solusi VPN yang paling aman, paling mudah digunakan, dan paling sederhana di industri.

Pada artikel kali ini saya akan menggunakan 2 mesin dengan OS armbian ubuntu 20.04 yang berjarak lebih dari 10km

Prasyarat

  1. Mesin / VM dengan os ubuntu 20.04
  2. Memiliki akses superuser / root
  3. Koneksi internet
  4. Koneksi antara mesin / VM

Install Wireguard

Install paket wireguard berikut pada kedua mesin yang akan digunakan untuk peer to peer.

apt update
apt install wireguard -y
Hasil:
root@arm-64:~# apt install wireguard -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  wireguard
0 upgraded, 1 newly installed, 0 to remove and 84 not upgraded.
Need to get 3,268 B of archives.
After this operation, 17.4 kB of additional disk space will be used.
Get:1 http://ports.ubuntu.com bionic-updates/universe arm64 wireguard all 1.0.20200513-1~18.04.2 [3,268 B]
Fetched 3,268 B in 1s (4,631 B/s)
Selecting previously unselected package wireguard.
(Reading database ... 56050 files and directories currently installed.)
Preparing to unpack .../wireguard_1.0.20200513-1~18.04.2_all.deb ...
Unpacking wireguard (1.0.20200513-1~18.04.2) ...
Setting up wireguard (1.0.20200513-1~18.04.2) ...

Konfigurasi Wireguard

Konfigurasi wireguard di kedua mesin. masuk ke direktori /etc/wireguard

cd /etc/wireguard

Set permision folder kemudian buat private key dan public key

umask 077
wg genkey | tee privatekey | wg pubkey > publickey

Hasil Mesin A:

root@MesinA:/etc/wireguard# ls
privatekey  publickey
root@MesinA:/etc/wireguard# cat privatekey
yIOZD45GBWmSqiB8MKC8LbJZbXwWEjHfhHwA5B5k9GQ=
root@MesinA:/etc/wireguard# cat publickey
r4ZUx/jtct1sRuXyxTN4wM7ixxdsyKDqBz3d0VUsy1c=
root@MesinA:/etc/wireguard#

Hasil Mesin B:

root@MesinB:/etc/wireguard# ls
privatekey  publickey

root@MesinB:/etc/wireguard# cat privatekey
mCOPckRHX1UMlaUkvfOm+qd+yEuD78QaaQJUq5kOpGM=
root@MesinB:/etc/wireguard# cat publickey
s3sJ8Aou6UpX/77afkMrR8l1emwmZN6oe1jNjJbfpzU=
root@MesinB:/etc/wireguard#

Setelah kita memiliki private key dan public key di masing masing mesin, selanjutnya bisa kita gunakan untuk membuat konfigurasi.

Membuat Konfigurasi Wireguard

Mesin A:

nano wg0.conf

[Interface]
Address = 172.17.1.1/24
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820
PrivateKey = yIOZD45GBWmSqiB8MKC8LbJZbXwWEjHfhHwA5B5k9GQ=

[Peer]
PublicKey = s3sJ8Aou6UpX/77afkMrR8l1emwmZN6oe1jNjJbfpzU=
AllowedIPs = 172.17.1.2/32

[Peer]
PublicKey = AjjdXSfARr0hvPCmXtPv2X53sS465y3VPTigHzFy9T8=
AllowedIPs = 172.17.1.3/32

Mesin B:

[Interface]
Address = 172.17.1.2/24
SaveConfig = true
PrivateKey = mCOPckRHX1UMlaUkvfOm+qd+yEuD78QaaQJUq5kOpGM=

[Peer]
PublicKey = r4ZUx/jtct1sRuXyxTN4wM7ixxdsyKDqBz3d0VUsy1c=
AllowedIPs = 172.17.1.0/24
Endpoint = 192.168.201.252:51820

Opsional, disini saya juga mencoba terkoneksi menggunakan Android.

Keterangan

  1. Interface
    1. Address = IP address yang akan terpasang di interface wireguard
    2. SaveConfig = Agar konfigurasi bisa terupdate secara otomatis ketika ada peer baru yang ditambahkan
    3. PostUp & PostDown = menentukan langkah-langkah yang akan dijalankan setelah interface wireguard dihidupkan atau dimatikan.
    4. ListenPort = Port yang digunakan Wireguard
    5. PrivateKey = PrivateKey milik mesin itu sendiri.
  2. Peer
    1. PublicKey = Public key milik mesin lawan
    2. AllowedIPs = IP yang akan boleh dilewatkan

Pada Mesin A saya simulasikan akan sebagai “server” yang memiliki ip publik dan akan terhubung ke banyak peer, sedangkan mesin B adalah mesin yang tidak memiliki ip publik atau di bawah nat.