私は次の設定を持っています:
- データソース(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
この問題に対して次の解決策が見つかりました。
宛先以外のソースから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
サーバー上の宛先アドレスはまだPCのアドレスであるため、サーバーのIPアドレスに変更する必要があります。
sudo iptables -t nat -A PREROUTING -p udp --dport 4000 -j NETMAP --to 192.168.178.10
サーバーとPCの両方が正しい宛先アドレスを含むUDPパケットを受信するため、ソフトウェアはデータを受け入れます。