Path MTU Discovery kaputt?

Es ist schon komisch. Nach dem Wechsel der Router-Anbindung von tinc auf GRE-Tunnel ließen sich manche Websites nicht mehr öffnen. Per tcpdump wurde sichtbar, dass der Traffic einfach stoppt und kein ganzes Dokument übertragen wird. Der Fehler trat nur bei einigen Sites auf und nur über IPv4.

Da dachten wir zuerst an Path MTU Discovery, die die „engste“ Verbindung durchs Internet ausmessen soll und den Endgeräten mitteilen, welche maximale Länge ihre Pakete haben dürfen. Dadurch, dass wir GRE-Tunnel benutzen, ist unser Maximum etwas kleiner geworden. Daher lag der Verdacht hier nahe.

Es lag tatsächlich an der MTU Discovery. Und zwar hat unser Router, an dem wir mit unseren Supernodes hängen, anscheinend an den Webserver „Fragmentation needed“ per ICMP zurückgeschickt, dieser ignoriert das aber. Damit folgt soundcloud.com, wie viele andere Dienste auch, leider nicht der Spezifikation.

Die MTU ist durch den Tunnel kleiner als das im Internet übliche Maximum von 1500 Byte. Dadurch, dass hier IP-Traffic in IP-Traffic eingepackt wird, müssen wir von der maximalen Größe den Overhead abziehen und kommen auf 1476 Byte. Das ist auch so konfiguriert und führt bei vielen Diensten nicht zu einem Problem.

Welcher Dienst kompetent in Sachen Internet-Anbindung ist, lässt sich in der Regel daran ablesen, ob IPv6 angeboten wird.

Im TCP-Protokoll gibt es die Möglichkeit, eine maximale Größe anzugeben. Das ist die Größe des Inhalts des Paketes, das einen Router nicht zu interessieren hat. Wir machen das also so, dass Browser auf unserer Seite und Server auf der anderen Seite abmachen, keine Pakete zu schicken, die nicht durch den Tunnel passen.

Damit nicht alle Freifunk-Nutzer ihren Browser patchen müssen, manipulieren wir die Pakete auf dem Supernode. Um das Problem zu umgehen müssen wir also leider die TCP-Header anfassen, obwohl sich das für einen Router nicht gehört. Das ist jedoch eine übliche Vorgehensweise.

# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS  --clamp-mss-to-pmtu

Bei IPv6 scheinen die Dienstebetreiber die entsprechenden ICMP-Nachrichten nicht zu blockieren. Vermutlich weil diejenigen, die IPv6 ausgerollt haben, auch die lautstarken Warnungen aus der Community gehört haben: „If you block ICMP, you are breaking the Internet!“.

Vielen Dank an @takt, der mich auf die Lösung hingewiesen hat!

7 „Gefällt mir“

Über mtu-path-discovery und mss-clamping kann man theologische Diskussionen führen.
Mir klingeln immer nur die Ohren, wenn ich den Streitparteien dabei zuhören darf/muss… Haben natürlich alle irgendwo „Recht“.

Ich habe 2 Beiträge in ein neues Thema verschoben: MTU im batman Meshnetz