Linux VLAN划分核心是通过8021q内核模块和iproute2工具,在单物理网卡创建多VLAN子接口实现逻辑隔离;需依次完成模块加载、ip link创建子接口、发行版适配的持久化配置,并确保交换机Trunk放行对应VLAN ID。
管理 Linux VLAN 划分,核心是让单个物理网卡承载多个逻辑网络,靠的是内核的 8021q 模块 和用户态的接口管理工具。配置本身不难,但漏掉任一环节——比如模块没加载、交换机没配 trunk、配置没持久化——都会导致“看起来配好了却不通”。下面分四块说清楚。
这是所有操作的前提。没有它,连创建 VLAN 接口的命令都会报 Operation not supported。
lsmod | grep 8021q,有输出说明已就绪sudo modprobe 8021q
echo "8021q" | sudo tee -a /etc/modules
echo "8021q" | sudo tee /etc/modules-load.d/8021q.conf
现代 Linux 默认使用 ip 命令(来自 iproute2),比老旧的 vconfig 更可靠、功能更全,且无需额外安装(绝大多数系统已预装)。
ens33,要建 VLAN ID 为 200 的子接口:sudo ip link add link ens33 name ens33.200 type vlan id 200
sudo ip addr add 172.168.10.10/24 dev ens33.200
sudo ip link set ens33.200 up
ip -d link show ens33.200(看是否显示 vlan id 200)ip addr show ens33.200(看地址和 UP 状态)上面的 ip 命令只在当前会话有效,重启就消失。必须写进系统网络配置才能持久生效。
/etc/netplan/*.yaml,在对应物理接口下加 vlans 块:vlans: vlan200: id: 200 link: ens33 addresses: [172.168.10.10/24]sudo netplan apply
/etc/sysconfig/network-scripts/ifcfg-ens33.200,内容含:DEVICE=ens33.200VLAN=yesPHYSDEV=ens33VID=200ONBOOT=yesifcfg-ens33 中设 BOOTPROTO=none 且不配 IPLinux 上接口 UP ≠ 能通信。VLAN 是端到端技术,交换机侧必须配合。
switchport trunk allowed vlan 200)ping 同 VLAN 网关tcpdump -i ens33.200 -n icmp 看是否有带标签的帧进出cat /proc/net/vlan/config 查全局 VLAN 映射关系