Il portatile si connette, l’intranet si carica e una manciata di siti pubblici si blocca. Autenticazione e routing funzionano chiaramente, il che lascia la dimensione del pacchetto come spiegazione. In un tunnel L2TP/IPsec l’MTU utilizzabile è inferiore a quello che l’adattatore annuncia ancora, e il client continua a inviare pacchetti a dimensione piena con il bit «non frammentare» attivo. A un gateway pfSense si può ordinare di cancellare quel bit, ed è il modo più rapido per confermare la diagnosi prima di ripararla per bene.

Iniziate dalle pagine che falliscono

Annotate quali destinazioni falliscono e quali riescono prima di toccare qualsiasi impostazione. Gli handshake che restano sotto il limite del tunnel si completano normalmente, mentre i trasferimenti che richiedono un segmento a dimensione piena si bloccano a metà. Questa divisione è la firma di un problema di dimensione e non di un filtro, perché una destinazione bloccata fallisce all’instaurazione della connessione e non a metà pagina. Entrambe le osservazioni non costano nulla e restringono subito la ricerca.

Provate con un ping che imposta il bit e controlla la dimensione del carico utile. Il carico più grande che sopravvive vi dice l’MTU reale del percorso, e il valore annunciato dall’adattatore mostra quanto i due siano distanti.

Annotate entrambi i numeri. La correzione dipende da quale sia sbagliato, e la coppia è ciò che una cattura confermerà più avanti.

Che cosa fa il bit DF in uscita

L’incapsulamento è la ragione per cui i numeri differiscono. IPsec aggiunge ESP, L2TP aggiunge un’altra intestazione, e il tunnel trasporta quindi meno carico utile del collegamento fisico. Windows riporta ancora 1500 byte sull’adattatore e imposta «non frammentare» su ciò che invia. Quando un pacchetto così non entra, la risposta corretta del gateway è un messaggio ICMP che chiede al mittente di ridursi. Per questo un tunnel che lascia passare ping piccoli può comunque far fallire il download di un file.

Quel messaggio spesso non arriva mai. Un hop può filtrare ICMP, o nulla lo genera, e il mittente ripete la stessa dimensione finché il trasferimento non si arrende.

Il silenzio è qui la presentazione normale, per questo il sintomo si legge come un blocco selettivo. Nulla nel registro del client annota un messaggio ICMP mancante.

L’opzione pfSense, e ciò che non fa

L’opzione si trova nella pagina Sistema, Avanzate, Firewall e NAT, con l’etichetta «Cancella i bit DF non validi invece di scartare i pacchetti». Invece di scartare un pacchetto troppo grande che porta il flag, il filtro rimuove il flag e lascia che il pacchetto venga diviso più avanti. Un pacchetto è considerato non valido quando non riesce ad attraversare l’interfaccia in uscita in un solo pezzo.

L’opzione ripristina la connettività senza toccare il client, per questo è popolare. È anche un aggiramento: la frammentazione costa CPU e rende più caro ogni frammento perso.

Si applica solo al traffico inoltrato, non al traffico che il firewall stesso origina. La stessa pagina offre «Disattiva la pulizia del firewall», che spegne del tutto la normalizzazione, e questo è un cambiamento molto più ampio di quanto serva a questo problema.

Una correzione più stretta che mantiene TCP non frammentato

Quasi tutti i flussi bloccati sono TCP, e TCP può negoziare un segmento più piccolo invece di affidarsi alla frammentazione. Limitare l’MSS sull’interfaccia del tunnel riscrive il valore annunciato durante l’handshake, così ogni lato invia ciò che entra davvero. Il percorso si comporta allora in modo prevedibile e nessun pacchetto deve essere diviso.

Questo lascia UDP alla scoperta o all’opzione DF. Quando i siti che falliscono sono pagine web comuni, il limite è il cambiamento da preferire.

Il client può riportare il proprio MTU dell’adattatore tramite netsh interface ipv4 show subinterfaces. Confrontate quel valore con quello che il server ritiene negoziato, perché i due non coincidono sempre. Quel valore è quello che il sistema operativo userà davvero, qualunque cosa abbia riportato la negoziazione.

Confermate con una cattura, poi ripristinate lo stato

Catturate su entrambi i lati prima di decidere: una traccia dove passa il tunnel, un’altra dove passa l’interfaccia WAN. I pacchetti che escono a dimensione piena senza ICMP di ritorno indicano il limite come strato giusto. Le risposte che arrivano e poi muoiono al ritorno indicano invece l’MTU del tunnel.

Svuotate la tabella degli stati prima di riprovare, perché i flussi esistenti conservano le vecchie dimensioni di segmento. Poi caricate la pagina che ha fallito e leggete la vista degli stati per il traffico bidirezionale invece dei contatori a senso unico. Se si blocca ancora, catturate di nuovo invece di provare un’altra casella.

Articoli correlati