我思考这是从 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 修复。