SSH forbinder, prompten vises, og sessionen dør, så snart en kommando returnerer noget omfangsrigt. Echo virker lidt endnu, derefter udløber forbindelsen, mens klienten stadig viser tunnelen som oppe. En session, der er sund, indtil data ankommer, rammer normalt en grænse for størrelse snarere end en fejl i SSH. Kontrollerne nedenfor er ordnet, så den billigste forklaring elimineres først.

Læs fejlens form, før du rører profilen

Små pakker slipper igennem, fulde gør ikke. En prompt, et banner eller et enkelt tastetryk passer let; en mappeliste, en download eller en indsat blok gør ikke. Den størrelse, hvor adfærden ændrer sig, er sporet, ikke det faktum, at SSH er programmet.

Mekanismen er opdagelse af stiens MTU, som afhænger af feedback. TCP vælger en segmentstørrelse, og når en router undervejs ikke kan videresende den resulterende pakke, bør den sige det med en ICMP-besked. Indkapsling gør den ydre pakke større end den indre, så den brugbare størrelse inde i en tunnel er altid under det fysiske led. Filtrer de ICMP-beskeder hvor som helst, og afsenderen får aldrig rettelsen, fortsætter med at sende fulde segmenter, og den ydre pakke kasseres uden varsel.

Mål loftet fra begge sider

Sammenlign tunnelens MTU med det fysiske led, før du ændrer nogen af dem. En tunnel, der har kopieret den fysiske værdi, har allerede fortalt, hvor uoverensstemmelsen ligger.

Sondér indefra tunnelen med en anmodning, der forbyder fragmentering, og sænk nyttelasten, indtil svar kommer tilbage. Størrelsesargumentet tæller kun nyttelasten, så det fungerende tal er altid under interface-MTU'en. Læg headernes størrelser til igen, hvis du har brug for interface-tallet.

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

Gentag sonderingen mod serverens offentlige adresse udefra tunnelen. Hvis store sonderinger også fejler der, sidder grænsen på vejen til serveren, og ingen tunnelindstilling flytter den. Den sammenligning sparer dig for at justere en klient, der aldrig var problemet. Skriv begge resultater ned, før du åbner en konfigurationsfil.

mssfix og fragment gør forskellige ting

mssfix begrænser den segmentstørrelse, som TCP-forbindelser inde i tunnelen annoncerer under deres håndtryk. Det er den rigtige håndtag for SSH, HTTPS og filkopier, og derfor forsvinder hængningen ofte, når den er sat. Det rører slet ikke UDP-nyttelaster.

En tunnel, der også bærer en UDP-tjeneste, kan fortsætte med at fejle, efter SSH er rettet, og det resultat forvirrer enhver, der antager, at én indstilling dækker alt.

fragment er den anden mekanisme og et andet værktøj. Det deler overdimensionerede pakker før indkapsling, gælder kun for UDP-transport, tilføjer overhead per datagram og er dokumenteret som en sidste udvej ved brudt opdagelse. Begge indstillinger skal stemme overens hos de parter, der afslutter tunnelen. Når den ene ende begrænser, mens den anden fragmenterer, giver det advarsler i loggen og adfærd, som ingen kan forudsige ud fra filerne.

At sænke interface-MTU'en er den grove løsning

At reducere interface-MTU'en i begge ender er det grove værktøj. Det fortæller hver indre afsender et mindre tal, hvilket virker, og det lægger den omkostning på al trafik i stedet for på de TCP-strømme, der har brug for den.

Vælg det, når tunnelen bærer trafik, du ikke kan begrænse, eller når klienten er et apparat, hvis profil du ikke styrer. Anvend det symmetrisk, og notér værdien ved siden af profilen. En halvt anvendt ændring er værre end ingen, fordi den ligner en rettelse.

Test igen med den overførsel, der hang

Genopret forbindelsen, så indstillingerne indlæses, åbn en ny forbindelse, og gentag den kommando, der frøs. Segmentstørrelse forhandles ved håndtrykket, så en session, der overlevede genopretningen, bærer stadig den gamle værdi. En ping er en dårlig test her, fordi hele fejlen er, at små pakker slipper igennem. Brug den liste, den download eller den indsættelse, der brød sammen.

Hvis hængningen fortsætter ved en mindre størrelse, se et andet sted: en stateful firewall, der udløber strømmen, en dobbelt adresse eller en rute, der flytter sig ved genopretning. Skriv den sonderingsstørrelse, der fejlede, og den indstilling, du ændrede, for det par er det, der gør den næste rapport nyttig.

Relaterede artikler