SSH sa pripojí, objaví sa výzva a relácia zomrie, hneď ako príkaz vráti niečo objemné. Echo ešte chvíľu funguje, potom spojenie vyprší, zatiaľ čo klient stále ukazuje tunel ako zdvihnutý. Relácia, ktorá je zdravá až do príchodu dát, zvyčajne narazí na limit veľkosti, nie na chybu SSH. Nižšie uvedené kontroly sú zoradené tak, aby sa najlacnejšie vysvetlenie vylúčilo ako prvé.

Prečítajte si tvar poruchy, kým sa dotknete profilu

Malé pakety prejdú, plné nie. Výzva, banner alebo jedno stlačenie klávesu sa vmestia ľahko; výpis adresára, sťahovanie alebo vložený blok nie. Veľkosť, pri ktorej sa správanie zmení, je stopa, nie fakt, že SSH je dotknutý program.

Mechanizmus je objavovanie MTU cesty, ktoré závisí od spätnej väzby. TCP zvolí veľkosť segmentu a keď router na ceste nemôže výsledný paket ďalej poslať, mal by to oznámiť správou ICMP. Zapuzdrenie robí vonkajší paket väčším ako vnútorný, preto je použiteľná veľkosť v tuneli vždy pod fyzickým spojom. Vyfiltrujte tie správy ICMP kdekoľvek a odosielateľ nikdy nedostane opravu, posiela ďalej plné segmenty a vonkajší paket sa zahodí bez upozornenia.

Zmerajte strop z oboch strán

Porovnajte MTU tunela s fyzickým spojom, kým zmeníte ktorýkoľvek z nich. Tunel, ktorý skopíroval fyzickú hodnotu, už vám povedal, kde je nesúlad.

Zmerajte zvnútra tunela požiadavkou bez fragmentácie, znižujte užitočné zaťaženie, kým sa nevrátia odpovede. Argument veľkosti počíta len užitočné zaťaženie, preto funkčné číslo vždy zostáva pod MTU rozhrania. Pripočítajte späť veľkosti hlavičiek, ak potrebujete číslo rozhrania.

ip link show tun0
ping -M do -s 1380 10.9.0.1

Zopakujte meranie proti verejnej adrese servera zvonku tunela. Ak veľké merania zlyhajú aj tam, limit sedí na ceste k serveru a žiadna voľba tunela s ním nepohne. To porovnanie vás ušetrí ladenia klienta, ktorý nikdy nebol problémom. Zapíšte oba výsledky, kým otvoríte konfiguračný súbor.

mssfix a fragment robia rôznu prácu

mssfix obmedzuje veľkosť segmentu, ktorú TCP spojenia v tuneli inzerujú počas svojho nadväzovania. Je to správna páka pre SSH, HTTPS a kopírovanie súborov, preto zaseknutie často zmizne, hneď ako sa nastaví. UDP zaťaženia sa vôbec nedotýka.

Tunel, ktorý nesie aj službu UDP, môže po oprave SSH naďalej zlyhávať, a ten výsledok mätie každého, kto predpokladá, že jedna voľba pokryje všetko.

fragment je iný mechanizmus a iný nástroj. Rozdeľuje príliš veľké pakety pred zapuzdrením, platí len pre transport UDP, pridáva réžiu na každý datagram a je dokumentovaný ako posledná možnosť pri pokazenom objavovaní. Obe nastavenia sa musia zhodovať u partnerov, ktorí tunel ukončujú. Keď jeden koniec obmedzuje a druhý fragmentuje, vznikajú varovania v logu a správanie, ktoré z tých súborov nikto neodhadne.

Zníženie MTU rozhrania je hrubá voľba

Znížiť MTU rozhrania na oboch koncoch je hrubý nástroj. Každému vnútornému odosielateľovi povie menšie číslo, čo funguje, a tú cenu naúčtuje celej prevádzke namiesto TCP tokom, ktoré ju potrebujú.

Zvoľte ho, keď tunel nesie prevádzku, ktorú nemôžete obmedziť, alebo keď je klient zariadenie, ktorého profil neovládate. Použite ho symetricky a zapíšte hodnotu vedľa profilu. Napoly vykonaná zmena je horšia ako žiadna, pretože vyzerá ako oprava.

Otestujte znova s prenosom, ktorý sa zasekol

Pripojte sa znova, aby sa nastavenia načítali, otvorte nové spojenie a zopakujte príkaz, ktorý zamrzol. Veľkosť segmentu sa vyjednáva pri nadväzovaní, preto relácia, ktorá prežila opätovné pripojenie, stále nesie starú hodnotu. Ping je tu slabý test, pretože celá porucha spočíva v tom, že malé pakety prejdú. Použite ten výpis, sťahovanie alebo vloženie, ktoré sa pokazilo.

Ak zaseknutie pretrváva pri menšej veľkosti, hľadajte inde: stavový firewall, ktorý tok ukončí, duplicitná adresa alebo trasa, ktorá sa pri opätovnom pripojení posunie. Zapíšte veľkosť neúspešného merania a nastavenie, ktoré ste zmenili, pretože práve tá dvojica robí ďalšiu správu užitočnou.

Súvisiace články