Path MTU Discovery troubleshooten: Wenn Pakete mysteriös verschwinden
AI generated
$
/etc
Linux
Path MTU Discovery troubleshooten
Wenn Pakete mysteriös verschwinden

SSH-Verbindungen, die sich normal aufbauen, dann aber bei der ersten längeren Ausgabe einfrieren, oder HTTPS-Seiten, die nur teilweise laden, deuten selten auf ein Problem der Anwendung selbst hin, sondern fast immer auf eine blockierte Path MTU Discovery. Wer versteht, wie PMTUD funktioniert und woran sie in der Praxis scheitert, kann solche schwer greifbaren Netzwerkfehler in Minuten statt Stunden diagnostizieren.

10 Min. Lesezeit Linux Networking Troubleshooting

1. Was Path MTU Discovery eigentlich löst

Jede Netzwerkverbindung entlang eines Pfades kann eine unterschiedliche maximale Paketgröße, die Maximum Transmission Unit, unterstützen. Während lokale Ethernet-Segmente üblicherweise 1500 Byte erlauben, reduzieren Tunnel-Technologien wie VPNs, GRE oder PPPoE die tatsächlich nutzbare Größe durch zusätzlichen Protokoll-Overhead häufig auf Werte zwischen 1400 und 1480 Byte. Ohne einen Mechanismus, der diese Unterschiede erkennt, würden Router entweder Pakete stillschweigend fragmentieren oder, schlimmer, größere Pakete einfach verwerfen.

Path MTU Discovery löst dieses Problem, indem der Absender seine Pakete mit gesetztem Don't Fragment Bit versendet und damit Routern explizit untersagt, das Paket bei Bedarf in kleinere Fragmente aufzuteilen. Stößt ein Router unterwegs auf ein Paket, das größer ist als die MTU des nächsten Hops, verwirft er es und schickt stattdessen eine ICMP-Nachricht vom Typ 3, Code 4, Fragmentation Needed, an den Absender zurück, die zusätzlich die tatsächlich unterstützte MTU des betroffenen Hops enthält. Der Absender reduziert daraufhin die Paketgröße für diese Verbindung und versucht die Übertragung erneut.

2. Warum blockierte ICMP-Nachrichten zum eigentlichen Problem werden

In der Praxis konfigurieren viele Firewalls pauschale Regeln, die sämtlichen ICMP-Verkehr verwerfen, oft aus einem veralteten Sicherheitsverständnis heraus, das ICMP grundsätzlich als potenzielles Angriffsvektor betrachtet. Genau diese Regeln blockieren jedoch auch die für Path MTU Discovery essenzielle Fragmentation-Needed-Nachricht, wodurch der Absender niemals erfährt, dass sein Paket verworfen wurde, und weiterhin Pakete in der ursprünglichen, zu großen Größe sendet.

Dieses Verhalten wird als Black Hole PMTUD bezeichnet, weil Pakete oberhalb der tatsächlichen Pfad-MTU im Netzwerk buchstäblich verschwinden, ohne dass Absender oder Anwendung eine Rückmeldung erhalten. Da kleinere Pakete, etwa der initiale TCP-Handshake oder kurze SSH-Kontrollnachrichten, das Problem nicht auslösen, funktioniert die Verbindung zunächst scheinbar einwandfrei, bis die Anwendung erstmals ein größeres Paket senden möchte, das dann kommentarlos verworfen wird und die Verbindung effektiv einfriert.

3. Typische Symptome: Hängende SSH-Sitzungen und abbrechende HTTP-Antworten

Ein klassisches Symptom ist eine SSH-Verbindung, die sich problemlos aufbaut und auch für einfache Befehle wie ls funktioniert, aber komplett einfriert, sobald ein Befehl mit umfangreicher Ausgabe wie cat auf eine größere Datei oder ein interaktives Programm mit vollem Terminal-Redraw ausgeführt wird. Der SSH-Handshake selbst besteht aus vielen kleinen Paketen unterhalb der problematischen Größenschwelle, während die eigentliche Nutzdatenübertragung erstmals Pakete in voller MTU-Größe erzeugt.

Auf HTTP- und HTTPS-Ebene äußert sich dasselbe Problem als Seiten, die nur teilweise laden, TLS-Handshakes, die erfolgreich abschließen, aber danach hängen bleiben, oder API-Antworten, die bei kleinen JSON-Payloads funktionieren, bei größeren Antworten jedoch systematisch timeout auslösen. Besonders tückisch ist, dass dieses Verhalten oft nur für bestimmte Ziel- oder Quellnetze auftritt, während andere Verbindungen über denselben Server völlig unauffällig funktionieren, weil nur bestimmte Pfadabschnitte tatsächlich eine reduzierte MTU aufweisen.

4. Diagnose Schritt eins: Die tatsächliche Pfad-MTU mit ping ermitteln

Der zuverlässigste erste Diagnoseschritt ist ein gezielter ping mit explizit gesetztem Don't Fragment Bit und variabler Paketgröße, um iterativ die größte noch funktionierende Paketgröße zu ermitteln. Unter Linux wird das Don't Fragment Bit über die Option -M do gesetzt, während -s die Nutzdatengröße ohne den 28 Byte umfassenden IP- und ICMP-Header festlegt, weshalb bei einer Ziel-MTU von 1500 Byte der maximale funktionierende -s Wert bei 1472 liegt.

Schlägt ein ping mit einer bestimmten Größe fehl, während kleinere Größen erfolgreich sind, grenzt eine binäre Suche zwischen den beiden Werten die tatsächliche Pfad-MTU schnell ein. Bleibt jede Fehlermeldung aus und die Pakete verschwinden einfach ohne Antwort, ist das bereits ein starkes Indiz dafür, dass die notwendige ICMP-Rückmeldung irgendwo auf dem Pfad blockiert wird, statt dass tatsächlich keine MTU-Beschränkung vorliegt.


# Testet, ob eine Paketgroesse von 1472 Byte Nutzdaten (1500 MTU) durchkommt
ping -M do -s 1472 -c 3 zielserver.example.com

# Bei Fehlschlag schrittweise kleinere Groessen testen, bis die
# tatsaechliche Pfad MTU gefunden ist
ping -M do -s 1400 -c 3 zielserver.example.com

5. Diagnose Schritt zwei: tracepath für die automatisierte MTU-Ermittlung

Statt die passende Paketgröße manuell per Bisektion zu suchen, automatisiert tracepath genau diesen Prozess und ermittelt gleichzeitig, an welchem Hop entlang des Pfades die MTU tatsächlich reduziert wird. Das Werkzeug sendet Pakete mit steigender TTL, ähnlich wie traceroute, kombiniert dies aber mit Path MTU Discovery und zeigt in der Ausgabe explizit an, an welcher Stelle die zulässige Paketgröße erstmals kleiner wird.

Bricht die tracepath Ausgabe an einem bestimmten Hop ohne weitere pmtu Meldungen ab, deutet das auf eine ICMP-Blockade genau an dieser Stelle hin, wo die eigentlich notwendige Fragmentation-Needed-Nachricht entweder vom betroffenen Router selbst nicht generiert oder auf dem Rückweg von einer Firewall verworfen wird. Diese Information ist besonders wertvoll, wenn mehrere Netzwerksegmente involviert sind, etwa bei einer VPN-Verbindung zwischen zwei Rechenzentren, weil sie eingrenzt, ob das Problem beim eigenen Edge-Router oder erst beim Provider auftritt.


# Pfad MTU und einzelne Hops mit reduzierter MTU automatisch ermitteln
tracepath zielserver.example.com

# Beispielausgabe mit einem Hop, der die MTU auf 1420 reduziert
#  3:  vpn-gateway.example.net       1.2ms pmtu 1420
#  4:  no reply

6. Diagnose Schritt drei: ICMP-Verkehr mit tcpdump direkt beobachten

Um zweifelsfrei zu klären, ob eine ICMP Fragmentation-Needed-Nachricht überhaupt beim ursprünglichen Absender ankommt, hilft eine gezielte tcpdump-Mitschnitt-Session auf dem betroffenen Server während eines gleichzeitig ausgeführten Tests mit großen Paketen. Kommt keine ICMP-Type-3-Code-4-Nachricht an, obwohl der ping oder tracepath Test eindeutig auf eine MTU-Beschränkung hindeutet, liegt der Fehler mit hoher Wahrscheinlichkeit in einer lokalen oder vorgelagerten Firewall-Regel, die eingehende ICMP-Pakete pauschal verwirft.

Besonders in Cloud-Umgebungen und bei Security-Groups, die standardmäßig nur ausgewählte Ports statt gesamter Protokolle öffnen, ist eine fehlende ICMP-Freigabe eine der häufigsten Ursachen für PMTUD-Probleme. Der Mitschnitt macht sichtbar, ob das Problem tatsächlich am eigenen System liegt oder weiter stromaufwärts beim Provider, was die Fehlersuche erheblich beschleunigt, statt auf Verdacht Konfigurationen an mehreren Stellen gleichzeitig zu ändern.


# Eingehenden ICMP Verkehr auf dem Server mitschneiden
tcpdump -ni eth0 icmp

# Während des Mitschnitts in einem zweiten Terminal einen Test mit
# großen Paketen ausloesen, um die Fragmentation Needed Antwort zu pruefen
ping -M do -s 1472 -c 3 zielserver.example.com

7. TCP MTU Probing: PMTUD ohne Abhängigkeit von ICMP

Als Reaktion auf die weitverbreitete ICMP-Blockade im öffentlichen Internet definiert RFC 4821 mit Packetization Layer Path MTU Discovery einen Mechanismus, der die tatsächlich nutzbare Paketgröße direkt auf TCP-Ebene ermittelt, ohne auf eingehende ICMP-Nachrichten angewiesen zu sein. Statt auf eine Fragmentation-Needed-Antwort zu warten, sendet der TCP-Stack testweise größere Pakete und wertet aus, ob eine Bestätigung für diese Pakete eintrifft, wodurch fehlendes ICMP-Feedback keine Blockade mehr verursacht, sondern lediglich als fehlende Bestätigung interpretiert wird.

Unter Linux lässt sich dieses Verhalten über den Kernel-Parameter net.ipv4.tcp_mtu_probing aktivieren, wobei der Wert 1 Probing nur nach erkannten schwarzen Löchern aktiviert und der Wert 2 Probing standardmäßig für alle TCP-Verbindungen erzwingt. Für Server, die regelmäßig mit Netzwerken kommunizieren, deren ICMP-Konfiguration nicht kontrolliert werden kann, etwa bei Verbindungen zu Kundennetzwerken oder Drittanbieter-APIs, ist die Aktivierung von TCP MTU Probing eine wirksame Ergänzung zu MSS-Clamping und ICMP-Freigabe, weil sie das Problem selbst dann abfängt, wenn beide anderen Maßnahmen aus organisatorischen Gründen nicht durchsetzbar sind.


# TCP MTU Probing dauerhaft aktivieren, Wert 1 = nur nach erkanntem
# schwarzem Loch, Wert 2 = immer aktiv für alle TCP Verbindungen
sysctl -w net.ipv4.tcp_mtu_probing=1

# Persistent in der sysctl Konfiguration hinterlegen
echo "net.ipv4.tcp_mtu_probing = 1" >> /etc/sysctl.d/99-pmtud.conf
sysctl --system

8. Fix eins: ICMP Fragmentation Needed gezielt statt pauschal erlauben

Die sauberste und nachhaltigste Lösung ist, ICMP nicht pauschal zu blockieren, sondern gezielt die für Path MTU Discovery notwendigen Nachrichtentypen zuzulassen, während andere ICMP-Typen weiterhin eingeschränkt werden können. Für IPv4 betrifft das konkret ICMP Typ 3 Code 4, für IPv6 das strukturell äquivalente ICMPv6 Typ 2, Packet Too Big, das sogar noch essenzieller ist, weil IPv6-Router grundsätzlich keine Fragmentierung im Netz vornehmen und vollständig auf funktionierende PMTUD angewiesen sind.

Eine entsprechend präzise Firewall-Regel lässt sich sowohl mit klassischem iptables als auch mit dem moderneren nftables Framework umsetzen und sollte fester Bestandteil jeder produktiven Server-Firewall sein, unabhängig davon, wie restriktiv der übrige ICMP-Verkehr gehandhabt wird.


# ICMP Fragmentation Needed für IPv4 gezielt zulassen
iptables -A INPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT

# Äquivalent für IPv6: Packet Too Big zulassen
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type packet-too-big -j ACCEPT

9. Fix zwei: MSS-Clamping als robuste Alternative auf Gateways und Tunneln

Wo sich blockierte ICMP-Nachrichten nicht zuverlässig beheben lassen, etwa weil sie bei einem vorgelagerten Provider verworfen werden, auf den kein Zugriff besteht, schafft MSS-Clamping Abhilfe, indem es das Problem an der Quelle vermeidet, statt auf funktionierende PMTUD zu vertrauen. Die Technik passt die TCP Maximum Segment Size direkt im SYN-Paket während des Verbindungsaufbaus so an, dass die resultierenden Pakete von vornherein unterhalb der tatsächlichen Pfad-MTU bleiben.

Besonders auf VPN-Gateways und Tunnel-Endpunkten, wo der zusätzliche Protokoll-Overhead die effektive MTU regelmäßig reduziert, ist MSS-Clamping die pragmatischere und robustere Lösung gegenüber dem alleinigen Verlassen auf ICMP-basierte PMTUD, weil sie unabhängig von Firewall-Konfigurationen entlang des restlichen Pfades funktioniert und das Problem strukturell verhindert, statt es nur zu erkennen.


# MSS Clamping auf einem VPN Gateway für ausgehenden Traffic über tun0
iptables -t mangle -A FORWARD -o tun0 -p tcp --tcp-flags SYN,RST SYN \
  -j TCPMSS --clamp-mss-to-pmtu

# Äquivalent in nftables Syntax
nft add rule inet mangle forward oifname tun0 tcp flags syn tcp option \
  maxseg size set rt mtu
Symptom Wahrscheinliche Ursache Diagnosewerkzeug Empfohlener Fix
SSH hängt bei großer Ausgabe Blockierte ICMP Fragmentation Needed Nachricht ping -M do mit variabler Größe ICMP Typ 3 Code 4 gezielt freigeben
HTTPS Seite lädt nur teilweise Black Hole PMTUD zwischen Client und Server tracepath und tcpdump MSS Clamping auf dem Gateway aktivieren
VPN Tunnel funktioniert nur für kleine Pakete Reduzierte effektive MTU durch Tunnel Overhead tracepath über den Tunnel MSS Clamping direkt auf dem Tunnel Interface
API Antworten mit großem Payload timeout ICMPv6 Packet Too Big wird verworfen tcpdump auf ICMPv6 Verkehr ICMPv6 Typ 2 an der Firewall erlauben

Mironsoft

Server-Administration, Docker-Hosts und Performance-Tuning

Linux-Server, die niemand im Team richtig versteht?

Wir übernehmen Setup, Absicherung und Performance-Tuning von Linux-Servern und Docker-Hosts für Magento-Deployments, dokumentiert und nachvollziehbar statt gewachsen und unklar.

Server-Audit

Bestehende Server-Konfiguration auf Sicherheitslücken und Performance-Bremsen prüfen.

Docker-Host-Setup

Produktionsreife Docker-Umgebungen für Magento sauber aufsetzen und absichern.

Monitoring & Tuning

Ressourcenverbrauch messen und Systemd, Kernel und Dienste gezielt optimieren.

10. Zusammenfassung

PMTUD Troubleshooting

Kernursache

Blockierte ICMP Fragmentation Needed oder Packet Too Big Nachrichten

Erster Diagnoseschritt

ping -M do mit variabler Paketgröße zur MTU-Eingrenzung

Automatisierte Diagnose

tracepath zeigt den betroffenen Hop direkt an

Robustester Fix

MSS Clamping auf Gateways und Tunnel-Interfaces

11. FAQ: PMTUD Troubleshooting

1Warum funktionieren kleine Anfragen, aber nicht große Antworten?
Kleine Pakete bleiben unterhalb der tatsächlichen Pfad-MTU und werden problemlos zugestellt, während größere Pakete auf einen Router mit kleinerer MTU treffen und verworfen werden, sofern die zugehörige ICMP-Rückmeldung blockiert ist und der Absender die Paketgröße nie reduziert.
2Ist das Problem bei IPv6 genauso relevant wie bei IPv4?
Es ist sogar kritischer, weil IPv6-Router grundsätzlich keine Fragmentierung im Netz vornehmen dürfen und vollständig auf funktionierende Path MTU Discovery angewiesen sind, weshalb blockierte ICMPv6 Packet Too Big Nachrichten dort noch gravierendere Auswirkungen haben.
3Reicht es, ICMP komplett zu erlauben, um das Problem zu vermeiden?
Ja, das löst das Problem zuverlässig, ist aber aus Sicherheitssicht oft unnötig pauschal. Besser ist es, gezielt nur die für PMTUD relevanten ICMP-Typen freizugeben und andere Typen weiterhin einzuschränken.
4Was ist der Unterschied zwischen MTU-Anpassung und MSS-Clamping?
MTU-Anpassung ändert die maximale Paketgröße auf Interface-Ebene für allen Verkehr, während MSS-Clamping gezielt nur die TCP Segmentgröße während des Verbindungsaufbaus anpasst und damit selektiver und oft praktikabler ist.
5Warum tritt das Problem oft erst bei bestimmten Zielservern auf?
Weil nur bestimmte Pfadabschnitte tatsächlich eine reduzierte MTU aufweisen, etwa durch einen VPN-Tunnel oder PPPoE-Verbindung entlang des Pfads zu diesem einen Ziel, während andere Verbindungen über durchgehend gleich große MTUs verlaufen.
6Kann ich PMTUD komplett deaktivieren, um das Problem zu umgehen?
Technisch möglich über die Kernel-Option net.ipv4.ip_no_pmtu_disc, das erzwingt dann aber Fragmentierung im Netz, was selbst Performance-Nachteile hat und bei IPv6 ohnehin nicht funktioniert, weshalb ICMP-Freigabe oder MSS-Clamping vorzuziehen sind.
7Wie finde ich heraus, an welchem Hop das Problem konkret liegt?
tracepath zeigt in der Ausgabe explizit an, ab welchem Hop sich die pmtu ändert oder an welcher Stelle keine weitere Antwort mehr kommt, was den betroffenen Netzwerkabschnitt eingrenzt.
8Betrifft MSS-Clamping auch UDP-basierte Anwendungen?
Nein, MSS ist ein reines TCP-Konzept. Für UDP-basierte Protokolle wie manche VPN-Implementierungen muss die Anwendung selbst PMTUD unterstützen oder die MTU des jeweiligen Tunnel-Interfaces manuell angepasst werden.
9Warum reicht ein einfacher ping ohne -M do nicht als Test aus?
Ohne das Don't Fragment Bit erlaubt ein normaler ping dem Kernel oder Routern, das Paket bei Bedarf zu fragmentieren, wodurch der Test erfolgreich erscheint, obwohl das eigentliche PMTUD-Problem für nicht fragmentierbare TCP-Verbindungen weiterhin besteht.
10Sollte MSS-Clamping auf jedem VPN-Gateway standardmäßig aktiv sein?
Ja, da Tunnel-Overhead die effektive MTU praktisch immer reduziert, ist MSS-Clamping auf VPN-Gateways eine sinnvolle präventive Maßnahme, die unabhängig von der ICMP-Konfiguration entlang des restlichen Pfades zuverlässig funktioniert.