Episode ini membedah AllowedIPs sebagai inti cryptokey routing: kenapa ia bukan firewall, bagaimana memilih antara full tunnel dengan 0.0.0.0/0 dan split tunnel dengan subnet spesifik, serta cara wg-quick menambahkan rute ke ip route secara otomatis.

Dari semua konsep WireGuard, AllowedIPs adalah yang paling sering disalahpahami. Banyak yang mengiranya aturan firewall. Padahal, AllowedIPs adalah inti dari cryptokey routing: dia menentukan alamat mana yang dianggap "milik" peer tertentu, baik untuk trafik keluar maupun untuk memvalidasi trafik masuk.
Episode 6 menjelaskan cara kerja AllowedIPs, bagaimana memilih antara full tunnel dan split tunnel, serta bagaimana wg-quick menerjemahkan baris ini menjadi rute di routing table. Setelah episode ini, kalian akan bisa merancang kebijakan routing tunnel yang presisi.
Untuk benar-benar menguasai bagian ini, kalian perlu menggeser cara berpikir: dari "daftar izin di firewall" menjadi "peta kepemilikan alamat". Perubahan perspektif kecil ini akan mencegah banyak kebingungan saat kalian merancang topologi dengan banyak peer dan subnet.
Setiap AllowedIPs bekerja untuk dua arah sekaligus. Untuk trafik keluar, ia berkata "kirim paket ke alamat ini lewat peer itu". Untuk trafik masuk, ia berkata "hanya terima paket dari alamat ini jika berasal dari peer itu". Kedua arah itu diikat oleh kriptografi, bukan oleh pemfilteran berbasis daftar.
Konsekuensinya, AllowedIPs bukan daftar izin yang menolak yang lain secara eksplisit. Paket masuk yang alamatnya tidak cocok dengan AllowedIPs peer mana pun akan dibuang oleh kernel, bukan diferuskan ke routing table. Inilah mengapa menambah subnet di AllowedIPs selalu diimbangi dengan menambahkan rute di sisi jaringan.
Perbedaan dengan firewall juga terlihat dari cara WireGuard memperlakukan paket yang tidak cocok: tidak ada log, tidak ada penolakan eksplisit, hanya paket yang dibuang diam-diam. Karena itu, ketika trafik tunnel terasa hilang, langkah pertama adalah memeriksa apakah alamat tujuan tercakup AllowedIPs peer yang tepat.
[Peer]
PublicKey = <kunci publik client>
AllowedIPs = 10.0.0.2/32Dengan baris ini, server mengirim trafik menuju 10.0.0.2 lewat tunnel client, dan hanya menerima paket dari 10.0.0.2 jika paket itu datang dari kunci publik tersebut.
Untuk remote access yang ingin membawa seluruh trafik perangkat lewat tunnel, pakai AllowedIPs = 0.0.0.0/0. Ini dikenal sebagai full tunnel: semua trafik IPv4 perangkat masuk tunnel, keluar dari sisi server, lalu diteruskan ke internet.
[Interface]
Address = 10.0.0.2/24
PrivateKey = <kunci privat client>
[Peer]
PublicKey = <kunci publik server>
AllowedIPs = 0.0.0.0/0
Endpoint = 203.0.113.5:51820Dengan AllowedIPs = 0.0.0.0/0, wg-quick menjadikan default route lewat wg0. Efeknya: alamat IP publik kalian yang terlihat dunia luar adalah alamat server, bukan alamat lokal. Ini pola yang dipakai untuk melewati filter geografis atau jaringan yang tidak tepercaya.
Perlu diingat, full tunnel juga mengalihkan trafik lokal kalian. Akses ke perangkat di jaringan yang sama lewat alamat lokal harus ditangani lewat rute yang lebih spesifik, jika tidak trafik tersebut ikut terbawa ke server.
Full tunnel hanya berguna jika server bersedia meneruskan trafik kalian. Server perlu mengaktifkan forwarding dan masquerade:
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADETanpa MASQUERADE, paket yang keluar dari server tetap membawa alamat tunnel 10.0.0.2 yang tidak bisa di-rute balik di internet.
Tidak semua koneksi harus lewat tunnel. Dengan split tunnel, kalian hanya me-rute subnet tertentu lewat WireGuard dan membiarkan sisanya lewat internet biasa:
[Peer]
PublicKey = <kunci publik server>
AllowedIPs = 10.0.0.0/24, 192.168.50.0/24
Endpoint = 203.0.113.5:51820AllowedIPs bisa menampung banyak subnet yang dipisahkan koma. Trafik menuju 10.0.0.0/24 dan 192.168.50.0/24 masuk tunnel, sedangkan browsing biasa tetap lewat koneksi asli kalian. Split tunnel lebih hemat bandwidth dan lebih cepat untuk akses internet sehari-hari.
Ketika wg-quick menerapkan AllowedIPs, ia menambahkan rute spesifik untuk setiap subnet tersebut di routing table. Periksa hasilnya:
ip route showOutput dari ip route show menampilkan rute menuju 10.0.0.0/24 dan 192.168.50.0/24 dengan dev wg0. Rute spesifik ini menang karena lebih panjang prefix-nya dibanding default route. Jika kalian tidak ingin wg-quick menyentuh routing table, set Table = off di [Interface] — episode 9 akan memakai trik ini untuk site-to-site.
Kadang kalian ingin semua trafik lewat tunnel kecuali beberapa subnet. Solusinya: gabungkan AllowedIPs = 0.0.0.0/0 dengan menambahkan rute eksplisit yang mengembalikan subnet tertentu ke gateway lokal, atau pakai fitur Table dan policy routing ip rule untuk kontrol granular.
Aturan prioritas ini penting dipahami karena mudah membuat salah konfigurasi: rute yang paling spesifik selalu menang, dan wg-quick menambahkan rute spesifik untuk setiap AllowedIPs. Sebelum menambah aturan ip rule, pastikan kalian sudah paham urutan prioritas tabel routing di Linux.
Mulailah dari kebutuhan yang paling sederhana: tuliskan subnet mana yang harus masuk tunnel dan mana yang tidak, baru terjemahkan ke AllowedIPs. Disiplin ini mencegah aturan yang saling bertabrakan di kemudian hari.
Episode 6 menuntaskan pemahaman routing: AllowedIPs adalah keputusan cryptokey routing dua arah, full tunnel dipicu 0.0.0.0/0, split tunnel memakai subnet spesifik, dan wg-quick menerjemahkan semuanya menjadi rute di ip route.
Inti yang harus dibawa pulang:
AllowedIPs menentukan kepemilikan alamat, bukan sekadar izin firewall.0.0.0.0/0 membuat full tunnel lewat server.wg-quick menambahkan rute otomatis; Table = off untuk menonaktifkannya.ip_forward dan MASQUERADE di server.Di episode 7 selanjutnya kita membahas NAT traversal dan endpoint discovery — cara WireGuard tetap berkomunikasi dengan peer di belakang NAT, peran PersistentKeepalive, teknik UDP hole punching, dan bagaimana endpoint dipelajari secara dinamis.