Episode ini membahas performa WireGuard dan optimasi kernel: keuntungan berjalan di kernel-space, multiqueue TUN, offloading GRO dan GSO, benchmark throughput dan latensi dengan iperf3, serta perbandingan WireGuard dengan OpenVPN dan IPsec.

Salah satu alasan WireGuard populer adalah kecepatannya. Berjalan di kernel-space dan memakai kriptografi modern yang bisa diakselerasi perangkat keras membuatnya jauh lebih cepat dari VPN userspace seperti OpenVPN. Namun kecepatan itu bukan sesuatu yang otomatis — perlu pengukuran dan sedikit penyesuaian agar optimal.
Episode 15 membahas fondasi performa WireGuard, optimasi yang tersedia di kernel, cara mengukur dengan iperf3, dan posisi WireGuard dibanding OpenVPN serta IPsec.
WireGuard memproses paket di dalam kernel, sehingga tidak ada pertukaran konteks antara kernel dan proses userspace untuk setiap paket. Interface wg0 juga mendukung multiqueue: antrian paralel yang memungkinkan beberapa CPU memproses paket secara bersamaan, sangat membantu pada mesin dengan banyak core.
ip link show wg0Pada sistem yang besar, kalian juga bisa menambah jumlah queue interface saat membuatnya agar sejalan dengan jumlah CPU:
sudo ip link add dev wg0 type wireguard
sudo ethtool -l wg0Kernel bisa menggabungkan paket kecil menjadi lebih besar sebelum diproses dan memecahnya lagi saat dikirim — inilah GRO dan GSO. Penggabungan mengurangi overhead per paket dan meningkatkan throughput:
ethtool -k eth0 | grep -E "generic-receive-offload|generic-segmentation-offload"NIC modern juga menyediakan checksum offload yang meringankan CPU. Kombinasi GRO, GSO, dan checksum offload biasanya sudah aktif secara default.
Untuk mengukur kecepatan maksimum tunnel, jalankan server iperf3 di satu sisi dan client di sisi lain lewat alamat tunnel:
iperf3 -siperf3 -c 10.0.0.1 -t 20Angka 20 di iperf3 -c 10.0.0.1 -t 20 berarti pengukuran selama 20 detik. Bandingkan hasilnya dengan pengukuran tanpa tunnel (langsung ke alamat publik) untuk mengetahui overhead WireGuard. Overhead normal berada di kisaran beberapa persen.
Latensi diukur dengan ping lewat alamat tunnel:
ping -c 20 10.0.0.1Perhatikan RTT rata-rata dan nilai minimum. RTT tunnel selalu sedikit di atas RTT langsung karena overhead enkripsi, tetapi selisihnya harus kecil dan stabil.
wg-quick memakai MTU 1420 secara default untuk IPv4. Angka ini berasal dari MTU 1500 standar dikurangi overhead kapsulasi WireGuard sebesar 80 byte. Jika link fisik kalian punya MTU lebih kecil, tunnel perlu MTU yang lebih kecil juga:
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <kunci privat>
MTU = 1360MTU = 1360 dipakai untuk link PPPoE yang biasanya hanya membawa 1492 byte. MTU yang terlalu besar memicu fragmentasi dan penurunan throughput drastis.
Cari MTU ideal dengan ping bertanda no-fragment:
ping -M do -s 1400 -c 3 10.0.0.1Jika ping -M do -s 1400 berhasil tetapi 1500 gagal, itu menandakan batas MTU berada di antara keduanya, dan MTU tunnel harus dikurangi.
Secara konsisten di berbagai benchmark publik, WireGuard unggul dalam throughput pada perangkat keras yang sama karena berjalan di kernel-space dan memakai kriptografi yang ringan. OpenVPN yang berjalan di userspace biasanya lebih lambat, terutama pada single-core. IPsec bisa menyaingi WireGuard, tetapi dengan kompleksitas konfigurasi yang jauh lebih tinggi.
Untuk kebutuhan kalian, angka pastinya sangat bergantung pada CPU, NIC, dan versi kernel. Selalu ukur di environment sendiri sebelum memilih — satu kali iperf3 memberi jawaban yang lebih meyakinkan daripada klaim di internet.
Episode 15 menuntaskan topik performa: keuntungan kernel-space dan multiqueue, peran GRO dan GSO, pengukuran dengan iperf3, penyesuaian MTU, serta posisi WireGuard dalam perbandingan dengan OpenVPN dan IPsec.
Inti yang harus dibawa pulang:
iperf3 -c <alamat-tunnel> -t 20 mengukur throughput nyata.Di episode 16 selanjutnya kita membahas cross-platform dan mobile — WireGuard-Go sebagai implementasi userspace, WireGuardNT untuk Windows, aplikasi Android dan iOS dengan impor konfigurasi via QR code, serta optimasi baterai untuk perangkat seluler.