Skip to main content
BlogDevOps

WireGuard VPN untuk Jaringan Cloud Privat: Sederhana, Cepat, Aman

Cara menyiapkan WireGuard VPN untuk membuat jaringan overlay privat antara server cloud dan mesin pengembangan — lebih cepat dari OpenVPN dengan sebagian kecil konfigurasinya.

Matthews Wong

Software Engineer

Juni 202511 menit baca
DevOps

WireGuard mencapai throughput TCP 210 Mbps versus 110 Mbps OpenVPN di lingkungan cloud yang sebanding — hampir 2x throughput dengan penggunaan CPU yang jauh lebih rendah. Lebih penting lagi, basis kode WireGuard sekitar 4.000 baris — kira-kira 1% ukuran stack OpenVPN atau IPsec — membuatnya jauh lebih mudah untuk diaudit dan dipelihara. Mengganti setup OpenVPN antar server cloud dengan WireGuard dapat mempersingkat waktu pembentukan koneksi secara nyata.

Apa itu WireGuard dan Bukan

WireGuard adalah protokol VPN modern yang berjalan di kernel Linux (kernel 5.6+ menyertakannya secara native). Ia menyediakan tunnel terenkripsi antara host menggunakan Curve25519 untuk pertukaran kunci, ChaCha20-Poly1305 untuk enkripsi, dan BLAKE2s untuk hashing. Ini bukan solusi layanan VPN lengkap — tidak ada manajemen pengguna, tidak ada UI web, tidak ada otoritas sertifikat.

Kasus Penggunaan Utama

WireGuard unggul dalam: jaringan site-to-site antara server cloud (akses database privat tanpa mengekspos port secara publik), akses jarak jauh untuk developer ke lingkungan staging/produksi (SSH melalui WireGuard alih-alih mengekspos SSH ke internet), menghubungkan DigitalOcean Droplet di region berbeda melalui overlay privat.

Performa WireGuard vs OpenVPN

Di lingkungan VMware, WireGuard menunjukkan throughput TCP 210 Mbps versus 110 Mbps OpenVPN — peningkatan 91%. Kehilangan paket adalah 12% untuk WireGuard versus 47% untuk OpenVPN dalam kondisi jaringan yang disimulasikan secara identik. Di jaringan gigabit, WireGuard mencapai kecepatan mendekati wire (7,88 Gbit/s).

┌─────────────────────────────────────────────────────┐
│         WIREGUARD HUB-AND-SPOKE TOPOLOGY            │
└─────────────────────────────────────────────────────┘

  Dev Laptop ──────────────────────────────┐
  (10.8.0.2)                               │
                                           ▼
  Office IP ───────────────────► WireGuard HUB VPS
  (10.8.0.3)                    (10.8.0.1, Singapore)
                                  UDP :51820 public
  GCP DB Server ◄──────────────────────────┤
  (10.8.0.10)     private overlay           │
                                           │
  DO App Server ◄──────────────────────────┘
  (10.8.0.11)

  Public internet: only Nginx 80/443 + WireGuard UDP 51820
  Private: PostgreSQL 5432, Redis 6379, NestJS 3000

Saat menjalankan WireGuard antara DigitalOcean Singapura dan GCP Asia-Southeast1, gunakan PersistentKeepalive = 25 untuk semua peer di belakang NAT. Tanpanya, tunnel WireGuard diam-diam menjadi idle setelah 3 menit tanpa traffic dan membutuhkan 1–2 detik untuk membangun kembali pada paket berikutnya, menyebabkan koneksi database yang terputus.

Menyiapkan Jaringan Hub-and-Spoke

Topologi WireGuard yang paling berguna untuk tim kecil adalah hub-and-spoke: satu VPS bertindak sebagai hub dengan IP publik statis, dan semua klien (mesin kantor, laptop, runner CI/CD) adalah spoke. Setiap spoke memiliki antarmuka WireGuard dengan rute untuk subnet privat yang melewati hub.

Integrasi dengan Cloud Firewall

Di DigitalOcean, konfigurasikan Cloud Firewall untuk mengizinkan UDP 51820 dari IP mana pun (klien WireGuard mungkin memiliki IP dinamis). Setelah peer terhubung melalui WireGuard, batasi semua port sensitif lainnya (PostgreSQL 5432, Redis 6379, NestJS 3000) ke subnet privat WireGuard saja — jangan pernah mengeksposnya ke internet.

# Install WireGuard (Ubuntu 22.04+)
apt install wireguard -y

# Generate key pair on hub
wg genkey | tee /etc/wireguard/private.key | wg pubkey > /etc/wireguard/public.key
chmod 600 /etc/wireguard/private.key

# /etc/wireguard/wg0.conf (HUB)
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <HUB_PRIVATE_KEY>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# Dev Laptop
PublicKey = <DEV_PUBLIC_KEY>
AllowedIPs = 10.8.0.2/32
PersistentKeepalive = 25

# Enable and check status
systemctl enable --now wg-quick@wg0
wg show    # shows peers, last handshake, bytes

Pemantauan dan Pemecahan Masalah

WireGuard menyediakan diagnostik bawaan yang minimal. Periksa status peer dengan wg show — ia menampilkan kunci publik setiap peer, endpoint, IP yang diizinkan, waktu handshake terakhir, dan byte yang ditransfer. Waktu handshake terakhir yang lebih dari 3 menit menunjukkan peer tidak terhubung.

WireGuard tidak memiliki otoritas pusat atau pemulihan kata sandi. Jika Anda kehilangan kunci privat untuk peer, peer tersebut tidak dapat terhubung kembali — Anda harus membuat pasangan kunci baru, memperbarui konfigurasi hub dengan kunci publik baru, dan terhubung kembali. Saya menyimpan konfigurasi WireGuard di brankas 1Password terenkripsi dan di repositori GitLab privat kami.

wg-easy: Menambahkan Lapisan UI

Untuk tim yang membutuhkan UI untuk manajemen peer, wg-easy adalah antarmuka manajemen WireGuard berbasis Docker. Jalankan sebagai container Docker di VPS hub Anda: ia mengelola konfigurasi WireGuard, menghasilkan kode QR untuk klien mobile, menyediakan UI web untuk menambah/menghapus peer, dan menampilkan status koneksi.

Setup WireGuard Produksi Saya

Contoh setup WireGuard: DigitalOcean Singapura Droplet (2 vCPU / 2GB) sebagai hub yang menjalankan wg-easy di Docker, dengan subnet WireGuard 10.8.0.0/24. Peer yang terhubung: 2 instance GCP Asia-Southeast1, 3 DigitalOcean Droplet, IP statis kantor, dan laptop pengembangan. Semua komunikasi antar-server melewati tunnel WireGuard.

Sumber & Bacaan Lanjutan

FAQ

Pertanyaan Umum

Jawaban singkat untuk pertanyaan yang paling sering diajukan pembaca tentang topik ini.

Bagaimana perbandingan performa WireGuard dengan OpenVPN?

Di lingkungan cloud yang sebanding, WireGuard mencapai throughput TCP 210 Mbps versus 110 Mbps OpenVPN — hampir 2x lipat. Kehilangan paket dalam kondisi yang disimulasikan secara identik juga jauh lebih rendah: 12% untuk WireGuard versus 47% untuk OpenVPN. WireGuard menggunakan UDP secara eksklusif sehingga dapat memanfaatkan batching dan offload di level kernel (GRO/GSO) yang tidak bisa dilakukan OpenVPN dalam mode TCP.

Mengapa PersistentKeepalive penting untuk peer WireGuard di belakang NAT?

Tanpa PersistentKeepalive, tunnel WireGuard diam-diam menjadi idle setelah 3 menit tanpa traffic dan membutuhkan 1–2 detik untuk membangun kembali pada paket berikutnya, menyebabkan koneksi database terputus dan WebSocket disconnect. Dengan mengatur PersistentKeepalive = 25, keepalive UDP dikirim setiap 25 detik untuk menjaga NAT mapping tetap aktif. Pengaturan ini wajib untuk semua peer yang berada di belakang koneksi kantor atau mesin pengembang.

Apa yang BUKAN kemampuan WireGuard, dan kapan perlu menambahkan tool seperti wg-easy?

WireGuard adalah tunnel kriptografi yang ramping — tidak ada manajemen pengguna, tidak ada UI web, dan tidak ada otoritas sertifikat. WireGuard hanya menangani rute terenkripsi antar host menggunakan pasangan kunci publik dan privat. Tool seperti wg-easy (berbasis Docker) menambahkan antarmuka web untuk manajemen peer, pembuatan kode QR untuk klien mobile, dan visibilitas status koneksi tanpa memerlukan coordination server proprietary seperti Tailscale.

Bagaimana aturan firewall cloud sebaiknya dikonfigurasi saat menggunakan WireGuard?

Hanya UDP port 51820 (WireGuard) dan Nginx pada port 80/443 yang boleh diakses secara publik. Semua port sensitif — PostgreSQL 5432, Redis 6379, NestJS 3000 — harus dibatasi hanya ke subnet privat WireGuard. Di DigitalOcean, Cloud Firewall harus mengizinkan UDP 51820 dari IP mana pun karena klien WireGuard bisa memiliki alamat IP yang dinamis.

Apa yang terjadi jika private key WireGuard hilang, dan bagaimana cara mencadangkan konfigurasi dengan aman?

Jika private key sebuah peer hilang, peer tersebut tidak dapat terhubung kembali — WireGuard tidak memiliki otoritas pusat atau pemulihan kata sandi. Anda harus membuat pasangan kunci baru, memperbarui konfigurasi hub dengan kunci publik baru, lalu menghubungkan kembali. Pendekatan yang disarankan adalah menyimpan konfigurasi WireGuard di brankas terenkripsi (seperti 1Password) dan di repositori Git privat, dengan private key hanya disimpan di brankas dan tidak pernah di git.