SSH hängt über OpenVPN? Messen Sie zuerst die Pfad-MTU
Echo funktioniert, dann blockiert ein Verzeichnislisting die Sitzung dauerhaft. Prüfen Sie die Obergrenze von beiden Seiten, bevor Sie mssfix, fragment oder die Interface-MTU anfassen.
SSH verbindet, die Eingabeaufforderung erscheint, und die Sitzung stirbt, sobald ein Befehl etwas Umfangreiches zurückgibt. Echo läuft noch kurz, dann läuft die Verbindung ab, während der Client den Tunnel weiterhin als aktiv anzeigt. Eine Sitzung, die bis zum Eintreffen von Daten gesund ist, stößt meist an eine Größenbegrenzung und nicht an einen SSH-Defekt. Die folgenden Prüfungen sind so geordnet, dass die billigste Erklärung zuerst ausgeschlossen wird.
Lesen Sie die Fehlerform, bevor Sie das Profil anfassen
Kleine Pakete kommen durch, volle nicht. Eine Eingabeaufforderung, ein Banner oder ein Tastendruck passen leicht; ein Verzeichnislisting, ein Download oder ein eingefügter Block nicht. Die Größe, bei der sich das Verhalten ändert, ist der Hinweis, nicht die Tatsache, dass SSH das beteiligte Programm ist.
Der Mechanismus ist die Pfad-MTU-Erkennung, die auf Rückmeldung angewiesen ist. TCP wählt eine Segmentgröße, und wenn ein Router unterwegs das resultierende Paket nicht weiterleiten kann, soll er das mit einer ICMP-Nachricht mitteilen. Die Kapselung macht das äußere Paket größer als das innere, deshalb liegt die nutzbare Größe im Tunnel immer unter der physischen Strecke. Filtern Sie diese ICMP-Nachrichten irgendwo, und der Absender erhält die Korrektur nie, sendet weiter volle Segmente, und das äußere Paket wird ohne Meldung verworfen.
Messen Sie die Obergrenze von beiden Seiten
Vergleichen Sie die MTU des Tunnels mit der physischen Strecke, bevor Sie eine der beiden ändern. Ein Tunnel, der den physischen Wert kopiert hat, hat Ihnen bereits gesagt, wo die Abweichung sitzt.
Prüfen Sie von innen mit einer Anforderung, die Fragmentierung verbietet, und senken Sie die Nutzlast, bis Antworten zurückkommen. Das Größenargument zählt nur die Nutzlast, deshalb liegt der funktionierende Wert immer unter der Interface-MTU. Addieren Sie die Kopfzeilengrößen wieder, wenn Sie die Interface-Zahl brauchen.
ip link show tun0
ping -M do -s 1380 10.9.0.1Wiederholen Sie die Prüfung gegen die öffentliche Adresse des Servers von außerhalb des Tunnels. Scheitern große Prüfungen auch dort, sitzt die Grenze auf dem Weg zum Server, und keine Tunneloption verschiebt sie. Dieser Vergleich erspart es Ihnen, einen Client zu optimieren, der nie das Problem war. Notieren Sie beide Ergebnisse, bevor Sie eine Konfigurationsdatei öffnen.
mssfix und fragment erledigen verschiedene Aufgaben
mssfix begrenzt die Segmentgröße, die TCP-Verbindungen im Tunnel während ihres Handshakes ankündigen. Es ist der richtige Hebel für SSH, HTTPS und Dateikopien, weshalb der Stillstand oft verschwindet, sobald er gesetzt ist. Er berührt UDP-Nutzlasten überhaupt nicht.
Ein Tunnel, der auch einen UDP-Dienst trägt, kann nach der SSH-Korrektur weiter scheitern, und dieses Ergebnis verwirrt jeden, der annimmt, eine Option decke alles ab.
fragment ist der andere Mechanismus und ein anderes Werkzeug. Es zerlegt überdimensionierte Pakete vor der Kapselung, gilt nur für UDP-Transport, fügt Overhead pro Datagramm hinzu und ist als letztes Mittel bei kaputter Erkennung dokumentiert. Beide Einstellungen müssen bei den Peers übereinstimmen, die den Tunnel beenden. Wenn ein Ende begrenzt und das andere fragmentiert, entstehen Logwarnungen und Verhalten, das niemand aus den Dateien vorhersagen kann.
Die Interface-MTU zu senken ist die grobe Option
Die Interface-MTU an beiden Enden zu reduzieren ist das grobe Werkzeug. Es nennt jedem inneren Absender eine kleinere Zahl, was funktioniert, und lädt diese Kosten auf den gesamten Verkehr statt auf die TCP-Ströme, die sie brauchen.
Wählen Sie es, wenn der Tunnel Verkehr trägt, den Sie nicht begrenzen können, oder wenn der Client ein Gerät ist, dessen Profil Sie nicht kontrollieren. Wenden Sie es symmetrisch an und notieren Sie den Wert neben dem Profil. Eine halb angewandte Änderung ist schlimmer als keine, weil sie wie eine Lösung aussieht.
Testen Sie mit der Übertragung neu, die hängen blieb
Verbinden Sie sich neu, damit die Einstellungen laden, öffnen Sie eine frische Verbindung und wiederholen Sie den Befehl, der eingefroren ist. Die Segmentgröße wird beim Handshake ausgehandelt, deshalb trägt eine Sitzung, die das Wiederverbinden überlebt hat, noch den alten Wert. Ein Ping ist hier ein schlechter Test, denn der ganze Fehler besteht darin, dass kleine Pakete durchkommen. Nehmen Sie das Listing, den Download oder das Einfügen, das kaputtging.
Bleibt der Stillstand bei kleinerer Größe, schauen Sie anderswo: eine zustandsbehaftete Firewall, die den Strom auslaufen lässt, eine doppelte Adresse oder eine Route, die sich beim Wiederverbinden verschiebt. Notieren Sie die Prüfgröße, die scheiterte, und die Einstellung, die Sie geändert haben, denn genau dieses Paar macht den nächsten Bericht nützlich.