wg-portal adalah aplikasi GUI berbasis website untuk memudahkan kita mengatur konfigurasi server yang ditulis oleh h44z menggunakan bahasa pemrograman Go. WireGuard Portal ini adalah pilihan pengganti yang tepat untuk aplikasi WireGuard-UI yang sepertinya sudah tidak dimaintenance lagi.
Kalau kamu lebih memilih untuk menginstall WireGuard server “from scratch” dan mengatur dan mengkonfigurasi-nya secara manual, kamu bisa bisa mengikuti artikel saya sebelumnya mengenai “Cara Setup VPN Server WireGuard Sendiri”.
Prasyarat
- Sebuah VPS (Ubuntu
22.04atau24.04) dengan IP publik dan Nginx webserver sudah terinstall di VPS tersebut. - Sebuah domain atau sub-domain.
- Nyaman dan terbiasa dengan Linux command-line.
- Paham dasar-dasar subnetting di IPv4 (jujur, saya tidak begitu paham dan berpengalaman untuk subnetting di IPv6, jadi artikel ini hanya untuk IPv4).
- Mampu mengkonfigurasi Nginx Virtual Host.
Pada artikel ini, tujuan kita adalah:
- WireGuard daemon berjalan di port
50122/UDP. - wg-portal berjalan dari
127.0.0.1port8888. - Nginx bertugas sebagai reverse proxy supaya wg-portal dan dapat diakses melalui protokol HTTPS.
Mempersiapkan Server Anda
Pertama, pastikan server sudah up-to-date dan WireGuard sudah terinstall di server.
1sudo apt update && sudo apt upgrade
2sudo apt install wireguard
Untuk meng-enable IP Forwarding, edit /etc/sysctl.conf dan tambahkan
konfigurasi net.ipv4.ip_forward=1 di bagian akhir file tersebut, kemudian
jalankan perintah sudo sysctl -p.
1sudo sysctl -p
Mengkonfigurasi Firewall
Kita perlu untuk menambahkan port yang nantinya digunakan oleh WireGuard
daemon ke allow-list firewall kita. Karena VPS menggunakan Ubuntu server
dimana secara default dia menggunakan UFW, kita akan mengkonfigurasi
firewall server menggunakan perintah ufw.
1sudo ufw allow OpenSSH
2sudo ufw allow 80 comment "allow HTTP" # akan digunakan oleh Nginx
3sudo ufw allow 443 comment "allow HTTPS" # akan digunakan oleh Nginx
4sudo ufw allow proto udp to any port 443 comment "allow QUIC" # Jika konfigurasi Nginx Anda mensupport QUIC
5# Sesuaikan perintah ufw dibawah ini dengan WireGuard listen port kita
6sudo ufw allow proto udp to any port 50122 comment "WireGuard default listen port"
Perhatikan bahwa saya juga menambahkan OpenSSH ke allow list supaya nantinya kita masih bisa mengakses server menggunakan SSH.
Enable / restart ufw menggunakan perintah berikut:
1sudo ufw enable # untuk enable firewall
2sudo ufw reload # untuk reload firewall
Mendownload & Mengkonfigurasi wg-portal
Download wg-portal binary dari halaman latest release-nya ke server (pilih sesuai dengan sistem operasi dan arsitektur CPU server).
Setelah itu, direktori /opt/wg-portal dan install file binary wg-portal
ke /opt/wg-portal.
1sudo mkdir -p /opt/wg-portal
2sudo install wg-portal /opt/wg-portal/
Buat file konfigurasi untuk wg-portal di dalam direktori /opt/wg-portal
dengan nama config.yml.
1# /opt/wg-portal/config.yml
2core:
3 admin_user: [email protected]
4 admin_password: Password123-Password123
5web:
6 listening_address: :8888
7 external_url: https://wg-demo.arch.or.id
8 csrf_secret: super-s3cr3t-csrf
9 session_secret: super-s3cr3t-session
10 request_logging: true
Pastikan menyesuaikan konfigurasi diatas sesuai kebutuhan. File konfigurasi
tersebut nantinya akan dibaca dari wg-portal.service systemd service yang
sebentar lagi akan kita buat.
Untuk opsi konfigurasi yang tersedia, kamu bisa lihat di halaman wg-portal default config.
wg-portal SystemD Service
Karena kita menggunakan Ubuntu Server dimana menggunakan netplan yang
menggunakan systemd-networkd, kita perlu memastikan supaya systemd-networkd
tidak menghapus routing policy ketika wg-portal direstart. Ini bisa
dilakukan dengan menjalankan perintah-perintah berikut:
1sudo mkdir --parents /etc/systemd/networkd.conf.d/
2sudo tee --append /etc/systemd/networkd.conf.d/foreign-routing.conf <<EOF
3[Network]
4ManageForeignRoutingPolicyRules=no
5EOF
6sudo systemctl restart systemd-networkd.service
7sudo systemctl status systemd-networkd.service
kemudian setelah itu, kita bisa membuat file /etc/systemd/system/wg-portal.service
dan isi dengan konfigurasi berikut:
1[Unit]
2Description=WireGuard Portal
3ConditionPathExists=/opt/wg-portal/wg-portal
4After=network.target
5
6[Service]
7Type=simple
8User=root
9Group=root
10AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW
11
12Restart=on-failure
13RestartSec=10
14
15WorkingDirectory=/opt/wg-portal
16Environment=WG_PORTAL_CONFIG=/opt/wg-portal/config.yml
17ExecStart=/opt/wg-portal/wg-portal
18
19[Install]
20WantedBy=multi-user.target
Setelah membuat service file tersebut, kita perlu me-reload konfigurasi
systemd daemon kemudian meng-enable dan menjalankan service
wg-portal.service dengan perintah:
Periksa dan pastikan wg-portal.service berjalan dengan baik dengan menggunakan
perintah systemctl status wg-portal.service.
Mengkonfigurasi Nginx Untuk wg-portal
Jika Nginx belum terinstall di server kamu, kamu perlu menginstallnya terlebih dahulu mengunakan default repositori dari Ubuntu atau menggunakan official Nginx repositori untuk Ubuntu.
Setelah Nginx terinstall, buat Nginx virtual host server block untuk WireGuard UI:
1upstream wgportal_app {
2 server 127.0.0.1:8888;
3}
4
5server {
6 if ($host = wg-demo.arch.or.id) {
7 return 301 https://$host$request_uri;
8 }
9
10 listen 80;
11 server_name wg-demo.arch.or.id;
12 root /srv/http/default;
13 access_log off;
14 location /.well-known/acme-challenge/ { allow all; }
15 location / { return 301 https://$host$request_uri; }
16}
17
18server {
19 listen 443 ssl;
20 server_name wg-demo.arch.or.id;
21 ssl_certificate /etc/nginx/certs/fullchain.pem; # managed by Certbot
22 ssl_certificate_key /etc/nginx/certs/privkey.pem; # managed by Certbot
23
24 root /srv/http/default;
25
26 add_header X-Permitted-Cross-Domain-Policies none;
27 add_header X-Content-Type-Options nosniff;
28 add_header X-XSS-Protection "1; mode=block";
29 add_header X-Download-Options noopen;
30
31 add_header Strict-Transport-Security "max-age=31536000";
32
33 location / {
34 proxy_read_timeout 1200s;
35 proxy_send_timeout 1200s;
36
37 proxy_connect_timeout 300;
38
39 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
40 proxy_set_header X-Forwarded-Proto $scheme;
41 proxy_set_header X-Real-IP $remote_addr;
42 proxy_set_header Host $http_host;
43 proxy_pass http://wgportal_app;
44 }
45
46 location = /error.html {
47 ssi on;
48 internal;
49 auth_basic off;
50 root /srv/http/default;
51 }
52}
53
54# vim: ft=nginx ts=4 sw=4 et
- Ubah
wg-demo.arch.or.idsesuai dengan nama (sub)domain yang kamu gunakan. - Ubah
ssl_certificatedanssl_certificate_keydengan SSL certificate kamu.
Setelah itu, restart Nginx menggunakan perintah sudo systemctl restart nginx.
Harap diperhatikan bahwa konfigurasi Nginx virtual server block diatas
adalah contoh yang sangat basic. Jika Anda memerlukan referensi
konfigurasi SSL untuk Nginx, Kamu bisa menggunakan Mozilla SSL Configuration
Generator. Jika Anda ingin menggunakan Let’s
Encrypt, install python3-certbot-nginx dan lakukan lakukan
request untuk SSL certificate Anda menggunakan perintah
certbot --nginx -d wg-demo.arch.or.id.
Menggunakan wg-portal
Sekarang, setelah semua yang dibutuhkan selesai dikonfigurasi, saatnya untuk
mengkonfigurasi WireGuard menggunakan wg-portal. Kunjungi (sub)domain
wg-portal kamu dan login menggunakan username dan password yang sudah kamu
konfigurasi sebelumnya di /opt/wg-portal/config.yml.
Masuk ke halaman “Interfaces”, tekan tombol +, maka sebuah pop-up window akan muncul. Pada bagian Tab Interface:
- Identifier:
wg0(Nama interface yang akan digunakan WireGuard Server) - Interface Mode: Server Mode
- Interface Backend: Local WireGuard Backend
- Private Key dan Public Key: Biarkan default apa adanya. Atau kalau kamu punya public dan private key sendiri, kamu bisa masukan disana.
- IP Addresses:
10.10.88.1/24 - Listen Port:
50122 - Post-Up: Masukkan perintah yang dieksekusi sesaat setelah WireGuard
wg0dijalankan. Contoh dibawah ini adalah menambahkan firewall dan routing yang mengijinkan traffic dari interfacewg0keeth0(sesuaikaneth0dengan default interface server kamu). Untuk mengetahui default interface, kamu bisa jalankan perintahip route.
1ufw route allow in on wg0 out on eth0
2iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
- Pre-Down: Perintah yang dieksekusi sesaat sebelum WireGuard
wg0di-stop. Contoh di bawah ini adalah menghapus firewall dan routing yang ditambahkan dari script Post-Up diatas:
1ufw route delete allow in on wg0 out on eth0
2iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Kemudian, pada Tab Peer Defaults:
- Endpoint Address:
xxx.xxx.87.152:50122(ubah dengan IP server dan port yang digunakan oleh WireGuard. - IP Networks:
10.88.88.0/24 - Allowed IP Addresses:
0.0.0.0/0(untuk merouting semua traffic ke WireGuard server) - DNS Server: Masukkan DNS yang ingin kamu gunakan. Misalnmya
8.8.8.8dan1.1.1.1.
Sisanya biarkan default dan tekan tombol Save.
Kemudian, masuk ke halaman “Global Settings” dan pastikan semua konfigurasi sudah benar (terutama “Endpoint Address” dan “Wireguard Config File Path”).
Membuat Peer (client)
Menambahkan konfigurasi peer menggunakan wg-portal sangat mudah, kita tinggal menekan tombol "+ Add Peer" di sisi kanan “Current VPN Peers dan sesuaikan informasi yang diperlukan.
Setelah menambahkan peers (clients), tekan tombol “Save” dan coba untuk melakukan koneksi ke WireGuard VPN server dari perangkat Anda. File konfigurasi untuk perangkat dapat didownload dari wg-portal. Selain itu, kita juga bisa dengan mudah mengimport konfigurasi untuk perangkat menggunakan fitur scan QR Code.
Apa langkah selanjutnya? Bagaimana dengan Mengkonfigurasi WireGuard VPN Client?










