Ich besitze ein kleines lokales Netzwerk, das auf einem eigenen WLAN aufsteckt, und verwende ssh
unter OS X -oServerAliveInterval=240
und PuTTY 0.62 unter Windows 7 Professional, um Verbindungen zu Linode, Hetzner und anderen Servern herzustellen.
Mit PuTTY wähle ich Connection
→ Sending of null packets to keep session active
bis 240. Das Enable TCP keepalives (SO_KEEPALIVE option)
ist standardmäßig ausgeschaltet.
Wenn mein Internet für ungefähr eine Minute vorübergehend außer Betrieb ist (ich muss mich im Captive-Portal erneut authentifizieren), verliert PuTTY fast immer alle offenen SSH-Sitzungen, die ich habe, und insbesondere diejenigen, bei denen irgendeine Aktivität stattgefunden hat, außer OpenSSH unter OS X Verliert nie eine Sitzung, solange mein Internet innerhalb von ein oder zwei Minuten wiederhergestellt ist, auch wenn ich tatsächlich versuche, etwas in ssh einzugeben, und die gesamten 60 Sekunden lang keine Antwort sehe, bis meine Verbindung wieder aktiv ist. (So weiß ich sicher, dass NAT-Zustände immer erhalten bleiben.)
Kann ich Windows / PuTTY daran hindern, gute Verbindungen zu verwerfen?
Es scheint mir, als ob SO_KEEPALIVE oder so in Windows standardmäßig aktiviert ist und die Zeitüberschreitung für die Erkennung veralteter Verbindungen viel zu gering ist. Ich würde es gerne auf etwas mehr als ein paar Sekunden erhöhen, ähnlich wie OS X gegen diese kurzen vorübergehenden Ausfälle immun ist, solange der Ausfall nur ein paar hundert Sekunden beträgt und unter dem Wert von -oServerAliveInterval
(times ServerAliveCountMax
) liegt.
mosh
ist dies eine bessere Alternative.)Antworten:
http://www.chiark.greenend.org.uk/~sgtatham/putty/faq.html#faq-timeout
Es scheint, dass
TcpMaxDataRetransmissions
(REG_DWORD) dies direkt beeinflusst. Der Wert kann mit ergänztHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters
werdenregedit.exe
(der Schlüssel fehlt standardmäßig, Sie müssen ihn also zuerst hinzufügen, um ihn zu ändern). Wenn deaktiviert, ist es 5. Fügen Sie es hinzu und setzen Sie es mindestens auff
(15) und starten Sie es neu.Der Standardwert von 5 scheint völlig unzureichend zu sein, um Verbindungen bei kurzen und vorübergehenden Netzwerkausfällen aufrechtzuerhalten. Sie würden innerhalb weniger Sekunden eine Auszeit bekommen. Ich habe diesen
TcpMaxDataRetransmissions
Schlüssel zur Registrierung hinzugefügt und seinen Wert auff
(15) gesetzt, den Computer neu gestartet und nach dem Ausführensysctl net.inet.ip.forwarding=0
auf dem Router direkt vor dem Eingeben eines Zeichens in PuTTY das Zeichen nach dem Aktivieren der Weiterleitung wieder zu mir zurückgesendet auf meinem Router nach 5 Minuten Wartezeit (Ich habe getestet, dass bei einem Wert von 0x0000000c (12) die Verbindung genau 7 Minuten nach dem ersten Versuch, während eines Ausfalls ein Paket zu senden, getrennt wird). Vor dem Neustart unterbrach PuTTY die Verbindung innerhalb weniger Sekunden. Beachten Sie, dass ein Neustart erforderlich war - zumindest unter Windows 7 Professional.Das einfache Ändern der Registrierung hat keine Auswirkungen auf bestehende oder neue Verbindungen ! In Windows ändert sich nie etwas!Währenddessen kann der Standardwert (1 Sek.) Hinzugefügt und
KeepAliveInterval
auf60000
Dezimal (60 Sek.) Gesetzt werden.1000
In meinem speziellen Fall sollte dies jedoch keine Auswirkung haben, da TCP-Keepalives nicht aktiviert waren.quelle