我目前正在使用以下设置测试硬件设备(DUT - 被测设备)的路由性能(所有地址都以 开头192.168.
):
eth0 (29.2) <---> eth1 (29.1) eth2 (30.1) <---> eth0 (30.2)
HOST1 |~~~~~~~~~DUT~~~~~~~~~~| HOST2
Iperf
在这个设置中工作得很好。
但是,我想去掉 HOST2,因为 HOST1 上有另一个以太网卡可用。这就是我想要实现的目标:
eth0 (29.2) <---> eth1 (29.1) eth2 (30.1) <---> eth1 (30.2)
HOST1 |~~~~~~~~~DUT~~~~~~~~~~| HOST1
如何在 HOST1 上配置 Linux 路由,以便从 eth0 到 eth1 的数据包将通过 DUT,而不是在内部通过内核?
我正在运行带有 3.0 内核的 Debian。 iproute2 版本是ss110629
.
答案1
路由与 snat/dnat 相结合应该可以解决问题。这里的基本思想是为 HOST1 上的每个设备分配第二个子网中的第二个“虚拟”IP 地址。虚拟地址在离开/进入 host1 之前/之后被转换为实际地址。使用以下设置并将 iperf 流量定向到 192.168.9.2 或 192.168.10.2(取决于所需的流量方向)
IP地址分配
主机1
eth0 192.168.29.2/24(该设备的“虚拟”地址为 192.168.9.2)
eth1 192.168.30.2/24(该设备的“虚拟”地址为 192.168.10.2)
被测器件
- 以太网1 192.168.29.2/24
- 以太坊2 192.168.30.2/24
静态路由
主机1
- 192.168.10.2/24 通过 192.168.29.1
- 192.168.9.2/24 通过 192.168.30.1
被测器件
- 192.168.9.2/24 通过 192.168.29.2
- 192.168.10.3/24 通过 192.168.30.2
HOST1 上的 iptables 规则
后布线
- 发往 192.168.9.2 至 192.168.10.2 的 SNAT 数据包
- 发往 192.168.10.2 至 192.168.9.2 的 SNAT 数据包
预路由
- 发往 192.168.9.2 至 192.168.29.2 的 DNAT 数据包
- 发往 192.168.10.2 至 192.168.30.2 的 DNAT 数据包