Chi sceglie la MTU di WireGuard: wg-quick, il kernel o tu
WireGuard non negozia alcuna MTU. Lo strumento di configurazione, un gestore di rete o la tua riga di configurazione decide, e il valore predefinito è una congettura sul percorso, non una misura.
WireGuard non ha alcuna negoziazione della MTU. Cifra ciò che l’interfaccia gli consegna e invia il risultato, e se il pacchetto incapsulato supera il percorso, viene scartato o frammentato in un punto che non puoi vedere. Qualcuno deve scegliere la MTU dell’interfaccia, e quel qualcuno è lo strumento che ha alzato l’interfaccia.
Ci sono tre candidati, ed è facile confonderli.
Tre punti da cui può venire il valore
Il valore può essere impostato esplicitamente nella configurazione dell’interfaccia, calcolato dallo strumento di configurazione in base alle informazioni di rotta, o impostato da qualunque gestore di rete che possieda l’interfaccia. Una normale chiamata di wg non fa nulla di tutto ciò, perché wg gestisce solo chiavi e peer. La MTU vive sull’interfaccia di rete, ed è per questo che ip link show wg0 è il punto in cui la leggi.
Se non sei sicuro di quale caso si applichi, leggi prima la MTU, poi scopri chi ha avviato l’interfaccia.
Decidi in base a chi gestisce l’interfaccia
Se la avvia wg-quick, vince una riga MTU esplicita, altrimenti calcola un valore. Se la avvia un gestore di rete, decide il profilo di quel gestore. Se la avvia un ambiente di esecuzione di container o un client di un fornitore, leggi la loro documentazione invece di dare per scontato il comportamento di wg-quick.
La decisione non è quale numero sia il migliore in astratto. È quale componente puoi davvero configurare.
Che cosa fa il calcolo predefinito
wg-quick cerca la rotta verso l’endpoint del peer, prende la MTU di quell’interfaccia in uscita e sottrae l’overhead di incapsulamento. Con un’intestazione esterna IPv4 sono circa 60 byte; con IPv6 sono circa 80. Il risultato viene limitato in modo che un percorso di 1500 byte dia 1420 invece di un valore che funziona su una sola famiglia di indirizzi. È un valore predefinito ragionevole, non una misura del tuo percorso.
Non può sapere nulla di un tunnel successivo, di un collegamento mobile o di un percorso ICMP filtrato.
Il limite nasconde una domanda reale. Se il tuo percorso è davvero 9000 byte da estremo a estremo, 1420 lascia prestazioni sul tavolo, e se il percorso è 1400, 1420 è già troppo grande. Il valore predefinito è un compromesso, e va trattato come tale.
Quando il percorso cambia sotto di te
Un portatile che passa da Ethernet a Wi-Fi e poi all’hotspot di un telefono conserva la MTU dell’interfaccia con cui è partito. Il percorso esterno ora può essere più piccolo, e nulla rinegozia. I tunnel annidati peggiorano le cose, perché ogni livello sottrae il proprio overhead dallo stesso budget. Il valore che funzionava in ufficio non è il valore che funziona in aeroporto.
Un handshake recente dimostra che le chiavi funzionano. Non dimostra nulla sul fatto che i pacchetti grandi ci stiano.
Prova un numero alla volta
Mantieni la stessa applicazione e la stessa destinazione, cambia un valore e misura. ping -M do -s 1372 prova un pacchetto da 1400 byte con il bit DF impostato, ed è il tipo di test che vuoi. Se le richieste piccole funzionano e quelle grandi si bloccano, hai un problema di dimensione e non di instradamento.
Cambia solo la MTU. Regolare più opzioni di pacchetto insieme non ti dice quale contasse.
E non aspettarti che un cambio di MTU risolva una rotta di ritorno mancante, una regola di inoltro o un guasto DNS. Anche questi producono sintomi di assenza di traffico, e hanno i propri test. Il manuale di wg-quick documenta la selezione automatica.