iptables 转发/复制/镜像本地生成的 UDP 流量

iptables 转发/复制/镜像本地生成的 UDP 流量

我在 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 才能从头开始。

因此有两个问题:

本地生成的数据的复制和转发如何进行?
如何有效清除规则?

到目前为止我发现的例子都适用于传入/传出流量,但不适用于本地生成的数据。

答案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

这种方法效果很好,但是它似乎不必要地复杂,因为我预计这应该只用一条规则就可以实现。

也许有人知道如何简化这一过程。

相关内容