Cara Menginstal WireGuard VPN + Antarmuka Web di Ubuntu
Pengungkapan: Artikel ini berisi tautan afiliasi. Saya mungkin mendapatkan komisi ketika Anda melakukan pembelian melalui tautan ini tanpa biaya tambahan bagi Anda.
Saat Anda terhubung ke WiFi di kedai kopi atau mengakses internet dari jaringan publik mana pun, data Anda melewati infrastruktur yang tidak Anda kendalikan. Siapa pun yang berada di antara Anda dan situs web yang Anda kunjungi berpotensi menyadap lalu lintas Anda, bahkan di jaringan rumah Anda, penyedia layanan internet Anda dapat melihat setiap situs yang Anda kunjungi.
VPN menyelesaikan masalah ini dengan membuat terowongan terenkripsi antara perangkat Anda dan server yang Anda percayai. Alih-alih lalu lintas Anda langsung menuju internet, itu pertama-tama melewati terowongan aman ini ke server VPN Anda, yang kemudian meneruskannya ke tujuan, sehingga siapa pun yang mengamati jaringan hanya akan melihat data terenkripsi yang menuju server VPN Anda, tidak lebih.
WireGuard adalah protokol VPN modern yang melakukan pekerjaan ini dengan sangat baik. Tidak seperti teknologi VPN lama yang memerlukan ratusan ribu baris kode, WireGuard menyelesaikan tugas yang sama hanya dengan sekitar 4.000 baris, yang berarti lebih sedikit bug, kinerja lebih baik, dan audit keamanan yang lebih mudah.
Tapi begini: meskipun WireGuard itu sendiri sederhana, mengelola banyak klien VPN, membuat file konfigurasi, dan melacak siapa yang memiliki akses bisa menjadi membosankan hanya melalui baris perintah, itulah mengapa memiliki antarmuka web sangat berguna.
Dalam panduan ini, kami akan menyiapkan server WireGuard VPN lengkap dengan antarmuka web yang ramah pengguna yang memungkinkan Anda mengelola semuanya melalui browser, seperti menambahkan perangkat baru, menghasilkan kode QR untuk klien mobile, dan memantau koneksi tanpa harus menyentuh satu pun file konfigurasi secara manual.
Yang Anda Butuhkan
Sebelum kita mulai, pastikan Anda memiliki:
- Server Linux dengan alamat IP publik (VPS dari penyedia seperti DigitalOcean, Linode, atau AWS bekerja dengan sempurna).
- Akses root atau hak istimewa sudo di server ini.
- Pemahaman dasar tentang SSH (Anda harus tahu cara terhubung ke server Anda).
Panduan ini mengasumsikan Anda menggunakan Ubuntu 22.04 atau Ubuntu 24.04, tetapi langkah-langkahnya bekerja serupa pada Debian dan distribusi lain dengan beberapa penyesuaian kecil.
Memahami Arsitektur
Mari luangkan waktu sejenak untuk memahami apa yang akan kita bangun sebelum kita mulai mengetik perintah.
Sebuah setup WireGuard terdiri dari peer – perangkat yang dapat saling berkomunikasi melalui terowongan terenkripsi.
Dalam kasus kita, kita akan memiliki:
- Server: Mesin Linux Anda dengan alamat IP publik, yang berfungsi sebagai pusat utama tempat semua perangkat Anda terhubung.
- Klien: Laptop, ponsel, tablet, atau perangkat lain yang ingin Anda lindungi, setiap klien mendapatkan pasangan kunci kriptografi dan konfigurasi sendiri.
- Antarmuka Web: Aplikasi web ringan (kami akan menggunakan WireGuard-UI) yang berjalan di server Anda dan memberikan dasbor untuk mengelola semuanya.
Ketika seorang klien ingin terhubung, ia membuat terowongan terenkripsi langsung ke server dan kemudian server mengarahkan lalu lintas internet klien atau cukup memberikan akses ke sumber daya di jaringan lokal server, tergantung pada bagaimana Anda mengonfigurasinya.
Langkah 1: Menginstal WireGuard di Server Ubuntu
Pertama, mari pastikan sistem Anda diperbarui dan memiliki alat yang diperlukan terpasang menggunakan perintah berikut, yang akan memperbarui daftar paket Anda dan meningkatkan perangkat lunak yang usang.
sudo apt update && sudo apt upgrade -y
Selanjutnya, instal WireGuard itu sendiri:
sudo apt install wireguard -y
Karena WireGuard sudah terintegrasi ke dalam kernel Linux (untuk kernel 5.6 ke atas), perintah ini terutama menginstal alat pengguna yang dibutuhkan untuk mengonfigurasi dan mengelola antarmuka WireGuard.
Langkah 2: Mengaktifkan IP Forwarding di Ubuntu
Secara default, Ubuntu tidak meneruskan paket antara antarmuka jaringan, yang merupakan fitur keamanan agar server Anda tidak bertindak sebagai router kecuali Anda secara eksplisit memberitahunya, tetapi untuk server VPN, kita memerlukan fungsionalitas ini.
Saat ponsel Anda terhubung ke VPN dan mencoba mengunjungi sebuah situs web, server perlu meneruskan permintaan itu dari antarmuka WireGuard ke antarmuka jaringan publiknya, kemudian meneruskan respons kembali.
Untuk mengaktifkan penerusan IP secara permanen, kita perlu mengedit file konfigurasi sistem:
sudo nano /etc/sysctl.conf
Cari baris ini (mungkin dikomentari dengan # di awal):
#net.ipv4.ip_forward=1
Hapus # untuk mengaktifkannya kembali, atau tambahkan barisnya jika tidak ada:
net.ipv4.ip_forward=1
Simpan file tersebut lalu terapkan perubahan tanpa melakukan reboot:
sudo sysctl -p
Langkah 3: Konfigurasi Firewall dan Routing untuk WireGuard
Server VPN Anda perlu menerima koneksi masuk pada port yang digunakan WireGuard (secara default, port UDP 51820). Server juga harus dapat mengarahkan lalu lintas dengan benar antara antarmuka VPN dan antarmuka jaringan publik Anda.
Pertama, mari kita identifikasi antarmuka jaringan publik Anda:
ip route | grep default
Anda akan melihat keluaran seperti:
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100
Nama antarmuka di sini adalah `eth0`, tetapi bisa berbeda di sistem Anda, bisa `ens3`, `enp0s3`, atau yang serupa.
Sekarang mari kita konfigurasikan firewall ufw (firewall default Ubuntu):
# Allow SSH (if you haven't already)
sudo ufw allow 22/tcp
# Allow WireGuard
sudo ufw allow 51820/udp
# Allow the web interface (we'll use port 5000)
sudo ufw allow 5000/tcp
Selanjutnya, kita perlu menambahkan aturan NAT (Network Address Translation) yang memberi tahu server Anda untuk menyamarkan lalu lintas VPN seolah-olah berasal dari server itu sendiri saat mengirimkannya ke internet.
sudo nano /etc/ufw/before.rules
Tambahkan baris-baris ini di bagian atas file, tepat setelah komentar header, tetapi sebelum baris *filter dan ganti eth0 dengan nama antarmuka Anda yang sebenarnya:
# NAT table rules for WireGuard
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
COMMIT
Ini artinya:
*nat: Kami sedang bekerja dengan tabel NAT.-s 10.0.0.0/24: Untuk paket yang berasal dari jaringan VPN kami (10.0.0.0/24 adalah subnet yang akan kami beri ke klien VPN).-o eth0: Keluar melalui antarmuka eth0.-j MASQUERADE: Ubah alamat IP sumber menjadi IP publik server.
Simpan dan keluar, lalu aktifkan dan muat ulang UFW:
sudo ufw enable
sudo ufw reload
Langkah 4: Menginstal WireGuard-UI di Server Ubuntu
Sekarang bagian yang menarik, yaitu menyiapkan antarmuka web menggunakan WireGuard-UI, yang merupakan aplikasi web yang bersih dan sederhana yang ditulis dalam bahasa Go.
Pertama, buat direktori untuk WireGuard-UI:
sudo mkdir -p /opt/wireguard-ui
cd /opt/wireguard-ui
Selanjutnya, unduh rilis terbaru WireGuard-UI dari halaman rilis GitHub, tetapi pada saat penulisan, perintah wget mendapatkan versi stabil terbaru:
sudo wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.2/wireguard-ui-v0.6.2-linux-amd64.tar.gz
Setelah diunduh, ekstrak dan buat menjadi dapat dijalankan:
sudo tar -xzf wireguard-ui-v0.6.2-linux-amd64.tar.gz
sudo chmod +x wireguard-ui
Sebelum kita memulai antarmuka, mari buat layanan systemd agar berjalan otomatis saat boot.
sudo nano /etc/systemd/system/wireguard-ui.service
Tempel konfigurasi ini:
[Unit]
Description=WireGuard UI
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/wireguard-ui
ExecStart=/opt/wireguard-ui/wireguard-ui
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Simpan dan keluar, lalu aktifkan dan mulai layanan:
sudo systemctl daemon-reload
sudo systemctl enable wireguard-ui
sudo systemctl start wireguard-ui
Periksa apakah sedang berjalan:
sudo systemctl status wireguard-ui
Langkah 5: Mengakses Wireguard-UI
Buka browser web Anda dan buka URL berikut, pastikan untuk mengganti YOUR_SERVER_IP dengan alamat IP publik server Anda yang sebenarnya.
http://YOUR_SERVER_IP:5000
Anda akan melihat halaman login, di mana Anda dapat menggunakan kredensial default berikut:
Username: admin
Password: admin
Penting: Ubah ini segera setelah masuk. Klik pada nama pengguna Anda di kanan atas, lalu “Pengaturan,” dan perbarui kata sandi Anda.
Langkah 6: Mengonfigurasi Server WireGuard Anda
Setelah Anda masuk, Anda akan dibawa ke dasbor WireGuard-UI. Untuk mulai mengonfigurasi server Anda, klik pada «WireGuard Server» di bilah sisi kiri dan atur Nama Antarmuka menjadi 10.0.0.1/24 (antarmuka WireGuard default), dan Port Mendengar menjadi 51820.
Di kolom Post Up Script, masukkan:
iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
dan di bidang Post Down Script, masukkan:
iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Pastikan untuk mengganti eth0 dengan nama antarmuka jaringan Anda yang sebenarnya jika berbeda dan atur Address menjadi 10.0.0.1/24, yang akan menjadi alamat IP VPN internal server.
Saat Anda mengklik Apply Config, WireGuard akan membuat antarmuka wg0, mendengarkan koneksi VPN di port 51820, menetapkan IP VPN untuk server Anda, dan mengonfigurasi aturan firewall untuk meneruskan lalu lintas VPN dengan benar.
Antarmuka pengguna juga akan secara otomatis menghasilkan kunci pribadi dan publik server Anda. Setelah menerapkan pengaturan, antarmuka harus ditampilkan sebagai Aktif, menunjukkan bahwa server WireGuard Anda sedang berjalan.
Langkah 7: Tambahkan Klien WireGuard Pertama Anda
Sekarang mari kita tambahkan perangkat ke VPN Anda, bisa berupa laptop, ponsel, atau perangkat klien lainnya. Dari bilah sisi kiri, klik “Clients”, lalu klik “Add New Client”.
Berikan nama deskriptif untuk klien seperti “My Laptop” atau “iPhone”, dan opsional masukkan email untuk membantu mengidentifikasi perangkat nanti. Klik “Auto” untuk secara otomatis menetapkan alamat IP berikutnya yang tersedia (kemungkinan 10.0.0.2).
Untuk IP yang diizinkan, masukkan 0.0.0.0/0, ::/0, yang memastikan semua lalu lintas klien dialihkan melalui VPN; jika Anda hanya ingin mengakses jaringan internal server, Anda bisa menentukan subnet tersebut (misalnya, 10.0.0.0/24).
Setelah semuanya siap, klik “Submit” dan antarmuka web akan secara otomatis menghasilkan konfigurasi WireGuard lengkap untuk klien ini, termasuk pasangan kunci kriptografinya sendiri.
Langkah 8: Menghubungkan Perangkat Klien Anda
Sekarang Anda perlu memasang konfigurasi ke perangkat Anda dan WireGuard-UI mempermudah ini dengan kode QR untuk perangkat seluler dan file konfigurasi yang bisa diunduh untuk komputer.
Untuk Perangkat Mobile (Ponsel/Tablet):
- Pasang aplikasi WireGuard dari toko aplikasi Anda (tersedia untuk iOS dan Android).
- Di antarmuka web WireGuard-UI, temukan klien yang baru saja Anda buat dan klik ikon kode QR.
- Buka aplikasi WireGuard di ponsel Anda, ketuk tombol
"+", dan pilih “Buat dari kode QR“. - Pindai kode QR yang ditampilkan di browser Anda.
- Beri nama koneksi Anda dan ketuk “Buat Terowongan“.
Itu dia! Geser sakelar untuk menghubungkan, dan perangkat selulermu sekarang mengarahkan semua lalu lintasnya melalui server VPN-mu.
Untuk Desktop/Laptop:
- Pasang WireGuard dari wireguard.com/install.
- Di antarmuka WireGuard-UI, klik ikon unduh di sebelah klien Anda untuk mengunduh file
.conf. - Buka aplikasi WireGuard di komputer Anda, klik “Impor tunnel dari file“, dan pilih file konfigurasi yang telah diunduh.
- Klik “Aktifkan” untuk menghubungkan.
Langkah 9: Menguji VPN Anda
Mari pastikan semuanya berfungsi dengan baik. Pertama, saat VPN Anda terputus, kunjungi whatismyipaddress.com dan catat alamat IP yang ditampilkan.
Kemudian, sambungkan ke WireGuard VPN Anda dan segarkan halaman, alamat IP Anda sekarang seharusnya menampilkan IP publik server Anda alih-alih IP asli Anda, yang menandakan bahwa lalu lintas sedang dialihkan melalui VPN.
Untuk memastikan lebih lanjut bahwa DNS berfungsi dengan benar, Anda dapat menjalankan perintah berikut pada perangkat yang terhubung:
ping google.com
Jika Anda melihat respons, VPN Anda mengarahkan lalu lintas dengan benar.
Untuk melihat koneksi aktif di server Anda, masuk melalui SSH dan jalankan:
sudo wg show
Anda akan melihat keluaran seperti:
interface: wg0
public key: [your server's public key]
private key: (hidden)
listening port: 51820
peer: [client's public key]
endpoint: [client's IP]:random_port
allowed ips: 10.0.0.2/32
latest handshake: 45 seconds ago
transfer: 2.50 MiB received, 15.23 MiB sent
Ini menunjukkan bahwa klien Anda terhubung, kapan terakhir kali berkomunikasi dengan server, dan berapa banyak data yang telah ditransfer.
Langkah 10: Gunakan HTTPS untuk WireGuard-UI
Saat ini, ketika Anda mengakses antarmuka web WireGuard Anda di http://YOUR_SERVER_IP:5000, kredensial login dan semua data konfigurasi Anda berjalan di internet dalam bentuk teks biasa dan siapa pun yang mencegat lalu lintas antara browser dan server Anda dapat melihat kata sandi admin Anda dan berpotensi membajak sesi Anda.
Solusinya adalah menempatkan antarmuka web Anda di belakang reverse proxy dengan HTTPS diaktifkan. Reverse proxy ini berada di depan aplikasi Anda, menangani semua koneksi HTTPS terenkripsi dari klien, lalu meneruskan permintaan ke aplikasi Anda melalui jaringan lokal di mana penyadapan bukan menjadi masalah.
Kita akan menggunakan Nginx (web server berkinerja tinggi) sebagai reverse proxy dan Let’s Encrypt untuk mendapatkan sertifikat SSL gratis sehingga Anda dapat mengakses antarmuka WireGuard Anda di https://vpn.yourdomain.com alih-alih alamat IP menggunakan HTTP.
Pasang Server Web Nginx
Pertama, Anda perlu membuat DNS record untuk domain Anda (https://vpn.yourdomain.com) yang mengarah ke alamat IP server Anda dan kemudian menginstal web server Nginx.
sudo apt update
sudo apt install nginx -y
Setelah instalasi, Anda dapat mengunjungi http://vpn.yourdomain.com di browser Anda dan Anda akan melihat halaman sambutan Nginx default, yang berarti Nginx berfungsi dan dapat diakses dari internet.
Pasang Certbot untuk Let’s Encrypt
Selanjutnya, pasang Let’s Encrypt, yang merupakan otoritas sertifikat gratis yang menyediakan sertifikat SSL dan certbot adalah alat yang mengotomatiskan proses mendapatkan dan memperbarui sertifikat tersebut.
sudo apt install certbot python3-certbot-nginx -y
Paket python3-certbot-nginx menyertakan plugin yang dapat secara otomatis mengonfigurasi Nginx untuk Anda, sehingga prosesnya menjadi jauh lebih sederhana.
Konfigurasi Nginx sebagai Reverse Proxy
Sekarang, mari buat konfigurasi Nginx yang meneruskan permintaan dari https://vpn.yourdomain.com ke aplikasi WireGuard-UI Anda yang berjalan di localhost:5000.
Buat file konfigurasi baru.
sudo nano /etc/nginx/sites-available/wireguard-ui
Tempel konfigurasi ini (ganti vpn.yourdomain.com dengan domain Anda yang sebenarnya):
server {
listen 80;
listen [::]:80;
server_name vpn.yourdomain.com;
# This will be used by Certbot for the SSL certificate challenge
location /.well-known/acme-challenge/ {
root /var/www/html;
}
# Redirect all other HTTP traffic to HTTPS
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name vpn.yourdomain.com;
# SSL certificate paths (Certbot will fill these in)
ssl_certificate /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem;
# Modern SSL configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# Security headers
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
# Proxy settings
location / {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
# WebSocket support (if WireGuard-UI uses it)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Forward real client information
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
Sekarang aktifkan konfigurasi ini dengan membuat tautan simbolik:
sudo ln -s /etc/nginx/sites-available/wireguard-ui /etc/nginx/sites-enabled/
Uji konfigurasi Nginx Anda untuk kesalahan sintaks:
sudo nginx -t
Kamu harus melihat:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Jika Anda melihat ada kesalahan, kembalilah dan periksa file konfigurasi Anda untuk kesalahan pengetikan.
Dapatkan Sertifikat SSL
Setelah semuanya dikonfigurasi dengan benar, sekarang saatnya menjalankan perintah certbot yang akan secara otomatis memperoleh sertifikat SSL dari Let’s Encrypt dan mengonfigurasi Nginx untuk menggunakannya.
sudo certbot --nginx -d vpn.yourdomain.com
Seluruh proses memakan waktu sekitar 30 detik, dan ketika selesai, Anda akan melihat pesan sukses:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem
Sekarang muat ulang Nginx untuk menerapkan semuanya:
sudo systemctl reload nginx
Perpanjangan Sertifikat Otomatis
Sertifikat Let’s Encrypt hanya berlaku selama 90 hari, yang memang disengaja untuk mendorong pembaruan secara rutin dan membatasi potensi kerusakan jika kunci pribadi pernah disusupi.
Untungnya, Certbot secara otomatis mengatur timer pembaruan saat diinstal, dan Anda dapat memastikan bahwa layanan pembaruan aktif dengan menjalankan:
sudo systemctl status certbot.timer
dan Anda harus melihatnya tercantum sebagai aktif (sedang berjalan), timer ini memeriksa dua kali sehari dan akan secara otomatis memperbarui sertifikat apa pun yang akan habis masa berlakunya dalam 30 hari.
Untuk memverifikasi bahwa semuanya bekerja tanpa melakukan pembaruan sebenarnya, jalankan:
sudo certbot renew –dry-run
Jika tes selesai dengan sukses, pembaruan sertifikat otomatis Anda telah sepenuhnya dikonfigurasi, dan Anda tidak perlu khawatir tentang sertifikat Anda kedaluwarsa.
Perbarui Firewall Anda
Karena sekarang kita mengakses WireGuard-UI melalui Nginx pada port HTTPS standar (443), kita perlu mengizinkan ini di firewall kita dan opsional menutup akses langsung ke port 5000.
sudo ufw allow 443/tcp
Sebagai opsi, jika Anda ingin mencegah akses langsung ke WireGuard-UI di port 5000 (memaksa semua orang menggunakan antarmuka HTTPS), Anda dapat menghapus aturan itu:
sudo ufw delete allow 5000/tcp
Muat ulang firewall:
sudo ufw reload
Langkah 11: Konfigurasikan WireGuard-UI untuk Hanya Mendengarkan di Localhost
Karena Nginx sekarang menangani semua koneksi eksternal, kita harus mengonfigurasi WireGuard-UI agar hanya menerima koneksi dari mesin lokal, yang mencegah siapa pun mengaksesnya langsung di port 5000, bahkan jika mereka mengetahui port tersebut terbuka.
Hentikan layanan WireGuard-UI:
sudo systemctl stop wireguard-ui
Edit file layanan:
sudo nano /etc/systemd/system/wireguard-ui.service
Ubah baris ExecStart agar hanya terikat ke localhost:
[Unit]
Description=WireGuard UI
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/wireguard-ui
Environment="BIND_ADDRESS=127.0.0.1:5000"
ExecStart=/opt/wireguard-ui/wireguard-ui
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Simpan dan keluar, lalu muat ulang systemd dan restart layanan:
sudo systemctl daemon-reload
sudo systemctl start wireguard-ui
sudo systemctl status wireguard-ui
Akhirnya, buka peramban Anda dan arahkan ke:
https://vpn.yourdomain.com
Anda seharusnya melihat ikon gembok di bilah alamat browser Anda, Anda dapat mengklik ikon gembok tersebut untuk melihat detail sertifikat. Anda akan melihat bahwa sertifikat tersebut diterbitkan oleh Let’s Encrypt dan berlaku selama 90 hari.
Ringkasan
Saat ini, Anda telah berhasil men-deploy server WireGuard VPN yang sepenuhnya operasional dengan antarmuka manajemen berbasis web yang aman. Alih-alih menangani kunci, file konfigurasi, dan aturan routing secara manual, WireGuard-UI memberikan dashboard sederhana untuk menambahkan perangkat baru, menghasilkan kode QR, dan memantau koneksi yang aktif.






