rca*_*ima 8 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
Run Code Online (Sandbox Code Playgroud)
我希望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
Run Code Online (Sandbox Code Playgroud)
我也可以使用TEE选项克隆数据包:
iptables -t mangle -A PREROUTING -p tcp --dport 8000 -d 10.10.10.11 -j TEE --gateway 10.10.10.12
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都还可以.问题是C将接收目的地IP为B而不是C的数据包.此外,我不知道如何转发到D和/或更多其他目的地.
如何使用iptables规则将A端口12345上的所有传入数据包发送到所有其他计算机(B,C和D)到端口8000?
小智 0
你必须使用 POSTROUTING :
iptables -t nat -A POSTROUTING -p tcp --dports 8080 -j SNAT --to-source 10.10.10.12
Run Code Online (Sandbox Code Playgroud)
但是你需要找到一种方法来区分哪个数据包是发给B或C的,否则它们都会以C的IP到达。如果你有不同的接口,则应该通过接口来完成;我想当您更改网关时就是这种情况,例如:
iptables -t nat -A POSTROUTING -o eth3 -p tcp --dports 8080 -j SNAT --to-source 10.10.10.12
Run Code Online (Sandbox Code Playgroud)
因此,只有传出到接口 eth3 的数据包(想象它是到 C 的路由路径)才会将目标 ip 更改为 C ip。