我正在尝试在我的 Ubuntu 12.04 Server VM 中设置一个开放的 v-switch。我为这个 VM 创建了三个接口,我想使用这些接口和开放的 v-switch 在 VM 内部创建一个端口镜像。
有三个仅主机适配器:eth0、eth1、eth2。想法是将另外三个虚拟机连接到这些适配器。其中一个虚拟机将把 UDP 视频流传输到 eth0,我希望 vswitch'd 虚拟机将这些数据包从 eth0 镜像到 eth1 和 eth2。连接到 eth1 和 eth2 的每个虚拟机都将获得相同的视频流。
我执行了以下步骤来安装 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
上述步骤来自这教程,一切正常。然后我根据 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
我不明白为什么找不到接口?
答案1
经过一番搜索,我发现我犯了两个错误:
- eth0 前面缺少 @:select-dst-port=eth0 应为 select-dst-port=@eth0
- 您只能为每个输出端口一次添加一条规则。因此最后您只能说 output-port=@eth1,而不能说 output-port=@eth1,@eth2