根据你的描述,问题根源在于 cloud-init 服务自动还原了网络配置。由于 /etc/netplan/50-cloud-init.yaml
是由 cloud-init 生成的(文件头注释已明确提示),直接修改此文件会被 cloud-init 在下次启动时覆盖。以下是完整的解决方案:
一、永久禁用 cloud-init 的网络配置管理
-
创建禁用 cloud-init 网络配置的覆盖文件
sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg << EOF network: {config: disabled} EOF
- 这个文件会告知 cloud-init 不再接管网络配置。
-
清理 cloud-init 缓存和旧配置
sudo rm /etc/netplan/50-cloud-init.yaml # 删除自动生成的配置 sudo cloud-init clean --logs # 清理缓存
二、手动配置静态网络(替换原有配置)
-
创建新的 Netplan 配置文件
sudo tee /etc/netplan/01-static-config.yaml << EOF network: version: 2 renderer: networkd ethernets: ens2: addresses: [192.168.1.99/24] routes: - to: default via: 192.168.1.1 # 修改网关为 192.168.1.1 nameservers: addresses: [192.168.1.1] # 修改 DNS 为 192.168.1.1 search: [] EOF
-
应用新配置
sudo netplan apply
三、验证配置持久性
-
重启系统
sudo reboot
-
检查网关和 DNS 是否生效
ip route show default # 应显示 via 192.168.1.1 resolvectl status # 检查 DNS 是否指向 192.168.1.1
关键问题说明
- 为什么直接修改会失效:
cloud-init 是云环境和虚拟化平台(如 VMware)中用于初始化系统的工具,默认会接管网络配置。每次启动时,它会根据云平台元数据或本地配置重新生成网络文件,覆盖手动修改。 - 替代方案(如果仍需使用 cloud-init):
如果你希望继续使用 cloud-init 管理网络,需通过 cloud-init 的配置文件(如/etc/cloud/cloud.cfg
)修改网络参数,但这需要更复杂的配置,不推荐在此场景使用。