克隆数据包并将数据包转发到多个IP地址

时间:2013-02-15 14:02:12

标签: routing iptables multicast portforwarding

我正在尝试将所有传入的TCP数据包转发到多个IP地址。

设定:

A - 10.10.10.10
B - 10.10.10.11
C - 10.10.10.12
D - 10.10.10.13

我希望B,C和D接收(在端口8000上) A 的端口12345上的所有传入数据包。理想情况下,我希望A做到这一点。

我可以在A:

上使用此规则转发到一台计算机
iptables -t nat -A PREROUTING -p tcp --dport 12345 -j REDIRECT --to 10.10.10.11:8000

我也可以使用TEE选项克隆数据包:

iptables -t mangle -A PREROUTING -p tcp --dport 8000 -d 10.10.10.11 -j TEE --gateway 10.10.10.12

到目前为止一切都还好。问题是C将接收目标IP为B而不是C的数据包。此外,我不知道如何转发到D和/或更多其他目的地。

如何使用iptables规则将A端口12345上的所有传入数据包发送到所有其他计算机(B,C和D)到端口8000?

1 个答案:

答案 0 :(得分:0)

你必须使用POSTROUTING:

iptables -t nat -A POSTROUTING -p tcp --dports 8080 -j SNAT --to-source 10.10.10.12

但你需要找到一种方法来区分哪个数据包用于B或C,否则它们将以C的IP到达。如果你有不同的接口,应该用接口完成;我认为你改变网关的情况就是这样,例如:

iptables -t nat -A POSTROUTING -o eth3 -p tcp --dports 8080 -j SNAT --to-source 10.10.10.12

因此,只有发送到接口eth3的数据包(将其映射到C的路由路径)才会将目标IP更改为C ip。