iptables:更改 TEE 数据包的目标 IP

iptables:更改 TEE 数据包的目标 IP

由于我无法进入此处的原因,我发现自己必须将 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 地址。

相关内容