Ubuntu中防止`/etc/resolv.conf`重启后自动还原的三种方法
温馨提示:
本文最后更新于 2025年07月23日,已超过 3 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
在 Ubuntu 系统中,/etc/resolv.conf
文件常常在重启后被系统服务自动重写,导致用户手动配置的 DNS 设置失效。这主要是由于系统使用了诸如 systemd-resolved
或 NetworkManager
的网络服务来动态管理 DNS 信息。
本文将介绍该问题的根源,并提供三种解决方案,帮助你根据实际需求实现 DNS 配置的持久化。
🧠 问题分析
- 作用:
/etc/resolv.conf
文件用于指定系统使用的 DNS 服务器。 - 原因:在使用
systemd-resolved
的系统中,/etc/resolv.conf
实际是一个符号链接,指向/run/systemd/resolve/stub-resolv.conf
,该文件在系统启动或网络变化时会被自动生成。 - 后果:用户直接编辑
/etc/resolv.conf
是无效的,因为其内容在每次重启或网络状态改变后都会被覆盖。
✅ 方法一:禁用 systemd-resolved
,使用静态 DNS 配置
如果你想完全自己管理 DNS,而不依赖 systemd-resolved
,可以按照以下步骤操作:
停止并禁用 systemd-resolved:
sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved
删除自动生成的符号链接:
sudo rm /etc/resolv.conf
创建新的静态 resolv.conf 文件:
sudo nano /etc/resolv.conf
添加如下内容:
nameserver 8.8.8.8 nameserver 8.8.4.4
锁定该文件防止被其他程序修改:
sudo chattr +i /etc/resolv.conf
这样可以确保系统重启后不会覆盖你的 DNS 配置。
🔄 方法二:保留 systemd-resolved
,但使用自定义 DNS
如果你希望继续使用 systemd-resolved
提供的 DNS 缓存与解析功能,但又想指定自己的 DNS 服务器:
创建配置目录与文件:
sudo mkdir -p /etc/systemd/resolved.conf.d sudo nano /etc/systemd/resolved.conf.d/dns.conf
添加以下内容:
[Resolve] DNS=8.8.8.8 8.8.4.4 FallbackDNS=1.1.1.1 1.0.0.1
重启服务使配置生效:
sudo systemctl restart systemd-resolved
检查 DNS 配置是否生效:
resolvectl status
🔗 方法三:将 /etc/resolv.conf
指向自定义静态文件
这种方式适用于希望手动管理 DNS 配置但又不想完全禁用 systemd-resolved
的用户。
创建自定义 DNS 配置文件:
sudo nano /etc/resolv-custom.conf
内容如下:
nameserver 8.8.8.8 nameserver 8.8.4.4
用符号链接替换默认
/etc/resolv.conf
:sudo ln -sf /etc/resolv-custom.conf /etc/resolv.conf
📌 总结
方法 | 是否禁用 systemd-resolved |
是否手动维护 DNS | 适用场景 |
---|---|---|---|
方法一 | ✅ 是 | ✅ 是 | 适合服务器或不希望系统干预 DNS 的用户 |
方法二 | ❌ 否 | ✅ 否 | 适合希望保留 DNS 缓存功能并自定义 DNS 的用户 |
方法三 | ❌ 否 | ✅ 是 | 适合想使用自定义配置,但不禁用 systemd-resolved 的用户 |
🛠 推荐命令汇总
检查 DNS 设置:
resolvectl status
移除不可变属性(如需恢复写权限):
sudo chattr -i /etc/resolv.conf
根据你的需求选择合适的方案,就可以确保 DNS 配置在重启后仍能保持不变。
正文到此结束
- 本文标签: Linux
- 本文链接: https://code.itptg.com/article/115
- 版权声明: 本文由老魏原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权