Tunnel VPN annidati: perché quello interno si blocca sui pacchetti grandi
Ogni tunnel spende parte del budget di pacchetti del percorso prima che inizi il successivo. Sommate le intestazioni e la sessione interna fallisce sui pacchetti grandi.
Il DNS si risolve, la sessione SSH resta attiva, poi un caricamento grande si blocca mentre un ping allo stesso host risponde ancora. Questa separazione indica la dimensione del pacchetto, non un tunnel rotto. I tunnel annidati ci arrivano a dimensioni che nessuno dei due raggiungerebbe da solo. La sessione interna sta bene; le vengono consegnati pacchetti che non ci stanno più.
Dove finisce davvero l’MTU del percorso
Ogni incapsulamento spende byte prima che lo strato successivo abbia il suo turno. Un percorso Ethernet offre 1500 byte al pacchetto esterno, e il tunnel esterno prende la sua parte prima che qualcosa al suo interno possa essere indirizzato. Un solo valore di overhead stimato sarà sbagliato esattamente della quantità che conta.
Elencate gli strati in ordine: percorso di accesso, trasporto esterno, tunnel esterno, trasporto interno, tunnel interno, applicazione. Contate ogni intestazione una volta e tenete UDP separato dall’intestazione e dal tag del tunnel stesso.
Due strati WireGuard, contati una volta
Prendete un percorso di accesso IPv4 con un tunnel WireGuard dentro un altro. Lo strato esterno costa 20 byte di IPv4, 8 di UDP e 32 per l’intestazione dati di WireGuard più il suo tag di autenticazione. Al suo interno, il tunnel interno ha bisogno della propria intestazione IPv4 da 20 byte e di un’intestazione UDP da 8 byte prima dei suoi secondi 32 byte di overhead WireGuard. Ciò che resta contiene un’intestazione IPv4, un’intestazione TCP e i dati. Un percorso esterno IPv6 costa 40 invece di 20 e lascia 1320.
| Layer | Bytes |
|---|---|
| Path MTU | 1500 |
| Outer IPv4 header | 20 |
| Outer UDP header | 8 |
| Outer WireGuard header and tag | 32 |
| Inner transport IPv4 header | 20 |
| Inner UDP header | 8 |
| Inner WireGuard header and tag | 32 |
| Innermost IPv4 header | 20 |
| TCP header | 20 |
| Payload that fits | 1340 |
L’aritmetica arriva a 1340 byte. Un solo strato con le stesse regole lascia 1400 per il carico utile TCP, cioè 1500 meno 20, 8, 32, 20 e 20, e la differenza di 60 byte è esattamente l’incapsulamento interno che aggiunge il secondo tunnel.
Applicate 1400 a un percorso annidato e al tunnel interno mancano 60 byte, invisibili finché un pacchetto non è abbastanza grande da averne bisogno. Il riempimento e l’opzione di frammentazione propria di un protocollo spostano di nuovo i numeri, quindi fidatevi della tabella.
MTU, MSS e frammentazione agiscono in punti diversi
L’MTU dell’interfaccia limita ciò che l’interfaccia emetterà, mentre il clamping MSS di TCP cambia ciò che un peer TCP è disposto a inviare. Il clamping sistema le sessioni TCP e non fa nulla per un datagramma UDP grande, ed è così che una correzione sembra riuscita per un’applicazione e manca in silenzio la successiva. L’opzione di frammentazione propria di un protocollo è una terza leva con i suoi fallimenti. L’MTU dell’interfaccia è la prima mossa comune e la più grossolana.
I tunnel bridged e routed trasportano frame diversi, quindi i numeri di un’altra implementazione raramente si trasferiscono. La scoperta dell’MTU del percorso, descritta nella RFC 8201, aiuta solo finché i messaggi ICMP da cui dipende sono lasciati passare.
Trovare lo strato che manca
Verificate ogni tunnel da solo prima di annidarli, se i requisiti consentono un confronto. Una sonda di dimensione fissa lo risolve: ping -M do -s 1472 -c 3 10.8.0.1 invia un pacchetto IPv4 completo da 1500 byte dentro quello strato. Aggiungete il secondo strato e ripetete la stessa sonda, così ogni fallimento appartiene a una modifica nota.
Quando un trasferimento si blocca, cambiate un parametro documentato alla volta e annotate la dimensione che fallisce. Controllate anche il percorso di ritorno, perché la ricorsione di route annidata può imitare un problema di dimensione dei pacchetti abbastanza da costare un pomeriggio. Una risposta ICMP filtrata può nascondere il limite reale, quindi la sonda conta più del ragionamento.
Scrivete il budget dove lo troverà la persona successiva
Una tabella con una riga per strato sopravvive a una regola pratica. Tenetela accanto allo schema del tunnel perché nessuno rifaccia l’aritmetica sotto pressione.
Più tunnel significano più dipendenze, quindi un piano di rollback merita il suo posto accanto al budget. Se i numeri ancora non tornano, misurate il percorso invece di tirare a indovinare di nuovo. L’obiettivo è una cifra che potete difendere, non ricordare.