工作日期间,我会在各个站点之间连接多个网络,并注意到这些 LAN 使用不同的 DNS 并将其分发到我的系统。如果我在“安全”LAN 上,我可以信任 DNS;但是,有时我必须使用不受信任的站点……例如餐厅的免费 WiFi 服务。因此,我想更好地了解我的系统如何更新设置。在每个站点,我注意到 OSX 的网络设置窗口中列出的 DNS 会发生变化。当然,当我在家庭 LAN 上时,我会看到熟悉的 DNS。我更喜欢在家时始终使用这些 DNS。
到目前为止,我一直相信 OSX 会在我在家时自动完全切换到我的网络,但最近的一次体验告诉我,它并没有完全做到这一点。也就是说,它似乎保留了之前获取的 DNS,即使它们没有列在网络设置的 DNS 选项卡的 DNS 服务器列表下。
我在设置新的 WiFi 打印机时发现了这一点。我浏览了打印机手册,觉得自己了解并足够精明,我可以通过跳线将其以太网直接连接到我的 MacBook 以太网端口。我访问了它的配置页面,将其设置为连接到我的 WiFi。在更改设置之前,我打印出了默认的网络配置信息。我很惊讶它已经从我的 MacBook 中获取了一些信息。我很惊讶我甚至不必手动将 MacBook 上的以太网配置为打印机的默认网络。无论如何,真正引人注目的设置之一是它已经获取了辅助 DNS 服务器设置...一个 IP,这是我从经常使用的 LAN 之一中熟悉的 IP。
我能得出的唯一结论是 OSX 可能保留了 DNS 历史记录以供回退;但是,我立即检查了网络设置,发现 AirPort 和 Eithernet 都没有列出提供给打印机的 DNS 服务器。
是否有一个命令行方法可以检查我的系统当前正在使用的 DNS?
OSX 表示它正在使用我的 DNS 服务器,但我如何才能 100% 确定?OSX 显然保留了 IP,甚至奇怪地将 IP 分配给了打印机?
答案1
自 Mac OS X 10.6.3 以来,Apple 决定不遵循系统偏好设置中指定的 DNS 服务器列表顺序,而是确定可用的最快 DNS 服务器,然后使用它。虽然如果您信任自己所在的网络(我猜 Apple 会认为这是理所当然的),那么这完全没问题,但在其他情况下,这可能是一个安全问题。
要查看 DNS 服务器(和搜索域)的搜索顺序,请运行:scutil --dns
查看你的 DNS 服务器实际上目前正在使用,例如nslookup apple.com
从终端运行。
此外,这篇 cnet 文章引导您将 DNS 搜索顺序改回“严格排序”。
答案2
您可以在“系统偏好设置”>“网络”>[您当前排名最高的活动接口是什么,可能是“以太网”或“AirPort”]>“高级...”>“DNS”中查看当前的 DNS 服务器。
cat /etc/resolv.conf
如果你(请注意“resolv”中故意省略了“e”),你会看到同样的事情。
Bonjour 可能还正在执行广域 Bonjour。要查看哪些域正在用于广域 Bonjour,请执行,然后在域列表出现后dns-sd -F
点击(否则它将无限期地保持运行,监视列表中的变化)。^C
除非您启动 DHCP 服务器,否则 Mac OS X 不会将 DNS 服务器地址“分发”给其他计算机,而人们启动 DHCP 服务器的唯一方式就是在系统偏好设置中的“共享”面板中打开 Internet 共享。如果您让 Internet 共享保持运行,它可能会将其自己的 NAT 私有 IP 地址 (192.168.2.1) 分发为 DNS 服务器地址,并且可能正在执行 DNS 代理。或者,它可能分发了在其 NAT 公共接口(其“上游”接口;“共享您的连接 FROM:”接口)上使用的最后一个 DNS 服务器地址。因此,如果您曾经使用公共 Wi-Fi 网络,并使用 Internet 共享从 AirPort 到以太网,通过 Mac 将以太网连接的计算机连接到互联网,那么这就可以解释您所看到的情况。
如果您没有启用(选中)Internet 共享,并且您没有手动启动 DHCP 服务器,那么您的 Mac 几乎肯定没有将该 DNS 服务器地址提供给您的打印机。
您看到打印机使用的 DNS 服务器地址究竟是什么?例如,如果您的打印机已为自己分配了 IPv4 本地链路 (169.254.xx) 地址,那么它可能已在该字段中显示自己的地址,以便知道它应该依靠自身(可能是 Bonjour 多播 DNS)进行 DNS 查找。