Overhead IPsec: mode, NAT-T, dan algoritme semuanya mengubahnya
Satu angka overhead yang diterbitkan hanya menjelaskan satu enkapsulasi pada satu jalur. Jumlahkan header yang benar-benar dinegosiasikan tunnel Anda, lalu ukur jalurnya.
Di suatu tempat dalam sebuah panduan ada angka, biasanya antara enam puluh dan delapan puluh byte, yang seseorang kurangkan dari 1500 untuk mendapatkan MTU antarmuka. Angka itu menjelaskan satu enkapsulasi tertentu pada satu jalur tertentu. Ubah mode, keluarga alamat luar, cipher, atau keberadaan NAT, dan aritmetikanya tidak lagi berlaku untuk tunnel Anda.
Angka itu berasal dari tunnel yang berbeda
Overhead bukanlah sifat IPsec secara abstrak. Itu sifat paket yang benar-benar dibangun: mode yang dinegosiasikan, header luar, header perlindungan, padding, bidang integritas, dan mungkin pembungkus UDP tambahan.
Angka yang dikutip untuk mode transport dengan IPv4 dan tanpa NAT menjelaskan paket yang lebih kecil daripada mode tunnel dengan IPv6 di bawah lintasan NAT. Keduanya benar untuk kasusnya masing-masing. Menyalin salah satunya ke penerapan yang berbeda adalah cara orang berakhir dengan MTU yang mematahkan transfer besar. Kegagalannya senyap karena permintaan kecil tetap berjalan.
Jumlahkan lapisan yang benar-benar ada
Mulai dari header IP luar dan bergerak ke dalam. Dalam mode tunnel, paket asli ada di dalam, jadi header luar adalah tambahan, bukan pengganti. RFC 4303 menjelaskan header ESP, padding, dan data integritas yang mengikutinya.
| Layer | What it adds | When it applies |
|---|---|---|
| Outer IP header | 20 bytes for IPv4, 40 for IPv6 | Always, and 40 rather than 20 if the outer path is v6 |
| ESP header | 8 bytes of SPI and sequence number | Always |
| Block cipher IV | 8 to 16 bytes depending on the transform | When the negotiated cipher uses one |
| Padding and trailer | Padding to the block size, plus two trailer bytes | Always, and the amount varies with payload length |
| Integrity data | 12 to 16 bytes for common authenticated ciphers | When integrity protection is negotiated |
| UDP encapsulation | 8 bytes | NAT traversal on port 4500, which is common for clients behind NAT |
Tidak satu pun dari baris itu konstan di antara penerapan, dan baris padding bahkan tidak konstan dalam satu penerapan. Itulah seluruh alasan satu angka overhead yang diterbitkan mengecewakan.
Dua situs bisa berbeda pendapat tentang tunnel yang sama
Paket yang dilindungi tetap harus melintasi jalur luar, dan jalur luar tidak sama di semua tempat. Tautan akses PPPoE membawa lebih sedikit daripada segmen Ethernet yang bersih. Jaringan seluler bisa menyusut lebih jauh, dan penyedia yang menerowongkan trafiknya sendiri menambahkan enkapsulasi lain yang tidak disebut siapa pun. Tunnel yang berfungsi di satu tautan dan gagal di tautan lain sedang menjelaskan tautan kedua, bukan protokolnya.
Kedua arah juga bisa berbeda. Rute asimetris dapat memberi Anda unggahan yang berfungsi dan unduhan yang macet, yang terbaca sebagai masalah aplikasi sampai Anda melihat ukuran paket alih-alih keterjangkauan. Ping kecil yang berhasil membuktikan sangat sedikit tentang respons berukuran penuh.
Ukur, bukan mengurangi
Temukan datagram terbesar yang bertahan melewati jalur. Lalu bandingkan dengan nilai yang dilaporkan antarmuka:
ip link show eth0 | grep -o 'mtu [0-9]*' ip xfrm state list ping -M do -s 1400 198.51.100.7 ping -M do -s 1372 198.51.100.7 tcpdump -ni any -c 20 'esp or udp port 4500'
Turunkan ukuran ping sampai balasan datang, dan anggap nilai terbesar yang berfungsi sebagai anggaran untuk jalur itu. Keluaran xfrm memberi tahu mode dan algoritme mana yang dinegosiasikan, dan itulah masukan bagi setiap perhitungan yang jujur. Tangkapan paket memastikan apakah ESP atau ESP terbungkus UDP yang ada di kabel, dan itu menyelesaikan pertanyaan NAT tanpa menebak.
Sisihkan satu nilai untuk bidang kendali juga. Paket jabat tangan IKE punya struktur berbeda dari paket data, jadi ukuran yang diturunkan dari tangkapan jabat tangan bukan MTU bidang data.
Letakkan angka itu di tempatnya
Untuk TCP melalui tunnel, pembatasan MSS sering menjadi kendali yang paling tidak invasif, karena ia mengurangi yang dikirim ujung-ujung tanpa mengubah tunnel itu sendiri. Untuk tunnel berbasis rute, tetapkan MTU antarmuka tunnel dengan sengaja dan dokumentasikan alasannya. Melakukan keduanya sekaligus lalu mengukur tidak memberi Anda informasi tentang mana yang membantu.
Simpan bersama di tiket: mode yang dinegosiasikan, keluarga luar, kondisi NAT, dan gejala yang dapat direproduksi. Rangkaian empat fakta yang tercatat mengalahkan konstanta yang diingat, dan hanya versi ini yang bertahan sampai pemutakhiran klien berikutnya.