我的 MBP 上运行着 BIND9,其中有一个 TLD dev 区域。然后我/etc/resolver/dev
设置了该线路nameserver 127.0.0.1
,以便仅使用我的本地 BIND 服务器执行该 TLD 的解析。
如果我 ping 区域文件中的条目dev
(例如ping test.dev
),ping 会正确解析主机,127.0.0.1
因为 BIND 配置为返回。但是,如果我使用 dig 查找该主机的 DNS 记录(例如dig test.dev
),我会得到以下结果:
; <<>> DiG 9.9.4 <<>> test.dev
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28496
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.dev. IN A
;; ANSWER SECTION:
test.dev. 0 IN A 67.215.65.132
;; Query time: 51 msec
;; SERVER: 208.67.222.222#53(208.67.222.222)
;; WHEN: Wed Dec 11 09:04:00 EST 2013
;; MSG SIZE rcvd: 52
因此 dig 使用为所有查询配置的 DNS 服务器,而不是像 ping 那样经过本地解析过程。更有趣的是,我非常确信这在 Mavericks 上也能正常工作,因为我已将其放入我自己通过执行该过程创建的安装指南中。
dig 的解析方式与 ping 的解析方式不同,有什么原因吗?
答案1
如果你查看 OS X 上 dig 的手册页,你会看到以下免责声明。
Mac OS X 通知
dig 命令不使用在 Mac OS X 上运行的其他进程所使用的主机名和地址解析或 DNS 查询路由机制。dig 打印的名称或地址查询结果可能与使用 Mac OS X 本机名称和地址解析机制的其他进程找到的结果不同。DNS 查询结果也可能与使用 Mac OS X DNS 路由库的查询结果不同。
因此我认为 ping 必须使用 Mac OS X 本机名称解析机制。