原因
以下が考えられます。
- ファイアウォールのセッションタイムアウト(age out)
- NICのドライバ不具合
ファイアウォールのセッションタイムアウト
ファイアウォールではステートフル・インスペクションという機能でセッション(TCPコネクションやUDP/ICMP等のコンテキスト)の管理をしています。セッション管理の機能の中で、セッションタイムアウト(age out と呼ぶこともある)というものがあります。
ステートフル・インスペクションでは、行きと戻りの通信を見て、通す通さないを判断しています。例えば、 クライアントからサーバに対してhttpのTCPを許可している場合、サーバからクライアントへのsyn/ackパケットは、まず最初に相手からsynパケットが来てからじゃないと通信させない、という制御ができます。
このステートフルインスペクションではセッションが開放したままの状態だと、セキュリティが甘くなります。例えば、クライアントからサーバに対してhttpのTCPコネクションがずっと開放された状態だと、送信元IPをサーバのIPに偽装したPCが 成りすましてそのコネクションをジャックすることが考えられます。
そういったセキュリティの理由から、セッションタイムアウトという機能により、ある一定時間が経った場合、セッションを強制的に切る、ということができます。 時間は比較的自由に決められる機種が多いです。
しかし、アプリケーションによっては、一度開けたコネクションをずっと使い続けるような仕様になっているものもあります。 その場合、この機能によって急にサイトが見れなくなる、通信エラーが出る、セッションが切れる、等の症状が出たりします。
解決方法
FWのセッションタイムアウトの時間を長めに設定して下さい。
もしくは、アプリケーションを改修してもらい、TCPコネクションを適切なタイミングで閉じ、再接続を行うようにして下さい。(こちらのほうが望ましいが、アプリベンダとの交渉が難しいことが多い)
NICのドライバ不具合
NICのドライバに不具合があると、特定アプリケーションの通信で、一定時間後で受信をしているにも関わらず通信ができなくなる、という事象が稀にあります。
解決方法
NICのドライバのアップデートを行ってください。
コメント
コメント失礼します。
最近疑問であるセッションについて質問させてください。
FWのステートフルインスペクションやステートフルフェールオーバーによってセッションを切断せずに通信することが可能というのは理解できるのですが、例えば以下のようにFW以外のルータやL3SW、L2SWのところで1系と2系が切り替わってもなぜセッションが切れないのかがわからないです・・・(L3SWやL2SWはそもそもTCPやUDPセッションとは関係ないから??)
ISP—-RT—-L2SW—-FW—-L3SW—-サーバ
※どの機器もHSRPやStack等で冗長している構成とする。
ご教示いただけたら幸いです。よろしくお願いいたします。
dum0785 さん、コメントありがとうございます。
はい。L3SW/L2SW はそもそも TCP, UDPと関係ないです。IPレイヤーで動作しているので、それより上位レイヤーは関知しません。FW 等の特定の機能が例外なだけです。
nesuke様
ご回答ありがとうございます!
腑に落ちました。