本文描述如何使用Open vSwitch的VLAN隔离VM流量。
Setup 建立
本指南假设如下的配置环境
两个物理网络
-
数据网络
VM数据流量的以太网络,用于承载VM之间的VLAN流量。你的物理交换机必须支持转发带有VLAN标签的流量,并且物理交换机接口应工作在VLAN Trunk模式。(通常情况下,这是默认的行为。配置物理交换机硬件超出了本文的讨论范围)。
-
管理网络
严格意义上来说,此网络并不必须,但是,这是一种非常简单的方式给与物理主机可远程访问的IP地址,因为eth0端口不能直接赋予IP地址(马上讲述这一点)。
两个物理主机
此环境假设使用两个主机: host1
and host2
. 他们都运行Open vSwitch软件。每个主机两个网卡NIC:eth0 和 eth1, 配置如下:
-
eth0 连接到数据网络. 无IP地址分配到 eth0.
-
eth1 连接到管理网络 (如果需要). eth1 拥有IP地址,可用于管理此物理机.
四个虚拟机
每个主机运行两个虚拟机(VM)。vm1
和 vm2
运行在host1
, 而 vm3
和 vm4
运行在 host2
.
每个虚拟机有一个端口,在物理主机中显示为一个Linux设备(例如, tap0
)。
注意:
对于 Xen/XenServer, VM虚拟机的接口显示为名称类似vif1.0
的Linux设备。其它的Linux系统也许将其端口显示为 vnet0
,
vnet1
, 等待.
配置步骤
在主机host1
上执行以下的配置:
#. 创建 OVS 网桥:
$ ovs-vsctl add-br br0
#. 添加 eth0
端口到网桥:
$ ovs-vsctl add-port br0 eth0
注意:
默认情况下,所有的OVS端口都是VLAN Trunk模式,所以eth0运行所有VLAN标签通过。
注意:
当你将eth0添加到OVS网桥后,任何分配给eth0的IP地址将停止工作。eth0的IP地址应在将其添加到OVS网桥前迁移到一个不同的端口上。这就是通过eth1实现分离的管理连接的原因。
-
将
vm1
作为VLAN 100的"Access端口"添加到网桥. 这意味着由VM1进入OVS的流量将没有VLAN tag,并被假设为VLAN 100的一部分:$ ovs-vsctl add-port br0 tap0 tag=100
在VLAN 200上添加 VM2:
$ ovs-vsctl add-port br0 tap1 tag=200
在主机 host2
重复以上的操作:
-
建立将eth0作为VLAN trunk的网桥:
$ ovs-vsctl add-br br0
$ ovs-vsctl add-port br0 eth0 -
添加 VM3 到 VLAN 100::
$ ovs-vsctl add-port br0 tap0 tag=100
-
添加 VM4 到 VLAN 200::
$ ovs-vsctl add-port br0 tap1 tag=200
验证
从vm1
PING vm3
应该成功,因为这两个虚拟机在相同的VLAN中(100)。
从vm2
ping vm4
也应当成功,因为这两个虚拟机也在相同的VLAN中(200)。
从vm1
或vm3
ping vm2
或vm4
都不应成功,因为这些虚拟机不在同一个VLAN中。如果你有一个路由器,配置为在VLAN间转发流量,ping可成功工作。但是,到的vm3
的报文的源MAC地址应为路由器的MAC地址,而不是 vm1
的MAC地址.