怎样管理 Linux VLAN 划分:配置 802.1Q 虚拟局域网

作者:袖梨 2026-07-07
Linux VLAN划分核心是通过8021q内核模块和iproute2工具,在单物理网卡创建多VLAN子接口实现逻辑隔离;需依次完成模块加载、ip link创建子接口、发行版适配的持久化配置,并确保交换机Trunk放行对应VLAN ID。

管理 Linux VLAN 划分,核心是让单个物理网卡承载多个逻辑网络,靠的是内核的 8021q 模块 和用户态的接口管理工具。配置本身不难,但漏掉任一环节——比如模块没加载、交换机没配 trunk、配置没持久化——都会导致“看起来配好了却不通”。下面分四块说清楚。

确认并启用 8021q 内核模块

这是所有操作的前提。没有它,连创建 VLAN 接口的命令都会报 Operation not supported

  • 检查是否已加载: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 接口(推荐方式)

现代 Linux 默认使用 ip 命令(来自 iproute2),比老旧的 vconfig 更可靠、功能更全,且无需额外安装(绝大多数系统已预装)。

  • 假设物理网卡是 ens33,要建 VLAN ID 为 200 的子接口:
    sudo ip link add link ens33 name ens33.200 type vlan id 200
  • 分配 IP 地址:
    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 命令只在当前会话有效,重启就消失。必须写进系统网络配置才能持久生效。

  • Ubuntu/Debian(Netplan)
    编辑 /etc/netplan/*.yaml,在对应物理接口下加 vlans 块:
    vlans:
      vlan200:
        id: 200
        link: ens33
        addresses: [172.168.10.10/24]
    保存后运行 sudo netplan apply
  • RHEL/CentOS/Rocky(ifcfg 文件)
    新建 /etc/sysconfig/network-scripts/ifcfg-ens33.200,内容含:
    DEVICE=ens33.200
    VLAN=yes
    PHYSDEV=ens33
    VID=200
    ONBOOT=yes
    父接口 ifcfg-ens33 中设 BOOTPROTO=none 且不配 IP

别忘了交换机和连通性验证

Linux 上接口 UP ≠ 能通信。VLAN 是端到端技术,交换机侧必须配合。

  • 确保连接 Linux 的交换机端口设为 Trunk 模式,并显式允许该 VLAN ID(如 switchport trunk allowed vlan 200
  • 检查 MTU:VLAN 标签增加 4 字节开销,若链路全程 MTU 都是 1500,则实际有效载荷为 1496;如需大包,建议将接口 MTU 设为 1504
  • 基础连通性验证顺序:
    ping 同 VLAN 网关
    tcpdump -i ens33.200 -n icmp 看是否有带标签的帧进出
    cat /proc/net/vlan/config 查全局 VLAN 映射关系

相关文章

精彩推荐