Klon z kanceláře funguje, stejný klon přes mobilní hotspot funguje a stejný klon z hotelové sítě visí, dokud se nezapne VPN. SSH handshake skončí a relace ztichne při prvním skutečném přenosu. Jeden řádek přidaný do konfigurace klienta vyléčí git i ssh zároveň. Když jedna volba klienta opraví několik nástrojů najednou, chyba je v tom, co klient posílá, ne ve spojení, kterým to posílá.

Čtěte symptom jako rozdíl v trasování

Tunel, který problém vyléčí, je málokdy oprava. Mění trasu, operátora i mezilehlá zařízení, zatímco laptop dál vyrábí přesně stejné pakety. Pokud jedna trasa zachází s hlavičkou špatně a jiná ji propustí nedotčenou, rozdíl je v politice mezilehlého zařízení, ne v klientovi. Tunel je zde svědek, ne řešení.

Místo, kde relace umírá, to dál zužuje. Nic, co selže při překladu jmen nebo při výměně klíčů, takhle nevypadá. Relace, která se autentizuje, vypíše banner a pak zamrzne při prvním velkém zápisu, už dokázala, že směrování, jména i přihlašovací údaje fungují.

Klient orazítkuje každý SSH socket bajtem QoS

Každé spojení OpenSSH od 7.8 výš nese v IP hlavičce hodnotu, kterou směrovače mohou použít k prioritizaci provozu. Terminálové relace dostávají jednu hodnotu a hromadné kopie jinou, podle teorie, že člověk, který píše, si zaslouží lepší zacházení než přenos souboru. Většina sítí nápovědu úplně ignoruje, a proto si jí roky nikdo nevšimne. Menšina ovladačů Wi-Fi, mobilních operátorů a VPN koncentrátorů na ni reaguje a některé z nich reagují špatně.

Když se tato hodnota přepíše nebo zahodí uprostřed toku, spojení neselže, jen přestane postupovat. Opakované přenosy rostou, okno se hroutí a aplikace nic nehlásí, protože nic nevrátilo chybu. Právě to ticho vede lidi k tomu, že symptom popisují jako zamrznutí, ne jako selhání.

Nejprve ověřte verzi klienta pomocí ssh -V. Cokoli od 7.8 výš nese toto chování ve výchozím stavu.

Tři příkazy, které to oddělí od MTU a DNS

Dva podobné případy je třeba vyloučit dřív, než upravíte jakýkoli konfigurační soubor. Závada MTU propouští malé výměny a zamrzne na prvním velkém paketu, kdežto závada jmen nikdy nevytvoří relaci.

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

První příkaz zopakuje neúspěšnou operaci s vypnutým označením a jeho úspěšné provedení je nejsilnější jednotlivý důkaz, který máte. Druhý vypíše konfiguraci, kterou klient na dané místo skutečně použije, což odhalí zastaralou položku v souboru, na který jste zapomněli. Třetí ukazuje bajt TOS v obou směrech, dokud přenos visí, a zajímavý vzor je hodnota na rozbité trase a žádná na fungující.

Zachytávejte na laptopu, ne na serveru, protože hodnotu nastavuje odesílatel a oba směry ji mohou změnit. Porovnejte funkční a nefunkční trasu stejným záznamem a rozdíl se objeví bez hádání.

Dejte výjimku do jednoho souboru, po jednom hostiteli

Výjimka patří vedle hostitele, na který se vztahuje, s komentářem, který říká, proč existuje.

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

Rozsah je důležitější než samotná hodnota. Zástupná položka vypne chování všude, zahodí nápovědu, která pomáhá v dobře nastavených sítích, a nikomu nenechá možnost říct, kdy se objevila. Položka pro jednoho hostitele je čitelná, vratná a po opravě sítě se triviálně maže. Použijte uživatelský soubor pro osobní obejití a spravovaný soubor, když celá flotila potřebuje stejnou výjimku.

Buďte výslovní v tom, co výjimka nepokrývá. Platí pro SSH, takže HTTPS remote, zrcadlo balíčků i prohlížeč stojí mimo ni a selhání v kterémkoli z nich potřebuje vlastní důkaz. Na řetězu přes bastion používá každý skok konfiguraci klienta a skok, který se zasekne, je ten, který stojí za to omezit.

Uzavřete smyčku se správcem sítě

Předejte nález jako čtyři fakta: verze klienta, testovaná trasa, používaný VPN klient a který směr nesl označení. Tyto čtyři stačí správci sítě k tomu, aby zacházení zopakoval a rozhodl, zda je záměrné.

Pokud výjimka zasekávání nevyléčí, odstraňte ji. Obejití, které přežije neúspěšný experiment, se stane folklorem a další člověk stráví hodinu dokazováním, že nic nedělá. Pokud zasekávání vyléčí, cesta je pořád špatná pro každý další nástroj, který ji přechází, a oprava patří tomu, kdo spravuje mezilehlé zařízení.

Změna na klientovi je provizorní řešení s datem vypršení. Napište to datum do komentáře.

Související články