Verschachtelte VPN-Tunnel: Warum der innere bei großen Paketen stockt
Jeder Tunnel verbraucht einen Teil des Paketbudgets des Pfads, bevor der nächste beginnt. Addieren Sie die Header, und die innere Sitzung scheitert an großen Paketen.
DNS löst auf, die SSH-Sitzung bleibt bestehen, und dann friert ein großer Upload ein, während ein Ping an denselben Host weiter antwortet. Diese Trennung deutet auf die Paketgröße hin, nicht auf einen defekten Tunnel. Verschachtelte Tunnel erreichen das bei Größen, die keiner der Tunnel allein erreichen würde. Die innere Sitzung ist in Ordnung; ihr werden nur Pakete übergeben, die nicht mehr passen.
Wohin die Pfad-MTU tatsächlich geht
Jede Kapselung verbraucht Bytes, bevor die nächste Schicht an die Reihe kommt. Ein Ethernet-Pfad bietet dem äußeren Paket 1500 Bytes, und der äußere Tunnel nimmt seinen Anteil, bevor irgendetwas darin adressiert werden kann. Ein geratener Overhead-Wert wird um genau den Betrag falsch liegen, auf den es ankommt.
Listen Sie die Schichten der Reihe nach auf: Zugangspfad, äußerer Transport, äußerer Tunnel, innerer Transport, innerer Tunnel, Anwendung. Zählen Sie jeden Header einmal, und halten Sie UDP getrennt vom eigenen Header und Tag des Tunnels.
Zwei WireGuard-Schichten, einmal gezählt
Nehmen Sie einen IPv4-Zugangspfad mit einem WireGuard-Tunnel in einem anderen. Die äußere Schicht kostet 20 Bytes IPv4, 8 UDP und 32 für den WireGuard-Datenheader samt Authentifizierungs-Tag. Darin braucht der innere Tunnel seinen eigenen IPv4-Header mit 20 Bytes und UDP-Header mit 8 Bytes vor seinen zweiten 32 Bytes WireGuard-Overhead. Was übrig bleibt, fasst einen IPv4-Header, einen TCP-Header und die Daten. Ein äußerer IPv6-Pfad kostet 40 statt 20 und lässt 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 |
Die Rechnung landet bei 1340 Bytes. Eine Schicht nach denselben Regeln lässt 1400 für die TCP-Nutzlast, also 1500 minus 20, 8, 32, 20 und 20, und die Differenz von 60 Bytes ist genau die innere Kapselung, die der zweite Tunnel hinzufügt.
Wenden Sie 1400 auf einen verschachtelten Pfad an, und dem inneren Tunnel fehlen 60 Bytes, unsichtbar, bis ein Paket groß genug ist, sie zu brauchen. Padding und die eigene Fragmentierungsoption eines Protokolls verschieben die Zahlen erneut, also vertrauen Sie der Tabelle.
MTU, MSS und Fragmentierung wirken an verschiedenen Stellen
Die Interface-MTU begrenzt, was das Interface aussendet, während TCP-MSS-Clamping ändert, was ein TCP-Peer zu senden bereit ist. Clamping repariert TCP-Sitzungen und bewirkt nichts für ein großes UDP-Datagramm, weshalb eine Reparatur für eine Anwendung erfolgreich aussieht und die nächste still verfehlt. Die eigene Fragmentierungsoption eines Protokolls ist ein dritter Hebel mit eigenen Fehlern. Die Interface-MTU ist der übliche erste Schritt und der gröbste.
Überbrückte und geroutete Tunnel tragen unterschiedliche Frames, daher übertragen sich Zahlen aus einer anderen Bereitstellung selten. Die Pfad-MTU-Erkennung, beschrieben in RFC 8201, hilft nur, solange die ICMP-Nachrichten, von denen sie abhängt, durchgelassen werden.
Die Schicht finden, der etwas fehlt
Prüfen Sie jeden Tunnel einzeln, bevor Sie sie verschachteln, wenn die Anforderungen einen Vergleich erlauben. Eine Sonde fester Größe klärt es: ping -M do -s 1472 -c 3 10.8.0.1 sendet ein volles IPv4-Paket mit 1500 Bytes innerhalb dieser Schicht. Fügen Sie die zweite Schicht hinzu und wiederholen Sie dieselbe Sonde, damit jeder Fehler zu einer bekannten Änderung gehört.
Wenn eine Übertragung stockt, ändern Sie jeweils einen dokumentierten Parameter und notieren Sie die fehlschlagende Größe. Prüfen Sie auch den Rückweg, denn verschachtelte Routenrekursion kann ein Paketgrößenproblem so täuschend ähnlich nachahmen, dass es einen Nachmittag kostet. Eine gefilterte ICMP-Antwort kann die echte Grenze verbergen, daher ist die Sonde wichtiger als die Überlegung.
Schreiben Sie das Budget dorthin, wo die nächste Person es findet
Eine Tabelle mit einer Zeile pro Schicht überlebt eine Faustregel. Halten Sie sie neben dem Tunneldiagramm, damit niemand die Rechnung unter Druck wiederholt.
Mehr Tunnel bedeuten mehr Abhängigkeiten, daher verdient ein Rollback-Plan seinen Platz neben dem Budget. Wenn die Zahlen immer noch nicht aufgehen, messen Sie den Pfad, statt erneut zu raten. Das Ziel ist eine Zahl, die Sie verteidigen können, nicht eine, die Sie sich merken.