我正在尝试将所有传入的TCP数据包转发到多个IP地址 .
Build :
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和/或更多其他目的地 .
How can I make A, with iptables rules, send all the incoming packets on port 12345 to all the other machines (B,C and D) to port 8000?
1 回答
你必须使用POSTROUTING:
但你需要找到一种方法来区分哪个数据包用于B或C,否则它们将以C的IP到达 . 如果你有不同的接口,应该用接口来完成;我想你改变网关是这样的,例如:
因此,只有传送到接口eth3的数据包,将其映射到C的路由路径,才会将目标IP更改为C ip .