CentOS KVM如何配置VLAN桥接网络实现虚拟机隔离?

在基于 CentOS 的 KVM 虚拟化环境中,配置 VLAN(虚拟局域网)是实现网络隔离、提升安全性和优化网络流量的关键技术,通过 VLAN,可以将一台物理服务器上的多个虚拟机划分到不同的逻辑网络中,即使它们共享同一块物理网卡,本文将详细介绍如何在 CentOS 系统上为 KVM 虚拟机配置 VLAN 网络。

CentOS KVM如何配置VLAN桥接网络实现虚拟机隔离?

核心概念理解

在开始配置之前,理解其工作原理至关重要,KVM 中的 VLAN 配置主要依赖于 Linux 网桥和 VLAN 子接口,基本流程如下:

  1. 物理网卡:作为连接外部物理网络的出口,需要连接到支持 VLAN 的交换机端口,且该端口通常需配置为 Trunk 模式。
  2. VLAN 子接口:在物理网卡上创建虚拟的子接口,每个子接口对应一个特定的 VLAN ID。eth0.100 代表在 eth0 上创建的 VLAN ID 为 100 的子接口。
  3. Linux 网桥:创建一个或多个网桥,将 VLAN 子接口作为其端口,虚拟机将直接连接到这个网桥。
  4. 虚拟机网卡:虚拟机的虚拟网卡(vNIC)被附加到相应的网桥上,从而使其能够与指定 VLAN 内的其他设备通信。

配置前提条件

  • 一台已安装 KVM 环境(如 qemu-kvm、libvirt、virt-install)的 CentOS 7 或 CentOS 8 系统。
  • 拥有 root 或 sudo 权限。
  • 一块或多块支持 VLAN 标记(802.1q)的物理网卡。
  • 物理交换机上的对应端口已配置为 Trunk 模式,并允许相应的 VLAN 通过。

详细配置步骤

假设我们的物理网卡为 eth0,需要为虚拟机配置 VLAN ID 为 100200 的两个网络。

安装必要工具

确保系统已安装创建 VLAN 和网桥所需的工具。

# 对于 CentOS 7
sudo yum install -y vconfig bridge-utils
# 对于 CentOS 8
sudo dnf install -y vconfig bridge-utils

创建 VLAN 子接口和网桥

我们将为每个 VLAN 创建一个子接口,并将其绑定到一个独立的网桥上。

配置 VLAN 100:

# 创建 VLAN 100 的子接口
sudo ip link add link eth0 name eth0.100 type vlan id 100
sudo ip link set dev eth0.100 up
# 创建网桥 br-vlan100
sudo brctl addbr br-vlan100
sudo ip link set dev br-vlan100 up
# 将 VLAN 子接口添加到网桥
sudo brctl addif br-vlan100 eth0.100

配置 VLAN 200:

# 创建 VLAN 200 的子接口
sudo ip link add link eth0 name eth0.200 type vlan id 200
sudo ip link set dev eth0.200 up
# 创建网桥 br-vlan200
sudo brctl addbr br-vlan200
sudo ip link set dev br-vlan200 up
# 将 VLAN 子接口添加到网桥
sudo brctl addif br-vlan200 eth0.200

配置虚拟机网络

您可以将虚拟机的网络接口连接到新创建的网桥,使用 virt-manager 图形界面或 virsh edit 命令修改虚拟机的 XML 配置。

CentOS KVM如何配置VLAN桥接网络实现虚拟机隔离?

在虚拟机的 XML 配置中,找到 <interface> 部分,将其修改为如下形式,以连接到 br-vlan100

<interface type='bridge'>
  <mac address='52:54:00:xx:xx:xx'/>
  <source bridge='br-vlan100'/>
  <model type='virtio'/>
</interface>

source bridge 的值改为 br-vlan200 即可让虚拟机接入 VLAN 200。

配置永久化

上述命令在系统重启后会失效,要使配置永久生效,需要创建网络配置脚本文件,以 VLAN 100 为例:

创建 /etc/sysconfig/network-scripts/ifcfg-eth0.100

DEVICE=eth0.100
BOOTPROTO=none
ONBOOT=yes
IPADDR=0.0.0.0  # 网桥本身通常不需要IP
NETMASK=255.255.255.0
USERCTL=no
VLAN=yes

创建 /etc/sysconfig/network-scripts/ifcfg-br-vlan100

DEVICE=br-vlan100
TYPE=Bridge
BOOTPROTO=none
ONBOOT=yes
IPADDR=0.0.0.0
NETMASK=255.255.255.0
STP=off
DELAY=0

按照同样的方式为 VLAN 200 创建对应的配置文件,完成后,重启网络服务或重启服务器即可。

验证与排错

使用以下命令验证配置:

CentOS KVM如何配置VLAN桥接网络实现虚拟机隔离?

  • brctl show:查看网桥状态及其连接的端口。
  • ip addr show:检查 eth0.100br-vlan100 等接口是否已正确创建并启用。
  • 在虚拟机内部配置好 IP 地址后,尝试 ping 同一 VLAN 内的其他设备,测试网络连通性。

下表小编总结了关键组件及其作用:

组件 示例名称 描述
物理网卡 eth0 连接物理交换机的真实网络接口
VLAN 子接口 eth0.100 在物理网卡上创建的、承载特定VLAN流量的虚拟接口
网桥 br-vlan100 连接VLAN子接口和虚拟机网卡的虚拟交换机
虚拟机网卡 vnet0 KVM虚拟机内部的虚拟网络接口

相关问答FAQs

问题 1:我的虚拟机无法访问网络,可能是什么原因?

解答: 这是一个常见问题,排查步骤如下:

  1. 物理交换机配置:确认连接宿主机的交换机端口已设置为 Trunk 模式,并且允许了目标 VLAN(如 100)的流量通过。
  2. 防火墙:检查 CentOS 宿主机和虚拟机内部的防火墙(如 firewalldiptables)规则,确保没有阻止相关流量,可以临时关闭防火墙进行测试。
  3. VLAN ID 和网桥:再次确认 ip linkifcfg 脚本中的 VLAN ID 是否正确,以及虚拟机是否连接到了正确的网桥(br-vlan100 而非 br-vlan200)。
  4. IP 配置:确保虚拟机内部的 IP 地址、子网掩码和网关配置正确,且与该 VLAN 的网络规划一致。
  5. 驱动和模块:确保 8021q 内核模块已加载(lsmod | grep 8021q)。

问题 2:我可以让单个虚拟机同时访问多个 VLAN 吗?

解答: 可以,这被称为“多网卡虚拟机”,您需要为虚拟机添加多个虚拟网络接口,在 virt-manager 中,可以通过“添加硬件”功能添加新的网络接口;在 virsh edit 中,则需要在 XML 中添加多个 <interface> 段落,每个新的网络接口分别连接到不同的网桥(一个连接 br-vlan100,另一个连接 br-vlan200),进入虚拟机操作系统后,系统会识别到多块网卡,您可以为它们分别配置不同网段的 IP 地址,从而实现同时访问多个 VLAN。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-26 01:19
下一篇 2025-10-26 01:22

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

广告合作

QQ:14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信