MSS clamping pada gateway VPN: apa yang dibetulkan dan apa yang tidak
Clamping menulis semula MSS dalam handshake TCP supaya segmen muat dalam terowong. Ia tidak pernah membetulkan UDP atau semakan path-MTU yang rosak. Tiga semakan, mengikut urutan.
Permintaan kecil berfungsi, muat turun besar tergantung, dan seseorang mencadangkan MSS clamping. Cadangan itu cukup kerap betul untuk patut dicuba mengikut urutan yang betul, dan cukup kerap salah untuk membazir sebelah petang jika anda menggunakannya secara membuta tuli. Tiga semakan di bawah memisahkan masalah saiz TCP yang sebenar daripada masalah UDP, daripada penemuan path-MTU yang rosak, dan daripada clamp yang tidak pernah melihat handshake yang sepatutnya ditulis semula.
Mulakan dengan bentuk kegagalan
Kegagalan saiz mempunyai tandatangan: sambungan terbentuk, pengesahan dan respons kecil berjaya, kemudian pemindahan terhenti tanpa had apabila ia memerlukan segmen bersaiz penuh. Halaman yang memuatkan teks tetapi tidak pernah menyiapkan imej adalah kegagalan yang sama pada skala lebih kecil. Jika tiada apa pun yang bersambung, masalahnya lebih awal di laluan dan clamping tidak akan membantu. Clamp tidak boleh membaiki handshake yang tidak pernah tiba.
Tandatangan itu wujud kerana handshake ialah tempat saiz segmen dipersetujui. Setiap pihak mengumumkan saiz segmen maksimum sebagai pilihan TCP, dan penghantar menghormati pengumuman rakan. Jika laluan tidak dapat membawa segmen sebesar itu, kegagalan muncul kemudian, apabila penghantar akhirnya mencuba satu.
Pantau pengangkutan semasa membaca gejala itu. Clamping ialah penulisan semula pilihan TCP, jadi panggilan suara atau video yang tergantung di bawah terowong yang sama bukan masalah MSS dan tidak akan pulih kerananya. Catat pengangkutan sebelum menyentuh pilihan TCP.
Nilaikan kos laluan, kemudian bandingkan dengan terowong
Dua nombor penting dan sering dikelirukan. path-MTU ialah paket terbesar yang dibawa laluan tanpa pemecahan, dan MSS yang diumumkan untuk IPv4 ialah nilai itu ditolak 40 bait pengepala IP dan TCP, atau ditolak 60 untuk IPv6. Pembungkusan terowong memakan sebahagian belanjawan sebelum paket dalam bermula.
ping -M do -s 1400 198.51.100.20
tracepath 198.51.100.20
Ping dengan bit do-not-fragment memberitahu sama ada paket sebesar muatan itu bertahan; ubah saiz sehingga ia gagal dan anda telah menemui had laluan secara empirik. Output tracepath melaporkan MTU yang ditemui di sepanjang laluan, yang lebih pantas apabila berjaya dan kurang dipercayai apabila hop pertengahan menapis prob.
Sekarang tolak overhed terowong. Pengepala IP luar, pengepala UDP dan pengepala khusus terowong semuanya keluar daripada 1500 bait yang sama, jadi MTU dalaman yang boleh digunakan pada asas Ethernet biasa lebih rendah daripada yang disarankan pautan fizikal. Jika MTU dalaman yang dikira lebih rendah daripada yang diumumkan rakan anda, anda telah menemui calon clamp sebenar dan bukan tekaan. Jika nilai yang dikira sudah melebihi pengumuman rakan, berhenti di sini dan cari di tempat lain.
Letakkan clamp di tempat handshake melintas
Clamp berfungsi dengan menulis semula pilihan MSS dalam paket SYN dan SYN-ACK semasa ia melintasi gateway. Jika peraturan terletak pada antara muka yang tidak pernah dilalui oleh mana-mana arah, rundingan selesai tanpa perubahan dan gejala kekal, sebab itu penempatan menentukan hasil lebih daripada nilai.
| Symptom | What it points to | Next check |
|---|---|---|
| Handshake completes, large transfer stalls | Segment size larger than the path can carry | Path MTU against the tunnel's effective MTU |
| Nothing connects, small or large | Routing, firewall or keying failure | Not MSS; look at the tunnel state |
| Only UDP applications stall | Datagram size or a dropped ICMP error | Platform-specific UDP handling, not clamping |
| Fixed after reconnect, returns later | Clamp applied to one direction or one interface | Rule placement and the handshake path |
Arah ialah separuh lagi. Clamping satu arah membaiki separuh aliran dan membiarkan selebihnya gagal dengan cara yang kelihatan berselang-seli, jadi gunakannya pada kedua-dua arah trafik yang diteruskan. Bentuk Linux klasik untuk antara muka terowong ialah peraturan mangle yang sepadan dengan paket SYN:
iptables -t mangle -A FORWARD -o tun0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Perhatikan apa yang sebenarnya dilakukan --clamp-mss-to-pmtu: ia memperoleh nilai daripada MTU laluan, yang bukan selalu belanjawan muatan sebenar terowong. Pada terowong berasaskan laluan di mana laluan dalaman dan laluan luaran berbeza, nilai eksplisit yang dikira dalam semakan sebelumnya lebih boleh dijangka daripada nilai automatik.
Sahkan dengan sambungan baharu dan kekalkan maklum balas
Sambungan yang telah terbentuk mengekalkan MSS yang dirundingkan, jadi ujian pada sesi yang sama tidak membuktikan apa-apa. Buka sambungan baharu selepas perubahan dan baca nilai yang dirundingkan secara langsung daripada menyimpulkannya daripada pemindahan yang kebetulan selesai.
ss -tin dst 198.51.100.20
iptables -t mangle -S | grep TCPMSS
Perintah pertama melaporkan MSS soket bersama keadaan kesesakannya, yang merupakan pengesahan terpantas bahawa clamp berkesan. Yang kedua mengesahkan bahawa peraturan yang anda fikir telah ditambah ialah peraturan yang wujud, dalam jadual tempat ia diletakkan.
Kemudian lindungi mekanisme yang tidak anda baiki. Penemuan path-MTU bergantung pada mesej ICMP fragmentation-needed sampai kepada penghantar, jadi firewall yang membuangnya akan terus merosakkan pemindahan besar walaupun dengan clamp yang betul. Benarkan mesej itu untuk laluan terowong, atau terima bahawa clamping mengimbangi dasar yang anda pilih sendiri.
Akhir sekali, tahan dorongan untuk menganggap clamp sebagai tombol penalaan. Ia mengehadkan saiz segmen, yang menjejaskan daya pemprosesan pada laluan yang tidak pernah memerlukannya. Digunakan selepas tiga semakan, ia pembaikan bersasar; digunakan dahulu, ia perubahan yang menyembunyikan kerosakan asal dan menambah pemboleh ubah kedua pada setiap ujian kemudian. Pertukaran itu wajar dibuat secara sengaja, bukan secara lalai.
Catat path-MTU yang anda ukur, overhed terowong yang anda tolak, peraturan yang anda tambah dan MSS yang anda lihat selepasnya. Empat nombor menjadikan insiden seterusnya carian, bukan siasatan.