顧客サイトでは、ネットワークチームがクライアントとサーバーの間にファイアウォールを追加しました。これにより、アイドル時間の約40分後にアイドル接続が切断されます。ネットワークの人々は、ファイアウォールにはアイドル接続のタイムアウトがないと言っていますが、実際にはアイドル接続が壊れています。
これを回避するために、最初にサーバー(Linuxマシン)をTCPキープアライブをtcp_keepalive_time = 300、tcp_keepalive_intvl = 300、およびtcp_keepalive_probes = 30000でオンに設定しました。これで動作し、接続は数日以上存続します。ただし、サーバーで死んだクライアントを検出して接続を強制終了したいので、設定をtime = 300、intvl = 180、probes = 10に変更して、クライアントが本当に存続中、サーバーは300秒(5分)ごとにプローブし、クライアントはACKで応答します。これにより、ファイアウォールがこれをアイドル接続として認識して強制終了するのを防ぎます。クライアントが停止している場合、10回のプローブの後、サーバーは接続を中止します。驚いたことに、アイドル状態で稼働中の接続は、以前と同じように約40分後に強制終了されます。
クライアント側で実行されているWiresharkは、サーバーでキープアライブが有効になっている場合でも、サーバーとクライアントの間でキープアライブをまったく表示しません。
ここで何が起こっているのでしょうか?
サーバーのキープアライブ設定がtime = 300、intvl = 180、probes = 10の場合、クライアントがアクティブでアイドル状態の場合、サーバーは300秒ごとにキープアライブプローブを送信し、接続をそのままにし、クライアントは死んでいます。300秒後に1つ送信し、接続を終了する前に180秒ごとにさらに9つのプローブを送信します。私は正しいですか?
1つの可能性は、ファイアウォールが何らかの理由でサーバーからのキープアライブプローブをインターセプトし、それらをクライアントに渡さないことです。プローブを取得したという事実により、接続がアクティブであると見なされます。これはファイアウォールの一般的な動作ですか?どのようなファイアウォールが関係しているかはわかりません。
サーバーはTeradataノードであり、接続はTeradataクライアントユーティリティからデータベースサーバー、サーバー側のポート1025への接続ですが、SSH接続で同じ問題が発生しているため、すべてのTCP接続。
ステートフルファイアウォールはパケットをチェックし、接続が有効かどうかも確認します。ファイアウォールの設定も、コンピューターと同じように微調整する必要があると思います。デフォルトでは、多くのファイアウォールはアイドル接続を60分間開いたままにしますが、この時間はベンダーによって異なる場合があります。
一部のベンダーは、TCP Intercept、TCP State Bypass、およびDead Connection Detectionなどの機能を備えており、お客様のような特別な状況を処理することができます。
その他のオプションは、サーバー上にあるのと同じパラメーターでファイアウォール自体を構成して、すべてが一貫していることを確認することです。
シスコのファイアウォールでは、次のコマンドで構成します。
hostname(config)#タイムアウト機能時間
timeout conn hh:mm:ss:接続が終了するまでのアイドル時間。0:5:0〜1193:0:0です。デフォルトは1時間(1:0:0)です。
必要に応じて、複数のパラメーターがあります。
ファイアウォールを管理しているチームと話し、ニーズに応じてタイミングを調整するか、機能を確認することをお勧めします。