Linux 网络栈提供了完整的 IEEE 802.1Q VLAN 协议支持,允许在单个物理接口上创建多个虚拟局域网(VLAN)。这项功能通过内核中的 8021q 模块实现,可以创建最多 4094 个 VLAN(VLAN ID 1-4094),每个 VLAN 都作为独立的网络接口存在。

在实现上,VLAN 接口通常命名为类似 eth0.100 的形式,其中:

  • eth0 代表物理接口
  • 100 代表 VLAN ID

配置 VLAN 的主要步骤包括:

  1. 加载 8021q 内核模块:modprobe 8021q
  2. 创建 VLAN 接口:vconfig add eth0 100
  3. 配置 IP 地址:ip addr add 192.168.100.1/24 dev eth0.100
  4. 启用接口:ip link set eth0.100 up

典型应用场景包括:

  • 数据中心服务器需要同时接入多个业务网络
  • 云环境中为不同租户提供网络隔离
  • 企业网络中划分不同部门网段

此外,Linux 还支持 VLAN 的高级特性:

  • 802.1Q-in-Q (双层 VLAN 标签)
  • VLAN 过滤和优先级处理
  • 结合桥接和路由功能使用

Linux 内核 VLAN 支持详解

内核模块支持

Linux 内核通过 8021q.ko 模块提供 VLAN 功能支持,该模块实现了 IEEE 802.1Q 标准。使用前需要确保该模块已加载:

手动加载模块

modprobe 8021q

检查模块加载状态

lsmod | grep 8021q

输出示例:

8021q                  32768  0
garp                   16384  1 8021q
mrp                    20480  1 8021q

自动加载配置

为了使系统在启动时自动加载 VLAN 模块,可以将其添加到以下任一位置:

  1. /etc/modules 文件(传统方式)
  2. /etc/modules-load.d/vlan.conf(推荐方式)

示例配置:

echo "8021q" | sudo tee /etc/modules-load.d/vlan.conf

内核编译选项

在自定义编译内核时,需要确保启用了 VLAN 支持选项:

验证当前内核配置

grep CONFIG_VLAN_8021Q /boot/config-$(uname -r)

预期输出应为:

CONFIG_VLAN_8021Q=y

CONFIG_VLAN_8021Q=m

VLAN ID 规范与硬件加速支持

VLAN ID 取值范围

有效范围

  • 1-4094:这是标准的可用VLAN ID范围,允许网络管理员创建最多4094个独立的虚拟局域网

保留值

  • 0:表示优先级标签(Priority-tagged frames),用于802.1p优先级标记但不包含具体VLAN ID的数据帧
  • 4095:非法值,保留用于协议内部使用,不能配置为实际VLAN ID

硬件加速支持

现代高性能网卡普遍提供VLAN标签处理的硬件卸载功能,通过专用芯片处理VLAN标签操作可以:

  1. 显著降低CPU负载
  2. 提高数据包处理速度
  3. 减少网络延迟
  4. 支持更高的吞吐量

支持的网卡型号示例

Intel系列
  • X710:适用于数据中心和企业网络
  • XL710:40GbE高性能网卡
  • XXV710:25GbE以太网适配器
  • E810:最新一代100GbE网卡,支持SR-IOV和RDMA
Mellanox系列
  • ConnectX-4:支持25/50/100GbE
  • ConnectX-5:增强的VXLAN和NVGRE卸载
  • ConnectX-6:支持200GbE,提供智能卸载引擎
Broadcom系列
  • NetXtreme II BCM57810:10GbE多功能网卡
  • NetXtreme II BCM57840:四端口10GbE解决方案

这些网卡通常通过以下方式提供VLAN硬件加速:

  • VLAN标签的插入和剥离
  • 基于VLAN ID的过滤和分类
  • VLAN优先级标记(802.1p)处理
  • 跨VLAN的桥接和路由加速

检查硬件卸载支持

ethtool -k <interface> | grep vlan-offload

输出示例:

rx-vlan-offload: on
tx-vlan-offload: on

启用/禁用硬件卸载

# 启用
ethtool -K <interface> rx-vlan-offload on tx-vlan-offload on

# 禁用(用于调试)
ethtool -K <interface> rx-vlan-offload off tx-vlan-offload off


用户空间工具

  1. ip link(推荐)

    • 属于 iproute2 套件,现代 Linux 发行版的默认工具
    • 支持 VLAN 创建、删除及状态查看
    • 示例:ip -d link show 可显示 VLAN 接口详细信息
  2. vconfig(传统工具)

    • 旧式工具,功能有限,逐渐被淘汰
    • 示例:vconfig set_flag eth0.100 1 1 可启用接口的重新排序功能
  3. 其他工具

    • bridge:用于管理 VLAN-aware 网桥
    • ethtool:查看和配置网卡 VLAN 过滤功能

典型配置流程

方法1:使用 ip 命令(推荐)
# 加载内核模块
sudo modprobe 8021q

# 创建 VLAN 接口(ID=100,父接口为eth0)
sudo ip link add link eth0 name eth0.100 type vlan id 100

# 启用接口
sudo ip link set eth0.100 up

# 配置IP地址
sudo ip addr add 192.168.100.1/24 dev eth0.100

# 添加默认路由(可选)
sudo ip route add default via 192.168.100.254 dev eth0.100

方法2:使用 vconfig(传统方式)
# 创建 VLAN 接口
sudo vconfig add eth0 100

# 启用接口
sudo ip link set eth0.100 up

# 配置IP地址(需使用ip或ifconfig)
sudo ip addr add 192.168.100.1/24 dev eth0.100

持久化配置
  • Debian/Ubuntu:编辑 /etc/network/interfaces
    auto eth0.100
    iface eth0.100 inet static
      address 192.168.100.1
      netmask 255.255.255.0
      vlan-raw-device eth0
    

  • RHEL/CentOS:创建 /etc/sysconfig/network-scripts/ifcfg-eth0.100
    DEVICE=eth0.100
    BOOTPROTO=static
    IPADDR=192.168.100.1
    NETMASK=255.255.255.0
    ONBOOT=yes
    VLAN=yes
    


高级功能

  1. VLAN 堆叠(Q-in-Q)

    • 用于服务提供商网络,支持嵌套 VLAN 标签
    • 示例:
      ip link add link eth0 name eth0.1000 type vlan protocol 802.1ad id 1000
      

  2. VLAN 过滤

    • 仅接收特定 VLAN 的数据包(需网卡支持)
    • 启用过滤:
      ethtool -K eth0 rx-vlan-filter on
      

  3. 硬件卸载

    • 通过 ethtool -k eth0 检查 tx-vlan-offloadrx-vlan-offload 状态
    • 启用卸载:
      ethtool -K eth0 tx-vlan-offload on
      


应用场景

  1. 服务器多租户隔离
    • 在云主机中为不同租户分配独立 VLAN
  2. 网络设备虚拟化
    • 在交换机或路由器上通过 VLAN 分割逻辑网络
  3. 云环境网络分割
    • OpenStack/Kubernetes 使用 VLAN 实现多租户网络
  4. 企业部门隔离
    • 财务、研发等部门通过 VLAN 隔离广播域

注意事项

  1. MTU 问题
    • VLAN 标签占用 4 字节,需确保父接口 MTU ≥ VLAN 接口 MTU + 4(如 ip link set eth0 mtu 1504
  2. 性能考虑
    • 软件处理 VLAN 标签可能导致 CPU 开销,建议启用硬件卸载(若支持)
  3. 兼容性
    • 某些老旧交换机可能不支持标准 802.1Q,需检查 trunk 端口配置

状态检查与监控

# 查看 VLAN 接口详细信息
ip -d link show eth0.100

# 查看 VLAN 统计信息
cat /proc/net/vlan/eth0.100

# 检查 VLAN 硬件卸载状态
ethtool -k eth0 | grep vlan-offload

# 监控 VLAN 流量(通过 tcpdump)
tcpdump -i eth0.100 -n


Linux 的 VLAN 实现完全符合 IEEE 802.1Q 标准,并提供了丰富的管理和监控接口,使其成为构建复杂网络环境的理想选择。

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐