我有一个运行 Debian/Linux 4.1 的路由器,它具有:
- eth0:192.168.1.1 连接到 LAN,为有线客户端运行 DHCPd。
- wan0: 1.2.3.4 连接到互联网
- wan1: 5.6.7.8 连接到互联网
我希望从 LAN 到主机 H、端口 P 的 UDP 流量被复制并通过 NAT 输出两个都wan0 和 wan1。
例如,使用正确的目标主机/端口路由来自 192.168.1.2 的数据包,应该会导致二NAT 数据包 - 一个通过 wan0 发出,一个通过 wan1 发出,两者具有相同的目标主机和端口。
(要求是特定类型的 UDP 流量必须通过两个接口发送,以带宽为代价最大限度地减少延迟。所讨论的 UDP 协议是幂等的,因此很乐意接收来自不同路由器地址的 NAT 重复数据包。)
我如何使用内核 4.1/iptables 做到这一点? (已经有针对更高版本内核和 nftables 的解决方案。)
答案1
查看 iptables TEE 目标。它主要设计用于将流量复制到单独的目的地以用于日志记录或 IDS 目的,但它也应该能够执行您想要的操作。 Debian 默认包含该模块,因此您不需要任何额外的软件。
答案2
我认为您可以通过将 tee 目标与网络命名空间结合使用来解决这个问题。
- 将 WAN 接口之一放入其自己的网络命名空间中
- 使用 VETH 对连接网络命名空间。
- 在主网络命名空间中,使用 TEE 目标将流量的副本发送到辅助网络命名空间。
- 伪装第二个网络命名空间中的 TEEd 流量。
从文档中我不清楚 TEE 是更改第二个副本的目标 IP 还是仅更改下一跳。如果它确实更改了目标 IP,您将必须在第二个网络命名空间中撤消该操作。