キャプティブWiFiに便乗する小さなローカルネットワークがあり、OS Xではssh
を使用し、Windows 7 Professionalでは-oServerAliveInterval=240
とPuTTY 0.62を使用して、Linode、Hetzner、その他のサーバーへの接続を確立しています。
PuTTYでは、Connection
→Sending of null packets to keep session active
を240に選択します。デフォルトでは、Enable TCP keepalives (SO_KEEPALIVE option)
はオフになっています。
私のインターネットが一時的に約1分間ダウンすると(キャプティブポータルで再認証する必要があります)、PuTTYはほとんどの場合、私が持っているすべての開いているsshセッション、特に何らかのアクティビティがあったセッションを失いますが、OSXのOpenSSH実際にsshに何かを入力しようとしても、インターネットが約1〜2分以内にバックアップされている限り、セッションが失われることはなく、接続が再びアクティブになるまで、60秒ほど応答がありません。 (つまり、NATの状態は常に保持されることは確かです。)
Windows/PuTTYが正常な接続をプリエンプティブに破棄するのを停止できますか?
Windowsでは、SO_KEEPALIVEなどがデフォルトで実際にオンになっているように見え、古い接続を検出するためのタイムアウトが小さすぎます。 OS Xがこれらの短時間の一時的な停止の影響を受けないのと同様に、停止が数百秒で-oServerAliveInterval
の値(ServerAliveCountMax
の倍)を下回っている限り、数秒以上に増やしたいと思います。 。
http://www.chiark.greenend.org.uk/~sgtatham/PuTTY/faq.html#faq-timeout
TcpMaxDataRetransmissions
(REG_DWORD)が直接これに影響を与えるようです。値はHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters
を使用してregedit.exe
に追加できます(デフォルトではキーが欠落しているため、変更するには最初にキーを追加する必要があります)。設定を解除すると— 5になります。追加し、少なくともf
(15)に設定して、再起動します。
デフォルト値の5は、短時間の一時的なネットワーク停止時に接続を維持するにはまったく不十分のようです。数秒以内にタイムアウトが発生します。このTcpMaxDataRetransmissions
キーをレジストリに追加し、その値をf
(15)に設定し、マシンを再起動して、ルーターでsysctl net.inet.ip.forwarding=0
を実行した後PuTTYで文字を入力する直前に、5分間待機した後、ルーターで転送を有効にした後、文字がエコーバックされました(0x0000000c(12)の値が接続を正確に7分間切断することを確認するためにテストしました)停止中に最初にパケットを送信しようとした後)。再起動する前に、PuTTYはすぐに数秒以内に接続をタイムアウトしました。再起動が必要であることに注意してください—少なくともWindows 7 Professionalでは単にレジストリを変更しても、既存の接続にも新しい接続にも影響がありません! Windowsでは何も変わりません!
その間、KeepAliveInterval
をデフォルトの未設定値60000
(1秒)から1000
10進数(60秒)に追加して設定することもできますが、上記のような私の特定のケースでは、TCPキープアライブが有効になっていませんでした。