Git si blocca senza la VPN? OpenSSH marca i pacchetti con IPQoS
OpenSSH contrassegna i suoi pacchetti con un valore QoS per impostazione predefinita. Dove un percorso scarta quel contrassegno, il push si blocca finché un tunnel non cambia la rotta che i pacchetti seguono.
Un clone dall'ufficio funziona, lo stesso clone tramite hotspot del telefono funziona, e lo stesso clone da una rete d'albergo si blocca finché non si attiva una VPN. La stretta di mano SSH termina e la sessione ammutolisce al primo trasferimento reale. Una riga aggiunta alla configurazione del client guarisce git e ssh insieme. Quando una sola impostazione del client ripara più strumenti in una volta, il difetto è in ciò che il client invia, non nel collegamento su cui lo invia.
Leggi il sintomo come una differenza di instradamento
Un tunnel che guarisce un problema è raramente una riparazione. Cambia la rotta, l'operatore e i dispositivi intermedi, mentre il portatile continua a produrre esattamente gli stessi pacchetti. Se una rotta tratta male un'intestazione e un'altra la lascia passare intatta, la differenza sta nella politica del dispositivo intermedio, non nel client. Qui il tunnel è un testimone, non una soluzione.
Il punto in cui la sessione muore lo restringe ancora. Niente che fallisca nella risoluzione dei nomi o nello scambio di chiavi assomiglia a questo. Una sessione che si autentica, stampa un banner e poi si blocca alla prima scrittura massiva ha già dimostrato che instradamento, nomi e credenziali funzionano tutti.
Il client appone un byte QoS su ogni socket SSH
Ogni connessione OpenSSH dalla 7.8 in poi porta nell'intestazione IP un valore che i router possono usare per dare priorità al traffico. Le sessioni di terminale ricevono un valore e le copie massive un altro, secondo la teoria che una persona che digita meriti un trattamento migliore di un trasferimento di file. La maggior parte delle reti ignora del tutto l'indizio, ed è per questo che passa inosservato per anni. Una minoranza di driver Wi-Fi, operatori mobili e concentratori VPN agisce su di esso, e alcuni lo fanno male.
Quando quel valore viene riscritto o scartato a metà flusso, la connessione non fallisce, smette di avanzare. Le ritrasmissioni salgono, la finestra crolla e l'applicazione non segnala nulla perché nulla ha prodotto un errore. Quel silenzio è il motivo per cui le persone descrivono il sintomo come un blocco e non come un guasto.
Conferma prima la versione del client con ssh -V. Qualsiasi versione dalla 7.8 in su porta questo comportamento per impostazione predefinita.
Tre comandi che separano questo da MTU e DNS
Due casi simili meritano di essere esclusi prima di modificare qualsiasi file di configurazione. Un guasto MTU lascia passare gli scambi piccoli e si blocca al primo pacchetto grande, mentre un guasto dei nomi non produce mai una sessione.
ssh -o IPQoS=none -v [email protected]
ssh -G [email protected] | grep -i ipqos
sudo tcpdump -ni any -vv "tcp port 22"
Il primo comando ripete l'operazione che fallisce con il contrassegno disattivato, e una sua esecuzione riuscita è la prova singola più forte disponibile. Il secondo stampa la configurazione che il client applicherà davvero a quella destinazione, il che intercetta una voce obsoleta in un file che avevi dimenticato. Il terzo mostra il byte TOS in entrambe le direzioni mentre il trasferimento è bloccato, e lo schema interessante è un valore sulla rotta rotta e nessuno su quella che funziona.
Fai la cattura sul portatile e non sul server, perché è il mittente a impostare il valore e ciascuna direzione può alterarlo. Confronta una rotta che funziona e una che fallisce con la stessa cattura, e la differenza appare senza supposizioni.
Metti l'eccezione in un solo file, un host alla volta
Un'eccezione va accanto all'host a cui si applica, con un commento che dice perché esiste.
Host gitlab.example.internal
IPQoS none
# direct route rewrites the marking; the tunnel route passes it
La portata conta più del valore stesso. Una voce jolly disattiva il comportamento ovunque, butta via un indizio che aiuta sulle reti ben educate e non lascia a nessuno la possibilità di dire quando è comparsa. Una voce per host è leggibile, reversibile e banale da cancellare una volta riparata la rete. Usa il file utente per un aggiramento personale e un file gestito quando un'intera flotta ha bisogno della stessa eccezione.
Sii esplicito su ciò che l'eccezione non copre. Si applica a SSH, quindi un remoto HTTPS, uno specchio dei pacchetti e un browser restano fuori, e un guasto in uno qualsiasi di essi richiede la propria prova. Su una catena attraverso un bastione, ogni salto usa la configurazione del client, e il salto che si blocca è quello che vale la pena circoscrivere.
Chiudi il cerchio con il responsabile della rete
Consegna la scoperta come quattro fatti: versione del client, rotta testata, client VPN in uso e quale direzione portava il contrassegno. Quei quattro bastano a un responsabile di rete per riprodurre il trattamento e decidere se è deliberato.
Se l'eccezione non guarisce il blocco, rimuovila. Un aggiramento che sopravvive a un esperimento fallito diventa leggenda, e la persona successiva passa un'ora a dimostrare che non fa nulla. Se guarisce il blocco, il percorso resta sbagliato per ogni altro strumento che lo attraversa, e la riparazione spetta a chi gestisce il dispositivo intermedio.
La modifica sul client è un rattoppo con una data di scadenza. Scrivi quella data nel commento.