应通过systemd-resolved或networkmanager持久化配置dns,而非直接修改/etc/resolv.conf;先用ls -l /etc/resolv.conf判断是否为软链接,再依激活的服务(systemd-resolved或networkmanager)对应修改其配置并重启服务。

这个问题很常见:系统重启后 /etc/resolv.conf 被 DHCP 客户端(如 dhclient 或 NetworkManager)自动覆盖,导致手动配置的 DNS 服务器丢失,上网变慢或域名无法解析。
确认是否是 DHCP 覆盖导致的问题
先验证当前 /etc/resolv.conf 是否被动态管理:
- 运行
ls -l /etc/resolv.conf,如果看到它是一个指向/run/systemd/resolve/stub-resolv.conf或/run/resolvconf/resolv.conf的软链接,说明正由 systemd-resolved 或 resolvconf 管理; - 检查 DHCP 客户端日志:
journalctl -u NetworkManager | grep -i "resolv.conf"或journalctl -u dhclient | tail -20,看是否有 “overwriting resolv.conf” 类提示; - 对比重启前后内容:用
systemd-resolve --status查当前生效 DNS,再和/etc/resolv.conf内容比对,若不一致,大概率是覆盖所致。
阻止 DHCP 自动写入 /etc/resolv.conf
核心思路是让 DHCP 客户端“跳过”修改该文件。不同环境方法略有差异:
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
-
使用 NetworkManager 时:编辑对应连接的配置文件(如
/etc/NetworkManager/system-connections/YourConnection.nmconnection),在[ipv4]小节下添加:ignore-auto-dns=true,然后执行nmcli connection reload && nmcli connection up YourConnection; -
使用纯 dhclient 时:在
/etc/dhcp/dhclient.conf中添加:supersede domain-name-servers 8.8.8.8, 1.1.1.1;(强制指定 DNS,不依赖 resolv.conf)
同时注释或删除request domain-name-servers;行,并确保没有interface "eth0" { ... }块内覆盖行为; -
通用保险方案:将
/etc/resolv.conf设为不可变(仅限你完全掌控该文件时):sudo chattr +i /etc/resolv.conf—— 注意:之后所有服务写入都会失败,需配合 systemd-resolved 或其他解析器统一接管。
改用 systemd-resolved 统一管理 DNS
这是现代 Linux(尤其是 systemd 发行版)推荐做法,避免直接碰 /etc/resolv.conf:
- 确保
systemd-resolved正在运行:sudo systemctl enable --now systemd-resolved; - 让
/etc/resolv.conf指向它的 stub 接口:sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf; - 通过
resolvectl设置接口级 DNS,例如:resolvectl dns eth0 8.8.8.8 1.1.1.1,该设置会持久保存在/run/systemd/resolve/resolv.conf并由 resolved 自动维护; - 永久生效可写入
/etc/systemd/resolved.conf的[Resolve]小节:DNS=8.8.8.8 1.1.1.1FallbackDNS=8.8.4.4 1.0.0.1
然后sudo systemctl restart systemd-resolved。
验证与日常维护建议
每次调整后务必验证实际解析行为是否符合预期:
- 查当前生效配置:
resolvectl status(重点看对应网卡的 DNS servers 和 LLMNR/mDNS 状态); - 测试解析效果:
resolvectl query example.com(比nslookup更贴近系统真实行为); - 若仍异常,临时清缓存:
resolvectl flush-caches; - 长期建议关闭 NetworkManager 的内置 DNS 管理:
sudo nmcli dev set eth0 ipv4.ignore-auto-dns yes,防止 GUI 工具越权干预。










