Cara Setup WireGuard VPN dengan AWS Server dan Banyak Raspberry Pi


WireGuard adalah protokol VPN modern yang dikenal ringan, cepat, dan mudah dikonfigurasi dibandingkan solusi lama seperti OpenVPN atau IPsec. Salah satu skenario yang cukup umum di lingkungan IoT maupun home lab adalah menghubungkan beberapa Raspberry Pi yang tersebar ke satu server pusat di cloud — dalam hal ini AWS EC2 — agar semua node bisa saling berkomunikasi seolah berada dalam satu jaringan lokal.

Artikel ini membahas cara membangun jaringan VPN dengan topologi hub and spoke menggunakan WireGuard, di mana AWS berperan sebagai hub dan setiap Raspberry Pi berperan sebagai spoke.


Mengenal Topologi Hub and Spoke

Dalam topologi hub and spoke, semua perangkat spoke (Raspberry Pi) hanya terhubung langsung ke hub (AWS). Ketika Pi-1 ingin berkomunikasi dengan Pi-2, paket data dikirim terlebih dahulu ke AWS, lalu diteruskan ke Pi-2. Pendekatan ini lebih sederhana dari topologi mesh karena konfigurasi hanya perlu dilakukan satu kali di server pusat, dan setiap Pi cukup tahu satu alamat tujuan yaitu AWS.

Ilustrasi sederhananya adalah sebagai berikut:

Pi-1 (10.10.0.2) ──┐
Pi-2 (10.10.0.3) ──┤──── AWS Hub (10.10.0.1)
Pi-3 (10.10.0.4) ──┘

Persyaratan Sebelum Mulai

Sebelum memulai konfigurasi, pastikan beberapa hal berikut sudah tersedia:

  • Sebuah instance EC2 di AWS dengan sistem operasi berbasis Debian atau Ubuntu, sudah berjalan dan dapat diakses via SSH.
  • Security Group AWS sudah membuka port UDP 51820 untuk koneksi masuk.
  • Raspberry Pi 3 atau lebih baru dengan Raspberry Pi OS terpasang dan terhubung ke internet.
  • Akses root atau sudo di semua perangkat.

Alokasi Alamat IP untuk Jaringan WireGuard

Sebelum memulai instalasi, tentukan terlebih dahulu skema alamat IP yang akan digunakan di dalam tunnel WireGuard. Contoh yang digunakan dalam artikel ini adalah:

NodeNamaAlamat WireGuard
AWS EC2Hub10.10.0.1
Raspberry Pi 1pi-110.10.0.2
Raspberry Pi 2pi-210.10.0.3
Raspberry Pi 3pi-310.10.0.4

Subnet yang digunakan adalah 10.10.0.0/24, cukup untuk menampung hingga 254 node.


Langkah 1 — Instalasi WireGuard di Semua Node

Jalankan perintah berikut di AWS maupun di setiap Raspberry Pi:

sudo apt update
sudo apt install -y wireguard wireguard-tools

Setelah instalasi selesai, aktifkan modul kernel WireGuard dan verifikasi bahwa perintah wg tersedia:

wg --version

Langkah 2 — Membuat Key Pair di Setiap Node

WireGuard menggunakan kriptografi kunci publik. Setiap node harus memiliki pasangan kunci privat dan publik sendiri. Jalankan perintah berikut di masing-masing node secara terpisah:

sudo mkdir -p /etc/wireguard/keys
cd /etc/wireguard/keys

wg genkey | sudo tee private.key | wg pubkey | sudo tee public.key
sudo chmod 600 private.key

Simpan kunci publik dari masing-masing node karena akan dibutuhkan saat konfigurasi peer.


Langkah 3 — Konfigurasi AWS sebagai Hub

Buat file konfigurasi WireGuard di server AWS. File ini menjadi pusat dari seluruh jaringan:

# /etc/wireguard/wg0.conf — AWS Server

[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = <PRIVATE_KEY_AWS>

PostUp   = sysctl -w net.ipv4.ip_forward=1
PostUp   = iptables -A FORWARD -i %i -j ACCEPT
PostUp   = iptables -A FORWARD -o %i -j ACCEPT
PostUp   = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -D FORWARD -o %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# Peer: pi-1
[Peer]
PublicKey = <PUBLIC_KEY_PI_1>
AllowedIPs = 10.10.0.2/32
PersistentKeepalive = 25

# Peer: pi-2
[Peer]
PublicKey = <PUBLIC_KEY_PI_2>
AllowedIPs = 10.10.0.3/32
PersistentKeepalive = 25

# Peer: pi-3
[Peer]
PublicKey = <PUBLIC_KEY_PI_3>
AllowedIPs = 10.10.0.4/32
PersistentKeepalive = 25

Beberapa catatan penting pada konfigurasi di atas:

  • Bagian PostUp mengaktifkan IP forwarding dan iptables agar paket bisa diteruskan antar Pi.
  • AllowedIPs untuk setiap peer diisi dengan IP spesifik masing-masing Pi (/32), bukan seluruh subnet.
  • PersistentKeepalive di-set 25 detik untuk menjaga koneksi tetap hidup meski Pi berada di balik NAT.

Langkah 4 — Konfigurasi Setiap Raspberry Pi sebagai Spoke

Buat file konfigurasi di masing-masing Raspberry Pi. Contoh untuk Pi-1:

# /etc/wireguard/wg0.conf — Raspberry Pi 1

[Interface]
Address = 10.10.0.2/24
PrivateKey = <PRIVATE_KEY_PI_1>
DNS = 1.1.1.1

PostUp = sysctl -w net.ipv4.ip_forward=1

[Peer]
# AWS Hub
PublicKey = <PUBLIC_KEY_AWS>
Endpoint = <IP_PUBLIK_AWS>:51820
AllowedIPs = 10.10.0.0/24
PersistentKeepalive = 25

Perbedaan kunci dengan konfigurasi server adalah pada AllowedIPs di sisi Pi diisi 10.10.0.0/24 — seluruh subnet WireGuard. Ini memungkinkan Pi mengirim paket ke Pi lain melalui AWS, bukan hanya ke AWS saja.

Ulangi langkah ini untuk Pi-2 dan Pi-3, sesuaikan alamat IP pada bagian Address.


Langkah 5 — Mengaktifkan dan Menjalankan WireGuard

Jalankan perintah berikut di semua node (AWS dan setiap Pi) untuk mengaktifkan WireGuard dan memastikannya berjalan otomatis saat reboot:

sudo chmod 600 /etc/wireguard/wg0.conf
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

Cek status koneksi dengan:

sudo wg show

Output akan menampilkan daftar peer yang terhubung beserta waktu koneksi terakhir dan jumlah data yang ditransfer.


Langkah 6 — Menambahkan Pi Baru Tanpa Restart Server

Salah satu keunggulan WireGuard adalah kemampuan menambahkan peer baru secara langsung tanpa perlu merestart layanan. Ketika ada Raspberry Pi baru yang ingin bergabung, lakukan langkah berikut:

Pertama, buat key pair di Pi baru dan catat kunci publiknya. Kemudian di AWS, tambahkan blok peer baru ke file konfigurasi dan jalankan perintah berikut untuk mendaftarkannya secara live:

sudo wg set wg0 peer <PUBLIC_KEY_PI_BARU> allowed-ips 10.10.0.5/32 persistent-keepalive 25

Tambahkan juga entri peer tersebut ke file /etc/wireguard/wg0.conf agar tetap tersimpan setelah reboot.


Langkah 7 — Membuka Port WireGuard di AWS dan Firewall Server

Agar Raspberry Pi dapat terhubung ke server WireGuard, pastikan port WireGuard (default UDP 51820) terbuka di seluruh layer firewall.

AWS EC2 Security Group

Di AWS Console, buka EC2 → Security Groups → Inbound Rules, lalu tambahkan rule:

Type: Custom UDP
Port: 51820
Source: 0.0.0.0/0

Jika ingin lebih aman, source dapat dibatasi ke IP publik lokasi Raspberry Pi.

Jika menggunakan UFW di server Ubuntu

Izinkan trafik WireGuard:

sudo ufw allow 51820/udp

Verifikasi aturan firewall:

sudo ufw status

Output seharusnya menampilkan:

51820/udp                  ALLOW       Anywhere

Tanpa membuka port ini, WireGuard client akan tetap mengirim paket handshake, tetapi server tidak akan pernah merespons sehingga koneksi terlihat aktif di sisi client namun tidak pernah benar-benar terhubung.


Verifikasi Koneksi

Setelah semua node aktif, lakukan pengujian ping dari salah satu Pi ke node lain:

# Dari Pi-1, ping ke AWS
ping 10.10.0.1

# Dari Pi-1, ping ke Pi-2
ping 10.10.0.3

Jika ping berhasil, jaringan WireGuard sudah berfungsi dengan benar. Apabila ping gagal, periksa hal-hal berikut:

  • Pastikan kunci publik yang dimasukkan ke konfigurasi peer sudah benar dan tidak ada karakter yang terpotong.
  • Pastikan wg show di AWS menampilkan semua Pi sebagai peer yang aktif dengan nilai latest handshake yang baru.
  • Periksa kembali Security Group AWS dan pastikan port 51820 UDP terbuka.
  • Pastikan net.ipv4.ip_forward bernilai 1 di server AWS dengan perintah sysctl net.ipv4.ip_forward.

Menghapus Peer yang Tidak Digunakan

Ketika sebuah Raspberry Pi sudah tidak digunakan lagi, hapus peer-nya dari jaringan dengan perintah berikut di AWS:

sudo wg set wg0 peer <PUBLIC_KEY_PI> remove

Jangan lupa hapus juga blok [Peer] yang bersangkutan dari file /etc/wireguard/wg0.conf.


Kesimpulan

Membangun jaringan VPN dengan WireGuard untuk menghubungkan banyak Raspberry Pi ke sebuah server AWS tidaklah rumit apabila menggunakan topologi hub and spoke. Konfigurasi terpusat di satu titik yaitu AWS, sementara setiap Pi cukup mengenal satu endpoint. Hasilnya adalah jaringan privat yang stabil, terenkripsi, dan mudah diperluas tanpa harus mengkonfigurasi ulang node yang sudah berjalan.

Leave a Reply

Your email address will not be published. Required fields are marked *