由于我无法进入此处的原因,我发现自己必须将 UDP 数据包流(网络流数据,如果重要的话)复制到第二个目的地。
经过一番研究,我发现iptables
'mangle table 的 TEE 目标正是这样做的:
iptables -t mangle -A PREROUTING -d 192.168.81.21 --protocol udp --destination-port 6343 -j TEE --gateway 192.168.228.2
iptables -t mangle -A PREROUTING -d 192.168.81.21 --protocol udp --destination-port 6344 -j TEE --gateway 192.168.228.2
我现在遇到的唯一问题是目标服务器192.168.228.2
接收到带有原始192.168.81.21
地址的目标标头的数据包,因此侦听网络流流量的软件不接受它们。
“明显”的解决方案是使用iptables
自己的数据包重写代码将目标标头重写为正确的值,但这需要仅有的发生在重复的数据包而不是原始数据包上。这意味着我通常使用的 DNAT 已经不再适用,因为它只对 PREROUTING 表有效,此时我还无法区分正常数据包和重复数据包。
除非我遗漏了一些明显的东西,否则我就会陷入困境。有什么建议么?
有没有办法为 POSTROUTING 添加规则,将数据包的 IP 地址更改为正确的目标服务器?
答案1
我通过将以下 iptable 规则添加到克隆数据包发送到的计算机来解决此问题:
sudo iptables -t nat -A PREROUTING -p udp --dport 9003 -j NETMAP --to xx.xx.xxx.xx
它的作用是将任何发往端口的 UDP 数据包的目标 IP 更改9003
为私有 IP 地址。