Snow Leopard 升级后 DNS 名称查找(原为 SSH)无法正常工作

Snow Leopard 升级后 DNS 名称查找(原为 SSH)无法正常工作

思考这是从 Snow Leopard 更新开始的。清理了 .ssh 目录,问题仍然存在。

~:uname -a
Darwin california-example-com.local 10.0.0 Darwin 内核版本 10.0.0:2009 年 7 月 31 日星期五 22:47:34 PDT;root:xnu-1456.1.25~1/RELEASE_I386 i386

~: ssh -V
OpenSSH_5.2p1,OpenSSL 0.9.8k 2009 年 3 月 25 日

~: ls -l ~/.ssh

~: nslookup 内华达
服务器:10.94.62.3
地址: 10.94.62.3#53

名称:nevada.example.com
地址:10.94.62.3

~: ssh 内华达
ssh: 无法解析主机名 nevada: 未提供节点名或服务名,或者未知

答案1

我遇到了完全相同的问题,并找到了一个关于Mac mini 有 DNS 问题对 Apple 的讨论非常有帮助。

问题的关键:mDNSResponder 似乎偶尔会更改其查询的 DNS 服务器的顺序,因此如果它首先查询您的 ISP 的 DNS 服务器,它将无法获得正确的记录(或者如果您使用拆分 DNS,您将获得您的公共 IP)。

最好的解决方法是确保(就像您所做的那样)DNS设置中仅列出所需的DNS服务器。这可能需要从DHCP中删除ISP DNS服务器(我也必须这样做 - 无论如何,所有请求都会通过本地DNS服务器转发)。

实用程序之所以dig能像nslookup往常一样成功,是因为它们使用 BIND,并且与/etc/resolv.conf操作系统的其余部分直接相关。

供参考,在 Snow Leopard 中,DNS 缓存现在由 mDNSResponder 存储,为了清除它,您需要使用 重新启动该过程sudo killall -HUP mDNSResponder。您可以通过对命令使用不同的标志来获取更多信息(日志记录、转储内部状态等)killall

"sudo killall -USR1 mDNSResponder" to enable operation logging.
"sudo killall -USR2 mDNSResponder" to enable packet logging.
"sudo killall -HUP mDNSResponder" to clear the DNS cache.
"sudo killall -INFO mDNSResponder" to dump mDNSRepsonder's internal state.

来源:史努比狗狗在同一个线程上。

答案2

我们遇到过这样的问题:

host example.com     <<< WORKED
ping example.com     <<< FAILED

用这样的方法解决:

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

Mac OS X 上的应用程序不使用与“host/dig/nslookup”相同的 DNS 机制。

使用“host/dig/nslookup”有助于确定这不是网络问题。这是本地系统的问题,可以使用上述命令解决。

答案3

我也遇到过同样的问题......虽然重新启动 mDNSResponder 似乎“有效”,但每小时重新启动几次就太糟糕了。

因此,现在,我已经通过运行“解决”了这个问题域名系统本地。具体做法如下:

  • 构建 dnsmasq(下载 tgz 和make/或brew install dnsmasq
  • 将其放入dnsmasq.conf文件中:
解析文件=resolv.conf
用户=无人
组=无人
接口=lo0
缓存大小=1024
  • 将其放在与resolv.conf该文件位于同一目录中的文件中dnsmasq.conf(注:不是 /etc/resolv.conf):
名称服务器 8.8.8.8
名称服务器 4.2.2.1
名称服务器 4.2.2.2
  • dnsmasq使用运行sudo dnsmasq --no-daemon --log-queries -C dnsmasq.conf。输出应该类似于:
...
dnsmasq:正在读取 resolv.conf
dnsmasq:使用名称服务器 4.2.2.1#53
dnsmasq:使用名称服务器 4.2.2.2#53
dnsmasq:使用名称服务器 8.8.8.8#53
dnsmasq:读取 /etc/hosts - 6 个地址
  • 打开网络偏好设置并确保这127.0.0.1是唯一的 DNS 服务器(网络偏好设置 -> 高级 -> DNS -> 添加 127.0.0.1)

一切应该会重新开始顺利进行。

一旦一切正常,您就可以dnsmasq不用--no-daemon--log-queries选项运行,因此它将在后台启动,并且您不需要保持终端窗口打开。

答案4

我想我们有一个类似的问题,正如我在这里描述的那样:https://apple.stackexchange.com/questions/50457/nslookup-works-ping-and-ssh-dont-os-x-lion-10-7-3

我认为问题出在 searchdomains 配置中:尝试使用 ping/ssh,gethostbyname2()但由于 named 不再运行(至少在 Lion 中),因此会失败,并且/etc/resolv.conf配置的 searchdomains 会被忽略。/etc/hosts是最后的手段gethostbyname2(),因此 ssh 可以再次使用 中的正确条目/etc/hosts。我认为应该由 Apple 修复。

相关内容