Un clon de la birou funcționează, același clon prin hotspotul telefonului funcționează, iar același clon dintr-o rețea de hotel atârnă până când se pornește un VPN. Strângerea de mână SSH se termină și sesiunea tace la primul transfer real. O linie adăugată în configurația clientului vindecă git și ssh împreună. Când o singură setare a clientului repară mai multe unelte deodată, defectul este în ce trimite clientul, nu în legătura prin care îl trimite.

Citiți simptomul ca o diferență de rutare

Un tunel care vindecă o problemă este rareori o reparație. Schimbă ruta, operatorul și echipamentele intermediare, în timp ce laptopul continuă să producă exact aceleași pachete. Dacă o rută tratează greșit un antet, iar alta îl lasă să treacă neatins, diferența stă în politica echipamentului intermediar, nu în client. Aici tunelul este un martor, nu o soluție.

Punctul în care moare sesiunea restrânge și mai mult. Nimic care eșuează la căutarea numelui sau la schimbul de chei nu arată așa. O sesiune care se autentifică, tipărește un banner și apoi îngheață la prima scriere mare a dovedit deja că rutarea, numele și acreditările funcționează toate.

Clientul ștampilează un byte QoS pe fiecare socket SSH

Fiecare conexiune OpenSSH de la 7.8 încoace poartă în antetul IP o valoare pe care routerele o pot folosi pentru a prioritiza traficul. Sesiunile de terminal primesc o valoare, iar copiile masive alta, pe teoria că o persoană care tastează merită un tratament mai bun decât un transfer de fișier. Majoritatea rețelelor ignoră complet indiciul, motiv pentru care trece neobservat ani de zile. O minoritate de drivere Wi-Fi, operatori mobili și concentratoare VPN acționează pe baza lui, iar unele o fac prost.

Când acea valoare este rescrisă sau aruncată la mijlocul fluxului, conexiunea nu eșuează, ci încetează să mai înainteze. Retransmiterile cresc, fereastra se prăbușește, iar aplicația nu raportează nimic pentru că nimic nu a dat eroare. Acea tăcere este motivul pentru care oamenii descriu simptomul ca o blocare și nu ca o defecțiune.

Confirmați mai întâi versiunea clientului cu ssh -V. Orice versiune de la 7.8 în sus are acest comportament în mod implicit.

Trei comenzi care despart asta de MTU și DNS

Două cauze asemănătoare merită eliminate înainte de a edita orice fișier de configurare. O defecțiune MTU lasă să treacă schimburile mici și îngheață la primul pachet mare, în timp ce o defecțiune de nume nu produce niciodată o sesiune.

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

Prima comandă repetă operația care eșuează cu marcajul oprit, iar o rulare reușită este cea mai puternică dovadă singulară disponibilă. A doua tipărește configurația pe care clientul o va aplica într-adevăr acelei destinații, ceea ce prinde o intrare învechită într-un fișier pe care îl uitaserăți. A treia arată byte-ul TOS în ambele direcții în timp ce transferul este blocat, iar modelul interesant este o valoare pe ruta stricată și niciuna pe cea care funcționează.

Faceți captura pe laptop, nu pe server, pentru că emițătorul stabilește valoarea și oricare direcție o poate modifica. Comparați o rută care funcționează și una care eșuează cu aceeași captură, iar diferența apare fără ghicit.

Puneți excepția într-un singur fișier, un singur host pe rând

O excepție aparține lângă hostul căruia i se aplică, cu un comentariu care spune de ce există.

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

Domeniul de aplicare contează mai mult decât valoarea în sine. O intrare cu metacaracter dezactivează comportamentul peste tot, aruncă un indiciu care ajută în rețele bine crescute și nu lasă pe nimeni să spună când a apărut. O intrare pe host este lizibilă, reversibilă și trivial de șters după ce rețeaua este reparată. Folosiți fișierul utilizatorului pentru o soluție personală și un fișier administrat atunci când o flotă întreagă are nevoie de aceeași excepție.

Fiți explicit cu privire la ce nu acoperă excepția. Se aplică la SSH, așa că un depozit la distanță HTTPS, o oglindă de pachete și un browser rămân în afara ei, iar o defecțiune în oricare dintre ele are nevoie de propria dovadă. Într-un lanț printr-un bastion, fiecare salt folosește configurația clientului, iar saltul care se blochează este cel care merită limitat.

Închideți cercul cu proprietarul rețelei

Predați descoperirea ca patru fapte: versiunea clientului, ruta testată, clientul VPN folosit și care direcție a purtat marcajul. Acestea patru sunt suficiente pentru un proprietar de rețea să reproducă tratamentul și să decidă dacă este deliberat.

Dacă excepția nu vindecă blocajul, eliminați-o. O soluție care supraviețuiește unui experiment eșuat devine folclor, iar următoarea persoană petrece o oră dovedind că nu face nimic. Dacă vindecă blocajul, calea rămâne greșită pentru orice altă unealtă care o traversează, iar reparația aparține celui care operează echipamentul intermediar.

Schimbarea la client este o soluție provizorie cu dată de expirare. Scrieți acea dată în comentariu.

Articole similare