Install dan Konfigurasi VPN WireGuard di Ubuntu

Konfigurasi VPN WireGuard di Ubuntu. Oke kali ini saya akan membahas tentang Wireguard. Wireguard adalah protokol VPN "masa depan" yang diklaim lebih cepat dan lebih aman dari protokol VPN lain seperti IPsec ataupun OpenVPN. Konfigurasinya pun sebenarnya lebih mudah dibanding protokol VPN lain, bisa dibilang kita hanya perlu bertukar key saja.
Di tutorial ini saya menggunakan OS Ubuntu 18.04 sebagai server VPN Wireguard, sementara untuk clientnya saya menggunaakan OS Ubuntu 19.10.

Pertama, pastikan kalian menginstall Wireguard di server maupun di client.
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard
Untuk sistem operasi lain kalian bisa cek di halaman Install Wireguard.

Konfigurasi di Server
Pertama, kita lakukan konfigurasi di sisi server, yang dalam tutorial ini adalah OS Ubuntu 18.04.

Generate public key serta private key yang akan digunakan oleh server Wireguard.
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
Maka akan tercipta dua file di direktori home kalian. Contoh output:
root@nakano-server:~# cat privatekey
IMmW5mWYyolYp74pACs0YfEIRFs9EzlllRF9xHjfgXA=
root@nakano-server:~# cat publickey
jP7TF48B6lOsB3rBNkBTo8d3wmQkKPfg3XTcs5qJ+lc=

Lalu buat file konfigurasi Wireguard server.
sudo nano /etc/wireguard/wg0.conf
Isinya
[Interface]
PrivateKey = IMmW5mWYyolYp74pACs0YfEIRFs9EzlllRF9xHjfgXA=
ListenPort = 6969
SaveConfig = false
Address = 10.0.0.1/24
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens33 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o ens33 -j MASQUERADE

Perhatikan bagian PrivateKey. Sesuaikan dengan private key yang kalian generate pada langkah pertama. Pada bagian Address, isinya merupakan internal IP, tidak perlu diganti. ListenPort bebas diganti sesuai selera. Sementara untuk interface ens33 sesuaikan sendiri dengan interface aktif kalian. Bisa saja eth0 ataupun wlan0.

Jangan lupa open port di firewall agar tidak diblokir.
sudo ufw allow 6969/udp
Sekarang kita coba jalankan Wireguard.
sudo wg-quick up wg0
Cek statusnya menggunakan perintah
sudo wg
Jika tidak ada error, kita matikan lagi untuk sementara.
sudo wg-quick down wg0
Konfigurasi di Client
Generate private key dan juga public key sama seperti di server.
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
Output private key dan public key.
yuzuriha@linuxsec:~$ cat publickey 
tiB4uuYhmzPJrvsAXXVmGm0M7d3ne1sMD7p5x9sKdRo=
yuzuriha@linuxsec:~$ cat privatekey 
SHZ+auQO3PlHlNymy2sUKHlfZDHj3MVjrWwjEY99Blk=

Sekarang buat file konfigurasi seperti di server.
sudo nano /etc/wireguard/wg0.conf
Namun isinya
[Interface]
#client
PrivateKey=SHZ+auQO3PlHlNymy2sUKHlfZDHj3MVjrWwjEY99Blk=
Address=10.0.0.2/32
DNS=1.1.1.1

[Peer]
#server
PublicKey=jP7TF48B6lOsB3rBNkBTo8d3wmQkKPfg3XTcs5qJ+lc=
Endpoint=192.168.23.21:6969
AllowedIPs=0.0.0.0/0

Oke bagian interface isinya adalah informasi client. PrivateKey yang ditambahkan ke file tersebut adalah private key milik client atau dalam tutorial ini adalah private key milik Ubuntu 19.10. Untuk Address, gunakan internal IP yang masih satu range dengan internal IP server. Sementara untuk peer, PublicKey isikan dengan PublicKey milik server (Ubuntu 18.04). Endpoint isikan dengan alamat ip publik dan port dari server (ingat ip publik bukan ip internal).

Sekarang jalankan Wireguard di client:
sudo wg-quick up wg0
Sampai disini masih adasatu step yang harus dilakukan. Yakni menambahkan informasi client pada konfigurasi server.

Menghubungkan Client dan Server
Edit lagi konfigurasi Wireguard server (Ubuntu 18.04).
sudo nano /etc/wireguard/wg0.conf
Lalu tambahkan informasi client. Contoh konfigurasi akhir:
[Interface]
PrivateKey = IMmW5mWYyolYp74pACs0YfEIRFs9EzlllRF9xHjfgXA=
ListenPort = 6969
SaveConfig = false
Address = 10.0.0.1/24
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -$
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens33 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat$

[Peer]
#client
PublicKey = tiB4uuYhmzPJrvsAXXVmGm0M7d3ne1sMD7p5x9sKdRo=
AllowedIPs = 10.0.0.2/32

PublicKey yang ditambahkan adalah public key milik client. Sementara AllowedIPs diisi dengan ip internal milik client.

Sekarang, kita jalankan Wireguard server.
sudo wg-quick up wg0

Seharusnya sekarang client dan juga server sudah bisa berkomunikasi melalui protokol Wireguard.
Kita coba ping ke server dari client
ping 10.0.0.1
Lalu dari sisi server kita cek menggunakan perintah
sudo wg

Nah jika kalian sudah memastikan bahwa koneksi tidak error, kalian bisa enable service Wireguard agar langsung berjalan saat booting.
Baik dari sisi server maupun client jalankan command
sudo systemctl enable wg-quick@wg0
Install WireGuard di Docker
Saya juga membuat tutorial di artikel berbeda tentang bagaimana cara install WireGuard di Docker. Cek tutorialnya di url berikut:

Oke mungkin sekian tutorial kali ini, semoga bermanfaat. Jika ada yang ingin ditanyakan silahkan tinggalkan komentar.