Rocky Linux 9 修改 DNS 及 cloud-init 冲突排查记录
Rocky Linux 9 修改 DNS 及 cloud-init 冲突排查记录
一、问题背景
在 Rocky Linux 9 上修改 DNS:
1 | |
操作执行成功,但 /etc/resolv.conf 仍然出现多个 DNS:
1 | |
明显被覆盖。
二、问题分析
关键提示:
1 | |
说明当前系统 DNS 管理权不在 NetworkManager,而在:
- cloud-init
也就是说:
- nmcli 修改成功
- 但 cloud-init 会重新写入
/etc/resolv.conf
三、排查过程
1️⃣ 删除 resolv.conf 测试
1 | |
结果:
1 | |
说明:
- resolv.conf 原本可能是软链接
- 删除后 NetworkManager 没有自动重建
- cloud-init 也未立即写回
2️⃣ 进一步判断控制来源
Rocky Linux 9 中 DNS 可能由以下组件控制:
- NetworkManager
- cloud-init
- systemd-resolved
本次环境为云初始化环境,cloud-init 参与网络配置。
四、解决方案
✅ 推荐方式:禁用 cloud-init DNS 管理
编辑:
1 | |
修改或添加:
1 | |
同时禁用 network config:
1 | |
写入:
1 | |
然后恢复 NetworkManager 控制
删除旧文件:
1 | |
重新建立软链接:
1 | |
重启 NetworkManager:
1 | |
五、最终 DNS 设置方式
1 | |
验证:
1 | |
六、关键知识点总结
1️⃣ nmcli 设置 DNS 是“覆盖”,不是追加
1 | |
会直接替换原有 DNS。
2️⃣ Rocky Linux 9 DNS 控制层级
常见优先级来源:
- cloud-init(云服务器常见)
- NetworkManager
- systemd-resolved
查看控制来源:
1 | |
3️⃣ 云服务器常见现象
云环境通常会:
- 自动注入 8.8.8.8
- 自动注入 1.1.1.1
- 注入 search 域
- 使用 cloud-init 管理网络
如果需要完全自定义 DNS,必须禁用 cloud-init 对 resolv.conf 的控制。
七、经验总结
本次问题本质是:
NetworkManager 和 cloud-init 同时管理 DNS,导致修改被覆盖。
排查 DNS 问题建议固定检查三步:
1 | |
基本可以定位 90% 的问题。
八、后续建议
如果是模板镜像或长期使用环境,建议:
- 明确 DNS 控制权
- 禁用不需要的网络管理组件
- 保持 resolv.conf 由单一组件管理
避免多组件争夺控制权导致异常。
结语
Linux DNS 问题大多数不是“设置错”,而是“控制权冲突”。
理清:
- 谁在写 resolv.conf
- 谁在接管网络
- 是否存在 cloud-init
问题基本都能快速解决。
Rocky Linux 9 修改 DNS 及 cloud-init 冲突排查记录
https://blog.yonagi.top/2026/03/01/f2616ee9737c/