MSS clamping sa isang VPN gateway: ano ang inaayos at ano ang hindi
Ang clamping ay nagsusulat muli ng MSS sa TCP handshakes upang magkasya ang mga segment sa tunnel. Hindi nito kailanman inaayos ang UDP o sirang path-MTU check. Tatlong pagsusuri, ayon sa pagkakasunod-sunod.
Gumagana ang maliliit na kahilingan, nagsasabit ang malalaking download, at may nagmumungkahi ng MSS clamping. Tama ang mungkahing iyon nang madalas sapat upang sulit subukan sa tamang pagkakasunod-sunod, at mali nang madalas sapat upang masayang ang isang hapon kung bulag mong ilalapat ito. Hinihiwalay ng tatlong pagsusuri sa ibaba ang tunay na problema sa laki ng TCP mula sa problema sa UDP, sa sirang path-MTU discovery, at sa clamp na hindi kailanman nakikita ang handshake na dapat nitong isulat muli.
Magsimula sa hugis ng kabiguan
Ang kabiguan sa laki ay may pirma: nagtatatag ang koneksyon, nagtagumpay ang authentication at maliliit na tugon, at pagkatapos ay tumitigil nang walang hanggan ang isang transfer kapag kailangan na ng segment na buong laki. Ang mga pahinang naglo-load ng teksto ngunit hindi kailanman tinatapos ang larawan ay parehong kabiguan sa mas maliit na sukat. Kung wala talagang kumokonekta, mas maaga ang problema sa landas at hindi makakatulong ang clamping. Hindi kayang ayusin ng clamp ang handshake na hindi dumating.
Umiiral ang pirmang ito dahil sa handshake pinagkasunduan ang laki ng segment. Nagpapahayag ang bawat panig ng pinakamataas na laki ng segment bilang TCP option, at iginagalang ng mga nagpapadala ang pagpapahayag ng kabilang panig. Kung hindi kayang dalhin ng landas ang ganoong kalaking segment, mas huli lumalabas ang kabiguan, kapag sinubukan na ito ng nagpapadala.
Panatilihing nakikita ang transport habang binabasa ang sintomas na iyon. Ang clamping ay muling pagsulat ng TCP option, kaya ang voice o video call na nagsasabit sa ilalim ng parehong tunnel ay hindi problema sa MSS at hindi bubuti dahil dito. Isulat ang transport bago hawakan ang isang TCP option.
Timbangin ang landas, pagkatapos ihambing sa tunnel
Dalawang numero ang mahalaga at madalas silang napagpapalit. Ang path-MTU ay ang pinakamalaking packet na dinadala ng landas nang walang fragmentation, at ang inihayag na MSS para sa IPv4 ay ang halagang iyon na binawasan ng 40 byte ng IP at TCP headers, o binawasan ng 60 para sa IPv6. Kinakain ng encapsulation ng tunnel ang bahagi ng badyet bago pa man magsimula ang panloob na packet.
ping -M do -s 1400 198.51.100.20
tracepath 198.51.100.20
Sinasabi ng ping na may do-not-fragment bit kung nabubuhay ang packet sa ganoong laki ng payload; baguhin ang laki hanggang mabigo at empirikal mong natagpuan ang hangganan ng landas. Ang output ng tracepath ay nag-uulat ng MTU na natuklasan sa ruta, na mas mabilis kapag gumagana at hindi gaanong maaasahan kapag ang intermediate hop ay nagsasala ng mga probe.
Ngayon ibawas ang overhead ng tunnel. Ang panlabas na IP header, isang UDP header at isang header na tiyak sa tunnel ay lahat nagmumula sa parehong 1500 byte, kaya ang magagamit na panloob na MTU sa karaniwang Ethernet underlay ay mas mababa kaysa sa iminumungkahi ng pisikal na link. Kung ang kinakalkulang panloob na MTU ay mas mababa kaysa sa inihahayag ng iyong mga peer, natagpuan mo ang tunay na kandidato sa clamp at hindi haka-haka. Kung ang kinakalkulang halaga ay mas mataas na kaysa sa pagpapahayag ng mga peer, tumigil dito at tumingin sa iba.
Ilagay ang clamp kung saan dumadaan ang handshake
Gumagana ang clamp sa pamamagitan ng muling pagsulat ng MSS option sa SYN at SYN-ACK packets habang tinatawid nila ang gateway. Kung ang panuntunan ay nasa interface na hindi kailanman tinatawid ng alinman sa dalawang direksyon, natatapos ang negosasyon nang walang pagbabago at nananatili ang sintomas, kaya ang paglalagay ang nagpapasya sa resulta higit sa halaga.
| 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 |
Ang direksyon ang kabilang kalahati. Ang clamping sa isang direksyon ay nag-aayos ng kalahati ng mga flow at iniiwan ang iba na bumabagsak sa paraang mukhang pabagu-bago, kaya ilapat ito sa parehong direksyon ng forwarded traffic. Ang klasikong anyo sa Linux para sa tunnel interface ay isang mangle rule na tumutugma sa SYN packets:
iptables -t mangle -A FORWARD -o tun0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Pansinin kung ano talaga ang ginagawa ng --clamp-mss-to-pmtu: kumukuha ito ng halaga mula sa MTU ng ruta, na hindi laging tunay na badyet ng payload ng tunnel. Sa tunnel na nakabatay sa ruta kung saan magkaiba ang panloob na ruta at panlabas na landas, ang tahasang halagang kinakalkula sa naunang pagsusuri ay mas mahuhulaan kaysa sa awtomatiko.
I-verify gamit ang bagong koneksyon, at panatilihing buhay ang feedback
Pinapanatili ng naitatag na koneksyon ang MSS na napagkasunduan nito, kaya walang pinatutunayan ang pagsubok sa parehong session. Magbukas ng bagong koneksyon pagkatapos ng pagbabago at basahin ang napagkasunduang halaga nang direkta sa halip na hulaan ito mula sa isang transfer na nagkataong natapos.
ss -tin dst 198.51.100.20
iptables -t mangle -S | grep TCPMSS
Ang unang command ay nag-uulat ng MSS ng socket kasama ang estado ng congestion, na siyang pinakamabilis na kumpirmasyon na umiral ang clamp. Ang pangalawa ay nagpapatunay na ang panuntunang inaakala mong idinagdag mo ay ang panuntunang umiiral, sa talahanay kung saan ito inilagay.
Pagkatapos protektahan ang mekanismong hindi mo inayos. Ang path-MTU discovery ay nakadepende sa pagdating ng ICMP fragmentation-needed messages sa nagpapadala, kaya ang firewall na nagtatapon sa mga ito ay patuloy na sisirain ang malalaking transfer kahit may tamang clamp. Payagan ang mga mensaheng iyon para sa landas ng tunnel, o tanggapin na ang clamping ay nagbabayad-puri sa isang patakarang pinili mo.
Sa huli, labanan ang tukso na ituring ang clamp na tuning knob. Nililimitahan nito ang laki ng segment, na nagkakahalaga ng throughput sa mga landas na hindi kailanman nangailangan nito. Kapag inilapat pagkatapos ng tatlong pagsusuri ito ay naka-target na pagkukumpuni; kapag inilapat muna ito ay pagbabagong nagtatago ng orihinal na depekto at nagdaragdag ng pangalawang variable sa bawat susunod na pagsubok. Ang palitang iyon ay dapat gawin nang sinasadya, hindi bilang default.
Isulat ang path-MTU na sinukat mo, ang overhead ng tunnel na ibinawas mo, ang panuntunang idinagdag mo at ang MSS na nakita mo pagkatapos. Apat na numero ang gumagawa sa susunod na insidente na paghahanap sa halip na imbestigasyon.