在Ubuntu 18.04及之后的版本中,网络配置已经从传统的/etc/network/interfaces迁移到了netplan工具。要配置静态IP和路由,你需要编辑/etc/netplan/目录下的YAML配置文件,通过netplan apply命令使其生效。整个过程不需要安装额外软件包,系统自带netplan,核心就是写对YAML语法、设对参数、应用配置。下面我会从文件结构、静态IP配置、路由配置、多网卡场景、常见问题排查等方面,把这件事讲透。
一、netplan是什么,为什么要用它
netplan是Ubuntu官方推出的网络配置抽象层,它不直接操作底层网络,而是生成配置给后端渲染器(renderer)去执行。常见的后端有NetworkManager和systemd-networkd。桌面版Ubuntu默认用NetworkManager,服务器版默认用systemd-networkd。你可以通过查看/etc/netplan/*.yaml文件头部的renderer字段来确认当前使用的是哪个后端。如果没有指定,系统会根据实际情况自动选择。
netplan的核心优势在于:配置文件是声明式的YAML格式,语法简洁,支持多网卡、多IP、VLAN、网桥、路由等复杂场景,而且配置不生效时会自动回滚,不会把你锁在服务器外面。这对远程运维来说非常关键。
二、找到并编辑netplan配置文件
所有netplan配置文件都放在/etc/netplan/目录下,文件名通常以.yaml结尾,比如00-installer-config.yaml或者01-netcfg.yaml。先用ls命令查看:
ls /etc/netplan/
然后用你熟悉的编辑器打开,比如nano或vim:
sudo nano /etc/netplan/00-installer-config.yaml
注意:YAML对缩进极其敏感,必须用空格缩进,不能用Tab键。每一级缩进通常是2个空格。写错缩进会导致netplan apply报错甚至无法应用配置。
三、配置单网卡静态IP
假设你的网卡名称是ens33(可以用ip a命令查看实际名称),要配置静态IP 192.168.1.100/24,网关192.168.1.1,DNS用8.8.8.8和114.114.114.114,配置如下:
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 114.114.114.114
逐行解释:version: 2是必须的,目前只支持版本2;dhcp4: no表示关闭DHCP;addresses数组里写IP和前缀长度;routes里的to: default表示默认路由,via后面跟网关地址;nameservers配置DNS服务器。写完保存后,先用test命令测试配置是否有语法错误:
sudo netplan try
如果没有报错,会提示你是否应用,按回车确认。或者直接应用:
sudo netplan apply
应用后用ip a和ip route验证配置是否生效。
四、配置多条静态路由
实际运维中经常需要配置多条路由,比如访问不同网段走不同网关。netplan支持在routes数组中添加多条路由规则。例如,你有两个网段需要分别路由:
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
- to: 10.0.0.0/8
via: 192.168.1.254
metric: 100
- to: 172.16.0.0/12
via: 192.168.1.253
metric: 200
nameservers:
addresses:
- 8.8.8.8
这里to后面跟目标网段,via是下一跳网关,metric是路由优先级,数值越小优先级越高。如果你需要配置更精细的路由策略,比如基于源地址选择路由,netplan原生不支持策略路由(policy routing),需要借助systemd-networkd的.route文件或者ip rule命令来实现,这属于进阶操作。
五、多网卡配置场景
服务器通常有多块网卡,比如一块管理网口、一块业务网口。netplan可以在同一个配置文件中管理多块网卡。例如ens33做管理口,ens34做业务口:
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
ens34:
dhcp4: no
addresses:
- 10.10.10.100/24
routes:
- to: 10.10.20.0/24
via: 10.10.10.1
每块网卡独立配置,互不干扰。需要注意的是,如果两块网卡都配置了default路由,系统会根据metric值选择优先级高的那条作为默认路由。如果你只想让管理口走默认路由,业务口不配default路由即可。
六、配置网桥(Bridge)场景
在虚拟化环境中,经常需要把物理网卡加入网桥,让虚拟机通过网桥获取IP。netplan对网桥的支持也很完善:
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
bridges:
br0:
dhcp4: no
interfaces:
- ens33
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
这里ens33不配IP,而是作为br0的成员接口。br0才是实际持有IP和路由的逻辑接口。这种配置在KVM、LXD等虚拟化场景中非常常用。
七、配置IPv6静态地址和路由
如果你的环境需要IPv6,netplan同样支持。只需要在addresses和routes中添加IPv6相关配置:
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
dhcp6: no
addresses:
- 192.168.1.100/24
- 2001:db8::100/64
routes:
- to: default
via: 192.168.1.1
- to: default
via: 2001:db8::1
metric: 100
nameservers:
addresses:
- 8.8.8.8
- 2001:4860:4860::8888
IPv4和IPv6可以同时配置,各自独立管理路由。注意IPv6的默认路由也需要单独声明,不会因为配了IPv4的default就自动有IPv6的default。
八、常见问题与排查技巧
1. 配置后网络不通:先用ip a确认IP是否正确绑定,再用ip route确认路由表。如果IP有但路由缺失,检查routes语法是否正确。
2. netplan apply报错:通常是YAML缩进问题。用netplan try可以在不真正应用的情况下测试,它会给出具体的错误行号和原因。
3. 远程配置导致断连:这是最危险的情况。建议在配置前先用netplan try验证,或者在另一个终端开着ping监控,一旦断连可以通过控制台(如IPMI、VNC)恢复。也可以在配置文件中加一个临时的备用IP,确保至少有一条路能连上。
4. DNS不生效:检查/etc/resolv.conf是否被systemd-resolved覆盖。如果是,需要在netplan的nameservers中正确配置,然后运行sudo resolvectl dns ens33 8.8.8.8来手动刷新。
5. 重启后配置丢失:确认文件在/etc/netplan/目录下且后缀是.yaml,不是.yml(虽然都能用,但建议统一用.yaml)。同时确认没有其他工具(如NetworkManager)在覆盖你的配置。
九、netplan与其他工具的关系
netplan本身不是网络服务,它只是一个配置生成器。实际执行网络配置的是后端渲染器。如果你用的是NetworkManager后端,netplan generate会生成/run/NetworkManager/conf.d/下的配置文件;如果用的是systemd-networkd,会生成/run/systemd/network/下的.network文件。理解这一点有助于你在排查问题时知道去哪里看底层配置。
如果你需要查看netplan生成的最终配置,可以用:
sudo netplan generate
然后去对应目录查看生成的文件内容。这在调试复杂配置时非常有用。
十、最佳实践总结
第一,永远先备份原配置文件再修改,cp一份到旁边。第二,修改前用ip a确认网卡名称,不要凭猜测写ens33或eth0。第三,每次修改后用netplan try验证,确认无误再apply。第四,远程操作时保持一个备用连接通道。第五,配置文件命名要有意义,比如按用途分成01-management.yaml、02-business.yaml,方便后期维护。第六,复杂路由场景建议配合ip route和ip rule命令做补充,netplan解决的是基础静态配置,高级策略路由需要手动干预。
netplan的设计理念是简洁和声明式,掌握了YAML语法和基本的网络概念,配置静态IP和路由其实就是几分钟的事。Ubuntu从18.04开始全面采用netplan,后续版本也会持续维护,学会这套工具对Ubuntu服务器运维来说是基本功。
