一、宿主机配置
1. 确保必要的软件包已安装
确保宿主机上已安装 Open vSwitch 和 VLAN 工具。如果尚未安装,可以使用以下命令进行安装:
yum install openvswitch-switch vlan
2. 配置现有 OVS 桥接 br0
假设已有一个 OVS 桥接接口 br0,并且 bond0 已经作为 Access 端口连接到 br0。
3. 添加第二张网卡 eth1 到 br0 并配置为 Trunk
将 eth1 添加到 br0 并配置为 Trunk 模式,允许多个 VLAN 通过。
sudo ovs-vsctl add-port br0 eth1 -- set port eth1 trunks=10,20,30
说明:trunks=10,20,30 指定允许通过的 VLAN ID。根据实际需求调整 VLAN ID,或使用 trunks=0-4094 允许所有 VLAN。
如果希望允许所有 VLAN,可以使用:
sudo ovs-vsctl set port eth1 trunks=0-4094
4. 确保 br0 支持 VLAN Trunk
设置 br0 为 VLAN-aware,并指定默认 VLAN(PVID)。
sudo ovs-vsctl set bridge br0 vlan_mode=trunk
sudo ovs-vsctl set bridge br0 other_config:datapath-id=0000abcd1234abcd
注意:datapath-id 可选,用于唯一标识桥接。
5、应用配置更改
在大多数情况下,通过 OVS 命令即时应用配置更改无需重启网络服务或主机。然而,某些情况下可能需要重启网络服务以确保所有配置正确加载,尤其是在修改网络脚本或配置文件后。
1)重启 OVS 服务
如果修改了网络配置文件,建议重启 OVS 服务:
sudo systemctl restart openvswitch
2)重启网络管理器
在使用 NetworkManager 管理网络的系统中,可以尝试重启 NetworkManager 服务:
sudo systemctl restart NetworkManager
3) 重启特定网络接口
如果只修改了特定接口的配置,可以尝试重启该接口:
sudo ifdown eth1 && sudo ifup eth1
注意:在使用 OVS 时,直接重启物理接口可能会导致网络中断。确保在维护窗口或不影响业务的时间段进行操作。
4)重启宿主机
如果以上步骤未能使配置生效,或者系统处于不稳定状态,可以考虑重启宿主机:
sudo reboot
注意:重启宿主机会导致所有运行的服务中断,请确保在合适的时间执行,并提前通知相关用户。
二、KVM 虚拟机配置
1. 为每台虚拟机添加新的 Trunk 网卡
需要为每台虚拟机添加一个新的网络接口,并连接到 br0,以支持 VLAN 标签。
可以使用 virsh 或 virt-manager 添加新的网络接口。以下以 virsh 为例:
1) 编辑虚拟机的 XML 配置
virsh edit <vm-name>
2)添加新的接口定义
在 <devices> 部分添加类似以下内容:
<interface type='bridge'>
<mac address='52:54:00:xx:xx:xx'/>
<source bridge='br0'/>
<model type='virtio'/>
<virtualport type='openvswitch'/></interface>
说明:
mac address:为新接口指定唯一的 MAC 地址。
virtualport type='openvswitch':指定使用 OVS 进行管理。
不设置 <options tag='...'>:这意味着该接口将作为 Trunk 接口,允许多个 VLAN 的流量通过。VLAN 标签将在虚拟机内部处理。
3)保存并退出编辑器
2. 配置虚拟机内部的 VLAN
进入每台虚拟机,配置新的网络接口以支持 VLAN 标签。
1)安装 VLAN 支持包
首先,确保虚拟机中已安装 vconfig 或相关 VLAN 工具。在 CentOS 7 和 8 中,通常需要安装 vlan 包:
sudo yum install -y vlan
2)加载 8021q 模块
加载 8021q 内核模块以支持 VLAN 标签:
sudo modprobe 8021q
为了确保模块在系统重启后自动加载,可以将其添加到 /etc/modules-load.d/ 目录下的新文件中:
echo "8021q" | sudo tee /etc/modules-load.d/8021q.conf
3. 配置网络接口
假设您要在虚拟机中配置 eth1 接口以支持 VLAN。以下示例将配置 VLAN 10
CentOS 7 使用 网络脚本(Network Scripts)进行网络配置。
1)创建 VLAN 接口配置文件
编辑 /etc/sysconfig/network-scripts/ifcfg-eth1:
2)创建 VLAN 10 接口
创建 /etc/sysconfig/network-scripts/ifcfg-eth1.10:
3)重启网络服务
systemctl restart network
4)验证 VLAN 接口
ip link show
可以看到 eth1.10 接口
三、测试与验证
1. 检查宿主机的 OVS 配置
确保 br0 上的 eth1 已正确配置为 Trunk:
ovs-vsctl list port eth1
应显示 trunks=10,20,30 或相应的 VLAN 范围。
2. 检查虚拟机的网络连接
在虚拟机内,尝试通过不同的 VLAN 子接口进行通信:
ping -I eth1.10 10.0.10.1
ping -I eth1.20 10.0.20.1
确保不同 VLAN 之间的流量按照预期进行隔离和路由。
3. 使用 ovs-ofctl 监控 OVS 流量
在宿主机上,使用以下命令监控 OVS 桥接接口的流量:
sudo ovs-ofctl dump-ports br0