Bri*_*ick 4 networking dns private-network osx-el-capitan macos
我有一个路由器,它也在运行一个 DNS,其中包含本地网络上机器的名称。它设置为转发请求,因此对于任何公共机器,它都会访问我的 ISP 提供的 DNS。路由器配置为主要 DNS,而 ISP 的 DNS 列为辅助 DNS。我有几台具有静态 IP 的机器(那些在我的私有 DNS 中有条目的机器)。其他机器,包括作为这个问题主题的 Mac,通过 DHCP 获取它们的地址。
此网络上的 Windows 机器运行良好。他们将私有名称解析为我网络上的机器,并且还可以访问公共互联网。
我的单台 Mac 笔记本电脑不工作。它可以毫无问题地访问公共互联网,但它没有访问我的内部 DNS 来获取内部名称。例如,如果我对内部机器执行 ping 操作
ping internal.example.com
Run Code Online (Sandbox Code Playgroud)
我收到了数据包,但它显示了一个对应于 Hover 的 IP 地址。(显然 Hover 正在为没有公共路由的任何子域放置一个登录页面。)如果我这样做
nslookup internal.example.com
Run Code Online (Sandbox Code Playgroud)
但是,我在本地网络上获得了机器的正确(内部)IP。
最后,如果我再次执行 ping 但这次强制它使用我的内部 DNS (192.168.1.2),
ping internal.example.com 192.168.1.2
Run Code Online (Sandbox Code Playgroud)
我从本地网络上的正确机器得到响应。这似乎表明即使“本地”方法也可以做我想做的事,只要它使用正确的 DNS。
我找到了很多讨论这个问题的文章,但到目前为止我实际发现的要么已经过时,要么不是我的问题的完整解决方案。到目前为止我拼凑的东西:
sudo killall -INFO mDNSResponder使用命令行上的命令从“本机”DNS 工具中获取了一些信息。将消息转储到/var/log/system.log. 从该日志消息中,我的 ISP 的 DNS 似乎在该系统中首先列出。(同样,我注意到,它列出第二路由器的配置和在网络控制面板,它也列第二如果用完scutil。)sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder;但这没有帮助。com.apple.mDNSResponder.plist按照这些说明编辑文件(https://www.cnet.com/news/os-x-10-6-3-and-dns-server-priority-changes/),但我无法编辑文件。(只读,即使使用sudo vi.)此外,我系统上的文件的内容与这些说明中明确引用的内容不同。然而,在所有这些情况下,我仍然有一台 Mac,它不能在充满其他运行良好的计算机的网络上运行。我可能会在路由器上取出 ISP 的 DNS,这样它甚至不提供,但这感觉就像一个黑客。El Capitan 上有什么好的解决方法吗?
对不起,如果这已经得到回答。(我觉得它一定在某个地方!)我一天中的大部分时间都在四处寻找,到目前为止还没有找到关于 El Capitan 的解决方案。
Spi*_*iff 14
macOS 有一个复杂的 DNS 请求路由系统(“范围查询”),以处理像 VPN 这样的情况,在这种情况下,您可能希望对您作品域名的请求通过您的 VPN 隧道,以便您从作品的内部 DNS 服务器获得答案,它可能比您工作的外部 DNS 服务器具有更多/不同的信息。
要查看 macOS 使用的所有 DNS 服务器,以及如何设置查询范围,请使用:
scutil --dns
Run Code Online (Sandbox Code Playgroud)
要以 macOS 的方式查询 DNS,请使用:
dns-sd -G v4v6 example.com
Run Code Online (Sandbox Code Playgroud)
…或者…
dns-sd -q example.com 255 255
Run Code Online (Sandbox Code Playgroud)
请参阅手册页scutil(8)和dns-sd(1)获取更多信息。
DNS的故障排除工具,例如nslookup(1),dig(1)和host(1)包含自己的DNS解析程序代码,并没有利用系统的DNS查询的API,所以他们没有得到系统的行为。如果您没有指定供他们使用的 DNS 服务器,他们可能只会使用 中列出的服务器之一/etc/resolv.conf,该服务器是自动生成的,并且仅包含用于无作用域查询的默认 DNS 服务器。
非特定于 DNS 的传统 Unix 命令行工具(例如ping(8))可能会调用传统gethostbyname(3)API,而后者在 macOS 上利用系统的 DNS 解析器行为。
要查看您的 DHCP 服务器告诉您的 Mac 使用什么,请查看以下domain_name_server输出中的行:
ipconfig getpacket en0
Run Code Online (Sandbox Code Playgroud)
(将 en0 替换为正确的 BSD 样式接口名称,如您在 中看到的那样ifconfig)
请注意,我很确定 DNS RFC 不需要 DNS 实现来考虑按偏好排列的服务器列表。尽管 DNS 实现以这种方式对待它们是很常见的,但如果相关标准中没有规定,依赖所有实现都以这种方式实现事物可能是不明智的。
哦,还要注意您的 Mac 也可能从 IPv6 路由器广告或 DHCP6 获取 DNS 服务器列表,如果它们在您的网络上处于活动状态。当然还有 VPN 设置、已安装的配置文件、Open Directory、Active Directory 等,如果其中任何一项在您的环境中使用的话。