如何连接Open vSwitch端口和虚拟以太网接口?

Hoz*_*ard 1 linux networking openvswitch

我要做的是通过裸机PC中的Open vSwitch将数据包发送到服务器,而不是在VM上。

为此,我正在考虑以下结构。

服务器电脑
 -----------------------------
| ------ |
| |服务器| |
| ------ |
| | veth2(192.168.0.152)|
| | |
| | veth1 |
| ----------- |
| | OVS(br0)| |
| ----------- |
| | eth0(192.168.0.157)|
 ------- | ---------------------
        |
 ------- | --------
| 客户端电脑|
 ----------------

用于制作上述环境


,我在下面的命令中做了。

  1. 创建ovs桥
ovs-vsctl add-br br0
  1. 使eth0作为ovs端口
ovs-vsctl add-port br0 eth0
  1. 创建veth链接
ip链接添加veth1类型veth对等名称veth2
ifconfig veth1向上
ifconfig veth2向上
  1. 最后,我静态设置了客户端ARP表,因为ovs端口(eth0)无法发送ARP回复

之后,我尝试在客户端和服务器之间建立TCP连接。

我检查了客户端的SYN数据包是否已发送到veth2。但是,服务器无法接收该数据包。

我无法猜测出什么问题以及如何在环境之上做出贡献。

Hoz*_*ard 5

我找到了解决方案。

通过使用网络名称空间,我可以创建逻辑网络堆栈。

http://man7.org/linux/man-pages/man8/ip-netns.8.html http://blog.scottlowe.org/2013/09/04/introducing-linux-network-namespaces/

  1. 创建ovs桥
ovs-vsctl add-br br0
  1. 使eth0作为ovs端口
ovs-vsctl add-port br0 eth0
  1. 创建veth链接
ip链接添加veth1类型veth对等名称veth2
  1. 创建网络名称空间
ip netns添加ns1
ip链接集veth2 ns1
  1. 将ns1中veth2的ip和mac设置为eth0的ip和mac

完成之后,我可以得到以下结构

服务器电脑
 -------------------------------
| ----------------------- |
| | ns1 | |
| | ------ | |
| | |服务器| | |
| | ------ | |
| | veth2 |(192.168.0.157)| |
| ----------------------- |
| | |
| | |
| | veth1 |
| ----------- |
| | OVS(br0)| |
| ----------- |
| eth0 |(192.168.0.157)|
 ----------- | -------------------
            |
      ------ | --------
     | 客户端电脑|
      ---------------