1. +trace
不带有 +trace
的 dig
则是直接向 local dns 服务器发起查询。
带有 +trace
的 dig
命令是走的迭代查询,即先获取根 dns 服务器地址,然后向其发起查询获取对应的顶级域名 dns 服务器地址,如此循环下去直到最终查到结果。
举个实测对 cococat.top 进行查询的例子:
- dig 向 local dns 服务器发起查询,请求根域名服务器的 NS 记录。wireshark 显示
Standard query 0x6a1c NS <Root> OPT
。 - local dns 服务器返回
<Root>
的 NS 记录结果,包含 a.root-servers.net ~ m.root-servers.net - dig 向 local dns 服务器发起查询,查询某些根域名服务器的 A 记录。wireshark 显示
Standard query 0x1295 A k.root-servers.net
。注意观察发现 dig 会一次性对许多不同的 root server 的 A 记录发起查询,实测观察到 a~m 都被查了。 - local dns 服务器逐一返回根域名服务器的 A 记录地址。
- dig 向其中某些根域名服务器发起 cococat.top 的 A 记录查询。实测观察到 dig 会先后找两个根域名服务器都发起查询。wireshark 显示
Standard query 0xa8c1 A cococat.top OPT
- 根域名服务器并没有 cococat.top 的 A 记录,但是有 NS 记录,遂返回之。Wireshark 显示
Standard query response 0xa8c1 A cococat.top NS i.zdnscloud.com NS b.zdnscloud.com ...
。这里返回了一堆顶级 NS 服务器。 - dig 向 local dns 服务器发起查询,查询某些顶级 NS 服务器的 A 记录
- local dns 逐一返回顶级 NS 服务器的 A 记录地址。
- dig 向某些顶级 NS 服务器发起 cococat.top 的 A 记录查询
- 顶级 NS 服务器没有 A 记录,但是返回了 dns25.hichina.com 、dns26.hichina.com 的 NS 记录。
- dig 向 local dns 查 dns25.hichina.com dns26.hichina.com 的 A 记录
- local dns 逐一返回地址
- dig 向 dns25.hichina.com 发起查询,查询 cococat.top 的 A 记录
- 终于返回结果了!
2. 记载 local dns ip 的文件位置
/etc/resolv.conf