En klone fra kontoret virker, den samme klonen over et telefonhotspot virker, og den samme klonen fra et hotellnettverk henger til en VPN slås på. SSH-håndtrykket fullføres, og økten blir stille ved den første virkelige overføringen. Én linje lagt til klientkonfigurasjonen kurerer git og ssh samtidig. Når én klientinnstilling reparerer flere verktøy på én gang, ligger feilen i det klienten sender, ikke i forbindelsen den sender over.

Les symptomet som en rutingforskjell

En tunnel som kurerer et problem, er sjelden en reparasjon. Den bytter rute, operatør og mellomledd, mens den bærbare maskinen fortsetter å produsere nøyaktig de samme pakkene. Hvis én rute behandler en header feil og en annen slipper den gjennom uendret, ligger forskjellen i mellomleddets policy, ikke i klienten. Tunnelen er her et vitne, ikke en løsning.

Punktet der økten dør, snevrer det ytterligere inn. Ingenting som feiler ved navneoppslag eller ved nøkkelutveksling ser slik ut. En økt som autentiserer, skriver ut et banner og deretter fryser ved den første store skrivingen, har allerede bevist at ruting, navn og påloggingsinformasjon alle virker.

Klienten stempler en QoS-byte på hver SSH-socket

Hver OpenSSH-tilkobling fra 7.8 og oppover bærer en verdi i IP-headeren som rutere kan bruke til å prioritere trafikk. Terminaløkter får én verdi og massekoppier en annen, ut fra teorien om at et menneske som skriver fortjener bedre behandling enn en filoverføring. De fleste nettverk ignorerer hintet helt, og derfor går det ubemerket hen i årevis. Et mindretall av Wi-Fi-drivere, mobiloperatører og VPN-konsentratorer handler på det, og noen av dem handler dårlig.

Når den verdien skrives om eller forkastes midt i strømmen, feiler ikke tilkoblingen, den slutter å komme videre. Retransmisjoner øker, vinduet kollapser, og applikasjonen rapporterer ingenting fordi ingenting ga en feil. Den stillheten er grunnen til at folk beskriver symptomet som en henging og ikke som en feil.

Bekreft først klientversjonen med ssh -V. Alt på 7.8 eller høyere bærer denne oppførselen som standard.

Tre kommandoer som skiller dette fra MTU og DNS

To lignende årsaker fortjener å utelukkes før du redigerer noen konfigurasjonsfil. En MTU-feil slipper små utvekslinger gjennom og fryser på den første store pakken, mens en navnefeil aldri gir en økt.

ssh -o IPQoS=none -v [email protected]
ssh -G [email protected] | grep -i ipqos
sudo tcpdump -ni any -vv "tcp port 22"

Den første kommandoen gjentar den feilende operasjonen med merkingen slått av, og en vellykket kjøring er det sterkeste enkeltbeviset som finnes. Den andre skriver ut konfigurasjonen klienten faktisk vil bruke på den destinasjonen, noe som fanger en utdatert oppføring i en fil du hadde glemt. Den tredje viser TOS-byten i begge retninger mens overføringen står fast, og det interessante mønsteret er en verdi på den ødelagte ruten og ingen på den som virker.

Ta opptaket på den bærbare maskinen og ikke på serveren, fordi avsenderen setter verdien og begge retninger kan endre den. Sammenlign en rute som virker og en som feiler med samme opptak, og forskjellen viser seg uten gjetting.

Legg unntaket i én fil, én vert om gangen

Et unntak hører hjemme ved siden av verten det gjelder, med en kommentar som sier hvorfor det finnes.

Host gitlab.example.internal
    IPQoS none
    # direct route rewrites the marking; the tunnel route passes it

Omfanget betyr mer enn selve verdien. En jokertegn-oppføring slår av oppførselen overalt, kaster bort et hint som hjelper på veloppdragne nettverk, og lar ingen kunne si når den dukket opp. En oppføring per vert er lesbar, reverserbar og trivielt enkel å slette når nettverket er reparert. Bruk brukerfilen til en personlig omvei og en administrert fil når en hel flåte trenger det samme unntaket.

Vær tydelig på hva unntaket ikke dekker. Det gjelder SSH, så et HTTPS-fjernlager, et pakkespeil og en nettleser ligger alle utenfor, og en feil i noen av dem trenger sitt eget bevis. På en kjede gjennom en bastion bruker hvert hopp klientkonfigurasjonen, og hoppet som henger, er det som er verdt å avgrense.

Lukk sirkelen med nettverkseieren

Overlever funnet som fire fakta: klientversjon, testet rute, VPN-klient i bruk og hvilken retning som bar merkingen. Disse fire er nok for en nettverkseier til å gjenskape behandlingen og avgjøre om den er bevisst.

Hvis unntaket ikke kurerer hengingen, fjern det. En omvei som overlever et mislykket eksperiment, blir folklore, og neste person bruker en time på å bevise at den ikke gjør noe. Hvis den kurerer hengingen, er ruten fortsatt feil for ethvert annet verktøy som krysser den, og reparasjonen hører til den som drifter mellomleddet.

Endringen på klienten er en nødløsning med utløpsdato. Skriv den datoen inn i kommentaren.

Relaterte artikler