DNS 故障排除首先要明确正在测试哪一层。系统解析器工具会纳入本地文件和策略,而 dig 与 nslookup 会发送 DNS 查询,并可直接指定某台服务器。
DNS · 第 6 课
DNS 工具
了解如何使用 getent、resolvectl 和 dig 比较系统解析与直接 DNS 查询。
测试系统解析器
使用以下命令走正常的主机名称服务路径:
$ getent ahosts www.example.com
在使用 systemd-resolved 的主机上,可以用以下命令检查每条链路的服务器、搜索域和协议状态:
$ resolvectl status
$ resolvectl query www.example.com
应用程序仍可能使用私有解析器库或代理,所以当输出不同时,还应通过该应用程序重现问题。
哪个命令会使用已配置的系统名称服务路径?
使用 dig 查询
指定名称和记录类型:
$ dig www.example.com A
$ dig www.example.com AAAA
$ dig example.com MX
输出会标识响应服务器、状态、标志、问题、回答、权威数据、附加数据、查询时间和传输元数据。+short 便于脚本使用,却隐藏了诊断所需的证据。
哪条查询请求 IPv6 地址记录?
选择服务器
明确指定某个解析器或权威服务器:
$ dig @192.0.2.53 www.example.com A
在区分缓存与权威时,应比较已配置的递归解析器、第二个获准解析器和每台权威服务器。NOERROR 状态也可能没有所请求的回答;NXDOMAIN 表示查询的名称不存在,而 SERVFAIL 表示服务器无法完成查询。
NOERROR 的回答区可以为空吗?
检查递归与权威
查询中的 rd 表示请求递归;响应中的 ra 表示服务器提供递归服务;aa 表示回答具有权威性。使用 +norecurse 查询权威服务器,以免把递归缓存与服务器提供的区域数据混淆。
dig +trace NAME 从根提示开始自行执行迭代查询。它可能与生产解析器得出不同结果,因为它绕过了该解析器的缓存、转发、策略、DNSSEC 验证和网络位置。
aa 响应标志表示什么?
测试反向查询与 TCP 查询
使用 -x 构造反向 PTR 查询:
$ dig -x 192.0.2.25
调查截断、区域传送或防火墙差异时,测试基于 TCP 的 DNS:
$ dig +tcp @192.0.2.53 example.com SOA
现代 DNS 可以使用 UDP 或 TCP 53 端口;需要时应同时放行两者。带有截断标志的 UDP 回答会促使合规客户端通过合适的传输方式重试。
dig +tcp 改变了什么?
课程已完成
你已完成 DNS 工具
现在,你可以选择与待调查解析器层级相匹配的 DNS 工具。
使用
getent测试已配置的系统解析器路径。使用
dig明确指定记录类型和服务器。结合状态、标志、各区段和响应服务器进行解释。
将递归缓存与权威数据区分开来。
测试反向查询和两种必需的 DNS 传输方式。