在Ubuntu Server上配置自定义VLAN网络,核心答案是:通过netplan的YAML配置文件声明VLAN虚拟子接口,指定物理网卡和VLAN ID,执行netplan apply后即可生效,全程无需重启系统。这套方法适用于Ubuntu 18.04到24.04全系列服务器版本,也是目前绝大多数生产环境采用的标准做法。
ubuntu server配置网络配置文件,先搞懂netplan的脾气
自Ubuntu 17.10起,netplan正式取代了老旧的/etc/network/interfaces,成为系统默认的网络配置管理工具,它的工作方式很简单:你只需要写好一份YAML格式的“愿望清单”,netplan负责把清单翻译成systemd-networkd或NetworkManager能理解的后端指令。
netplan配置文件到底存放在哪里
所有netplan配置都集中在/etc/netplan/目录下,常见文件名包括01-netcfg.yaml、50-cloud-init.yaml、99-config.yaml,执行ls /etc/netplan/查看你机器上实际存在的文件,注意,Ubuntu云镜像默认由cloud-init管理网络,如果你手动改过配置后又执行了cloud-init clean,配置会被覆盖回来。
下面是一份最基础的静态IP配置,后续所有VLAN操作都建立在这个框架之上:
network:
version: 2
renderer: networkd
ethernets:
eno1:
dhcp4: no
addresses:
- 192.168.1.10/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [223.5.5.5, 8.8.8.8]
renderer选networkd还是NetworkManager
服务器场景选networkd,桌面或需要图形化网络管理的场景选NetworkManager。renderer参数直接决定netplan调用哪套后端,混用容易出奇怪问题,行业共识认为,生产服务器统一使用networkd更稳妥,资源占用也更小。
ubuntu配置自定义vlan网络的完整实操步骤
假设现有物理网卡eno1承载服务器管理流量,业务网段需要跑VLAN 100和VLAN 200,网关分别是0.100.1和0.200.1,下面每一步都直接抄作业即可。
确认物理网卡名称和VLAN信息
先查看当前网卡状态,确保物理链路正常:
ip -br link show
输出中能看到eno1、ens3或eth0之类的名称,记下来,同时向网络管理员确认:
交换机对接端口是否已配置为Trunk模式,并允许VLAN 100和VLAN 200通过,这一步漏掉,后面服务器侧配置再对也连不通。
基于独立VLAN块编写配置
写VLAN配置前,先说清楚一个重要技术背景:Linux自2.6.9内核起就支持VLAN子接口,而netplan提供两种声明VLAN的方式,一种是Ubuntu 22.04起推荐的独立VLAN块写法,另一种是沿用多年的子接口写法,两者效果等价,但独立VLAN块更规范。
对Ubuntu 22.04及以上版本,推荐这种写法:
network:
version: 2
renderer: networkd
ethernets:
eno1:
dhcp4: no
vlans:
vlan100:
id: 100
link: eno1
addresses:
- 10.0.100.10/24
routes:
- to: default
via: 10.0.100.1
vlan200:
id: 200
link: eno1
addresses:
- 10.0.200.10/24
对ubuntu 20.04 vlan配置,采用传统子接口写法同样兼容:
network:
version: 2
renderer: networkd
ethernets:
eno1:
dhcp4: no
eno1.100:
dhcp4: no
addresses: [10.0.100.10/24]
eno1.200:
dhcp4: no
addresses: [10.0.200.10/24]
注意两种写法不要混用,否则netplan会报重复配置错误,如果VLAN走DHCP,把addresses整行删掉,dhcp4改成yes即可,比如内网自动分配IP的场景。
应用配置并验证结果
执行配置前先用sudo netplan try做个预检,这条命令会先验证语法,有问题会自动回滚,有效避免配置文件写错导致SSH断连的尴尬,如果60秒内没按回车确认,配置也会自动还原。
确认无误后正式应用:
sudo netplan try sudo netplan apply
验证VLAN接口是否成功创建:
ip -br addr show | grep vlan
看到vlan100和vlan200都带上了对应的IP地址,说明配置生效,再ping一下各VLAN的网关,能通就大功告成,整个过程中eno1本身不用配IP,它只负责做物理通道。
ubuntu vlan配置命令排查思路:为什么配置对了却不通
这是后台运维群里出现频率最高的一类问题,配置看着没毛病,VLAN接口也起来了,但业务就是不通,排查顺序比技巧本身更重要。
先查交换机侧,别急着改服务器
约八成VLAN不通的案例,问题出在交换机而非服务器,确认交换机端口模式是Trunk而不是Access,确认Allowed VLAN列表里放行了对应ID,确认设备之间的MTU一致性,有条件的用tcpdump -i vlan100抓包看看有没有流量到达服务器网卡,没有抓到包就基本可以断定是物理侧链路问题。
检查netplan配置文件里的隐藏坑
- 缩进必须用两个空格,YAML对Tab和缩进零容忍,而且netplan的报错信息对新手并不友好。
id字段是整数,不要加引号,id: "100"在某些版本会直接报类型错误。- 独立VLAN块名称不能叫
vlan0,id范围必须是1到4094,0和4095为保留值不可用。 - 子接口写法
eno1.100和独立VLAN块写法不能出现在同一份配置文件中。 - 如果
renderer是NetworkManager,有些版本需要额外安装vlan插件包才能识别VLAN配置,服务器版默认networkd反而没这个问题。
多网卡服务器上的特殊场景
双网卡甚至四网卡服务器做VLAN聚合时,建议在每个VLAN块中显式声明link参数指向具体物理网卡,比如link: eno2,不要依赖netplan的自动匹配,否则系统重启后网卡名称顺序发生变化,VLAN会绑到错误的物理口上,这种故障极其隐蔽。
netplan和NetworkManager与传统ifupdown对比,VLAN配置方式怎么选
老运维可能习惯改/etc/network/interfaces,但Ubuntu各版本对它的支持已经基本停止,只在兼容模式下存在,对比如下:
| 配置工具 | 配置位置 | VLAN支持方式 | 热加载 | 适合场景 |
|---|---|---|---|---|
| netplan | /etc/netplan/.yaml | 独立VLAN块或子接口 | netplan apply即时生效 |
所有Ubuntu Server |
| NetworkManager |
/etc/NetworkManager | 通过nmtui或nmcli | 即时生效 | 桌面版或动态网络 |
| ifupdown | /etc/network/interfaces | 子接口 | 需重启networking服务 | 老版本迁移 |
对于追求稳定性和可脚本化的服务器环境,netplan毫无疑问是最优选,它用一份YAML描述整机网络拓扑,配合Git做版本管理,比手工敲命令改配置更透明可回溯,如果只是临时测试VLAN连通性,不走netplan也可以,用ip link add link eno1 name vlan100 type vlan id 100 && ip addr add 10.0.100.10/24 dev vlan100快速建立,测试完用ip link del vlan100删掉,对系统零残留。
Q&A:ubuntu配置vlan的常见疑问解答
netplan配置了VLAN并执行apply,重启服务器后配置丢了是什么原因?
配置文件本身没有被持久化,检查/etc/netplan/下是否存在同名冲突文件,多份YAML文件同时存在时,netplan按文件名顺序合并,后加载的配置如果层级相同会覆盖前面的,另外确认文件权限,netplan要求配置文件权限不能高于600,执行sudo chmod 600 /etc/netplan/.yaml可修复。
在同一张物理网卡上配置多个VLAN,如何平衡多个子网的流量?
多个VLAN共用同一物理网卡,在Linux内部通过802.1Q标签天然隔离,互不干扰,你需要做的只是确保每个VLAN块都有独立的IP地址、独立路由表条目,如果不同VLAN需要访问彼此,添加对应路由规则即可,但默认网关只能有一个,多VLAN环境下通常只在核心业务VLAN中声明默认网关。对这类场景,建议在VLAN配置中显式为每个子接口指定独立路由表,并配合策略路由实现精细转发。
临时创建的VLAN接口,重启后会自动消失吗?
会,通过ip link add命令手动创建的VLAN接口属于内核级临时对象,重启后Linux内核重新加载,未写入任何配置文件的接口全部清空,系统回到只有物理网卡的状态,这正是临时测试用ip link add、正式使用则写入netplan的意义所在。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/584564.html




