我在Linux上成功使用了以下命令,以“环回”模式在新的双端口10Gbps卡上测试了吞吐量,即一个端口直接插入另一个端口。这只是为了将数据包强制发送出去而已,这只是一点巫毒,但是如果您不这样做,Linux只会使通过内核的流量短路(因此,OP提出了问题)。在以上Casey的回答中,我不确定是否确实需要在上面安装外部路由器,但是下面的内容是完全独立的。这两个接口是eth2和eth3。
将IP提供给接口,并将它们放在单独的网络上:
ifconfig eth2 10.50.0.1/24
ifconfig eth3 10.50.1.1/24
接下来,我们将建立一个双重NAT方案:两个新的虚假网络用来访问另一个。在出局时,将NAT发送到您的假网络。在途中,固定目的地。反之亦然:
# nat source IP 10.50.0.1 -> 10.60.0.1 when going to 10.60.1.1
iptables -t nat -A POSTROUTING -s 10.50.0.1 -d 10.60.1.1 -j SNAT --to-source 10.60.0.1
# nat inbound 10.60.0.1 -> 10.50.0.1
iptables -t nat -A PREROUTING -d 10.60.0.1 -j DNAT --to-destination 10.50.0.1
# nat source IP 10.50.1.1 -> 10.60.1.1 when going to 10.60.0.1
iptables -t nat -A POSTROUTING -s 10.50.1.1 -d 10.60.0.1 -j SNAT --to-source 10.60.1.1
# nat inbound 10.60.1.1 -> 10.50.1.1
iptables -t nat -A PREROUTING -d 10.60.1.1 -j DNAT --to-destination 10.50.1.1
现在告诉系统如何进入每个假网络,并预先填充arp项(请务必替换您的MAC地址,不要使用我的):
ip route add 10.60.1.1 dev eth2
arp -i eth2 -s 10.60.1.1 00:1B:21:C1:F6:0F # eth3's mac address
ip route add 10.60.0.1 dev eth3
arp -i eth3 -s 10.60.0.1 00:1B:21:C1:F6:0E # eth2's mac address
这足以使Linux愚弄到实际将数据包放到网络上的程度。例如:
ping 10.60.1.1
如果从eth2退出,则源IP 10.50.0.1会被NAT转换为10.60.0.1,而在进入eth3时,目标IP 10.60.1.1会被NAT转换为10.50.1.1。答复也经历了类似的旅程。
现在使用iperf来测试吞吐量。绑定到正确的IP,并确定您要联系的IP(另一端的假地址):
# server
./iperf -B 10.50.1.1 -s
# client: your destination is the other end's fake address
./iperf -B 10.50.0.1 -c 10.60.1.1 -t 60 -i 10
确保确实有流量通过网络:
tcpdump -nn -i eth2 -c 500
您也可以观看/ proc / interrupts,以确保完全使用该卡:
while true ; do egrep 'eth2|eth3' /proc/interrupts ; sleep 1 ; done
无论如何,我发现这篇文章正在搜索如何执行此操作,感谢常见问题解答人员,并希望这可以帮助其他人在以后找到这篇文章。