Menginstall wg-portal Untuk Manajemen WireGuard Server

Dengan WireGuard Portal, kita dapat dengan mudah melakukan manajemen WireGuard server melalui Browser.

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.04 atau 24.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.1 port 8888.
  • 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.id sesuai dengan nama (sub)domain yang kamu gunakan.
  • Ubah ssl_certificate dan ssl_certificate_key dengan 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 wg0 dijalankan. Contoh dibawah ini adalah menambahkan firewall dan routing yang mengijinkan traffic dari interface wg0 ke eth0 (sesuaikan eth0 dengan default interface server kamu). Untuk mengetahui default interface, kamu bisa jalankan perintah ip 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 wg0 di-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.8 dan 1.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?