netplan 配置静态 ip 不生效,主因是 renderer 后端不匹配或未安装、yaml 缩进错误、路由未显式配置、network-scripts 服务未启用、ipv6 干扰或物理链路异常。

netplan 配置静态 IP 时,/etc/netplan/*.yaml 文件改完不生效?
改完 netplan 配置后执行 sudo netplan apply 没反应,或者提示 Cannot call open() on /run/systemd/network/10-netplan-*.network: No such file or directory,大概率是后端渲染器没配对。Ubuntu 20.04+ 默认用 systemd-networkd,但如果你装过 NetworkManager 或手动切过,netplan 可能还在用旧后端。
- 先查当前后端:
cat /etc/netplan/*.yaml,确认renderer:字段是networkd还是NetworkManager - 如果配了
NetworkManager,但系统没装它,netplan apply会静默失败;装上再试:sudo apt install network-manager - 改完配置必须用
sudo netplan apply,sudo systemctl restart systemd-networkd单独调无效——netplan不只是写文件,它会生成并 reload 后端服务 - 别手抖加 tab 缩进:YAML 对空格敏感,
addresses:和下面的 IP 必须对齐,且只能用空格,不能用 tab
用 network-scripts(ifconfig + /etc/sysconfig/)配静态 IP,重启后丢配置?
CentOS/RHEL 7/8 早期习惯用 /etc/sysconfig/network-scripts/ifcfg-ens33,但 RHEL 8+ 默认禁用该目录,network-scripts 包甚至不预装。就算你手动装了,systemd 也不会自动拉起 network 服务。
- 确认服务是否存在:
systemctl list-unit-files | grep network—— 如果只有NetworkManager.service,那network.service就是 disabled 状态 - 启用传统网络服务:
sudo systemctl enable --now network,但前提是已安装network-scripts包(RHEL 8+ 需sudo dnf install network-scripts) -
ifconfig ens33 192.168.1.100/24是临时生效,重启即丢;真要持久,必须写进/etc/sysconfig/network-scripts/ifcfg-ens33,且确保ONBOOT=yes、BOOTPROTO=static、IPADDR=和NETMASK=都填对 - 别混用:
nmcli修改过的连接,再动ifcfg-文件会导致冲突,nmcli connection show里能看到实际生效的是哪个
配完静态 IP,ping 不通网关,但 ifconfig 显示地址已绑上?
地址显示正常,ip route 却看不到默认路由,或者路由指向错的设备,这是常见连通性断点。
- 检查路由表:
ip route,看有没有类似default via 192.168.1.1 dev ens33的行;没有就说明网关没配对 - netplan 中必须显式写
routes:块,不能只靠 DHCP 自带的网关逻辑;例如:routes: - to: default via: 192.168.1.1 - network-scripts 中对应字段是
GATEWAY=192.168.1.1,且必须和IPADDR在同一子网,否则内核拒绝添加路由 - 物理链路常被忽略:确认网线插对口、交换机端口没 shutdown、VM 虚拟网卡模式是 bridged(非 NAT)
IPv6 静态地址要不要配?配了反而 SSH 连不上?
多数内网场景其实可以关 IPv6,但一旦开了又没配好,sshd 可能监听在 IPv6 地址上,而客户端只走 IPv4,造成“能 ping 通但连不上 SSH”的假象。
- 快速验证:
ss -tlnp | grep :22,看LISTEN行是否含:::22(IPv6)或*:22(IPv4) - netplan 中禁用 IPv6:
dhcp6: false+accept-ra: false,并在addresses:列表里只写 IPv4 - network-scripts 中加
IPV6INIT=no到 ifcfg 文件,再sudo systemctl restart network - SSH 连接时强制走 IPv4:
ssh -4 user@192.168.1.100,避免 DNS 返回 AAAA 记录导致走错协议
配置静态 IP 的核心不在“写对哪几行”,而在确认三层联动:配置文件 → 渲染后端 → 内核路由表。漏掉任一环,现象都是“看起来配好了,实际不通”。尤其注意 netplan 的 renderer 和 network-scripts 的服务状态,这两个开关不打开,其他全白搭。









