web-dev-qa-db-ja.com

Linux NATホストでは、重複セグメントが遅れると接続がリセットされます

https://www.cloudshark.org/captures/6f185eb12e97

  • 172.30.5.1ブリッジネットワークを備えたLinuxVM、別のサーバーで実行、VMはRFC1918アドレスのみ
  • 144.76.103.194インターネットとRFC1918ブロードキャストドメインの両方に接続された1つのインターフェイスを備えたLinuxホストは、VMのNATゲートウェイとして機能します
  • 86.59.21.20 LinuxHTTPサーバー

ポート29909のTCPストリームは、遅延した、すでに再送信されたセグメントが86.59.21.20から到着した後、144.76.103.194からのRSTに遭遇します。

  • フレーム#581-シーケンス522729の再送信が開始されます
  • フレーム#615-シーケンス522729が再送信されました
  • フレーム#1727-元のシーケンス522729が到着し、約600ミリ秒遅れました
  • フレーム#1728-NATホストはRSTをHTTPサーバーに送り返します

NATホストから直接開始された接続は正常に機能します。

1
Michael Renner

これは、Linux conntrackコードが「長い」遅延セグメントに不満を持っており、予期しないデータのために接続を中止したことに関連しているようです。

この動作は、netfilter/nf_conntrack_tcp_be_liberalを1に設定することで軽減できます。

カーネルドキュメント: https://www.kernel.org/doc/Documentation/networking/nf_conntrack-sysctl.txt

3
Michael Renner