【问题标题】:Cloning and forwarding packets to multiple IP addresses克隆数据包并将其转发到多个 IP 地址
【发布时间】:2013-01-31 12:39:57
【问题描述】:

我正在尝试将所有传入的 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 和/或更多其他目的地。

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

【问题讨论】:

    标签: routing iptables multicast portforwarding


    【解决方案1】:

    你必须使用 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 2011-01-26
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多