Linux VLAN划分关键在于端到端协同:先加载8021q模块,再用iproute2创建ens33.100/200子接口并配IP启用,接着按发行版写入Netplan或ifcfg持久化配置,最后交换机必须设Trunk并放行对应VLAN ID。

Linux 系统配置 VLAN 划分实现虚拟局域网隔离,关键在于让单块物理网卡承载多个带标签的逻辑网络,同时确保内核、主机配置和交换机端到端协同。配置本身不复杂,但任一环节缺失都会导致不通。
加载并确认 8021q 内核模块
VLAN 依赖内核对 IEEE 802.1Q 标签的支持。没有这个模块,连创建子接口都会失败。
- 检查是否已加载:
lsmod | grep 8021q - 若无输出,临时启用:
sudo modprobe 8021q - 开机自动加载:
Ubuntu/Debian:echo "8021q" | sudo tee -a /etc/modules
RHEL/CentOS/Rocky:echo "8021q" | sudo tee /etc/modules-load.d/8021q.conf
用 iproute2 创建 VLAN 子接口
推荐使用 ip link(来自 iproute2),它比老旧的 vconfig 更稳定、功能更全,且多数系统已预装。
假设物理网卡为 ens33,需划分 VLAN ID 100 和 200:
- 创建子接口:
sudo ip link add link ens33 name ens33.100 type vlan id 100sudo ip link add link ens33 name ens33.200 type vlan id 200 - 配置 IP 并启用:
sudo ip addr add 192.168.100.10/24 dev ens33.100sudo ip addr add 192.168.200.10/24 dev ens33.200sudo ip link set ens33.100 up && sudo ip link set ens33.200 up - 验证:
ip -d link show ens33.100(看是否有vlan id 100)、ip addr show ens33.100
写入持久化配置避免重启失效
临时命令在 reboot 后全部丢失,必须落盘。不同发行版方式不同:
- Ubuntu/Debian(Netplan):
编辑/etc/netplan/*.yaml,在对应网卡下添加:vlans: ens33.100: id: 100 link: ens33 addresses: [192.168.100.10/24] ens33.200: id: 200 link: ens33 addresses: [192.168.200.10/24]执行
sudo netplan apply - RHEL/CentOS/Rocky(ifcfg 风格):
确保主接口ifcfg-ens33中设BOOTPROTO=none且不配 IP;
新建ifcfg-ens33.100:DEVICE=ens33.100 VLAN=yes PHYSDEV=ens33 VID=100 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.100.10 NETMASK=255.255.255.0
同理配置
.200文件,然后重启网络服务或执行nmcli connection reload && nmcli connection up ens33.100
交换机侧必须同步配成 Trunk 并放行 VLAN
Linux 接口 UP ≠ 能通信。VLAN 是端到端技术,缺交换机配合就只是“单边收发”。
- 将连接 Linux 的交换机端口设为 Trunk 模式;
- 显式允许对应 VLAN ID,例如 Cisco 命令:
switchport mode trunkswitchport trunk allowed vlan 100,200 - 注意 MTU:VLAN 标签增加 4 字节,若链路全程 MTU 为 1500,则有效载荷为 1496,必要时可调高物理链路 MTU 避免分片。
不复杂但容易忽略。


















