SSH si connette, il prompt appare e la sessione muore appena un comando restituisce qualcosa di voluminoso. L'eco continua per un po', poi la connessione scade mentre il client mostra ancora il tunnel come attivo. Una sessione sana fino all'arrivo dei dati urta di solito un limite di dimensione e non un difetto di SSH. I controlli qui sotto sono ordinati in modo da escludere per primo la spiegazione più economica.

Leggete la forma del guasto prima di toccare il profilo

I pacchetti piccoli passano e quelli pieni no. Un prompt, un banner o una singola pressione di tasto entrano facilmente; un elenco di cartella, un download o un blocco incollato no. La dimensione alla quale cambia il comportamento è l'indizio, non il fatto che SSH sia il programma coinvolto.

Il meccanismo è la scoperta della MTU del percorso, che dipende dal riscontro. TCP sceglie una dimensione di segmento e, quando un router lungo il percorso non riesce a inoltrare il pacchetto risultante, dovrebbe dirlo con un messaggio ICMP. L'incapsulamento rende il pacchetto esterno più grande di quello interno, quindi la dimensione utile dentro un tunnel resta sempre sotto il collegamento fisico. Filtrate quei messaggi ICMP ovunque e il mittente non riceve mai la correzione, continua a inviare segmenti pieni e il pacchetto esterno viene scartato senza avviso.

Misurate il tetto da entrambi i lati

Confrontate la MTU del tunnel con il collegamento fisico prima di cambiare l'una o l'altro. Un tunnel che ha copiato il valore fisico vi ha già detto dove sta la discrepanza.

Sondate dall'interno del tunnel con una richiesta che vieti la frammentazione, abbassando il carico utile finché tornano risposte. L'argomento dimensione conta solo il carico utile, quindi il numero che funziona resta sempre sotto la MTU dell'interfaccia. Sommate di nuovo le dimensioni delle intestazioni se vi serve il numero dell'interfaccia.

ip link show tun0
ping -M do -s 1380 10.9.0.1

Ripetete la sonda contro l'indirizzo pubblico del server dall'esterno del tunnel. Se le sonde grandi falliscono anche lì, il limite sta sul percorso verso il server e nessuna opzione del tunnel lo sposterà. Quel confronto vi risparmia di regolare un client che non è mai stato il problema. Annotate entrambi i risultati prima di aprire un file di configurazione.

mssfix e fragment fanno lavori diversi

mssfix limita la dimensione di segmento che le connessioni TCP dentro il tunnel annunciano durante la loro stretta di mano. È la leva giusta per SSH, HTTPS e le copie di file, per questo il blocco spesso sparisce appena viene impostato. Non tocca affatto i carichi utili UDP.

Un tunnel che trasporta anche un servizio UDP può continuare a fallire dopo la correzione di SSH, e quel risultato confonde chi presume che un'opzione copra tutto.

fragment è l'altro meccanismo e uno strumento diverso. Divide i pacchetti troppo grandi prima dell'incapsulamento, si applica solo al trasporto UDP, aggiunge carico per datagramma ed è documentato come ultima risorsa per una scoperta rotta. Le due impostazioni devono coincidere presso i pari che terminano il tunnel. Un lato che limita mentre l'altro frammenta produce avvisi nel registro e un comportamento che nessuno può prevedere dai file.

Abbassare la MTU dell'interfaccia è l'opzione brutale

Ridurre la MTU dell'interfaccia su entrambi i lati è lo strumento brutale. Dice a ogni mittente interno un numero più piccolo, cosa che funziona, e addebita quel costo a tutto il traffico invece che ai flussi TCP che ne hanno bisogno.

Sceglietela quando il tunnel trasporta traffico che non potete limitare, o quando il client è un apparato di cui non controllate il profilo. Applicatela in modo simmetrico e annotate il valore accanto al profilo. Un cambiamento applicato a metà è peggio di nessuno, perché sembra una correzione.

Provate di nuovo con il trasferimento che si è bloccato

Riconnettetevi perché le impostazioni si carichino, aprite una connessione nuova e ripetete il comando che si è congelato. La dimensione di segmento si negozia alla stretta di mano, quindi una sessione che ha superato la riconnessione porta ancora il valore vecchio. Il ping è una prova scarsa qui, perché tutto il guasto è che i pacchetti piccoli passano. Usate l'elenco, il download o l'incolla che si è rotto.

Se il blocco persiste a una dimensione minore, guardate altrove: un firewall con stato che fa scadere il flusso, un indirizzo duplicato o una rotta che si sposta alla riconnessione. Annotate la dimensione della sonda fallita e l'impostazione che avete cambiato, perché è quella coppia a rendere utile il rapporto successivo.

Articoli correlati