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: yes

VLAN和网桥配置出错后回滚逻辑跟前面一样,重点是先用netplan --debug try定位问题,再还原或修正。

八、实战建议和避坑总结

第一,永远在改配置前做备份,这是铁律。第二,优先使用netplan try做验证,别直接apply。第三,YAML文件里不要用Tab,全部用两个或四个空格。第四,修改完成后用sudo netplan apply而不是重启网络服务,netplan apply会原子性地应用配置,出错会自动回滚。第五,如果你管理多台Ubuntu服务器,建议用Ansible统一推送netplan配置文件,配合版本控制,出问题可以快速追溯和还原。第六,云服务器用户要特别注意,安全组规则和netplan配置是两层,网络不通时先检查安全组有没有放行对应端口,别一头扎进netplan里排查半天。

netplan本质上是一个声明式配置工具,你告诉它"我要什么",它负责翻译成底层指令。掌握了YAML语法、netplan try验证机制、以及三种回滚手段,基本上就能应对99%的网络配置故障。不要怕改配置,怕的是改完没有回滚方案。