iptables:無効な宛先IPを持つ冗長UDPパケット

iptables:無効な宛先IPを持つ冗長UDPパケット

私は次の設定を持っています:

  • データソース(IP 192.168.178.1)はUDPパケットをサーバーに送信します。
  • サーバー(Debian)はUDPデータ(IP 192.168.178.10、ポート4000)を収集して処理します。
  • PC(Windows 10)はUDPデータ(IP 192.168.178.22、ポート4000)を監視する必要があります。

アイデアは、UDPデータをコピーして使用することですiptabels。ルールはDebianサーバー(IP 192.168.178.10)に設定されています。

iptables -t mangle -A PREROUTING -p udp --dport 4000 -j TEE --gateway 192.168.178.22 

効果は次のとおりです。

  • サーバーはまだUDPデータを受信して​​処理します(正常)。
  • PCでもデータを受信しますが、間違った宛先IPしたがって、監視ソフトウェアはこのデータを処理しません。

PCでは、WiresharkはターゲットアドレスがPCのIP(.22)ではなくサーバーのIP(.10)であることを示しています。

Internet Protocol Version 4, Src: 192.168.178.1, Dst: 192.168.178.10

今、2つ、おそらく3つの質問があります。

  • 転送されたUDPパケットの宛先IPアドレスが一致しないため、PCが転送されたUDPパケットを受信するのはなぜですか?
  • iptablesルールのIPアドレスをPCのIPアドレスに変更するには?たぶん、POSTROUTINGのルールを追加する必要がありますか?
  • チェックサムを更新する必要がありますか?

答え1

この問題に対して次の解決策が見つかりました。

  1. 宛先以外のソースからUDPパケットをコピーします。このルールは、PC(.22)から発信されたすべてのUDPパケットをコピーしてサーバー(.10)に送信します。

    sudo iptables -t mangle -A OUTPUT -p udp -d 192.168.178.22 --dport 4000 -j TEE --gateway 192.168.178.10

  2. サーバー上の宛先アドレスはまだPCのアドレスであるため、サーバーのIPアドレスに変更する必要があります。

    sudo iptables -t nat -A PREROUTING -p udp --dport 4000 -j NETMAP --to 192.168.178.10

サーバーとPCの両方が正しい宛先アドレスを含むUDPパケットを受信するため、ソフトウェアはデータを受け入れます。

関連情報