7

我希望能够使用在我的 OS/X (High Sierra)www.foobar.dev系统上的 VM 中运行的 DNS 服务器解析 DNS 名称,因为我创建了一个包含以下一行的文件:(指定 VM 的虚拟地址)/etc/resolver/dev

nameserver ww.xx.yy.zz

...但dig www.foobar.dev继续咨询 Internet 名称服务器,

同时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)
4

3 回答 3

16

它可能工作正常,你只是测试错了。dig(and hostand nslookup) 不使用系统解析器,也没有完全实现系统解析器的查找策略。因此,它们可用于测试 DNS 系统本身,但不能用于测试操作系统如何使用 DNS。测试系统解析器的官方方法是dscacheutil(例如dscacheutil -q host -a name www.foobar.dev),但这很烦人,所以我倾向于只使用ping并查看它报告的 IP。

于 2018-06-18T19:05:41.517 回答
4

正如@GordonDavisson 在其他答案中所说 -ping命令对于系统解析器测试很有用。我的补充是它也可能因为 DNS 缓存而失败。不要忘记清除它:

sudo killall -HUP mDNSResponder
于 2019-04-10T13:04:11.083 回答
0

更好地/etc/resolver用真正的 DNS 配置替换文件,就像/etc/resolv.conf所有遗留的东西都是为了向后兼容而保留的(也许是因为 POSIX 需要它?)。

以下是您可以从命令行使用scutil的方法,它非常简单。

当然,这一切也有一个编程接口。
请参阅 Apple 的SystemConfiguration 框架

于 2020-03-25T23:45:35.187 回答