nslookup 在 Cygwin/Windows 10 上有效,但 telnet/curl 无法解析

nslookup 在 Cygwin/Windows 10 上有效,但 telnet/curl 无法解析

系统:Windows 10 虚拟机(VMWare)、Cygwin 32 位、Windows 10 主机。

nslookup 的输出:

$ nslookup www.google.com
Non-authoritative answer:
Server:  UnKnown
Address:  172.31.2.2

Name:    www.google.com
Address:  172.217.14.164

telnet 的输出:

$ telnet www.google.com 80
Server lookup failure:  www.google.com:80, Name or service not known

(与任何服务器/端口相同)

curl 的输出:

$ curl www.google.com
curl: (6) Could not resolve host: www.google.com

ssh 的输出:(这是我感兴趣的,但我想使用上面没有屏蔽地址的示例)

$ ssh -vv xxx.xxx.com
OpenSSH_7.9p1, OpenSSL 1.0.2r  26 Feb 2019
debug2: resolving "xxx.xxx.com" port 22
ssh: Could not resolve hostname xxx.xxx.com: Name or service not known

ssh 到 IP 地址/端口工作正常。连接显然没问题,nslookup 显示 DNS 正在运行,nslookup 可以很好地解析我的 xxx.xxx.com。

Windows 可以解析这些地址:

C:\Users\iain>ping www.google.com

Pinging www.google.com [172.217.14.164] with 32 bytes of data:

(Ping 失败,因为 icmp 被阻止,但这不是名称解析问题。)

经过大量的谷歌搜索后,我并没有更进一步理解,尽管我看到了一些启发的迹象。

  • 除非 /etc/resolv.conf 存在,否则 Cygwin 使用 Windows 名称解析,而不是 DNS。

我尝试创建 /etc/resolv.conf,指定 nslookup 使用的 VMWare DNS。我收到完全相同的错误消息。

  • ipv6 让人困惑

我已使用注册表设置禁用了我能找到的所有内容并在各个适配器属性中禁用了 ipv6。

我在多个 Windows 7 虚拟机上安装了 32 位 Cygwin。这是我第一次遇到麻烦。

我想避免使用 64 位 Cygwin,因为我从未成功维护过 xterm-over-ssh 隧道超过一两分钟。

我尝试修改 /etc/nsswitch.conf 和 /etc/host.conf 以强制通过 DNS 进行解析,但说实话我真的不知道我在这里做什么。

最后,我发现了这个有趣的帖子:http://cygwin.1069669.n5.nabble.com/Cygwin-unable-to-resolve-hostnames-td119950.html这意味着类似的症状是由 VMWare 的 DNS 响应不正确引起的。建议的解决方案是在适配器属性中硬编码 8.8.8.8。

这是有效的,因为 Cygwin 正确地获取了 DNS 地址:

$ nslookup www.stackoverflow.com
Non-authoritative answer:
Server:  UnKnown
Address:  8.8.8.8

Name:    www.stackoverflow.com
Address:  151.101.193.69

但症状没有任何区别。

我错过了什么?

很久以后才编辑 (2023),因为这个问题似乎仍然有很多人浏览,但没有答案。问完之后不久,我确实切换到了 Cygwin 64,从那以后再也没有见过这个问题。由于 Cygwin 32 已经过了使用寿命,我怀疑是否会有答案。至少对我来说,目前这完全是学术性的。

相关内容