Linux内核实战精髓实录28-VLAN设置指南:命令行与配置文件实现虚拟局域网划分
1. 前言:VLAN的核心价值与应用场景
在现代网络架构中,虚拟局域网(VLAN)是实现网络分段、提升安全性和优化带宽利用的关键技术。传统局域网(LAN)中,所有设备处于同一广播域,随着设备数量增加,广播风暴、数据泄露风险会显著提升。
VLAN通过逻辑划分而非物理布线,将一个物理网络分割为多个独立的广播域,实现以下核心价值:
- 广播域隔离:减少广播流量,降低网络拥塞(例如,仅VLAN 10内的设备接收该VLAN的广播包)
- 安全性增强:不同VLAN间默认无法通信(需三层设备转发),防止未授权数据访问
- 灵活性提升:设备可通过配置归属不同VLAN,无需调整物理接线(例如,跨楼层设备归为同一业务VLAN)
图1:VLAN网络架构示意图

图2:VLAN数据封装流向图

2. Linux VLAN实现依赖:工具与内核模块
Linux系统中实现VLAN需依赖内核模块和用户态工具,不同发行版(如CentOS、Ubuntu)的工具包名称略有差异。
2.1 核心内核模块:8021q
VLAN技术基于IEEE 802.1Q标准,Linux通过8021q内核模块实现VLAN标签的封装/解封装。需先确认模块已加载:
# 检查8021q模块是否加载
lsmod | grep 8021q
# 若未加载,手动加载(临时生效)
sudo modprobe 8021q
# 设置开机自动加载(永久生效)
# CentOS/RHEL 7+/Rocky Linux
sudo bash -c 'echo "8021q" > /etc/modules-load.d/8021q.conf'
# Ubuntu/Debian
sudo bash -c 'echo "8021q" >> /etc/modules'
# 验证模块加载状态
modinfo 8021q | grep description
modinfo 8021q命令可查看模块详细信息,确认内核是否支持802.1Q VLAN标准,输出中会包含"IEEE 802.1Q VLAN support"等描述。
2.2 用户态工具:vconfig与iproute2
Linux提供两种主流工具管理VLAN:vconfig(传统工具,部分发行版已弃用)和iproute2(现代工具,推荐使用)。
| 工具 | 适用场景 | 安装方式(主流发行版) | 优缺点 |
|---|---|---|---|
vconfig | 传统VLAN配置,简单场景 | CentOS: yum install vconfigUbuntu: apt install vlan | 优点:命令简单;缺点:功能有限,不支持复杂场景,部分发行版已移除 |
iproute2 | 现代Linux网络配置,支持VLAN、网桥、路由等全场景 | CentOS: yum install iproute-tcUbuntu: 预装( ip命令) | 优点:功能全面,支持VLAN优先级、QinQ等高级特性;缺点:命令参数稍多 |
注意:iproute2是当前Linux推荐的网络配置工具,替代了传统的ifconfig、vconfig等工具,本文以iproute2为主进行演示。
3. 实战1:命令行临时配置VLAN(即时生效,重启失效)
命令行配置适用于测试场景,配置会在系统重启或网卡重启后丢失。以下以物理网卡eth0为基础,创建VLAN 10、VLAN 20为例。
3.1 步骤1:创建VLAN接口
使用ip link add命令创建VLAN接口,命名格式通常为物理网卡.VLANID(如eth0.10表示eth0上的VLAN 10):
# 创建VLAN 10接口(基于eth0)
sudo ip link add link eth0 name eth0.10 type vlan id 10
# 创建VLAN 20接口(基于eth0)
sudo ip link add link eth0 name eth0.20 type vlan id 20
# 查看VLAN接口详情(确认VLAN ID、父接口等)
ip -d link show eth0.10
ip -d link show eth0.20
执行ip -d link show eth0.10后,输出中会包含vlan id 10、link/ether [父网卡MAC]等关键信息,确认VLAN接口创建成功。典型输出示例:
4: eth0.10@eth0: mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:15:5d:01:23:45 brd ff:ff:ff:ff:ff:ff
vlan protocol 802.1Q id 10
3.2 步骤2:配置VLAN接口IP地址并启用
为VLAN接口分配IP地址(属于对应VLAN的网段),并启用接口:
# 配置VLAN 10 IP(192.168.10.1/24)并启用
sudo ip addr add 192.168.10.1/24 dev eth0.10
sudo ip link set dev eth0.10 up
# 配置VLAN 20 IP(192.168.20.1/24)并启用
sudo ip addr add 192.168.20.1/24 dev eth0.20
sudo ip link set dev eth0.20 up
# 验证VLAN接口状态
ip addr show eth0.10
ip addr show eth0.20
启用后,接口状态应显示为UP,且包含配置的IP地址。若显示DOWN,需检查物理网卡是否启用(ip link set eth0 up)。
3.3 步骤3:测试VLAN连通性
在同VLAN内的其他设备配置对应网段IP(如PC1配置192.168.10.2/24),测试连通性:
# 从Linux主机ping VLAN 10内的PC1
ping -I eth0.10 192.168.10.2
# 验证VLAN隔离性(跨VLAN ping应失败,未配置三层转发时)
ping -I eth0.10 192.168.20.2 # 应超时
3.4 清理临时VLAN配置
测试完成后,可清理临时配置:
# 禁用VLAN接口
sudo ip link set dev eth0.10 down
sudo ip link set dev eth0.20 down
# 删除VLAN接口
sudo ip link delete eth0.10
sudo ip link delete eth0.20
4. 实战2:配置文件永久化VLAN(重启不失效)
生产环境中需通过配置文件实现VLAN永久化,不同Linux发行版的网络配置文件路径不同,以下分CentOS/RHEL和Ubuntu/Debian两种场景说明。
4.1 CentOS/RHEL 7+/Rocky Linux(nmcli/network-scripts)
CentOS 7及以上推荐使用nmcli(NetworkManager)配置,也可使用传统network-scripts。
方式1:使用nmcli配置(推荐)
# 创建VLAN 10连接
sudo nmcli connection add type vlan con-name eth0.10 ifname eth0.10 dev eth0 id 10
# 配置IP地址
sudo nmcli connection modify eth0.10 ipv4.addresses 192.168.10.1/24
sudo nmcli connection modify eth0.10 ipv4.method manual
# 启用连接
sudo nmcli connection up eth0.10
# 创建VLAN 20连接
sudo nmcli connection add type vlan con-name eth0.20 ifname eth0.20 dev eth0 id 20
sudo nmcli connection modify eth0.20 ipv4.addresses 192.168.20.1/24
sudo nmcli connection modify eth0.20 ipv4.method manual
sudo nmcli connection up eth0.20
# 验证连接状态
nmcli connection show eth0.10
nmcli device status
方式2:使用network-scripts配置(传统)
# 创建VLAN 10配置文件
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0.10
写入以下内容:
TYPE=Vlan
BOOTPROTO=static
IPADDR=192.168.10.1
NETMASK=255.255.255.0
GATEWAY=192.168.10.254 # 可选,三层网关
DEVICE=eth0.10
ONBOOT=yes
NAME=eth0.10
VLAN=yes
PHYSDEV=eth0
VLAN_ID=10
# 创建VLAN 20配置文件
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0.20
写入以下内容:
TYPE=Vlan
BOOTPROTO=static
IPADDR=192.168.20.1
NETMASK=255.255.255.0
GATEWAY=192.168.20.254 # 可选,三层网关
DEVICE=eth0.20
ONBOOT=yes
NAME=eth0.20
VLAN=yes
PHYSDEV=eth0
VLAN_ID=20
# 重启网络服务
# CentOS 7/RHEL 7
sudo systemctl restart network
# CentOS 8+/RHEL 8+
sudo nmcli networking off && sudo nmcli networking on
4.2 Ubuntu/Debian(netplan)
Ubuntu 18.04及以上使用netplan作为网络配置工具,编辑yaml配置文件:
# 编辑netplan配置文件
sudo vi /etc/netplan/01-netcfg.yaml
写入以下内容(注意yaml格式缩进):
network:
ethernets:
eth0:
dhcp4: no
dhcp6: no
vlans:
eth0.10:
id: 10
link: eth0
addresses: [192.168.10.1/24]
eth0.20:
id: 20
link: eth0
addresses: [192.168.20.1/24]
version: 2
# 应用配置(无需重启)
sudo netplan apply
# 验证配置
netplan status
ip addr show eth0.10
注意:Netplan配置文件严格要求YAML缩进格式,建议使用2个空格缩进,避免使用Tab,否则配置会失效。
5. 高级特性:VLAN优先级与QinQ配置
5.1 VLAN优先级(802.1p)
802.1Q标准支持VLAN优先级(CoS),取值0-7,用于流量整形和QoS:
# 创建带优先级的VLAN接口(优先级3)
sudo ip link add link eth0 name eth0.10 type vlan id 10 egress-qos-map 0:3
# 验证优先级配置
ip -d link show eth0.10 | grep qos
5.2 QinQ(双层VLAN)配置
QinQ(802.1ad)实现双层VLAN标签,适用于运营商网络场景:
# 加载8021q模块时启用QinQ支持
sudo modprobe 8021q enable_qinq=1
# 创建外层VLAN 100,内层VLAN 10
sudo ip link add link eth0 name eth0.100.10 type vlan id 10 proto 802.1ad
sudo ip link add link eth0.100.10 name eth0.100.10.10 type vlan id 10
6. 故障排查与常见问题
6.1 常见问题1:VLAN接口创建失败
现象:ip link add创建VLAN接口时报错Invalid argument。
排查:
- 确认8021q模块已加载:
lsmod | grep 8021q - 确认物理网卡存在且启用:
ip link show eth0 - 检查VLAN ID是否合法(1-4094):避免使用0或4095
6.2 常见问题2:VLAN接口UP但无法通信
现象:VLAN接口已UP且IP配置正确,但ping不通同VLAN设备。
排查:
- 检查交换机端口是否配置为Trunk模式,允许对应VLAN通过
- 验证物理网卡是否混杂模式(必要时开启):
ip link set eth0 promisc on - 检查防火墙/iptables规则:
iptables -L -n | grep 192.168.10.0 - 抓包验证VLAN标签:
tcpdump -i eth0 vlan 10
6.3 常见问题3:重启后VLAN配置失效
现象:命令行配置的VLAN重启后消失。
解决:使用配置文件(netplan/network-scripts/nmcli)实现永久化配置,避免仅使用临时命令。
7. 总结
Linux系统中实现VLAN配置主要分为临时命令行配置和永久化配置文件两种方式,核心依赖8021q内核模块和iproute2工具。临时配置适用于测试验证,永久化配置需根据发行版选择对应的配置方式(CentOS的nmcli/network-scripts、Ubuntu的netplan)。
实际部署中,需结合交换机Trunk配置、VLAN隔离需求和QoS策略,确保VLAN配置符合业务场景。同时需注意不同发行版的网络管理工具差异,避免配置格式错误导致失效。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)