Appearance
Ubuntu 22.04 重启后静态 IP 配置被重置?一招彻底解决

排错实录:解决
cloud-init抢占 Netplan 网络配置的问题
问题现象
在 Ubuntu 22.04 系统中,按标准流程修改 /etc/netplan/ 下的配置文件并执行 sudo netplan apply 后,静态 IP 地址确实生效了。但一旦执行 sudo reboot 重启系统,之前配置的静态 IP 就会丢失,网络配置恢复为 DHCP 自动获取。
根本原因
问题出在 cloud-init 这个云环境初始化服务上。Ubuntu 22.04 默认集成了 cloud-init,它的网络管理模块会在每次系统启动时,根据自身配置文件重新生成网络配置,并覆盖掉 Netplan 的设置。
Netplan 官方配置文件中其实已经注明了这一行为,推荐的解决方案就是禁用 cloud-init 的网络管理功能。
解决方案
第一步:创建禁用配置文件
执行以下命令,新建一个 cloud-init 的配置片段:
bash
sudo vim /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg第二步:写入配置内容
在文件中粘贴以下内容:
yaml
network: {config: disabled}保存并退出(:wq)。
原理说明:
cloud-init按数字顺序加载/etc/cloud/cloud.cfg.d/目录下的配置文件,99-前缀确保该配置优先生效,从而禁用其网络管理模块。
第三步:清理缓存并重启
bash
sudo cloud-init clean
sudo reboot第四步:重新应用 Netplan 配置(如需要)
重启后,cloud-init 不再干预网络配置。此时按标准方式配置 Netplan 即可:
bash
sudo vim /etc/netplan/01-netcfg.yaml # 编辑配置文件
sudo netplan apply # 应用配置配置 Netplan 的注意事项
重新配置静态 IP 时,请注意以下几点:
| 要点 | 说明 |
|---|---|
| 确认网卡名称 | 执行 ip addr 或 ls /sys/class/net/,确认实际网卡名(如 eth0、ens33) |
| YAML 缩进 | Netplan 使用 YAML 格式,对缩进极其敏感,请使用空格而非 Tab |
| 避免文件冲突 | /etc/netplan/ 下只能有一个文件定义同一网卡,建议保留一个配置文件 |
| DNS 配置 | 静态 IP 建议同时指定 nameservers,避免 DNS 解析问题 |
Netplan 配置示例
yaml
network:
version: 2
ethernets:
eth0:
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备选方案(不推荐)
除了上述方法,也可以在 /etc/cloud/cloud.cfg.d/90-installer-network.cfg 中直接修改 IP 地址。但这样做存在两个问题:
- 治标不治本:
cloud-init的配置覆盖机制依然存在,未来仍可能引发问题 - 可维护性差:网络配置分散在两处,容易造成混淆,不利于运维管理
因此,强烈推荐直接禁用 cloud-init 的网络管理功能,统一使用 Netplan 管理网络。
进阶提示
后续执行 sudo apt upgrade 升级系统包时,即使 cloud-init 有更新,我们创建的 99-disable-network-config.cfg 文件也不会被覆盖,解决方案具有持久性。
延伸阅读
如果您对 Ubuntu 网络配置或相关运维场景感兴趣,以下文章可能对您有帮助:
- RockyLinux 96 静态 IP 配置详解 —— 同样是静态 IP 配置,但基于 RockyLinux 96 系统,使用传统的 network-scripts 方式,可与 Netplan 方案进行对比学习。
- VMware 中 Ubuntu Server NAT 模式静态 IP 配置指南 —— 如果您是在虚拟机环境中遇到网络问题,这篇文章专门针对 VMware NAT 场景给出了完整的静态 IP 配置步骤和排错思路。
- Ubuntu 启用 root 用户并配置 SSH 远程登录 —— 配置好静态 IP 后,通常需要远程管理服务器,这篇文章详细讲解了如何安全地开启 root 的 SSH 登录权限。
- CentOS 7 配置阿里云 YUM 源 —— 系统网络连通后,第一件事往往是配置软件源。本文以 CentOS 7 为例,介绍了如何更换为国内阿里云镜像源以大幅提升软件包下载速度。
- ESXi 8.0 DNS 配置指南 —— 如果您的 Ubuntu 运行在 ESXi 虚拟化平台上,这篇关于 ESXi 宿主机 DNS 配置的文章可以帮助您排查因宿主机网络配置不当导致的虚拟机网络异常问题。
