2015-04-26 74 views
0

我想要做的是通過裸機中的Open vSwitch將數據包發送到服務器,而不是在VM上。如何連接Open vSwitch端口和虛擬以太網接口?

爲了做到這一點,我正在考慮以下結構。

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

爲了使上述環境


,我做了下面的命令。

  1. 創建OVS橋
 
ovs-vsctl add-br br0 
  • 化妝的eth0作爲OVS端口
  •  
    ovs-vsctl add-port br0 eth0 
    
  • 創建VETH鏈接
  •  
    ip link add veth1 type veth peer name veth2 
    ifconfig veth1 up 
    ifconfig veth2 up 
    
  • 最後,我設置客戶機ARP表靜態因爲OVS端口(eth0的)不能發送ARP回覆
  • 在那之後,我試圖做客戶機之間的TCP連接,並服務器。

    我檢查到客戶端的SYN數據包發送到veth2。但是,服務器無法接收該數據包。

    我不能猜測什麼是錯的,以及我如何能夠使上述環境。

    回答

    3

    我找到了解決方案。

    通過使用網絡名稱空間,我可以製作邏輯網絡堆棧。

    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 
    
  • 化妝的eth0作爲OVS端口
  •  
    ovs-vsctl add-port br0 eth0 
    
  • 創建VETH鏈路
  •  
    ip link add veth1 type veth peer name veth2 
    
  • 創建網絡名稱空間
  •  
    ip netns add ns1 
    ip link set veth2 ns1 
    
  • 集NS1的IP和MAC veth2的那些eth0的
  • 的這樣做,我可以得到以下結構

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