直接改 /etc/resolv.conf 会被覆盖,因现代 Linux 默认由 systemd-resolved 或 NetworkManager 动态管理;须先用 ls -l /etc/resolv.conf 判断软链接指向,再通过 systemctl is-active 或 nmcli dev show 确认管理服务,最后修改对应配置文件并重启服务。

直接改 /etc/resolv.conf 后被覆盖,不是你操作错了,而是系统根本没把控制权交给你——现代 Linux 默认用 systemd-resolved 或 NetworkManager 动态管理 DNS 配置,/etc/resolv.conf 往往只是个软链接或自动生成的“摆设”。排查和修复的关键,是先确认谁在管、再动对应配置,而不是反复硬改文件。
先看 resolv.conf 是谁在背后控制
运行这条命令:
ls -l /etc/resolv.conf
观察输出:
- 如果显示
-> /run/systemd/resolve/stub-resolv.conf:说明 systemd-resolved 在接管,手动改/etc/resolv.conf会被秒覆盖; - 如果指向
/var/run/NetworkManager/resolv.conf或类似路径:说明 NetworkManager 在生成; - 如果显示
no such file或是普通文件(无->):才可能允许直接编辑,但仍需检查服务状态。
顺手验证服务状态:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
systemctl is-active systemd-resolved nmcli dev show | grep DNS
按管理方分别处理:别改文件,改源头
✅ 如果是 systemd-resolved 管理:
- 编辑真实配置:
sudo nano /etc/systemd/resolved.conf; - 取消注释并修改
Nameserver=行,例如:Nameserver=223.5.5.5; - 可加
FallbackDNS=114.114.114.114和Domains=~.避免 search 域干扰; - 重启服务:
sudo systemctl restart systemd-resolved; - 立即查看生效结果:
resolvectl status(注意看 Global 或对应接口下的 DNS servers)。
✅ 如果是 NetworkManager 管理(常见于桌面或云主机):
- 查当前连接名:
nmcli connection show --active; - 设 DNS 并禁用 DHCP 自动下发:
sudo nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8 1.1.1.1" ipv4.ignore-auto-dns yes; - 重启连接生效:
sudo nmcli connection down "Wired connection 1" && sudo nmcli connection up "Wired connection 1"; - 验证:
nmcli dev show | grep DNS应该输出你刚设的地址。
快速验证是否真修好了
别只信 cat /etc/resolv.conf,它可能还是 127.0.0.53 —— 这是 stub resolver 的正常表现。重点看实际解析行为:
- 查当前生效的上游:
resolvectl status(systemd-resolved)或nmcli dev show(NM); - 绕过本地 resolver 直连测试:
dig @8.8.8.8 google.com +short→ 若成功,说明网络和公共 DNS 没问题; - 模拟真实应用调用:
getent hosts google.com→ 这走的是 glibc 完整解析链,最贴近 curl/ping 行为; - 检查是否被
/etc/nsswitch.conf拦截:grep "^hosts:" /etc/nsswitch.conf,确保含dns(如hosts: files dns)。
临时应急:停掉动态管理器,写死 resolv.conf
适用于服务器环境、调试阶段或明确不需要本地 resolver 的场景:
- 停服务:
sudo systemctl stop systemd-resolved; - 禁自启:
sudo systemctl disable systemd-resolved; - 删软链:
sudo rm /etc/resolv.conf; - 新建静态文件:
echo -e "nameserver 223.5.5.5\nnameserver 114.114.114.114\noptions timeout:1 attempts:2 rotate" | sudo tee /etc/resolv.conf; - (可选)加不可变锁防覆盖:
sudo chattr +i /etc/resolv.conf(改前记得chattr -i)。
注意:此法会丢失 systemd-resolved 提供的 LLMNR/mDNS 支持,但对纯 DNS 解析更可控、更透明。

















