MSS-clamping op in VPN-gateway: wat it reparearret en wat net
Clamping skriuwt de MSS yn TCP-handshakes oer, sadat segminten yn 'e tunnel passe. It reparearret nea UDP of in stikken path-MTU-kontrôle. Trije kontrôles, yn folchoarder.
Lytse oanfragen wurkje, grutte downloads hingje, en immen stelt MSS-clamping foar. Dy suggestje is faak genôch goed om it yn 'e goede folchoarder te probearjen, en faak genôch ferkeard om in middei te fergriemen as jo it blyn tapasse. De trije kontrôles hjirûnder skiede in echt TCP-grutteprobleem fan in UDP-probleem, fan in stikken path-MTU-ûntdekking en fan in clamp dy't nea de handshake sjocht dy't er oerskriuwe moat.
Begjin mei de foarm fan 'e flater
In grutteflater hat in hantekening: de ferbining komt ta stân, autentikaasje en lytse antwurden slagje, en dan stiet in oerdracht foar altyd stil sadree't er in segmint fan folsleine grutte nedich hat. Siden dy't tekst lade mar nea in byld ôfmeitsje, binne deselde flater op lytsere skaal. As der hielendal neat ferbynt, leit it probleem earder op it paad en sil clamping net helpe. In clamp kin in handshake net reparearje dy't nea oankaam.
De hantekening bestiet omdat de handshake it plak is dêr't de segmintgrutte ôfpraat wurdt. Eltse kant kundiget in maksimale segmintgrutte oan as TCP-opsje, en ferstjoerders respektearje de oankundiging fan 'e oare kant. As it paad sa'n grut segmint net drage kin, ferskynt de flater letter, as de ferstjoerder it úteinlik probearret.
Hâld it ferfier yn byld by it lêzen fan dat symptoom. Clamping is in oerskriuwung fan in TCP-opsje, dus in spraak- of fideoprop dat ûnder deselde tunnel stil stiet is gjin MSS-probleem en sil der net better fan wurde. Skriuw it ferfier op foardat jo in TCP-opsje oanreitsje.
Priizgje it paad, fergelykje it dan mei de tunnel
Twa getallen binne wichtich en wurde faak trochinoar helle. De path-MTU is it grutste pakket dat it paad sûnder fragmintearring draacht, en de oankundige MSS foar IPv4 is dy wearde minus de 40 bytes IP- en TCP-koppen, of minus 60 foar IPv6. Tunelynkapseling fret in part fan it budzjet foardat it binnenste pakket sels begjint.
ping -M do -s 1400 198.51.100.20
tracepath 198.51.100.20
De ping mei de do-not-fragment-bit fertelt jo oft in pakket fan dy grutte oerlibbet; pas de grutte oan oant it misgiet en jo hawwe de paadgrins empirysk fûn. De tracepath-útgong meldt de MTU dy't ûnderweis ûntdutsen is, wat flugger is as it wurket en minder betrouber as in tuskenhop de probes filteret.
Lûk no de oerhead fan 'e tunnel ôf. In bûtenste IP-kop, in UDP-kop en in tunnelspezifike kop komme allegear út deselde 1500 bytes, dus de brûkbere binnenste MTU op in typyske Ethernet-ûndergrûn is leger as de fysike ferbining tinken docht. As de berekkene binnenste MTU leger is as wat jo pearen oankundigje, hawwe jo in echte clamp-kandidaat fûn en gjin gissing. As de berekkene wearde al boppe de oankundiging fan 'e pearen leit, stopje hjir en sjoch earne oars.
Pleatsje de clamp dêr't de handshake foarby komt
In clamp wurket troch de MSS-opsje yn 'e SYN- en SYN-ACK-pakketten oer te skriuwen wylst se de gateway passearje. As de regel op in ynterface sit dy't gjin fan beide rjochtingen ea passearret, einiget de ûnderhanneling ûnferoare en bliuwt it symptoom, dêrom beslút it pleatsen it resultaat mear as de wearde.
| 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 |
De rjochting is de oare helte. Clampen fan ien rjochting reparearret de helte fan 'e streams en lit de rest misgje op in wize dy't tuskenskoft liket, dus pas it op beide rjochtingen fan it trochstjoerde ferkear ta. De klassike Linux-foarm foar in tunnel-ynterface is in mangle-regel dy't SYN-pakketten treft:
iptables -t mangle -A FORWARD -o tun0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Merk op wat --clamp-mss-to-pmtu eins docht: it liedt de wearde ôf fan 'e MTU fan 'e rûte, wat net altyd it echte ladingbudzjet fan 'e tunnel is. Op in rûte-basearre tunnel dêr't de binnenste rûte en it bûtenste paad ferskille, is in eksplisite wearde berekkene yn 'e foarige kontrôle foarsisberder as in automatyske.
Ferifiearje mei in nije ferbining en hâld de feedback libben
In oanleine ferbining hâldt de MSS dy't er ûnderhannele hat, dus testen yn deselde sesje bewiist neat. Iepenje in nije ferbining nei de feroaring en lês de ûnderhannele wearde direkt, ynstee fan dy ôf te lieden fan in oerdracht dy't tafallich ôfkomt.
ss -tin dst 198.51.100.20
iptables -t mangle -S | grep TCPMSS
It earste kommando meldt de MSS fan 'e socket tegearre mei de oerlêststeat, wat de fluchste befêstiging is dat de clamp wurke hat. It twadde befêstiget dat de regel dy't jo tinke tafoege te hawwen de regel is dy't bestiet, yn 'e tabel dêr't er pleatst is.
Beskoattelje dan it meganisme dat jo net reparearre hawwe. path-MTU-ûntdekking hinget ôf fan it berikken fan ICMP-fragmentation-needed-berjochten by de ferstjoerder, dus in firewol dy't se weilûkt sil grutte oerdrachten bliuwe brekken sels mei in korrekte clamp. Tastean dy berjochten foar it tunnelpaad, of akseptearje dat clamping in belied kompensearret dat jo keazen hawwe.
Wjerstean úteinlik de ferlieding om de clamp as in ôfstimknoop te behanneljen. It beheint de segmintgrutte, wat trochset kostet op paden dy't it nea nedich hiene. Tastien nei de trije kontrôles is it in rjochte reparaasje; tastien earst is it in feroaring dy't de oarspronklike flater ferberget en in twadde fariabele tafoeget oan elke lettere test. Dy ruil is de muoite wurdich bewust te dwaan, net by stilswijen.
Skriuw de path-MTU op dy't jo metten hawwe, de tunnel-oerhead dy't jo ôflutsen, de regel dy't jo tafoege hawwe en de MSS dy't jo dêrnei seagen. Fjouwer getallen meitsje it folgjende foarfal in opsocht taak ynstee fan in ûndersyk.