首页 > Sysadmin > 正文

Linux 查看 DNS 配置与解析记录:5 条命令覆盖全部场景

huyuanwen 2026-11-03 Sysadmin

排查域名解析故障的第一步,是确认”当前用哪个 DNS 服务器”以及”该服务器能否返回正确记录”。本文覆盖 dig、nslookup、host、resolvectl 和 resolv.conf 五种常用手段,从”服务器配置”到”逐条解析记录”完整走一遍。

快速判断 DNS 是否正常

确认机器正在使用哪个 DNS 服务器:

resolvectl status

输出里 Current DNS Server 一行就是当前生效的 upstream。如果显示 10.255.255.254 这类内网地址,说明 DNS 走的是网络管理设备(路由器 / Hyper-V / WSL NAT),而非本地递归解析器。

注意:在 systemd-resolved 管理的系统上,/etc/resolv.conf 是自动生成的,手工修改会被下次重启覆盖;正确做法是用 resolvectl 或 NetworkManager 工具调整 upstream。

dig:最完整的 DNS 查询工具

dig(Domain Information Groper)来自 bind9-dnsutils 包,是运维最常用的 DNS 调试工具。[1] 一条命令搞定常见查询:

dig google.com              # 完整 A 记录
dig +short google.com       # 仅地址
dig +short MX google.com    # 邮件路由
dig +short TXT google.com   # TXT 记录
dig +short -x 8.8.8.8       # 反向解析 PTR

dig 输出字段含义:ANSWER SECTION 是真实返回,AUTHORITY SECTION 是权威服务器列表,ADDITIONAL SECTION 是补充记录(如 A 记录随 MX 返回)。

nslookup 和 host:轻量替代

nslookup 适合逐步查询,一行命令也能出结果:[3]

nslookup google.com
nslookup -type=MX google.com

host 输出最简洁,适合脚本取地址:[2]

host google.com
host 8.8.8.8

两者都来自 bind9-host 或 bind9-dnsutils 包。

resolvectl:systemd 环境首选

Ubuntu 24.04 等使用 systemd-resolved 的系统,[4] resolvectl 是官方推荐的入口,一条命令覆盖查询和配置查看:

resolvectl query google.com
resolvectl query --type=MX google.com
resolvectl status

query 会同时返回 IPv4 和 IPv6 结果,并标注协议类型(protocol DNS 或 protocol LLMNR 等)。

deprecated:systemd-resolve 在 systemd v256 之后已被移除,Ubuntu 24.04(systemd 255)上仍可调用但实际是 resolvectl 的兼容链接;新系统直接用 resolvectl。[5]

排错速查表

现象 原因 处理
dig 返回 SERVFAIL upstream 拒绝递归或 DNS 服务故障 换备用 DNS 测试 dig @8.8.8.8 google.com
nslookup 超时 DNS 端口 53 UDP 被防火墙拦截 检查出站规则或换 TCP 模式
resolv.conf 显示 nameserver 127.0.0.53 systemd-resolved stub 模式 用 resolvectl 而非直接读 resolv.conf
返回 IP 与预期不符 hosts 文件 / DNS 缓存覆盖 检查 /etc/hosts 和 resolvectl flush-caches
dig +trace 超时 上游 NAT DNS 不响应递归 非故障,WSL / 某些容器环境正常

局限性

  • dig +trace 需要递归访问根服务器;WSL NAT 和部分容器 DNS 环境无法完成,超时不等于故障。
  • 本文实测环境:Ubuntu 24.04 LTS,bind9-dnsutils 9.18.39,systemd 255;旧版 Debian(如 bullseye)的 dig 版本较低,部分选项行为不同。
  • 企业内网 DNS 过滤(如拒绝外部 MX 查询)会导致 dig MX 返回空或超时,需联系网络管理员确认策略。
  • systemd-resolve 在新版 systemd(≥256)已移除,Ubuntu 26.04 及以后请直接用 resolvectl。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测,个别条目(未装工具/安装类命令)仅核对官方文档,未实际执行。