SSH henger over OpenVPN? Mål banens MTU først
Ekko virker, så låser en listing økten for godt. Mål taket fra begge sider før du rører mssfix, fragment eller grensesnittets MTU.
SSH kobler til, ledeteksten vises, og økten dør så snart en kommando returnerer noe stort. Ekko virker en liten stund, så utløper forbindelsen mens klienten fortsatt viser tunnelen som oppe. En økt som er sunn til data ankommer, treffer vanligvis en størrelsesgrense og ikke en feil i SSH. Kontrollene nedenfor er ordnet slik at den billigste forklaringen utelukkes først.
Les feilens form før du rører profilen
Små pakker slipper gjennom, fulle gjør det ikke. En ledetekst, et banner eller ett tastetrykk får plass lett; en kataloglisting, en nedlasting eller en limt inn blokk gjør det ikke. Størrelsen der atferden endrer seg er sporet, ikke det faktum at SSH er programmet som er involvert.
Mekanismen er oppdagelse av banens MTU, som avhenger av tilbakemelding. TCP velger en segmentstørrelse, og når en ruter underveis ikke kan videresende pakken som oppstår, skal den si det med en ICMP-melding. Innkapsling gjør den ytre pakken større enn den indre, så den brukbare størrelsen inne i en tunnel ligger alltid under den fysiske linjen. Filtrer disse ICMP-meldingene hvor som helst, og avsenderen får aldri korreksjonen, fortsetter å sende fulle segmenter, og den ytre pakken forkastes uten varsel.
Mål taket fra begge sider
Sammenlign tunnelens MTU med den fysiske linjen før du endrer noen av dem. En tunnel som kopierte den fysiske verdien har allerede fortalt hvor avviket ligger.
Sondér innenfra tunnelen med en forespørsel som forbyr fragmentering, og senk nyttelasten til svar kommer tilbake. Størrelsesargumentet teller bare nyttelasten, så tallet som virker ligger alltid under grensesnittets MTU. Legg tilbake størrelsene på hodene hvis du trenger grensesnittets tall.
ip link show tun0
ping -M do -s 1380 10.9.0.1Gjenta sonderingen mot serverens offentlige adresse fra utsiden av tunnelen. Hvis store sonderinger også feiler der, sitter grensen på veien til serveren, og ingen tunnelinnstilling flytter den. Den sammenligningen sparer deg for å justere en klient som aldri var problemet. Skriv ned begge resultatene før du åpner en konfigurasjonsfil.
mssfix og fragment gjør ulike jobber
mssfix begrenser segmentstørrelsen som TCP-forbindelser inne i tunnelen annonserer under håndtrykket. Det er riktig spak for SSH, HTTPS og filkopier, derfor forsvinner hengingen ofte når den er satt. Det berører ikke UDP-nyttelaster i det hele tatt.
En tunnel som også bærer en UDP-tjeneste kan fortsette å feile etter at SSH er rettet, og det resultatet forvirrer alle som antar at én innstilling dekker alt.
fragment er den andre mekanismen og et annet verktøy. Det deler overstore pakker før innkapsling, gjelder bare UDP-transport, legger til overhead per datagram og er dokumentert som siste utvei ved brutt oppdagelse. Begge innstillingene må stemme hos partene som avslutter tunnelen. Når den ene enden begrenser mens den andre fragmenterer, gir det advarsler i loggen og atferd ingen kan forutsi ut fra filene.
Å senke grensesnittets MTU er det grove alternativet
Å redusere grensesnittets MTU i begge ender er det grove verktøyet. Det forteller hver indre avsender et mindre tall, noe som virker, og det legger den kostnaden på all trafikk i stedet for på TCP-strømmene som trenger den.
Velg det når tunnelen bærer trafikk du ikke kan begrense, eller når klienten er en enhet du ikke kontrollerer profilen til. Bruk det symmetrisk og noter verdien ved siden av profilen. En halvt brukt endring er verre enn ingen, fordi den ser ut som en rettelse.
Test på nytt med overføringen som hang
Koble til på nytt slik at innstillingene lastes, åpne en ny forbindelse og gjenta kommandoen som frøs. Segmentstørrelse forhandles ved håndtrykket, så en økt som overlevde gjenoppkoblingen bærer fortsatt den gamle verdien. Ping er en dårlig test her, siden hele feilen er at små pakker slipper gjennom. Bruk listen, nedlastingen eller innlimingen som brakk.
Hvis hengingen vedvarer ved en mindre størrelse, se et annet sted: en tilstandsbasert brannmur som utløper strømmen, en dobbel adresse eller en rute som forskyver seg ved gjenoppkobling. Skriv ned sonderingens størrelse som feilet og innstillingen du endret, for det paret er det som gjør den neste rapporten nyttig.