TCPキープアライブとファイアウォールによるアイドルセッションの強制終了


10

顧客サイトでは、ネットワークチームがクライアントとサーバーの間にファイアウォールを追加しました。これにより、アイドル時間の約40分後にアイドル接続が切断されます。ネットワークの人々は、ファイアウォールにはアイドル接続のタイムアウトがないと言っていますが、実際にはアイドル接続が壊れています。

これを回避するために、最初にサーバー(Linuxマシン)を構成し、tcp_keepalive_time = 300、tcp_keepalive_intvl = 300、およびtcp_keepalive_probes = 30000でTCPキープアライブをオンにしました。これは機能し、接続は数日以上実行可能です。ただし、サーバーが死んだクライアントを検出して接続を強制終了するようにしたいので、設定を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接続に影響すると考えられます。


2
クライアントがサーバーへの接続に使用しているポートまたはプロトコルの説明がありません。SSHですか?
ewwhite 2012

ファイアウォールを特定することも役立つ場合があります。
Skaperen 2012

3
netstat --timers -tnを実行して、キープアライブがソケットでアクティブ化されているかどうかを確認し、キーワード「キープアライブ」を確認します(これはソケット上のソフトウェアでアクティブ化する必要があるため)。詳細はこちら:tldp.org/HOWTO/TCP-Keepalive-HOWTO/index.html タイマー値も確認してください。最初の値は次のキープアライブパケットまでの秒数で、3番目の値は待機中の未処理のキープアライブパケットの数です返信(私が正しく思い出せば)
ビクタージャーリン2015


2
あなたのネットワークの人々はおそらく間違っています。ステートフルファイアウォールを使用している場合(ほぼ確実に)、接続ごとにエントリが必要です。アイドルタイムアウトがないと、ファイアウォールのメモリがリークし、最終的にファイアウォールが不足してクラッシュします。彼らは間違いなくどこかにアイドルタイムアウトがあります...
James Shewey

回答:


1

ステートフルファイアウォールはパケットをチェックし、接続が有効かどうかも確認します。ファイアウォールの設定も、コンピューターと同じように微調整する必要があると思います。デフォルトでは、多くのファイアウォールはアイドル接続を60分間開いたままにしますが、この時間はベンダーによって異なる場合があります。

一部のベンダーは、TCPインターセプト、TCPステートバイパス、デッド接続検出などの機能を備えており、お客様のような特別な状況に対応できます。

その他のオプションは、サーバー上にあるのと同じパラメーターでファイアウォール自体を構成して、すべてが一貫していることを確認することです。

シスコのファイアウォールでは、それを構成する次のコマンドがあります。

hostname(config)#タイムアウト機能時間

timeout conn hh:mm:ss:接続が終了するまでのアイドル時間。0:5:0〜1193:0:0です。デフォルトは1時間(1:0:0)です。

必要に応じて、複数のパラメーターがあります。

ファイアウォールを管理しているチームと話し合い、必要に応じてタイミングを調整するか、機能を確認することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.