Ubuntu 18.04之后全面采用netplan作为网络配置工具,取代了传统的/etc/network/interfaces文件。netplan使用YAML格式的配置文件,位于/etc/netplan/目录下,文件名通常以.yaml结尾。当你配置出错导致网络断开时,不需要重装系统,通过本地控制台、单用户模式或Live USB就能快速回滚到上一个可用配置。核心操作就是:找到正确的配置文件,用YAML语法修正或还原,然后执行netplan apply生效。下面我把整个流程、常见坑、回滚方法全部讲透。
一、netplan到底是什么,为什么要用它
netplan是Canonical推出的网络配置抽象层,它本身不直接管理网络,而是把你写的YAML配置翻译成后端渲染器能理解的指令。Ubuntu默认使用NetworkManager作为后端(桌面版)或networkd(服务器版)。你只需要关心YAML文件怎么写,不用管底层是谁在干活。这比以前直接改ifupdown脚本要清晰得多,但YAML对缩进极其敏感,一个空格错误就可能让整个网络瘫痪。
二、netplan配置文件的位置和基本结构
所有netplan配置文件都放在/etc/netplan/目录下。系统安装后通常会生成一个类似01-netcfg.yaml或50-cloud-init.yaml的文件。你可以用ls命令查看:
ls /etc/netplan/
一个典型的静态IP配置文件长这样:
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4如果是DHCP自动获取IP,就把dhcp4改成yes,删掉addresses和gateway4那几行。注意:YAML里所有层级必须用空格缩进,不能用Tab键,这是新手最容易踩的坑。
三、配置前必做的检查工作
在动手改配置之前,先做三件事。第一,确认网卡名称。用ip a命令查看,常见的有ens33、ens160、eth0等,千万别写错。第二,备份现有配置文件:
cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bak
第三,用netplan try命令做安全测试。这个命令会应用新配置,如果你120秒内不确认,它会自动回滚到原来的状态。这是防止配置错误导致失联的最佳手段:
sudo netplan try
执行后会弹出提示,按回车确认就生效,不按就自动还原。生产环境强烈建议用这个方式验证。
四、常见配置错误及排查方法
配置出错后网络断了怎么办?先别慌。如果你有物理访问权限或者带外管理(IPMI/iLO/iDRAC),直接登录控制台操作。如果是云服务器,用云平台提供的VNC控制台也行。
登录后第一步,用ip a确认网卡状态。如果网卡显示DOWN,手动启用:
sudo ip link set ens33 up
第二步,检查配置文件语法是否有误。netplan自带验证命令:
sudo netplan --debug try
这个命令会输出详细的解析过程和错误信息,比如缩进错误、冒号后缺空格、列表项格式不对等。根据报错信息逐一修正。
第三步,如果是DHCP配置但拿不到IP,检查renderer是否正确。桌面版Ubuntu应该用NetworkManager,服务器版用networkd。写错renderer会导致配置根本不生效。可以用以下命令查看当前使用的后端:
ls -l /run/networkd/netif/ 2>/dev/null || echo "networkd not running" systemctl status NetworkManager 2>/dev/null | head -5
五、网络故障回滚的三种实操方法
方法一:直接还原备份文件。这是最快的方式。如果你之前做了备份,一条命令搞定:
sudo cp /etc/netplan/01-netcfg.yaml.bak /etc/netplan/01-netcfg.yaml sudo netplan apply
方法二:通过单用户模式恢复。如果配置文件被你改得面目全非甚至删掉了,重启系统进入recovery模式。开机时按住Shift(BIOS)或Esc(UEFI),在GRUB菜单选Advanced options,然后选recovery mode。进入root shell后,文件系统是只读挂载的,需要重新挂载:
mount -o remount,rw /
然后你可以从/etc/netplan/目录下找到系统自带的备份,或者手动创建一个最简配置:
cat > /etc/netplan/01-netcfg.yaml << 'EOF'
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: yes
EOF
sudo netplan apply方法三:使用Live USB启动修复。如果系统完全进不去,用Ubuntu安装U盘启动,选择Try Ubuntu。挂载原系统分区后直接修改配置文件。假设原系统在/dev/sda2:
sudo mount /dev/sda2 /mnt sudo nano /mnt/etc/netplan/01-netcfg.yaml sudo umount /mnt reboot
六、多网卡和 bond 绑定的配置要点
生产环境经常遇到多网卡场景。比如两块网卡做bond,配置会复杂一些:
network:
version: 2
renderer: networkd
ethernets:
ens33: {}
ens34: {}
bonds:
bond0:
interfaces:
- ens33
- ens34
parameters:
mode: active-backup
primary: ens33
addresses:
- 10.0.0.50/24
gateway4: 10.0.0.1
nameservers:
addresses:
- 10.0.0.2这里要注意,bond下面的ethernets条目必须写成空字典{},不能省略。bond的mode有active-backup、802.3ad、balance-rr等,根据实际需求选择。配错mode会导致网络不通或者丢包严重。
七、VLAN和网桥的配置实战
如果需要配置VLAN,netplan同样支持。假设ens33上要创建VLAN 100:
network:
version: 2
renderer: networkd
ethernets:
ens33: {}
vlans:
vlan100:
id: 100
link: ens33
addresses:
- 172.16.100.10/24网桥配置也类似,常用于虚拟化场景:
network:
version: 2
renderer: networkd
ethernets:
ens33: {}
bridges:
br0:
interfaces:
- ens33
dhcp4: yesVLAN和网桥配置出错后回滚逻辑跟前面一样,重点是先用netplan --debug try定位问题,再还原或修正。
八、实战建议和避坑总结
第一,永远在改配置前做备份,这是铁律。第二,优先使用netplan try做验证,别直接apply。第三,YAML文件里不要用Tab,全部用两个或四个空格。第四,修改完成后用sudo netplan apply而不是重启网络服务,netplan apply会原子性地应用配置,出错会自动回滚。第五,如果你管理多台Ubuntu服务器,建议用Ansible统一推送netplan配置文件,配合版本控制,出问题可以快速追溯和还原。第六,云服务器用户要特别注意,安全组规则和netplan配置是两层,网络不通时先检查安全组有没有放行对应端口,别一头扎进netplan里排查半天。
netplan本质上是一个声明式配置工具,你告诉它"我要什么",它负责翻译成底层指令。掌握了YAML语法、netplan try验证机制、以及三种回滚手段,基本上就能应对99%的网络配置故障。不要怕改配置,怕的是改完没有回滚方案。
