Episode ini membedah tiga pilar arsitektur WireGuard: cryptokey routing yang memetakan kunci publik ke keputusan routing, Noise Protocol Framework untuk handshake dan rekeying, serta arsitektur kernel yang menghubungkan modul wireguard.ko, interface wg0, dan CLI wg.

WireGuard terlihat sederhana dari luar, tetapi di dalamnya ada tiga pilar yang menentukan cara kerjanya: cryptokey routing, Noise Protocol Framework, dan arsitektur kernel. Memahami ketiganya akan membuat kalian jauh lebih percaya diri membaca output wg show maupun debug koneksi yang bermasalah.
Episode 2 membedah ketiga pilar itu satu per satu. Tidak ada perintah baru di sini — ini murni konsep — tetapi konsep ini adalah bahasa yang dipakai semua episode berikutnya.
Selain itu, episode ini menegaskan satu mentalitas yang akan kalian butuhkan sepanjang seri: WireGuard adalah protokol yang sedikit perintah, tetapi kaya konsekuensi. Setiap opsi kecil seperti AllowedIPs membawa implikasi keamanan dan routing yang besar, dan memahaminya sejak dini mencegah kesalahan yang sulit dilacak.
Cryptokey routing adalah inti desain WireGuard. Setiap interface memiliki satu kunci privat dan daftar peer, dan setiap peer diidentifikasi oleh kunci publiknya. Data dienkripsi untuk kunci publik tertentu, dan hanya penerima dengan kunci privat yang cocok yang bisa membukanya.
[Interface]
PrivateKey = (rahasia, tidak pernah dikirim)
Address = 10.0.0.1/24
ListenPort = 51820
[Peer]
PublicKey = (kunci publik client)
AllowedIPs = 10.0.0.2/32Perhatikan AllowedIPs. Bagi WireGuard, baris ini bukan sekadar firewall: baris ini mendeklarasikan alamat mana yang "dimiliki" oleh peer dengan kunci publik tersebut. Trafik menuju 10.0.0.2 otomatis dienkripsi untuk peer itu, dan paket masuk yang mengaku dari 10.0.0.2 hanya diterima bila terenkripsi valid oleh peer itu. Tidak ada negosiasi protokol seperti IKE di sini.
Mekanisme ini disebut routing berbasis kunci karena keputusan keamanan dan routing digabung: siapa yang boleh mengirim ke sebuah alamat juga menentukan lewat mana paket dikirim. Tidak ada tabel terpisah antara izin akses dan tabel routing.
Ini perbedaan paling fundamental dengan IPsec. IPsec menghabiskan waktu membangun Security Association lewat IKE. WireGuard tidak punya konsep itu: begitu kunci dan AllowedIPs terpasang, setiap paket yang cocok langsung diproses. Handshake terjadi di balik layar saat paket pertama kali dikirim, bukan sebagai fase konfigurasi terpisah.
Bagi kalian yang terbiasa dengan IPsec, konsekuensinya terasa besar: tidak ada fase konfigurasi yang bisa gagal sebelum koneksi dipakai, dan tidak ada status SA yang bisa hang. Kalau konfigurasi peer benar, koneksi tinggal berjalan.
Praktiknya, ini membuat debug jauh lebih cepat: jika trafik tidak mengalir, masalahnya hampir selalu ada di tiga tempat saja, yaitu kunci, endpoint, atau AllowedIPs. Tidak ada fase negosiasi yang harus diurai lebih dulu.
WireGuard memakai Noise Protocol Framework dengan pola handshake yang dikenal sebagai Noise IKpsk2. Dalam kondisi normal, handshake hanya memakan satu round-trip: initiator mengirim handshake initiation, responder membalas handshake response, dan setelah itu data terenkripsi bisa mengalir dua arah.
Basis kriptografinya adalah:
Kombinasi keempatnya dipilih karena efisiensi dan keamanan pada perangkat keras modern, termasuk CPU dengan instruksi khusus. WireGuard tidak menawarkan alternatif lain, dan itulah inti dari pendekatan crypto-first yang kita bahas di episode 1.
Setelah handshake, sesi tidak diam saja. WireGuard mengganti kunci sesi secara otomatis kira-kira setiap dua menit, atau setelah sejumlah paket tertentu. Tujuannya menjaga forward secrecy: jika satu kunci sesi bocor, dampaknya terbatas. Paket yang diulang (replay) juga ditolak lewat sliding window counter.
Waktu dua menit bukan angka acak. Ini keseimbangan antara forward secrecy yang ketat dan overhead handshake yang rendah. Karena handshake itu murah dan tidak melibatkan negosiasi, mengganti kunci sesi sesering itu tidak membebani CPU secara berarti.
wg show wg0 latest-handshakesJika handshake sudah lama, kolom latest-handshakes menampilkan waktu dalam format UNIX timestamp. Nilai nol menandakan belum pernah handshake sama sekali.
Secara arsitektur, WireGuard terdiri dari tiga lapisan yang berkomunikasi lewat netlink:
wireguard.ko: menciptakan interface wg0 dan memproses seluruh paket di kernel-space.wg0: virtual network device bertipe wireguard yang terlihat seperti NIC biasa.wg: alat userspace yang mengirim konfigurasi ke modul lewat netlink.ip link add dev wg0 type wireguard
wg set wg0 listen-port 51820
wg show wg0Perintah wg set wg0 listen-port 51820 di atas menunjukkan bahwa semua perubahan dilakukan secara live lewat netlink, tanpa me-restart interface. Inilah yang memungkinkan rotasi kunci dan perubahan peer secara real-time yang akan kita praktikkan di episode 12.
Pemisahan lapisan ini juga memudahkan debugging: saat ada masalah, kalian bisa memeriksa masing-masing lapisan secara terpisah, dari kondisi modul hingga konfigurasi yang dikirim CLI.
Begitu ketiga pilar ini dikuasai, semua episode berikutnya tinggal membahas variasi di atas tema yang sama: interface, peer, dan kunci. Karena itu, luangkan waktu memahami bagian ini sebelum melangkah ke praktik.
Dengan menempatkan enkripsi di kernel-space, WireGuard memproses paket tanpa pertukaran konteks antara kernel dan userspace untuk setiap paket. Ini menjelaskan kenapa WireGuard hampir selalu lebih cepat dari OpenVPN yang berjalan di userspace. Detail performanya akan kita uji dengan iperf3 di episode 15.
Dampak praktisnya terasa saat banyak client terhubung ke satu server: dengan packet processing di kernel, WireGuard bisa menangani throughput tinggi tanpa proses userspace yang menjadi bottleneck. Pengujian angka pastinya akan kita lakukan di episode 15.
Episode 2 memberi kalian bahasa untuk memahami WireGuard: cryptokey routing yang menjadikan kunci publik sebagai rute, Noise IKpsk2 yang menyelesaikan handshake dalam satu round-trip dengan rekeying berkala, dan arsitektur tiga lapis modul kernel, interface, dan CLI.
Inti yang harus dibawa pulang:
AllowedIPs adalah keputusan routing berbasis kunci, bukan sekadar firewall.wg berkomunikasi dengan kernel lewat netlink, semua perubahan bersifat live.Di episode 3 selanjutnya kita mulai praktik: instalasi dan setup awal — memasang WireGuard di Debian/Ubuntu dan distribusi lain, men-generate pasangan kunci, membuat wg0.conf pertama, dan menghidupkan interface dengan wg-quick up. Persiapkan dua VM kalian sekarang.