Episode ini mengoptimalkan kinerja L2TP/IPsec: menghitung overhead enkapsulasi, menerapkan MSS clamping, mengatur mtu interface PPP, serta memanfaatkan AES-NI, multiprosesor, dan offload ESP.

VPN yang lambat jarang disebabkan CPU server — hampir selalu karena MTU dan fragmentasi. Episode 15 membahas dua hal sekaligus: bagaimana overhead enkapsulasi L2TP/IPsec memangkas ukuran paket yang bisa dikirim, dan bagaimana mengoptimalkan kinerja dari sisi perangkat keras serta proses daemon.
Pemahaman tentang MTU membuat kalian bisa mengatasi gejala klasik "website tidak bisa dibuka tapi ping lancar" — gangguan yang hampir selalu berakar pada paket besar yang terfragmentasi. Setelah itu kita naik ke tuning kinerja untuk deployment berskala besar.
Setiap paket yang melewati VPN menumpuk header dari setiap lapisan: PPP, L2TP, UDP, ESP, dan header IP luar. Totalnya sekitar 60-80 byte per paket. Dengan MTU ethernet 1500, MTU yang tersedia untuk data di dalam tunnel biasanya berada di kisaran 1350-1420 byte.
Rincian overhead:
PPP + L2TP + UDP : 12 byte (6 + 8 + 4 di atas UDP header)
ESP header : 8-16 byte
ESP trailer + ICV: 16-24 byte
Header IP luar : 20 byte
Total : kira-kira 60-80 byteKarena itu MTU ppp0 yang umum dipakai adalah 1400, memberi ruang aman untuk hampir semua kombinasi algoritma.
MSS clamping mengubah nilai Maximum Segment Size di paket TCP SYN sehingga TCP tidak pernah mengirim segmen yang terlalu besar untuk tunnel. Ini adalah perbaikan paling ampuh dan dilakukan di firewall, bukan di aplikasi.
sudo nft add rule inet filter forward tcp flags syn tcp option maxseg size set rt mtu
sudo nft add rule inet filter forward tcp flags syn tcp option maxseg size set 1360Atau versi iptables yang klasik:
sudo iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
-j TCPMSS --clamp-mss-to-pmtuBaris TCPMSS --clamp-mss-to-pmtu menghitung MSS dari path MTU yang terdeteksi. Untuk hasil deterministik, set nilai tetap 1360 seperti baris nftables di atas.
Selain clamping, setel MTU dan MRU di interface ppp0 lewat opsi pppd:
ipcp-accept-local
ipcp-accept-remote
mtu 1400
mru 1400
ms-dns 8.8.8.8Tambahkan dua baris mtu 1400 dan mru 1400 pada /etc/ppp/options.xl2tpd. Interface ppp0 yang terbentuk akan memakai nilai ini, dan IPCP menawarkannya ke client saat negosiasi.
Periksa nilai MTU aktif:
ip addr show ppp0Jika mtu 1400 tercantum di output, pengaturan berhasil. Bila masalah fragmentasi masih muncul, turunkan bertahap ke 1350 lalu uji dengan ping berukuran besar:
ping -M do -s 1372 -c 3 192.168.42.50CPU modern punya instruksi AES-NI yang mempercepat enkripsi AES di perangkat keras. Pastikan kernel menggunakannya:
grep -o aes /proc/cpuinfo | head -1Jika processor mendukung, aes muncul di flags. Untuk mesin dengan NIC yang punya offload IPsec, aktifkan ESP hardware offload di driver NIC — ini memindahkan enkripsi dari CPU ke kartu jaringan.
Charon mendukung beberapa worker thread untuk menangani banyak koneksi IKE sekaligus. Sesuaikan dengan jumlah inti CPU di strongswan.conf:
charon {
threads = 16
keep_alive = 20s
}Ukur dulu jumlah inti dengan nproc, lalu set threads = 16 (atau nilai yang sesuai). Jangan berlebihan — terlalu banyak thread untuk sedikit koneksi justru menambah overhead scheduling.
Episode 15 membekali kalian trik performa yang paling berdampak: perhitungan overhead 60-80 byte, MSS clamping di firewall, MTU interface PPP, serta pemanfaatan AES-NI, ESP offload, dan thread charon.
Inti yang harus dibawa pulang:
ppp0 yang aman biasanya 1400 atau lebih rendah.TCPMSS --clamp-mss-to-pmtu mencegah fragmentasi.mtu 1400 dan mru 1400 di options.xl2tpd.ping -M do -s 1372.Di episode 16 selanjutnya kita akan membahas certificate management — membangun hirarki CA, menerbitkan sertifikat dengan certutil dan pki, serta menangani revocation melalui CRL dan OCSP.