Un clon des de l'oficina funciona, el mateix clon per un punt d'accés del mòbil funciona, i el mateix clon des d'una xarxa d'hotel s'encalla fins que s'activa la VPN. L'apretada de mans SSH acaba i la sessió calla en la primera transferència real. Una línia afegida a la configuració del client cura git i ssh alhora. Quan un sol paràmetre del client arregla diverses eines alhora, la fallada és en el que envia el client, no en l'enllaç pel qual ho envia.

Llegeix el símptoma com una diferència d'encaminament

Un túnel que cura un problema poques vegades és una reparació. Canvia la ruta, l'operador i els equips intermediaris, mentre l'ordinador continua produint exactament els mateixos paquets. Si una ruta tracta malament una capçalera i una altra la deixa passar intacta, la diferència és en la política de l'equip intermediari, no en el client. Aquí el túnel és un testimoni, no una solució.

El punt on mor la sessió ho acota més. Res que falli en la resolució de noms o en l'intercanvi de claus no s'assembla a això. Una sessió que s'autentica, imprimeix un banner i després es congela a la primera escriptura massiva ja ha demostrat que l'encaminament, els noms i les credencials funcionen.

El client estampa un byte QoS a cada sòcol SSH

Cada connexió OpenSSH des de 7.8 porta un valor a la capçalera IP que els encaminadors poden fer servir per prioritzar el trànsit. Les sessions de terminal reben un valor i les còpies massives un altre, amb la teoria que una persona que tecleja mereix un tracte millor que una transferència de fitxers. La majoria de xarxes ignoren completament l'indicador, i per això passa desapercebut durant anys. Una minoria de controladors Wi-Fi, operadors mòbils i concentradors VPN hi actuen, i alguns ho fan malament.

Quan aquest valor es reescriu o es descarta enmig del flux, la connexió no falla, sinó que deixa d'avançar. Les retransmissions pugen, la finestra s'enfonsa i l'aplicació no informa de res perquè res no ha donat error. Aquest silenci és la raó per la qual la gent descriu el símptoma com una penjada i no com una fallada.

Comprova primer la versió del client amb ssh -V. Qualsevol versió a partir de la 7.8 porta aquest comportament per defecte.

Tres ordres que ho separen de l'MTU i del DNS

Dos casos semblants mereixen ser descartats abans d'editar cap fitxer de configuració. Una fallada d'MTU deixa passar els intercanvis petits i es congela al primer paquet gran, mentre que una fallada de noms no arriba a produir mai una sessió.

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

La primera ordre repeteix l'operació que falla amb la marca desactivada, i una execució correcta és la prova individual més sòlida disponible. La segona imprimeix la configuració que el client aplicarà realment a aquesta destinació, cosa que detecta una entrada obsoleta en un fitxer que havies oblidat. La tercera mostra el byte TOS en tots dos sentits mentre la transferència està encallada, i el patró interessant és un valor a la ruta trencada i cap a la que funciona.

Fes la captura a l'ordinador portàtil, no al servidor, perquè el remitent fixa el valor i qualsevol dels dos sentits el pot alterar. Compara una ruta que funciona i una que falla amb la mateixa captura, i la diferència apareix sense endevinar.

Posa l'excepció en un sol fitxer, un host alhora

Una excepció ha d'anar al costat de l'host al qual s'aplica, amb un comentari que digui per què existeix.

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

L'abast importa més que el valor mateix. Una entrada comodí desactiva el comportament a tot arreu, llença un indicador que ajuda en xarxes ben educades i no deixa ningú que pugui dir quan va aparèixer. Una entrada per host és llegible, reversible i trivial d'esborrar un cop la xarxa estigui reparada. Fes servir el fitxer d'usuari per a una solució personal i un fitxer gestionat quan tota una flota necessiti la mateixa excepció.

Sigues explícit sobre què no cobreix l'excepció. S'aplica a SSH, així que un remot HTTPS, un mirall de paquets i un navegador queden fora, i una fallada en qualsevol d'ells necessita la seva pròpia evidència. En una cadena a través d'un bastió, cada salt fa servir la configuració del client, i el salt que s'encalla és el que val la pena acotar.

Tanca el cercle amb el responsable de la xarxa

Lliura la troballa com quatre fets: versió del client, ruta provada, client VPN en ús i quin sentit portava la marca. Aquests quatre són suficients perquè el responsable de la xarxa reprodueixi el tracte i decideixi si és deliberat.

Si l'excepció no cura l'encallament, elimina-la. Una solució temporal que sobreviu a un experiment fallit es converteix en llegenda, i la persona següent hi perd una hora demostrant que no fa res. Si sí que cura l'encallament, el camí continua sent dolent per a qualsevol altra eina que el travessi, i la reparació correspon a qui opera l'equip intermediari.

El canvi al client és un pedaç amb data de caducitat. Escriu aquesta data al comentari.

Articles relacionats