SSH ansluter, prompten visas och sessionen dör så snart ett kommando returnerar något stort. Eko fungerar en stund, sedan går anslutningen ut medan klienten fortfarande visar tunneln som uppe. En session som är frisk tills data anländer slår oftast i en storleksgräns och inte i ett fel i SSH. Kontrollerna nedan är ordnade så att den billigaste förklaringen utesluts först.

Läs felets form innan du rör profilen

Små paket släpps igenom och fulla inte. En prompt, en banner eller ett tangenttryck får plats lätt; en kataloglista, en nedladdning eller ett inklistrat block gör det inte. Storleken där beteendet ändras är ledtråden, inte det faktum att SSH är programmet som är inblandat.

Mekanismen är upptäckt av banans MTU, som beror på återkoppling. TCP väljer en segmentstorlek, och när en router på vägen inte kan vidarebefordra paketet som uppstår ska den säga det med ett ICMP-meddelande. Inkapslingen gör det yttre paketet större än det inre, så den användbara storleken inne i en tunnel ligger alltid under den fysiska länken. Filtrera dessa ICMP-meddelanden var som helst och avsändaren får aldrig korrigeringen, fortsätter skicka fulla segment och det yttre paketet kastas utan varsel.

Mät taket från båda sidor

Jämför tunnelns MTU med den fysiska länken innan du ändrar någon av dem. En tunnel som kopierade det fysiska värdet har redan talat om var avvikelsen ligger.

Sondera inifrån tunneln med en begäran som förbjuder fragmentering, och sänk nyttolasten tills svar kommer tillbaka. Storleksargumentet räknar bara nyttolasten, så talet som fungerar ligger alltid under gränssnittets MTU. Lägg tillbaka rubrikernas storlekar om du behöver gränssnittets tal.

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

Upprepa sonderingen mot serverns publika adress från utsidan av tunneln. Om stora sonderingar också misslyckas där sitter gränsen på vägen till servern och ingen tunnelinställning flyttar den. Den jämförelsen sparar dig från att trimma en klient som aldrig var problemet. Skriv ned båda resultaten innan du öppnar en konfigurationsfil.

mssfix och fragment gör olika jobb

mssfix begränsar den segmentstorlek som TCP-anslutningar inne i tunneln annonserar under sitt handskak. Det är rätt spak för SSH, HTTPS och filkopior, därför försvinner hängningen ofta så snart den är satt. Det rör inte UDP-nyttolaster alls.

En tunnel som också bär en UDP-tjänst kan fortsätta misslyckas efter att SSH är lagat, och det resultatet förvirrar alla som antar att en inställning täcker allt.

fragment är den andra mekanismen och ett annat verktyg. Det delar överstora paket före inkapsling, gäller bara UDP-transport, lägger till overhead per datagram och är dokumenterat som sista utväg vid bruten upptäckt. Båda inställningarna måste stämma hos parterna som avslutar tunneln. När ena änden begränsar medan den andra fragmenterar uppstår varningar i loggen och ett beteende ingen kan förutse från filerna.

Att sänka gränssnittets MTU är det grova alternativet

Att minska gränssnittets MTU i båda ändar är det grova verktyget. Det säger ett mindre tal till varje inre avsändare, vilket fungerar, och det lägger den kostnaden på all trafik i stället för på de TCP-flöden som behöver den.

Välj det när tunneln bär trafik du inte kan begränsa, eller när klienten är en enhet vars profil du inte styr. Använd det symmetriskt och anteckna värdet bredvid profilen. En halvt tillämpad ändring är värre än ingen, eftersom den ser ut som en rättelse.

Testa igen med överföringen som hängde sig

Anslut igen så att inställningarna laddas, öppna en ny anslutning och upprepa kommandot som frös. Segmentstorleken förhandlas vid handskaket, så en session som överlevde återanslutningen bär fortfarande det gamla värdet. Ping är ett dåligt test här, eftersom hela felet är att små paket släpps igenom. Använd listningen, nedladdningen eller inklistringen som gick sönder.

Om hängningen består vid en mindre storlek, titta någon annanstans: en tillståndsbaserad brandvägg som låter flödet löpa ut, en dubbel adress eller en rutt som förskjuts vid återanslutning. Anteckna storleken på sonderingen som misslyckades och inställningen du ändrade, för det paret är det som gör nästa rapport användbar.

Relaterade artiklar