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 相关工具
sudo apt update
sudo apt install openvswitch-switch qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
1.2 验证 OVS 和 KVM 状态
sudo systemctl status openvswitch-switch libvirtd
2. 配置 OVS 网桥
2.1 创建 OVS 网桥 ovs-br0
sudo ovs-vsctl add-br ovs-br0
2.2 将宿主机物理网卡 eth0 添加为 Trunk 端口
# 将 eth0 添加到 ovs-br0,并允许所有 VLAN(1-4094)
sudo ovs-vsctl add-port ovs-br0 eth0 trunk=10,20 # 仅允许 VLAN 10 和 20(根据实际需求调整)
sudo ovs-vsctl add-port ovs-br0 eth0 tag=* # tag=*或0表示允许所有VLAN标签的数据通过
2.3 验证 OVS 配置
sudo ovs-vsctl show
输出应包含以下信息:
Bridge ovs-br0
Port eth0
trunks: [10, 20]
Port ovs-br0
Interface ovs-br0
type: internal
3. 创建 KVM 虚拟机
3.1 创建虚拟机磁盘
# 创建 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
3.2 创建虚拟机并关联 OVS 接口
# 创建 vm1(VLAN 10)
sudo virt-install \
--name vm1 \
--ram 1024 \
--vcpus 1 \
--disk path=/var/lib/libvirt/images/vm1.qcow2 \
--os-type linux \
--os-variant ubuntu20.04 \
--network bridge=ovs-br0,model=virtio,virtualport_type=openvswitch,virtualport_options:tag=10 \
--graphics spice \
--console pty,target_type=serial \
--cdrom /path/to/ubuntu-20.04.iso # 关键:挂载 ISO
# 创建 vm2(VLAN 20)
sudo virt-install \
--name vm2 \
--ram 1024 \
--vcpus 1 \
--disk path=/var/lib/libvirt/images/vm2.qcow2 \
--os-type linux \
--os-variant ubuntu20.04 \
--network bridge=ovs-br0,model=virtio,virtualport_type=openvswitch,virtualport_options:tag=20 \
--graphics spice \
--console pty,target_type=serial \
--cdrom /path/to/ubuntu-20.04.iso
3.3 安装操作系统
通过 SPICE/VNC 控制台完成操作系统的安装过程。
安装完成后,虚拟机会自动从磁盘启动。
3.4 验证虚拟机接口
# 查看虚拟机接口名称(例如 vnet0 和 vnet1)
virsh domiflist vm1
virsh domiflist vm2
4. 验证 OVS 端口 VLAN 配置
# 查看 OVS 端口 VLAN 标记
sudo ovs-vsctl list port | grep -E 'name|tag'
输出应类似:
name : "vnet0"
tag : 10
name : "vnet1"
tag : 20
name : "eth0"
trunks : [10, 20]
5. 虚拟机网络配置
5.1 启动虚拟机并获取 DHCP 地址
# 进入 vm1 控制台(按 Enter 激活)
virsh console vm1
# 在 vm1 内执行:
dhclient -v eth0 # 自动获取 VLAN 10 的 IP
# 进入 vm2 控制台
virsh console vm2
# 在 vm2 内执行:
dhclient -v eth0 # 自动获取 VLAN 20 的 IP
5.2 验证 IP 地址
# 在 vm1 内:
ip addr show eth0 # 应显示类似 192.168.10.x/24
# 在 vm2 内:
ip addr show eth0 # 应显示类似 192.168.20.x/24
5.3 验证网关连通性
# 在 vm1 内:
ping 192.168.10.1 # VLAN 10 网关(假设物理交换机 VLAN 10 网关 IP)
# 在 vm2 内:
ping 192.168.20.1 # VLAN 20 网关
6. 物理交换机配置(补充说明)
确保物理交换机满足以下条件:
- 连接宿主机的端口配置为 Trunk,允许 VLAN 10 和 20。
- VLAN 10 和 20 已启用 DHCP 服务(例如通过 DHCP 中继或本地 DHCP 服务器)。
7. 故障排查
7.1 虚拟机无法获取 IP
-
检查 OVS VLAN 标记:
sudo ovs-vsctl get port vnet0 tag sudo ovs-vsctl get port vnet1 tag - 检查物理交换机 Trunk 配置:确保允许 VLAN 10 和 20。
7.2 虚拟机之间无法通信
- 设计隔离:VLAN 10 和 20 默认隔离,若需跨 VLAN 通信,需在物理交换机或宿主机配置路由。
总结
通过以上步骤,您完成了以下配置:
- OVS 网桥
ovs-br0作为 Trunk 接口连接物理网络。 - 两个虚拟机分别接入 VLAN 10 和 20。
- 虚拟机通过物理交换机的 DHCP 服务自动获取 IP。
- VLAN 间隔离由物理交换机和 OVS 共同实现。