在单个Open vSwitch网桥中转发数据包

时间:2018-11-21 05:44:53

标签: forwarding openflow switching openvswitch

我正在尝试模拟一个L3交换机,其中连接了多台计算机(没有VLAN或只有一个VLAN。)然后,我想配置该交换机以根据需要转发数据包,但是我没有运气。

我的系统配置:

  • 主机操作系统:Ubuntu 18.04。
  • 打开vSwitch 2.9.0
  • 客户端计算机:VirtualBox 5.2.20中的UBuntu 18.04客户端

我想做什么

(基本上模拟中间人攻击。)

  1. VM1,VM2和VM3连接到虚拟交换机或网桥(BR0)。
  2. VM1将数据包(例如HTTP GET请求)发送到VM3。
  3. BR0对其进行拦截并将其转发给VM2。
  4. VM2将响应发送到VM1。
  5. BR0像VM3响应一样将其转发到VM1。

我做了什么:

  1. ovs-vsctl add-br br0:创建网桥(BR0)
  2. 创建使用br0作为网桥的VM1,2,3。
  3. 在VM2和VM3中运行不同的Web服务器(例如,VM2在根目录处返回“ hello”,VM3返回“ HELLO”。)
  4. 在每台机器内部配置IP地址,例如
    • VM1:192.168.0.2
    • VM2:192.168.0.3
    • VM3:192.168.0.4
  5. 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(希望如此)。
  6. 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。

我在Google上进行了很多搜索,并找到了许多有关跨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

0 个答案:

没有答案