OpenVPN mssfix: kodėl vienas klientas užstringa didelių perdavimų metu
mssfix perrašo tunelio viduje skelbiamą TCP segmento dydį. Jis nekeičia UDP dydžio, o reikšmė reiškia tik tai, ką sako jūsų versija.
Vienas nešiojamasis kompiuteris užstringa įkeliant per tunelį, o visi kiti tame pačiame serveryje esantys įrenginiai toliau veikia. Šis modelis nurodo vieną kelią, o ne serverio konfigūraciją, ir tai įprastas įėjimas į mssfix klausimą. Parinktis gali padėti, bet tik toms TCP jungtims, kurias ji tikrai perrašo. Žinant jos aprėptį, nekeisite veikiančio serverio, kad išgelbėtumėte vieną klientą.
Ką perrašo parinktis
mssfix redaguoja didžiausią segmento dydį, skelbiamą TCP rankos paspaudimuose, einančiuose per tunelį, kad siunčiančioji pusė pasirinktų segmentus, kurie telpa į inkapsuliuotą biudžetą. Jis veikia rankos paspaudimą, o tai reiškia, kad prieš pakeitimą atidaryta jungtis išlaiko suderėtą reikšmę.
Jis nemažina UDP datagramų ir nenustato tunelio MTU. Dvi skirtingos problemos duoda tą patį simptomą: TCP siuntėjas, ignoruojantis kelio ribą, ir kelias, kuris tyliai meta didelius paketus bet kokio dydžio. mssfix sprendžia pirmąją ir nieko nedaro dėl antrosios.
Šis skirtumas paaiškina nuviliančius eksperimentus. Mažesnės reikšmės nustatymas kelyje su juoda skyle pakeičia segmento dydį, bet ne po to einantį numetimą, todėl perdavimas nepavyksta kitame taške.
Aprėptis – TCP tunelio viduje
Perrašomas tik TCP srautas. QUIC sesija, žaidimas ar programa, siunčianti didelius UDP datagramus, išsaugos savo paketų dydžius, ir jei būtent tie perdavimai užstringa, pataisymas labiau priklauso tunelio ar kelio MTU. Perskaitykite, kokį protokolą naudoja nepavykęs perdavimas, prieš imdamiesi TCP parinkties, nes netinkamas sluoksnis turi savo pataisymą.
Kryptis taip pat svarbi. Kliento nustatymas veikia srautą, kurį tas klientas siunčia į tunelį, o serveris apima srautus, kuriuos persiunčia klientams. Jei stringa tik gaunami atsisiuntimai, kliento pusės reikšmė – ne visa istorija.
Skaičius ir raktinis žodis neperkeliami
OpenVPN 2.6 bendruomenės versija priima pasirinktinį raktinį žodį po reikšmės. Su mtu skaičius apibūdina išorinio paketo dydį, įskaitant IP ir UDP antraštes; be jo argumentas laikosi kitos apskaitos konvencijos. Todėl eilutė, nukopijuota tarp versijų, neaprašo to paties paketų biudžeto. Patikrinkite vadovo puslapį, pateikiamą su ta versija, kurią iš tikrųjų vykdote, o ne mokymo medžiagą kitam leidimui.
Sintaksė atrodo taip:
mssfix 1400 mtu
Laikykite 1400 vietos žymekliu, o ne rekomendacija jūsų keliui. Išveskite reikšmę iš išmatuoto kelio ir faktiškai naudojamo inkapsuliavimo, ir atminkite, kad senesnių versijų ar kitų implementacijų klientai gali atmesti arba kitaip interpretuoti raktinį žodį.
Pirmiausia patvirtinkite viename kliente
Išmatuokite kelią iš nepavykusios mašinos prieš ką nors keisdami. Naudingoji apkrova, kurią kelias gali pernešti be fragmentacijos, yra skaičius, kurio ieškote:
ping -M do -s 1472 10.8.0.1
ping -M do -s 1400 10.8.0.1
Pirmasis bandymas telpa į 1500 baitų paketą, kai pridedama 28 baitai antraščių. Jei jis nepavyksta su fragmentacijos klaida, o mažesnis pavyksta, tinkamas dydis yra kažkur tarp jų, o tunelio pridėtinės išlaidos atimamos iš viršaus.
Tada pakartokite užstrigusį perdavimą naujoje jungtyje ir palyginkite. Jei vienas klientas pagerėja, o kiti lieka nepaliesti, radote problemos aprėptį. Jei stringa visi klientai, peržiūrėti reikia serverio pusės reikšmę. Nė vienas rezultatas nepateisina pakeitimo aparatūroje, kuri niekada nebuvo nepavykusiame kelyje.