MSS ierobežošana VPN vārtejā: ko tas salabo un ko ne
Ierobežošana pārraksta MSS TCP rokasspiedienos, lai segmenti ietilptu tunelī. Tas nekad nesalabo UDP vai bojātu path-MTU pārbaudi. Trīs pārbaudes, secībā.
Mazi pieprasījumi strādā, lieli lejupielādes iestrēgst, un kāds ierosina MSS ierobežošanu. Šis ieteikums ir pietiekami bieži pareizs, lai būtu vērts to izmēģināt pareizajā secībā, un pietiekami bieži nepareizs, lai, lietojot to akli, pazaudētu pēcpusdienu. Trīs pārbaudes zemāk atdala īstu TCP izmēra problēmu no UDP problēmas, no bojātas path-MTU noteikšanas un no ierobežojuma, kas nekad neredz rokasspiedienu, kuru tam vajadzētu pārrakstīt.
Sāciet ar kļūmes formu
Izmēra kļūmei ir paraksts: savienojums tiek izveidots, autentifikācija un mazas atbildes izdodas, un tad pārsūtīšana apstājas uz nenoteiktu laiku, tiklīdz tai vajag pilna izmēra segmentu. Lapas, kas ielādē tekstu, bet nekad nepabeidz attēlu, ir tā pati kļūme mazākā mērogā. Ja nekas vispār nepievienojas, problēma ir agrāk ceļā, un ierobežošana nepalīdzēs. Ierobežojums nevar salabot rokasspiedienu, kas nekad nav ieradies.
Paraksts pastāv tāpēc, ka rokasspiediens ir vieta, kur vienojas par segmenta izmēru. Katra puse paziņo maksimālo segmenta izmēru kā TCP opciju, un sūtītāji respektē otras puses paziņojumu. Ja ceļš nevar pārvadāt tik lielu segmentu, kļūme parādās vēlāk, kad sūtītājs beidzot pamēģina tādu.
Turiet transportu acu priekšā, lasot šo simptomu. Ierobežošana ir TCP opcijas pārrakstīšana, tāpēc balss vai video zvans, kas iestrēgst zem tā paša tuneļa, nav MSS problēma un no tā neuzlabosies. Pierakstiet transportu, pirms aiztiekat TCP opciju.
Novērtējiet ceļu, tad salīdziniet to ar tuneli
Divi skaitļi ir svarīgi, un tos bieži jauc. path-MTU ir lielākais pakets, ko ceļš pārvadā bez sadalīšanas, un IPv4 paziņotais MSS ir šī vērtība mīnus IP un TCP galveņu 40 baiti, vai mīnus 60 IPv6 gadījumā. Tuneļa iekapsulēšana patērē daļu budžeta, pirms iekšējais pakets vispār sākas.
ping -M do -s 1400 198.51.100.20
tracepath 198.51.100.20
Ping ar do-not-fragment bitu pasaka, vai šāda lietderīgās kravas izmēra pakets izdzīvo; mainiet izmēru, līdz tas neizdodas, un esat empīriski atraduši ceļa robežu. tracepath izvade ziņo maršrutā atklāto MTU, kas ir ātrāk, ja tas strādā, un mazāk uzticami, ja starpsolī filtrē zondes.
Tagad atņemiet tuneļa izmaksas. Ārējā IP galvene, UDP galvene un tunelim raksturīgā galvene visas nāk no tiem pašiem 1500 baitiem, tāpēc izmantojamais iekšējais MTU tipiskā Ethernet pamatnē ir zemāks, nekā liecina fiziskā saite. Ja aprēķinātais iekšējais MTU ir zemāks par to, ko paziņo jūsu partneri, esat atradis īstu ierobežošanas kandidātu, nevis minējumu. Ja aprēķinātā vērtība jau pārsniedz partneru paziņojumu, apstājieties šeit un meklējiet citur.
Novietojiet ierobežojumu tur, kur iet rokasspiediens
Ierobežojums darbojas, pārrakstot MSS opciju SYN un SYN-ACK paketos, kad tie šķērso vārteju. Ja noteikums atrodas saskarnē, kuru neviena virziena plūsma nekad nešķērso, sarunas pabeidzas nemainītas un simptoms saglabājas, tāpēc izvietojums izšķir rezultātu vairāk nekā vērtība.
| 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 |
Virziens ir otra puse. Viena virziena ierobežošana salabo pusi plūsmu un atstāj pārējās neizdevušās tā, ka tas izskatās pārtraukti, tāpēc piemērojiet to abiem pārsūtītās plūsmas virzieniem. Klasiskā Linux forma tuneļa saskarnei ir mangle noteikums, kas atbilst SYN paketiem:
iptables -t mangle -A FORWARD -o tun0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Ievērojiet, ko --clamp-mss-to-pmtu patiešām dara: tas iegūst vērtību no maršruta MTU, kas ne vienmēr ir īstais tuneļa lietderīgās kravas budžets. Maršrutā balstītā tunelī, kur iekšējais maršruts un ārējais ceļš atšķiras, iepriekšējā pārbaudē aprēķinātā skaidrā vērtība ir paredzamāka nekā automātiskā.
Pārbaudiet ar jaunu savienojumu un uzturiet atgriezenisko saiti dzīvu
Izveidots savienojums patur vienoto MSS, tāpēc testēšana tajā pašā sesijā neko nepierāda. Pēc izmaiņām atveriet jaunu savienojumu un nolasiet vienoto vērtību tieši, nevis seciniet to no pārsūtīšanas, kas nejauši pabeidzas.
ss -tin dst 198.51.100.20
iptables -t mangle -S | grep TCPMSS
Pirmā komanda ziņo ligzdas MSS kopā ar tās sastrēguma stāvokli, kas ir ātrākais apstiprinājums, ka ierobežojums iedarbojās. Otrā apstiprina, ka noteikums, kuru domājat esam pievienojuši, ir esošais noteikums tajā tabulā, kur tas tika ievietots.
Pēc tam aizsargājiet mehānismu, kuru neizlabojāt. path-MTU noteikšana ir atkarīga no tā, vai ICMP fragmentation-needed ziņojumi sasniedz sūtītāju, tāpēc ugunsmūris, kas tos izmet, turpinās lauzt lielus pārsūtījumus pat ar pareizu ierobežojumu. Atļaujiet šos ziņojumus tuneļa ceļam vai pieņemiet, ka ierobežošana kompensē politiku, kuru izvēlējāties.
Visbeidzot, pretojieties kārdinājumam uzskatīt ierobežojumu par regulēšanas pogu. Tas ierobežo segmenta izmēru, kas izmaksā caurlaidību ceļos, kuriem tas nekad nebija vajadzīgs. Piemērots pēc trim pārbaudēm, tas ir mērķēts remonts; piemērots pirmais, tas ir izmaiņa, kas slēpj sākotnējo kļūmi un pievieno otru mainīgo katram vēlākam testam. Šo darījumu ir vērts veikt apzināti, nevis pēc noklusējuma.
Pierakstiet izmērīto path-MTU, atņemtās tuneļa izmaksas, pievienoto noteikumu un pēc tam redzēto MSS. Četri skaitļi pārvērš nākamo incidentu meklēšanā, nevis izmeklēšanā.