Tre impostazioni su un client Linux suonano tutte come «rendi i pacchetti più piccoli», e agiscono a livelli diversi. La MTU dell'interfaccia limita ogni pacchetto che il dispositivo invia. La MTU di una rotta limita i pacchetti che usano quella rotta, che spesso è ciò che vuoi davvero per una destinazione VPN. Il limite TCP MSS cambia ciò che negoziano i due estremi e non fa nulla per UDP.

Tre controlli che sembrano la stessa manopola

Mettili uno accanto all'altro prima di scegliere, perché scegliere la riga sbagliata spiega la maggior parte dei consigli che non funzionano:

ControlScopeWhat it cannot fix
Interface MTUEvery packet the device sendsNothing, but it over-constrains unrelated traffic
Route MTUPackets using that routeA send that the lookup never routes there
MSS clampTCP handshake on that pathUDP payload sizes and ICMP

Abbassare la MTU Ethernet per tutta la macchina è la versione brutale di questa correzione. Funziona, e penalizza anche ogni altra applicazione dell'host, comprese quelle i cui percorsi erano a posto. Un valore per rotta esprime la stessa intenzione senza il costo collaterale.

Il confronto vale solo per il traffico che l'host genera. Inoltrare un pacchetto per un altro client coinvolge il suo percorso e il budget esterno del tunnel, e una metrica di rotta su questo host non arriva oltre quel confine.

Attacca il budget alla rotta che vince la ricerca

Un record di rotta IPv4 illustrativo appare così:

ip -4 route get 10.60.0.20
ip -4 route add 10.60.0.0/16 dev tun-office src 10.90.0.2 mtu 1380

Leggi il record come descrizione di intento, non come valore da incollare. Il prefisso, il dispositivo e la sorgente preferita devono corrispondere alla configurazione reale, e il numero deve venire da prove sul percorso incapsulato, non da un post di blog. La MTU della rotta limita il pacchetto IP interno, che non è lo stesso di un carico TCP da 1380 byte o di un pacchetto esterno cifrato da 1380 byte.

Guarda dove si risolve davvero la ricerca prima di aggiungere qualsiasi cosa. Un host con regole di policy può instradare una destinazione data attraverso una tabella diversa da main, e una metrica che esiste solo in main è invisibile a quella richiesta. Confronta ip -4 route show table all con la risposta di ip route get, incluso il contesto di marca o di spazio dei nomi quando le regole li usano. Se i due non concordano, la tabella che ha risposto è quella che ha bisogno della metrica, non quella che sembra più ordinata.

mtu non è mtu lock

Per impostazione predefinita il kernel può ancora aggiornare la MTU del percorso dal feedback ICMP, ed è a questo che serve la scoperta della MTU di percorso. Aggiungere lock lo ferma. È una decisione diversa, non un modo più forte di conservare lo stesso numero, e per IPv4 cambia la gestione documentata del bit di non frammentazione.

Bloccare è ragionevole quando hai misurato il percorso e vuoi che il valore resti fermo qualunque cosa arrivi. È un cattivo valore predefinito quando la rete invia feedback legittimo sulla dimensione, perché il kernel non può più adattarsi e il guasto si sposta su un altro sintomo.

Se ICMP viene filtrato da qualche parte lungo il percorso, nessuna impostazione di rotta lo ripara. La correzione spetta al filtro, e una MTU più piccola è un aggiramento che nasconde il guasto reale fino al prossimo cambio di percorso.

Il software del tunnel aggiunge le proprie manopole di dimensione

OpenVPN- mssfix regola la dimensione dei segmenti TCP per il suo caso documentato di tunnel UDP. Agisce sulla conversazione TCP, quindi non è un'altra grafia della MTU di rotta del sistema operativo, e non può aiutare un servizio UDP che ignora la negoziazione.

Non impilare una MTU di rotta, un cambio di MTU dell'interfaccia e un limite MSS nella stessa finestra di modifica. Se il problema scompare, non saprai quale contava, e quelli che tieni limiteranno il traffico per anni senza un motivo che qualcuno ricordi.

Rendilo reversibile, poi dimostralo

Il vero proprietario della rotta decide se la modifica sopravvive a una riconnessione. Un client VPN che installa la rotta dinamicamente di solito la ricostruisce senza la tua metrica, e un ip route add manuale allora sembra una correzione fallita un giorno dopo. Metti il valore nella configurazione del gestore e, se ti serve un esperimento temporaneo, annota prima la rotta originale.

Prova con una nuova connessione che esegue l'operazione che si era bloccata, poi conferma che la rotta privata prevista vince ancora e che le destinazioni non collegate sono invariate. Riconnetti il tunnel e rileggi la rotta, perché un valore che sparisce alla riconnessione non è una correzione.

Se le prove non sostengono la modifica, rimuovi la sovrascrittura tramite il suo gestore e ripristina gli attributi originali della rotta invece di cancellarla. Poi annota cosa hai misurato e su quale percorso, così la persona successiva può distinguere un miglioramento reale da un esperimento lasciato in funzione.

Articoli correlati