我希望能够使用在我的OS / X (High Sierra)系统上的VM中运行的DNS服务器来解析DNS名称www.foobar.dev
,因为我已创建包含以下一行的/etc/resolver/dev
文件:(指定VM的虚拟地址)
nameserver ww.xx.yy.zz
...但dig www.foobar.dev
继续咨询互联网名称服务器,
而dig @ww.xx.yy.zz www.foobar.dev
成功从VM的DNS中检索条目。
我已使用dscacheutil
命令确保错误的条目不在DNS解析器缓存中。
那么,为什么不存在/etc/resolver/dev
文件,其中指定的内容足以指导" anything.dev
"到指定的DNS服务器?
有趣的是 - 有时它似乎有效。此外,命令scutil --dns
生成以下预期条目,这似乎表示正在检测/etc/resolver/dev
文件 !
resolver #8
domain : dev
nameserver[0] : ww.xx.yy.zz
flags : Request A records
reach : 0x00020002 (Reachable,Directly Reachable Address)
答案 0 :(得分:5)
它可能工作正常,你只是测试错了。 dig
(以及host
和nslookup
)不使用系统解析程序,也不会完全实现系统解析程序的查找策略。因此,它们对于测试DNS系统本身非常有用,但不能用于测试操作系统如何使用DNS。测试系统解析器的官方方法是dscacheutil
(例如dscacheutil -q host -a name www.foobar.dev
),但这很烦人,所以我倾向于使用ping
并查看它报告的IP
答案 1 :(得分:0)
正如@GordonDavisson在其他答案中所说-ping
命令对于系统解析器测试很有用。我的补充是,由于DNS缓存,它也可能会失败。不要忘记清除它:
sudo killall -HUP mDNSResponder
答案 2 :(得分:0)
最好用真实的DNS配置替换/etc/resolver
文件,就像/etc/resolv.conf
一样,保留所有旧文件只是为了向后兼容(也许是因为POSIX要求?)。
Here's how you can do it from command line使用scutil
,真的很简单。
当然,这还有一个编程接口。
请参阅苹果公司的SystemConfiguration Framework。