IpSec/GREトンネルでのパケット損失

IpSec/GREトンネルでのパケット損失

これが私の設定です:

  +--------------------+ +-------------------+ +--------------------+
  | ルータ B a +-----+ ルータ+ファイアウォール C | | b ルータ D |
  | 10.10.10.1 ----------------------------------10.10.10.2 |
  | +-----+ | | +--- その他のネット
  | 192.168.10.1 | |192.168.2.11 +--+192.168.2.57 |
  +----|---------------+ +-------------------+ +--------------------+
       | |                
  +----|---------------+ +----|---------------+
  |192.168.10.11 | |192.168.2.38 |
  |サーバー A | |クライアント E |
  | | | |
  | | | |
  +--------------------+ +--------------------+
  • ルータ B と C には、インターネット上のパブリック IP と、192.168.10.1 ~ 192.168.2.57 用の IpSec トンネル (Racoon) があります。
  • すべてのマシンはUbuntu Linuxを実行しています。
  • 192.168.10.1 ~ 192.168.2.57 の間には、トンネル IP が 10.10.10.1 および 10.10.10.2 の GRE トンネルが埋め込まれています。
  • トンネルは、192.168.10.0/24 ネットからルータ D の背後にある他のネットワーク (例: 192.168.3.0/24) にデータをルーティングできる必要があります。
  • すべての IP は他のすべての IP に ping を実行できます。
  • クライアント E がサーバー A で Web ページを開くと、TCP/IP ハンドシェイクと「GET /」がサーバー A に到達しますが、サーバー A の (大きな) 応答はクライアント E に到達せず、GRE トンネル内で失われます。
  • 断片化により大きなパケットが失われると考え、インターフェース a と b の MTU を最終的に 1000 バイトまで減らしましたが、効果はありませんでした。
  • インターフェースAのtcpdumpは正しいHTTPトラフィックを表示します
  • インターフェース b の tcpdump では、E->A からのハンドシェイクと HTTP トラフィックが表示されますが、A->E からの大きな応答パケットは表示されません。
  • ルータ+ファイアウォールCのtcpdumpでは、GREパケットがIpSecトンネルからドロップアウトし、大きなパケットが到着していないことが示されています。
  • B->E からの HTTP リクエストは正常に機能します。
  • D<->B間の大きなパケットはGRE経由ではなく、直接IPSecトンネル(つまり192.168.2.57インターフェース上のssh 192.168.10.1)で動作します。
  • B と「more nets」間の大きなパケットは機能します (GRE トンネル経由)。
  • A と E の役割を入れ替えても効果はありません。(E をサーバー、A をクライアントにしたり、反対方向の大きなパケットは機能しません。)

今、行き詰まっています。何をチェックすればよいかアドバイスはありますか? どの構成が診断に役立ちますか? どうもありがとうございます!

答え1

MSSを忘れた

1) GREトンネル1400にMTUを設定する必要があります

2) SYNパケットの場合、mssを同じサイズのmtu 1400に設定します。

Linuxの場合:

iptables -I FORWARD -i tun+ -p tcp -m tcp --tcp-flags SYN、RST SYN -j TCPMSS --set-mss 1400

答え2

デフォルトのテーブルはフィルターiptables -A FORWARD ...なので、ルールを次のように設定すると、フィルターテーブル。他にもいくつかのテーブルとテーブルがありますマングルそのうちの 1 つです。man iptables によると、「このテーブルは特殊なパケット変更に使用されます。」

したがって、パッケージを編集するには( によって行われます-j TCPMSS --set-mss)、マングル表の場合、ルールは次のようになります。

iptables -t mangle -A FORWARD -i tun+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400

関連情報