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

时间:2015-04-26 11:05:29

标签: linux networking openvswitch

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

为此,我想到了以下结构。

Server PC
 -----------------------------
|     ------                  |
|    |SERVER|                 |
|     ------                  |
|       |veth2 (192.168.0.152)|
|       |                     |
|       |veth1                |
|     -----------             |
|    | OVS (br0) |            |
|     -----------             |
|       |eth0 (192.168.0.157) |
 -------|---------------------
        |
 -------|--------
|   Client PC    |
 ----------------

用于制作上述环境

,我做了以下命令。

  1. 创建ovs桥
  2. ovs-vsctl add-br br0
    
    1. 将eth0设为ovs端口
    2. ovs-vsctl add-port br0 eth0
      
      1. 创建veth链接
      2. ip link add veth1 type veth peer name veth2
        ifconfig veth1 up
        ifconfig veth2 up
        
        1. 最后,我静态设置客户端ARP表,因为ovs端口(eth0)无法发送ARP回复
        2. 之后,我尝试在客户端和服务器之间建立TCP连接。

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

          我无法猜出出现了什么问题以及我如何能够建立上述环境。

1 个答案:

答案 0 :(得分: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桥
  2. ovs-vsctl add-br br0
    
    1. 将eth0设为ovs端口
    2. ovs-vsctl add-port br0 eth0
      
      1. 创建veth链接
      2. ip link add veth1 type veth peer name veth2
        
        1. 创建网络命名空间
        2. ip netns add ns1
          ip link set veth2 ns1
          
          1. 将ns1中的veth2的ip和mac设置为eth0
          2. 的ip和mac

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

            Server PC
             -------------------------------
            |     -----------------------   |
            |    |          ns1          |  |
            |    |   ------              |  |
            |    |  |SERVER|             |  |
            |    |   ------              |  |
            |    | veth2|(192.168.0.157) |  |
            |     -----------------------   |
            |           |                   |
            |           |                   |
            |           |veth1              |
            |       -----------             |
            |      | OVS (br0) |            |
            |       -----------             |
            |       eth0|(192.168.0.157)    |
             -----------|-------------------
                        |
                  ------|--------
                 |   Client PC   |
                  ---------------