我试图模拟连接多台机器的L3交换机(在没有VLAN或单个VLAN中 . )然后我想配置交换机转发数据包,我没有运气 .

我的系统配置:

  • 主机操作系统:Ubuntu 18.04 .

  • 打开vSwitch 2.9.0

  • 客户端计算机:VirtualBox 5.2.20中的UBuntu 18.04客户端

我想做什么

(基本上模仿中间人攻击 . )

  • VM1,VM2和VM3连接到虚拟交换机或网桥(BR0) .

  • VM1将数据包(例如,HTTP GET请求)发送到VM3 .

  • BR0拦截它并将其转发给VM2 .

  • VM2将响应发送给VM1 .

  • BR0将其转发给VM1,就像VM3响应一样 .

我做了什么:

  • ovs-vsctl add-br br0 :创建一个桥(BR0)

  • 创建使用br0作为网桥的VM1,2,3 .

  • 在VM2和VM3中运行不同的Web服务器(例如,VM2在根目录下返回"hello",VM3返回"HELLO" . )

  • 配置每台机器内的IP地址,比如说

  • VM1:192.168.0.2

  • VM2:192.168.0.3

  • VM3:192.168.0.4

  • ovs-ofctl --strict add-flow br0 priority=1,tcp,nw_dst=192.168.0.4,actions=mod_nw_dst=192.168.0.3 :添加修改目标IP的流程 . 捕获包到VM3并将它们转发到VM2(我希望 . )

  • ovs-ofctl --strict add-flow br0 priority=1,tcp,nw_src=192.168.0.3,actions=mod_nw_src=192.168.0.4 :添加修改源IP的流程 . 使响应来自VM3 .

我看到了什么:

然而,显然,它没有成功 .

  • 我可以 ping 从一个到另一个 .

  • 我可以 cURL 从一个到另一个 .

  • 但是, mod_nw_dst 命令无效 . 从VM1,我只能看到VM3的原始响应,我想转发给VM2 .

我搜索了很多,并发现了很多关于跨VLAN转发的文章,但在单个网桥中却不是这样 . 我的实施不正确吗?否则,它不是预期的功能吗?在这种情况下,模仿这些事情的最佳方法是什么?

提前致谢!

编辑: ovs-ofctl dump-flows br0 的结果只是上面的命令 .

cookie=0x0, duration=157469.378s, table=0, n_packets=0, n_bytes=0, priority=1,tcp,nw_src=192.168.0.3 actions=mod_nw_src:192.168.0.4 cookie=0x0, duration=157462.433s, table=0, n_packets=0, n_bytes=0, priority=1,tcp,nw_dst=192.168.0.4 actions=mod_nw_dst:192.168.0.3 cookie=0x0, duration=157534.866s, table=0, n_packets=0, n_bytes=0, priority=0 actions=NORMAL