应先用ls -l /etc/resolv.conf判断是否为软链接,再根据指向选择resolvectl status(systemd-resolved)或nmcli dev show(NetworkManager)查看真实生效DNS,最后用dig或nslookup验证实际解析路径。

直接查看 /etc/resolv.conf 文件是最直观的方式,但要注意它**未必反映真实生效的 DNS**——现代 Linux(如 Ubuntu 20.04+、RHEL 8+/CentOS 8+、Fedora 33+)普遍由 systemd-resolved 或 NetworkManager 动态管理,该文件常是软链接或 stub 配置。
先确认 /etc/resolv.conf 是不是“真文件”
运行以下命令判断其类型:
ls -l /etc/resolv.conf
如果输出中包含 ->,说明它是符号链接:
- 指向
/run/systemd/resolve/stub-resolv.conf→ 实际 DNS 由systemd-resolved管理 - 指向
/run/NetworkManager/resolv.conf→ DNS 来自NetworkManager - 若提示
No such file or directory,可能是systemd-resolved未启用或异常
用 resolvectl status 查 systemd-resolved 的真实 DNS
这是当前 systemd 生态下最权威的方法,能显示全局和网卡级配置:
- 执行
resolvectl status - 重点关注 Global 下的
DNS Servers:—— 系统默认使用的上游 DNS - 再找具体网卡(如
ens33)下的DNS Servers:—— 该接口通告的 DNS - 检查
Current Scopes:是否含dns,不 active 表示未生效
用 nmcli dev show 查 NetworkManager 管理的 DNS
适用于桌面环境或启用了 NetworkManager 的服务器:
- 运行
nmcli dev show,搜索DNS字段 - 或指定接口:
nmcli dev show ens33 | grep DNS - 若
/etc/resolv.conf开头有# Generated by NetworkManager,就确认是它在控制 - 注意:DHCP 自动下发的 DNS 可能覆盖手动设置,除非已配
ipv4.ignore-auto-dns yes
用 dig 或 nslookup 验证实际解析路径
这两个命令绕过系统配置,直接发查询,可交叉验证真正起作用的 DNS:
-
dig google.com +short,看输出中SERVER:行,例如:
;; SERVER: 192.168.1.1#53(192.168.1.1) —— 这才是此刻实际响应的 DNS -
nslookup google.com,第一行显示的Server:地址也是真实解析器











