2013-02-15 88 views
7

我试图将所有传入的TCP数据包转发到多个IP地址。克隆和转发数据包到多个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)的所有传入的数据包上的端口12345。理想情况下,我希望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规则将端口12345上的所有传入数据包发送到所有其他机器(B,C和D)到端口8000?

回答

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。