0.配置要求
- 1.使用
ovs
创建一个网桥,网桥上添加宿主机eth0接口,接口为trunk
,可转发所有vlan的数据 - 2.使用
KVM
创建并图形安装两个linux虚拟机vm1,vm2。 - 3.vm1关联ovs的vlan10接口,vm2关联ovs的vlan20接口。
- 4.vm1获取vlan10的IP地址,vm2获取vlan20IP地址。
- 5.vlan10,vlan20的网关在宿主机eth0接口连接的物理交换机上,物理交换机开启vlan10,vlan20的DHCP功能,为vm1,vm2自动分配地址。
1. 环境准备
1.1 安装必要软件
# 安装 OVS、KVM 和 virt-install
sudo apt update
sudo apt install openvswitch-switch qemu-kvm libvirt-daemon-system libvirt-clients virt-manager virt-install
1.2 启动服务并验证
sudo systemctl start libvirtd openvswitch-switch
sudo systemctl enable libvirtd openvswitch-switch
sudo ovs-vsctl show # 验证 OVS 服务正常
2. 配置 OVS 网桥
2.1 创建 OVS 网桥并添加 Trunk 端口
# 创建网桥 ovs-br0
sudo ovs-vsctl add-br ovs-br0# 将物理网卡 eth0 添加为 Trunk 端口(允许 VLAN 10 和 20)
sudo ovs-vsctl add-port ovs-br0 eth0 trunk=10,20# 验证配置
sudo ovs-vsctl show
3. 创建虚拟机磁盘
# 创建 vm1 和 vm2 的磁盘镜像
sudo qemu-img create -f qcow2 /var/lib/libvirt/images/vm1.qcow2 10G
sudo qemu-img create -f qcow2 /var/lib/libvirt/images/vm2.qcow2 10G
4. 使用 virt-install
创建虚拟机
4.1 创建 vm1(关联 VLAN 10)
sudo virt-install \--name vm1 \--ram 1024 \--vcpus 1 \--disk path=/var/lib/libvirt/images/vm1.qcow2,size=10 \--os-type linux \--os-variant ubuntu20.04 \--network bridge=ovs-br0,model=virtio,virtualport_type=openvswitch,virtualport_options:tag=10 \--graphics spice,listen=0.0.0.0 \--console pty,target_type=serial \--cdrom /path/to/ubuntu-20.04.iso # 替换为实际 ISO 路径
4.2 创建 vm2(关联 VLAN 20)
sudo virt-install \--name vm2 \--ram 1024 \--vcpus 1 \--disk path=/var/lib/libvirt/images/vm2.qcow2,size=10 \--os-type linux \--os-variant ubuntu20.04 \--network bridge=ovs-br0,model=virtio,virtualport_type=openvswitch,virtualport_options:tag=20 \--graphics spice,listen=0.0.0.0 \--console pty,target_type=serial \--cdrom /path/to/ubuntu-20.04.iso # 替换为实际 ISO 路径
5. 验证 OVS 配置
5.1 查看 OVS 网桥端口及 VLAN 标记
sudo ovs-vsctl show
sudo ovs-vsctl get port vnet0 tag # 应输出 10
sudo ovs-vsctl get port vnet1 tag # 应输出 20
5.2 预期输出示例
Bridge ovs-br0Port "vnet0"tag: 10Interface "vnet0"Port "vnet1"tag: 20Interface "vnet1"Port "eth0"trunks: [10, 20]Interface "eth0"
6. 配置虚拟机网络
6.1 进入虚拟机控制台安装系统
# 通过控制台完成操作系统安装(按 Enter 激活)
virsh console vm1
virsh console vm2
6.2 启用 DHCP 获取 IP
在虚拟机内执行:
# 在 vm1(VLAN 10)中
dhclient -v eth0
ip addr show eth0 # 应获取类似 192.168.10.100/24 的 IP# 在 vm2(VLAN 20)中
dhclient -v eth0
ip addr show eth0 # 应获取类似 192.168.20.100/24 的 IP
7. 网络连通性测试
7.1 测试网关连通性
# 在 vm1 中
ping 192.168.10.1 # 假设 VLAN 10 网关为 192.168.10.1# 在 vm2 中
ping 192.168.20.1 # 假设 VLAN 20 网关为 192.168.20.1
7.2 测试跨 VLAN 隔离
# 在 vm1 中 ping vm2 的 IP(默认应不通)
ping 192.168.20.100
8. 持久化配置
8.1 持久化 OVS 配置
# OVS 配置默认已持久化,无需额外操作
8.2 持久化虚拟机配置
# 设置虚拟机随宿主机启动
virsh autostart vm1
virsh autostart vm2
9. 故障排查
9.1 虚拟机无法获取 IP
- 检查 OVS 端口 VLAN 标记:
sudo ovs-vsctl get port vnet0 tag # 应为 10 sudo ovs-vsctl get port vnet1 tag # 应为 20
- 验证物理交换机配置:
- 确认物理交换机连接宿主机的端口为 Trunk,允许 VLAN 10 和 20。
- 确认 VLAN 10 和 20 的 DHCP 服务已启用。
9.2 虚拟机接口未添加到 OVS
- 检查 libvirt 网络定义:
virsh net-list --all # 确认未使用默认 NAT 网络 virsh dumpxml vm1 | grep -A 10 '<interface' # 确认接口绑定到 ovs-br0
总结
通过以上步骤,您已完成:
- OVS 网桥配置:创建 Trunk 端口并允许 VLAN 10 和 20。
- 虚拟机自动化部署:使用
virt-install
自动关联 OVS 网桥和 VLAN。 - 网络验证:确保虚拟机通过物理交换机 DHCP 获取 IP,并按 VLAN 隔离。
此方案结合了自动化工具(virt-install
)的便利性和 OVS 的灵活性,适用于需要多租户网络隔离的虚拟化环境。