VPN dengan Wireguard Bagian VI : Setup VPN Server dengan wg-easy
Beberapa waktu yang lalu, saya sudah pernah menulis tentang aplikasi VPN bernama Wireguard secara komprehensif. Total ada 5 artikel, yaitu :
- Pengenalan Wireguard
- Membuat Internet Proxy
- Mengekspos aplikasi di laptop ke public IP
- Setup Road Warrior - Pekerja remote tapi ingin mengakses LAN kantor
- Menghubungkan Server di Cloud ke Server On-Premise
Seiring dengan perkembangan zaman, saat ini setup Wireguard semakin mudah. Setidaknya untuk skenario seperti di artikel nomor 2 di atas, sudah banyak aplikasi yang memudahkan. Salah satu yang cukup mudah digunakan adalah wg-easy. Dia menggunakan pendekatan Docker, sehingga kita tidak perlu repot melakukan setting server. Tinggal run saja docker imagenya.
Berikut adalah cara setup untuk menjalankan wg-easy yang dilengkapi dengan Nginx Front Proxy dengan sertifikat SSL dari Letsencrypt.
Pertama, kita buat dulu file docker-compose.yml
sebagai berikut
services:
wg-easy:
environment:
- LANG=en
- WG_HOST=vpn.artivisi.id
- PASSWORD_HASH=$$2y$$10$$hBCoykrB95WSzuV4fafBzOHWKu9sbyVa34GJr8VV5R/pIelfEMYyG
image: ghcr.io/wg-easy/wg-easy
container_name: wg-easy
volumes:
- ~/.wg-easy:/etc/wireguard
ports:
- "51820:51820/udp"
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
nginx:
image: weejewel/nginx-with-certbot
container_name: nginx
hostname: nginx
volumes:
- ~/.nginx/servers/:/etc/nginx/servers/
- ./.nginx/letsencrypt/:/etc/letsencrypt/
ports:
- "80:80/tcp"
- "443:443/tcp"
restart: unless-stopped
Untuk konfigurasi Nginx, kita perlu membuat file yang isinya seperti ini
server {
server_name vpn.artivisi.id;
location / {
proxy_pass http://wg-easy:51821/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
}
Nama filenya bebas saja, saya beri nama vpn.artivisi.id.conf
.
Selanjutnya, kita siapkan VPS. Saya biasanya menggunakan Digital Ocean. Untuk VPN server, kita cukup menggunakan droplet termurah.
Setelah dropletnya siap, kita masukkan dua file di atas ke lokasi berikut:
/root/docker-compose.yml
/root/.nginx/server/vpn.artivisi.id.conf
Silahkan sesuaikan lokasinya jika tidak ingin menggunakan user root
. Di DigitalOcean secara default kita dibuatkan user root
. Jadi saya gunakan itu saja.
Berikutnya, kita instal Docker
. Cara instalasi yang lengkap bisa dibaca di websitenya. Kita akan menggunakan cara cepat saja, sebagai berikut
curl -sSL https://get.docker.com | sh
Selanjutnya, kita bisa jalankan docker compose dengan perintah berikut di dalam folder tempat file docker-compose.yml
berada.
docker compose up -d
Cek apakah containernya sudah berjalan
docker ps -a
Outputnya seharusnya menampilkan ada dua container yang berjalan seperti ini
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1de5d9918e43 weejewel/nginx-with-certbot "/docker-entrypoint.…" 44 minutes ago Up 44 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp nginx
e6f12e482af6 ghcr.io/wg-easy/wg-easy "docker-entrypoint.s…" 44 minutes ago Up 44 minutes (healthy) 0.0.0.0:51820->51820/udp, :::51820->51820/udp wg-easy
Berikutnya, kita akan menyiapkan sertifikat SSL dengan Letsencrypt. Login ke container nginx dengan perintah berikut
docker exec -it nginx /bin/sh
Setelah kita berada di dalam container nginx
, kita setup virtualhost vpn.artivisi.id
seperti di file konfigurasi.
cp /etc/nginx/servers/vpn.artivisi.id.conf /etc/nginx/conf.d/.
Selanjutnya, kita inisialisasi sertifikat SSL. Sebelum menjalankan perintah ini, pastikan bahwa setting DNS kita sudah mengarahkan hostname vpn.artivisi.id
ke alamat IP VPS kita. Setelah itu siap, barulah kita bisa membuat sertifikat dengan perintah berikut
certbot --nginx --non-interactive --agree-tos -m webmaster@yopmail.com -d vpn.artivisi.id
Jangan lupa menyesuaikan nama domain dan email administrator pada perintah di atas.
Terakhir, kita restart nginx
nya
nginx -s reload
Selesai. Kita bisa langsung buka urlnya, dan mendapatkan login screen
Setelah login, kita bisa membuat client baru dan melihat aktifitas client yang sedang aktif
Demikianlah artikel tentang cara setup VPN server. Semoga bermanfaat.