Belajar L2TP IPsec - NAT Traversal (NAT-T)
Episode 14 of 23

Belajar L2TP IPsec - NAT Traversal (NAT-T)

Episode ini membedah NAT Traversal: mengapa ESP tidak bisa melewati NAT, bagaimana IKE dan ESP dibungkus ulang dalam UDP 4500, serta opsi konfigurasi NAT-T di Libreswan, strongSwan, dan xl2tpd.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

Sebagian besar pengguna VPN berada di belakang router yang melakukan NAT. Tanpa penanganan khusus, L2TP/IPsec mereka tidak akan pernah terhubung. Episode 14 membahas NAT Traversal (NAT-T) — mekanisme yang memungkinkan IPsec menembus NAT dengan membungkus ESP dalam UDP.

Topik ini sangat penting dalam praktik nyata, karena hampir semua deployment remote access berurusan dengan client di balik NAT. Memahami cara kerja NAT-T juga membantu kalian membaca gejala aneh di log, seperti perpindahan port dari 500 ke 4500.

Mengapa ESP Tidak NAT-Friendly

Masalah dengan Protocol 50

ESP berjalan langsung di atas IP dengan protocol number 50, tanpa port TCP atau UDP. NAT memerlukan port untuk membedakan banyak koneksi di balik satu alamat IP — dan ESP tidak memilikinya. Akibatnya, dua client di balik NAT yang sama tidak bisa dibedakan, dan perubahan alamat sumber membuat checksum dan SPI tidak konsisten.

Ketika IPsec mendeteksi bahwa salah satu sisi berada di balik NAT, IKE memindahkan seluruh negosiasinya dari UDP 500 ke UDP 4500. Kunci penting: ESP asli berjalan di atas UDP 4500, bukan sebagai protocol 50.

Alurnya:

Perpindahan port saat NAT-T
Tanpa NAT : IKE (UDP 500) -> ESP (protocol 50)
Dengan NAT: IKE (UDP 4500) -> ESP dalam UDP (UDP 4500)

Cara Kerja NAT-T

Deteksi NAT dan Encapsulation

Saat Phase 1 IKEv1 selesai, kedua pihak mengirim NAT-D (NAT Discovery) payload yang berisi hash dari alamat sumber dan tujuan. Jika hash tidak cocok dengan yang dikirim peer, berarti ada NAT di antara keduanya. Maka seluruh pertukaran pindah ke UDP 4500, dan setiap paket ESP dibungkus dengan header UDP yang memberi NAT port untuk diterjemahkan.

Libreswan dan strongSwan mendeteksi dan melakukan switch ini secara otomatis. Yang perlu kalian lakukan adalah memastikan opsi yang relevan aktif.

Konfigurasi NAT-T

Libreswan

Libreswan mengaktifkan NAT-T secara default, tapi untuk remote access di belakang NAT, aktifkan nat_traversal dan force_keepalive:

NAT-T di Libreswan
conn L2TP-PSK
    nat_traversal=yes
    force_keepalive=yes

force_keepalive=yes membuat NAT router tetap memegang mapping UDP 4500 dengan mengirim keepalive berkala — tanpa ini, mapping bisa kedaluwarsa dan koneksi mati saat idle.

strongSwan

Di strongSwan, aktifkan di swanctl.conf dan kuatkan keepalive:

NAT-T di strongSwan
connections {
    L2TP-NAT {
        version = 1
        proposals = aes256-sha256-modp2048
        local-1 {
            auth = psk
        }
        remote-1 {
            auth = psk
        }
        children {
            L2TP {
                type = transport
                local_ts = udp/1701
                remote_ts = dynamic[udp]
                esp_proposals = aes128-sha1
            }
        }
    }
}
charon {
    keep_alive = 20s
    nat_keepalive = 20s
}

Nilai nat_keepalive = 20s mengirim keepalive NAT tiap 20 detik.

xl2tpd

xl2tpd tidak perlu konfigurasi khusus untuk NAT-T karena L2TP selalu berjalan di atas UDP 1701 yang sudah dibungkus ESP. Yang perlu dipastikan adalah ipsec saref = yes pada [global] untuk kompatibilitas penuh dengan NAT-T modern.

Verifikasi bahwa NAT-T aktif setelah client terhubung:

Cek NAT-T di log
sudo ipsec statusall | grep -i nat
sudo journalctl -u strongswan | grep -i nat

Baris yang menampilkan NAT-Traversal: yes atau nat_traversal mengonfirmasi bahwa koneksi memakai UDP 4500.

Info

Firewall harus membuka UDP 4500 di kedua arah, bukan hanya UDP 500. Banyak kegagalan remote access dari client di balik NAT disebabkan UDP 4500 yang tidak dibuka.

Penutup

Episode 14 menjelaskan NAT-T dari akar masalah hingga konfigurasi: ESP protocol 50 yang tidak NAT-friendly, mekanisme NAT-D dan pembungkusan ESP ke UDP 4500, opsi Libreswan dan strongSwan, serta peran pasif xl2tpd.

Inti yang harus dibawa pulang:

  • ESP protocol 50 tidak punya port sehingga tidak bisa dibedakan di NAT.
  • NAT-T membungkus ESP dalam UDP 4500 dan memindahkan IKE ke port yang sama.
  • force_keepalive di Libreswan menjaga mapping NAT tetap hidup.
  • strongSwan memakai nat_keepalive di bagian charon.
  • xl2tpd berjalan pasif karena L2TP sudah dilindungi ESP.
  • Firewall wajib membuka UDP 4500 di kedua arah.

Di episode 15 selanjutnya kita akan membahas performance tuning dan MTU — menghitung overhead L2TP/IPsec, melakukan MSS clamping, mengatur mtu interface PPP, dan mengoptimalkan kinerja dengan AES-NI serta multiprosesor.

Belajar L2TP IPsec - NAT Traversal (NAT-T) | Belajar L2TP IPsec