必须先判断DNS管理主体,再针对性配置:若/etc/resolv.conf标注“Generated by NetworkManager”则用nmcli修改连接;若systemd-resolved激活则改/etc/systemd/resolved.conf并重启服务;直接编辑resolv.conf无效且会被覆盖。

直接改 /etc/resolv.conf 最快,但几乎一定失效——它不是配置入口,只是输出结果。真要持久生效,必须先搞清谁在写这个文件。
怎么判断谁在控制 DNS?
别跳过这步,否则改完 5 分钟就回滚。
- 运行
cat /etc/resolv.conf:开头有# Generated by NetworkManager→NetworkManager在管 - 运行
systemctl is-active systemd-resolved:返回active→systemd-resolved已启用且优先级更高 - 运行
ls /etc/sysconfig/network-scripts/ifcfg-*(RHEL/CentOS)或cat /etc/network/interfaces(Debian/Ubuntu):含DNS1=或dns-nameservers→ 底层网卡配置在管
NetworkManager 管着 DNS,该怎么配?
这是桌面版 Ubuntu、Fedora 和多数云服务器的默认路径。图形界面容易漏掉关键开关,命令行最稳。
- 查当前连接名:
nmcli connection show,记下激活的连接(如Wired connection 1) - 设 DNS 并关自动获取:
sudo nmcli connection modify "Wired connection 1" ipv4.dns "223.5.5.5 119.29.29.29",再执行sudo nmcli connection modify "Wired connection 1" ipv4.ignore-auto-dns yes - 重启连接生效:
sudo nmcli connection down "Wired connection 1" && sudo nmcli connection up "Wired connection 1" - 验证别只看
/etc/resolv.conf:用nmcli device show | grep DNS或resolvectl dns(若systemd-resolved启用)
systemd-resolved 启用了,/etc/resolv.conf 还能直接改吗?
不能。此时 /etc/resolv.conf 通常是软链接,指向 /run/systemd/resolve/stub-resolv.conf,硬改无效。
- 编辑主配置:
sudo nano /etc/systemd/resolved.conf - 取消注释并填值:
DNS=223.5.5.5 119.29.29.29;如需 fallback,加FallbackDNS=114.114.114.114 - 重启服务:
sudo systemctl restart systemd-resolved - 确认软链正确:
ls -l /etc/resolv.conf应显示指向/run/systemd/resolve/stub-resolv.conf
临时测试 DNS 连通性,不想动配置怎么办?
适合排查延迟、验证某 DNS 是否可用,不写文件、不重启服务。
- 单次查询指定 DNS:
nslookup google.com 8.8.8.8 - 清缓存(若启用
systemd-resolved):sudo systemd-resolve --flush-caches - 临时替换某接口 DNS(仅当前会话):
sudo resolvectl dns eth0 223.5.5.5(把eth0换成你的真实网卡名)
实际操作中最容易被忽略的是:改完后只检查 /etc/resolv.conf 内容,却没验证真正生效的解析器行为。尤其当 systemd-resolved 和 NetworkManager 共存时,resolvectl status 才是唯一可信的依据。


















