
私は Raspberry Pi で、センサーからデータを読み取り、そのデータを UDP 経由でサーバーに送信するプログラムを実行しています。このデータをデバッグおよび監視するために、Raspberry Pi の iptables を使用してこの UDP データを PC にリダイレクトしました。
sudo iptables -t nat -A OUTPUT -p udp -d 192.168.178.10 --dport 4000 -j DNAT --to-destination 192.168.178.22:4000
使用される IP アドレスは、
192.168.178.10 - サーバー、
192.168.178.22 - デバッグに使用される PC です。
これはうまく機能します。ただし、データは PC にのみ送信され、サーバーには送信されなくなります。
そこで、次のような方法を使って、UDP データを PC とサーバーの両方にコピーして転送しようとしました。
sudo iptables -t mangle -A POSTROUTING -p udp -d 192.168.178.10 --dport 4000 -j TEE --gateway 192.168.178.22
私は、mangle/nat、POSTROUTING/OUTPUT/PREROUTING などのさまざまなパラメータの組み合わせを使用しました。
今のところ、両方の宛先にデータを送信することはできません。データはローカルで生成されるため、-A OUTPUT が機能するはずだと考えていました。しかし、どうやら何かが足りないようです...
また、iptablesルールをクリアするには、
sudo iptables -F
sudo iptables -X
しかし、ルールは依然として実行されており、最初からやり直すには Raspberry Pi を再起動する必要があります。
そこで2つの質問があります。
ローカルで生成されたデータの複製と転送はどのように機能しますか?
ルールはどのようにして効果的にクリアされますか?
これまでに見つけた例はすべて、着信/発信トラフィックには適用されますが、ローカルで生成されたデータには適用されません。
答え1
今、偶然にも解決策を見つけました。
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A OUTPUT -p udp -d 192.168.178.10 --dport 4000 -j DNAT --to-destination 192.168.178.22:4000
sudo iptables -t mangle -A POSTROUTING -p udp -d 192.168.178.22 --dport 4000 -j TEE --gateway 192.168.178.10
これはうまく機能しますが、単一のルールで可能であると予想していたため、不必要に複雑になっているようです。
おそらく、これを簡素化する方法について誰かがアイデアを持っているでしょう。