Menghubungkan Server On-Premise ke Google Cloud Platform (GCP) Menggunakan WireGuard VPN#
Dokumentasi ini menyediakan panduan teknis yang komprehensif untuk membangun terowongan (tunnel) VPN yang aman, privat, dan terenkripsi antara infrastruktur lokal (on-premise seperti server lokal atau laptop) dengan Virtual Private Server (VPS) yang berjalan di Google Cloud Compute Engine.
Dengan mengimplementasikan arsitektur ini, Anda dapat menghubungkan komponen aplikasi di cloud (misalnya backend API) dengan sumber daya di jaringan lokal (misalnya database PostgreSQL) secara privat. Infrastruktur lokal Anda tetap berada di balik NAT (Network Address Translation) tanpa memerlukan IP publik statis, sehingga memperkecil celah keamanan (attack surface) dari internet luar.
1. Konsep Dasar Arsitektur & Topologi#
Metodologi ini memanfaatkan WireGuard, sebuah protokol VPN modern berspesifikasi tinggi yang berjalan pada ruang kernel (kernel-space) untuk menghasilkan enkripsi berkecepatan tinggi dengan latensi rendah. Hubungan antar node di dalam WireGuard bersifat Peer-to-Peer (P2P), namun karena server lokal berada di balik firewall lokal/NAT, VPS Google Cloud yang memiliki IP publik statis bertindak sebagai titik hubung utama (VPN Gateway/Server) yang mendengarkan koneksi masuk.
Peran Perangkat dalam Jaringan#
- Google Cloud VPS (VPN Server): Memiliki IP Publik statis, bertindak sebagai jangkar (anchor) yang menerima inisiasi jabat tangan (handshake) dari klien.
- Server/Laptop Lokal (VPN Client): Berada di jaringan internal (tanpa IP Publik), bertindak sebagai inisiator koneksi keluar (outbound connection) menuju VPS.
- WireGuard Tunnel: Terowongan virtual terenkripsi menggunakan kriptografi modern (ChaCha20 dan Poly1305) sebagai media transportasi data privat.
Alokasi Pengalamatan Jaringan (Addressing)#
| Komponen | Antarmuka Jaringan (Interface) | Alamat IP Publik | Alamat IP WireGuard (Private) |
|---|---|---|---|
| Google Cloud VPS | wg0 (Virtual) / eth0 (Fisik) | 34.xx.xx.xx (Statis GCP) | 10.10.10.1/24 |
| Server/Laptop Lokal | wg0 (Virtual) | Dinamis / Di balik NAT | 10.10.10.2/24 |
2. Prasyarat Sistem#
Sebelum memulai proses instalasi, pastikan kedua lingkungan sistem telah memenuhi spesifikasi minimum berikut:
Google Cloud VPS:
Menggunakan sistem operasi Ubuntu Server (versi 20.04 LTS atau yang lebih baru).
Memiliki satu IP Publik eksternal yang bersifat statis.
Memiliki akses administratif penuh (
sudoprivileges) melalui SSH.Server/Laptop Lokal:
Menggunakan sistem operasi Ubuntu (Desktop atau Server).
Terhubung ke internet secara aktif dan stabil.
Memiliki akses administratif penuh (
sudoprivileges).
3. Instalasi Paket WireGuard#
Langkah pertama adalah melakukan instalasi modul kernel dan kakas kelola (user-space tools) WireGuard pada kedua mesin.
Langkah Instalasi di Google Cloud VPS#
- Perbarui indeks paket repositori lokal dan tingkatkan versi paket sistem ke versi terbaru:
sudo apt update && sudo apt upgrade -y- Pasang paket utama WireGuard yang menyediakan utilitas
wgdanwg-quick:
sudo apt install wireguard -yLangkah Instalasi di Server/Laptop Lokal#
- Perbarui indeks paket repositori lokal Anda:
sudo apt update- Pasang paket WireGuard pada mesin lokal:
sudo apt install wireguard -y4. Manajemen Kriptografi: Pembuatan Kunci (Keypairs)#
WireGuard menggunakan sistem kriptografi asimetris berbasis kunci publik-privat (Public-Private Keypairs) untuk melakukan otentikasi antar perangkat (peers). Setiap perangkat wajib memiliki kunci privatnya sendiri (yang harus dijaga kerahasiaannya) dan saling bertukar kunci publik agar dapat mengenali satu sama lain.
Pembuatan Kunci di Google Cloud VPS#
- Masuk ke dalam direktori konfigurasi utama WireGuard:
cd /etc/wireguard- Atur umask sistem sementara waktu menjadi
077agar berkas kunci yang dibuat secara otomatis hanya dapat dibaca oleh penggunaroot:
umask 077- Buat kunci privat (private key) dan simpan ke dalam berkas bernama
privatekey:
wg genkey | sudo tee privatekey > /dev/null- Ekstrak kunci publik (public key) yang diturunkan secara matematis dari kunci privat tersebut, lalu simpan ke berkas
publickey:
sudo cat privatekey | wg pubkey | sudo tee publickey > /dev/nullPembuatan Kunci di Server/Laptop Lokal#
- Masuk ke direktori konfigurasi WireGuard pada sistem lokal Anda:
cd /etc/wireguard- Atur tingkat keamanan folder dan buat kunci privat lokal:
umask 077
wg genkey | sudo tee privatekey > /dev/null- Turunkan dan buat berkas kunci publik lokal:
sudo cat privatekey | wg pubkey | sudo tee publickey > /dev/nullCatatan Penting: Anda dapat melihat isi masing-masing kunci menggunakan perintah
sudo cat privatekeyatausudo cat publickey. Catat atau salin nilai string acak tersebut karena akan digunakan pada langkah konfigurasi selanjutnya.
5. Konfigurasi Antarmuka WireGuard (Interface)#
Setelah pasangan kunci tersedia, Anda harus menyusun file konfigurasi berekstensi .conf yang menentukan alamat IP virtual, port jaringan yang didengarkan, dan parameter autentikasi peer.
Langkah Konfigurasi pada Google Cloud VPS#
- Buat dan buka file konfigurasi baru bernama
wg0.confmenggunakan teks editor:
sudo nano /etc/wireguard/wg0.conf- Salin dan tempel struktur konfigurasi di bawah ini, pastikan Anda mengganti placeholder sesuai data kunci yang telah dibuat:
[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = <ISI_DENGAN_PRIVATE_KEY_VPS_ANDA>
[Peer]
PublicKey = <ISI_DENGAN_PUBLIC_KEY_LAPTOP_LOKAL>
AllowedIPs = 10.10.10.2/32Analisis Parameter Konfigurasi VPS:#
[Interface]: Menandakan blok pengaturan untuk kartu jaringan virtual lokal milik VPS sendiri.Address: Menetapkan alamat IP10.10.10.1dengan subnet mask/24ke dalam tunnel interface.ListenPort: Menentukan port UDP khusus (default:51820) yang akan dibuka oleh VPS untuk mendengarkan paket masuk dari internet.PrivateKey: Kunci privat milik VPS yang berfungsi sebagai identitas rahasia enkripsi server.[Peer]: Menandakan blok pengaturan untuk perangkat luar yang diizinkan terhubung (dalam hal ini Server/Laptop Lokal).PublicKey: Kunci publik milik Laptop Lokal sebagai verifikasi identitas kriptografi kawan bicara.AllowedIPs: Menentukan bahwa hanya lalu lintas dengan alamat IP asal/tujuan10.10.10.2(notasi/32berarti tepat satu IP spesifik) yang diizinkan melewati terowongan ini dari peer tersebut.
Langkah Konfigurasi pada Server/Laptop Lokal#
- Buat berkas konfigurasi
wg0.confpada mesin lokal:
sudo nano /etc/wireguard/wg0.conf- Masukkan parameter konfigurasi berikut, sesuaikan variabel IP Publik dan kunci dengan kondisi riil Anda:
[Interface]
Address = 10.10.10.2/24
PrivateKey = <ISI_DENGAN_PRIVATE_KEY_LAPTOP_LOKAL>
[Peer]
PublicKey = <ISI_DENGAN_PUBLIC_KEY_VPS_ANDA>
Endpoint = <IP_PUBLIK_GCP_VPS_ANDA>:51820
AllowedIPs = 10.10.10.0/24
PersistentKeepalive = 25Analisis Parameter Konfigurasi Lokal:#
Address: Alamat IP virtual unik untuk mesin lokal di dalam jaringan internal VPN.Endpoint: Alamat IP publik fisik dari Google Cloud VPS diikuti dengan tanda titik dua dan nomor port UDP tempat WireGuard server mendengarkan.AllowedIPs: Menandakan rentang alokasi IP (10.10.10.0/24) yang akan dirutekan melalui jalur VPN ini. Semua paket menuju subnet tersebut akan otomatis dimasukkan ke dalam enkripsi terowongan.PersistentKeepalive: Berfungsi mengirimkan paket kosong (ping kosong) setiap 25 detik sekali. Fitur ini sangat krusial bagi perangkat lokal di balik NAT/Router agar koneksi stateful firewall pada router lokal tidak memutus sesi UDP akibat dianggap pasif (idle timeout). Dengan ini, VPS selalu tahu jalur balik menuju perangkat lokal Anda.
6. Pengamanan Berkas Konfigurasi (File Permissions)#
Berkas konfigurasi WireGuard menyimpan string kunci privat (PrivateKey) yang memiliki hak akses penuh terhadap dekripsi data jaringan Anda. Oleh karena itu, sistem operasi wajib dikonfigurasi untuk membatasi hak akses file tersebut agar tidak dapat diintip oleh pengguna tidak sah (unprivileged users).
Mengatur Hak Akses File#
- Jalankan perintah perubahan mode (change mode) berikut di kedua perangkat (VPS dan Mesin Lokal):
sudo chmod 600 /etc/wireguard/wg0.confPenjelasan Teknis: Aturan
600(-rw-------) memastikan bahwa hanya pemilik berkas asli (yaitu akunroot) yang memiliki hak akses penuh untuk membaca (read) dan menulis (write) isi berkas, sedangkan pengguna lain di dalam sistem sama sekali tidak memiliki akses baca.
7. Konfigurasi Firewall Google Cloud Platform (GCP)#
Secara bawaan (default), Google Cloud Platform menerapkan kebijakan keamanan ketat yang memblokir seluruh lalu lintas masuk (ingress traffic) ke instans Compute Engine. Anda harus membuat aturan firewall (Firewall Rule) kustom agar paket UDP WireGuard dapat menembus sistem keamanan jaringan GCP.
Langkah Membuka Port Jaringan di GCP Console#
- Buka peramban (browser) Anda dan masuk ke halaman Google Cloud Console.
- Navigasikan menu navigasi kiri menuju VPC Network $\rightarrow$ Firewall.
- Klik tombol Create Firewall Rule di bilah atas halaman.
- Isi parameter konfigurasi aturan baru dengan ketentuan teknis berikut:
- Name:
allow-wireguard-ingress - Direction of traffic:
Ingress(Lalu lintas masuk) - Action on match:
Allow(Izinkan) - Targets:
All instances in the network(Atau sesuaikan dengan target tag network VPS Anda) - Source filter:
IPv4 ranges - Source IPv4 ranges:
0.0.0.0/0(Mengizinkan koneksi dari IP internet mana pun, mengingat IP internet lokal Anda bersifat dinamis) - Protocols and ports: Centang Specified protocols and ports, pilih UDP, lalu masukkan nilai port
51820.
- Klik Create untuk menyimpan dan menerapkan aturan baru ke jaringan virtual Anda.
8. Manajemen Layanan dan Otomatisasi (Execution)#
WireGuard menyediakan integrasi penuh ke dalam pengelola sistem systemd. Langkah ini digunakan untuk mengaktifkan terowongan VPN serta memastikan layanan otomatis berjalan kembali apabila server melakukan muat ulang (reboot).
Eksekusi Perintah pada Google Cloud VPS#
- Daftarkan layanan WireGuard agar otomatis aktif saat sistem dinyalakan:
sudo systemctl enable wg-quick@wg0- Jalankan antarmuka virtual
wg0untuk pertama kalinya:
sudo systemctl start wg-quick@wg0Eksekusi Perintah pada Server/Laptop Lokal#
- Daftarkan layanan jaringan pada sistem lokal Anda:
sudo systemctl enable wg-quick@wg0- Hidupkan jaringan VPN lokal untuk memulai inisiasi jabat tangan ke cloud:
sudo systemctl start wg-quick@wg09. Verifikasi dan Pengujian Jaringan#
Setelah kedua layanan aktif, langkah validasi wajib dilakukan untuk memastikan bahwa enkripsi asimetris berhasil terotentikasi dan jalur routing privat telah terbentuk sempurna.
Memeriksa Status Internal WireGuard#
- Jalankan utilitas pemeriksaan internal WireGuard di salah satu mesin:
sudo wg- Analisis baris keluaran yang muncul di layar terminal Anda. Jaringan dinyatakan berhasil terbentuk apabila menampilkan data riil berikut:
interface: wg0
public key: vPsPuBlIcKeY...
private key: (hidden)
listening port: 51820
peer: LoCaLpUbLiCKeY...
endpoint: 182.xx.xx.xx:port_lokal
allowed ips: 10.10.10.2/32
latest handshake: 14 seconds ago
transfer: 4.12 KiB received, 3.84 KiB sentIndikator Kunci Keberhasilan: Keberadaan baris
latest handshake(menunjukkan waktu kurang dari 2 menit) serta pertumbuhan angka pada bagiantransfer: received / sentadalah bukti absolut bahwa paket terenkripsi berhasil didekripsi dan dikenali oleh kedua belah pihak.
Uji Konektivitas Ping (ICMP Test)#
- Lakukan uji respons dari Server/Laptop Lokal menuju VPS:
ping -c 4 10.10.10.1- Lakukan uji respons sebaliknya, dari VPS menuju Server/Laptop Lokal:
ping -c 4 10.10.10.210. Penanganan Masalah (Troubleshooting) Real-Case#
Kendala paling umum yang sering ditemukan di lapangan adalah situasi di mana perintah ping menghasilkan timeout dan baris latest handshake tidak pernah muncul saat mengetik perintah sudo wg. Berikut adalah diagnosis dan solusi penyelesaian masalah tersebut berdasarkan arsitektur WireGuard:
Masalah 1: Jabat Tangan (Handshake) Gagal Terbentuk#
- Penyebab Utama: Ketidakcocokan string kunci (mismatched keys). Karakter kunci publik milik Laptop yang ditempel pada berkas konfigurasi VPS berbeda (meski hanya satu karakter) dengan kunci publik asli yang digenerasikan oleh Laptop, atau sebaliknya.
- Solusi Pemecahan:
- Jalankan
sudo cat /etc/wireguard/publickeydi Laptop, salin hasilnya secara teliti. - Buka
/etc/wireguard/wg0.confdi VPS, pastikan parameterPublicKeypada blok[Peer]sama persis dengan string tersebut. - Lakukan restart layanan di kedua sisi menggunakan perintah
sudo systemctl restart wg-quick@wg0.
Masalah 2: Handshake Sukses, tetapi Ping Tetap Timeout#
- Penyebab Utama: Blokade dari sub-sistem firewall lokal (
ufwatauiptables) pada salah satu mesin yang melarang lalu lintas protokol ICMP. - Solusi Pemecahan: Pastikan aturan firewall lokal mengizinkan paket dari subnet VPN dengan mendaftarkannya secara eksplisit:
sudo ufw allow from 10.10.10.0/2411. Manajemen Perintah Operasional Kontinuitas#
Berikut adalah rangkuman perintah administratif penting menggunakan systemd untuk kebutuhan pemeliharaan operasional terowongan VPN WireGuard sehari-hari:
- Melihat Status Operasional Jaringan & Handshake:
sudo wg- Memeriksa Status Siklus Hidup (Lifecycle) Service:
sudo systemctl status wg-quick@wg0- Mematikan Jalur Terowongan VPN Sementara:
sudo systemctl stop wg-quick@wg0- Menghidupkan Jalur Terowongan VPN Kembali:
sudo systemctl start wg-quick@wg0- Menerapkan Ulang Konfigurasi (Reload/Restart):
sudo systemctl restart wg-quick@wg0