Ubuntu

ovs-vsctl:“eth0”不是有效的 UUID

  • December 2, 2015

我正在嘗試在我的 Ubuntu 12.04 伺服器虛擬機中設置一個開放式 v-switch。我為這個虛擬機創建了三個介面,我想使用這些介面在虛擬機內部創建一個埠鏡像並打開 v-switch。

共有三個 Host-Only 適配器:eth0、eth1、eth2。這個想法是其他三個 VM 將連接到這些適配器。其中一個 VM 會將 UDP 影片流式傳輸到 eth0,我希望 vswitch 的 VM 將這些數據包從 eth0 鏡像到 eth1 和 eth2。每個連接到 eth1 和 eth2 的 VM 都將獲得相同的影片流。

我執行了以下步驟來安裝 open v-switch:

$ apt-get install python-simplejson python-qt4 python-twisted-conch automake autoconf gcc uml-utilities libtool build-essential
$ apt-get install build-essential autoconf automake pkg-config
$ wget http://openvswitch.org/releases/openvswitch-1.7.1.tar.gz
$ tar xf http://openvswitch.org/releases/openvswitch-1.7.1.tar.gz
$ cd http://openvswitch.org/releases/openvswitch-1.7.1.tar.gz
$ apt-get install libssl-dev iproute tcpdump linux-headers-`uname -r`
$ ./boot.sh
$ ./configure - -with-linux=/lib/modules/`uname -r`/build
$ make
$ sudo make install

安裝後我配置如下:

$ insmod datapath/linux/openvswitch.ko
$ sudo touch /usr/local/etc/ovs-vswitchd.conf
$ mkdir -p /usr/local/etc/openvswitch
$ ovsdb-tool create /usr/local/etc/openvswitch/conf.db

然後我啟動了伺服器:

$ ovsdb-server /usr/local/etc/openvswitch/conf.db \
 --remote=punix:/usr/local/var/run/openvswitch/db.sock \
 --remote=db:Open_vSwitch,manager_options \
 --private-key=db:SSL,private_key \
 --certificate=db:SSL,certificate \
 --bootstrap-ca-cert=db:SSL,ca_cert --pidfile --detach --log-file
$ ovs-vsctl –no-wait init (run only once)
$ ovs-vswitchd --pidfile --detach

我從教程中獲得的上述步驟一切正常。然後,我根據Port Mirroring下的 open v-switch 文件繼續添加埠鏡像。我成功完成了以下命令:

$ ovs-vsctl add-br br0
$ ovs-vsctl add-port br0 eth0
$ ovs-vsctl add-port br0 eth1
$ ovs-vsctl add-port br0 eth2
$ ifconfig eth0 promisc up
$ ifconfig eth1 promisc up
$ ifconfig eth2 promisc up

此時,當我執行 ovs-vsctl show 時,我得到以下資訊:

75bda8c2-b870-438b-9115-e36288ea1cd8
   Bridge "br0"
       Port "br0"
           Interface "br0"
               type: internal
       Port "eth0"
           Interface "eth0"
       Port "eth2"
           Interface "eth2"
       Port "eth1"
           Interface "eth1"

當我執行 ifconfig 時,我得到以下資訊:

eth0      Link encap:Ethernet  HWaddr 08:00:27:9f:51:ca  
         inet6 addr: fe80::a00:27ff:fe9f:51ca/64 Scope:Link
         UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
         RX packets:17 errors:0 dropped:0 overruns:0 frame:0
         TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:1494 (1.4 KB)  TX bytes:468 (468.0 B)

eth1      Link encap:Ethernet  HWaddr 08:00:27:53:02:d4  
         inet6 addr: fe80::a00:27ff:fe53:2d4/64 Scope:Link
         UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
         RX packets:17 errors:0 dropped:0 overruns:0 frame:0
         TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:1494 (1.4 KB)  TX bytes:468 (468.0 B)

eth2      Link encap:Ethernet  HWaddr 08:00:27:cb:a5:93  
         inet6 addr: fe80::a00:27ff:fecb:a593/64 Scope:Link
         UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
         RX packets:17 errors:0 dropped:0 overruns:0 frame:0
         TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:1494 (1.4 KB)  TX bytes:468 (468.0 B)

eth3      Link encap:Ethernet  HWaddr 08:00:27:df:bb:d8  
         inet addr:192.168.1.139  Bcast:192.168.1.255  Mask:255.255.255.0
         inet6 addr: fe80::a00:27ff:fedf:bbd8/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:2211 errors:0 dropped:0 overruns:0 frame:0
         TX packets:1196 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:182987 (182.9 KB)  TX bytes:125441 (125.4 KB)

注意:我使用 eth3 作為 SSH 連接到 VM 的橋接適配器。

所以現在,我認為我已經正確完成了所有操作,但是當我嘗試使用以下命令創建網橋時:

$ ovs-vsctl -- set Bridge br0 mirrors=@m -- --id=@eth0 get Port eth0 -- --id=@eth1 get Port eth1 -- --id=@m create Mirror name=app1Mirror select-dst-port=eth0 select-src-port=@eth0 output-port=@eth1,@eth2

我收到以下錯誤:

ovs-vsctl: "eth0" is not a valid UUID

我不明白為什麼它無法找到介面?

因此,經過一番搜尋,我犯了兩個錯誤:

  • 缺少@ infront of eth0:select-dst-port=eth0 應該是 select-dst-port=@eth0
  • 您一次只能為每個輸出埠添加一條規則。所以最後你只能說 output-port=@eth1 而不是 output-port=@eth1,@eth2

引用自:https://serverfault.com/questions/440626