Pingy prechádzajú, veľké prenosy zamŕzajú a tunel sa hlási ako zdravý. Niekto zníži MTU rozhrania, iný obmedzí MSS a problém niekedy zmizne z dôvodov, ktoré nikto nezapíše. Tie dve čísla opisujú rôzne objekty, takže zmena nesprávneho prináša opravu, ktorá vyzerá ako šťastie. Tu je postup: určite vrstvu, použite zodpovedajúcu úpravu a potom testujte na novom spojení.

Dve čísla, dva objekty

MTU patrí spojeniu alebo rozhraniu: je to najväčší paket, ktorý možno odovzdať bez rozdelenia. MSS patrí TCP: je to najväčšie množstvo TCP nákladu, ktoré môže segment niesť, a vylučuje hlavičky TCP aj IP. Na bežnom spojení Ethernet s IPv4 dáva MTU 1500 bajtov známe MSS 1460 bajtov. Tieto čísla opisujú rôzne vrstvy a vymieňajú sa rôznymi mechanizmami. Zameniť ich je ľahké, pretože obe sa merajú v bajtoch a obe sú blízko 1500.

Jedno prichádza ako nastavenie rozhrania. Druhé prichádza ako voľba vnútri segmentu SYN, dohodnutá medzi koncami, ktoré vaše rozhranie nikdy nevidia.

Kam dopadá vonkajšia réžia

VPN vkladá vnútorný paket do iného a vonkajší paket sa musí zmestiť do fyzickej cesty. Hlavičky zapuzdrenia, vonkajšia IP hlavička, transportná hlavička a akákoľvek autentifikačná značka spotrebúvajú bajty, ktoré vnútorný paket nemôže použiť. Ponechajte tunelové rozhranie na 1500 a vonkajší paket pravidelne prekročí to, čo cesta unesie. S nastaveným bitom 'nefragmentovať' ho smerovač zahodí a mal by poslať späť chybu ICMP; ak je táto chyba filtrovaná, odosielateľ sa to nikdy nedozvie.

Preto porucha vyzerá selektívne. Malé požiadavky sa dokončia a všetko, čo naplní segment, sa zasekne, lebo sa zahadzujú iba veľké pakety. Tunel, ktorý prepustí ping, nie je tunel, ktorý prenáša dáta.

Obmedzovanie MSS a kde platí

Obmedzovanie MSS prepisuje hodnotu v segmente SYN, keď prechádza zvoleným bodom, takže oba konce zvolia menší náklad, bez toho aby vedeli prečo. V Linuxe je to cieľ tabuľky mangle uplatnený explicitným pravidlom a musí zasiahnuť pakety SYN v smere, ktorý chcete. Obmedzte ho na tunelové rozhranie a rozsah adries, pretože široké pravidlo mení správanie prevádzky, ktorá do tunela nikdy nevstúpi.

Účinok je iba na TCP. UDP aplikácia, relácia QUIC a akýkoľvek protokol, ktorý si stavia vlastné datagramy, zostávajú nedotknuté.

Diagnostika na pevnej ceste

Držte vždy jednu premennú. Testujte paketom, ktorého veľkosť si zvolíte sami, a nastavte príznak 'nefragmentovať', aby jadro výsledok ohlásilo, namiesto toho aby ho skrylo.

Zaznamenajte, kde porucha začína: vnútri tunela, na tunelovom rozhraní alebo na fyzickej ceste po zapuzdrení. Potom zmeňte jedno číslo a zopakujte ten istý test, nie iný. Existujúce spojenia si zachovávajú dohodnuté MSS, takže zmena politiky je viditeľná len na novom spojení, a preto uložená stránka nič nedokazuje ani v jednom smere. Ak jedna veľká nahrávka začne fungovať, naučili ste sa o tej ceste, a nie o každom protokole na nej.

Čo ktorá zmena neopraví

Zníženie MTU rozhrania nemení MSS už nadviazanej relácie. Obmedzenie MSS nepomôže toku UDP a neopraví cestu, kde sa chyby ICMP filtrujú len jedným smerom. Každá zmena opraví jednu triedu problémov a ostatné ponechá presne také, aké boli.

Zapíšte, ktorú úpravu ste použili, kde a ktorý test ukázal rozdiel, inak nasledujúci inžinier použije obe a stratí schopnosť povedať, ktorá mala význam. Ak je obmedzenie skutočné a trvalé, uprednostnite tunelové MTU, ktoré ho odráža, pred obmedzením, ktoré ho skrýva. Ak obmedzovať musíte, ponechajte pravidlo úzke a okomentované, pretože nevysvetlené pravidlo mangle sa predvolene stáva trvalým.

Súvisiace články