先把当时的情况摆出来。Ubuntu 22.04 的云主机改静态地址,按文档写了 netplan 配置,执行 netplan apply 之后 SSH 直接断,控制台里 ip a 看不到 IPv4 地址,只剩 loopback。

这类报错背后常见的原因有几处,逐个排除就行。YAML 缩进用了 Tab 或者层级写错,netplan 解析时默默忽略了整段。还有一种是新版 netplan 已经不支持 gateway4,写在里面会直接报错退出。

另外,网卡名写成了 eth0,实际是 ens3 或者 enp0s3,配置没有匹配到设备。少数情况下是apply 之前没跑 netplan try,配置错误没有回滚窗口。

第一件事是用 netplan 自带的检查看语法

netplan get all && netplan try --timeout 30

随后确认网卡的真实名字

ip -br link && ls /sys/class/net

然后按实际网卡名和 routes 语法重写配置

sed -n '1,40p' /etc/netplan/50-cloud-init.yaml

应用配置并立即验证连通性

netplan apply && ip -4 addr show ens3

别只看报错消失,验证要多做一步。ip a 里能看到的静态地址与配置一致,网关路由在 ip route 里存在,SSH 保持连接且能访问外网。

提醒一点。云主机的 netplan 文件常被 cloud-init 覆盖,改之前先看清是不是 50-cloud-init.yaml;用 netplan try 可以在失联时自动回滚。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189