![为什么 chrome 解析域名的方式和 ping 不同,而 ping 的解析方式又和 ssh 不同?](https://linux22.com/image/1094653/%E4%B8%BA%E4%BB%80%E4%B9%88%20chrome%20%E8%A7%A3%E6%9E%90%E5%9F%9F%E5%90%8D%E7%9A%84%E6%96%B9%E5%BC%8F%E5%92%8C%20ping%20%E4%B8%8D%E5%90%8C%EF%BC%8C%E8%80%8C%20ping%20%E7%9A%84%E8%A7%A3%E6%9E%90%E6%96%B9%E5%BC%8F%E5%8F%88%E5%92%8C%20ssh%20%E4%B8%8D%E5%90%8C%EF%BC%9F.png)
当我在 chrome 中访问 me.com 时,它告诉我找不到该域。当我使用 ssh 访问 me.com 时,它会连接到该服务器。当我尝试 ping me.com 时,它会 ping localhost。我希望 me.com 在这 3 种情况下都解析为 localhost。我该如何实现这一点?
以下是我的相关文件:
/etc/hosts
127.0.0.1 localhost.localdomain localhost me.com
::1 laptop localhost6.localdomain6 localhost6
127.0.1.1 laptop
/etc/resolv.conf:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
nameserver 127.0.0.1
/etc/resolvconf/resolv.conf.d/head
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
答案1
除非你真的在本地主机上运行 DNS 服务器(如 BIND 或 dnsmasq),否则你不会希望你的nameserver
节指向本地主机。如果你是运行 DNS 服务器或缓存服务,您需要参考其文档以了解如何配置它,以便 me.com 解析为本地主机。配置 DNS 服务后,您可以使用 测试特定域名的解析nslookup
。
Chrome 可能会自动将“www”附加到您的 URL 前面,您可以通过明确指定 URL 的协议部分来确保禁用此行为,例如:“http://me.com”
我们需要查看您的/etc/nsswitch.conf
文件以帮助建立 ssh 连接。ssh -v
也可能会产生一些有用的输出。
最后,如果您想连接到本地主机,只需指定“localhost”作为主机名,而不是“me.com”,这样就不会那么麻烦了:)
答案2
尝试清除 DNS 缓存,然后删除 Chrome 中的所有历史记录(应该位于设置下易于访问的某个位置,这样做很好,因为我不完全确定 Chrome 是否具有 DNS 缓存功能)
看http://www.ubuntugeek.com/howto-clearflush-dns-cache-in-ubuntu.html清除缓存(我不完全确定是否需要或者是否可行,但请尝试一下 ;D)
也请尝试一下,dig me.com
因为这可能会提供一些有用的信息。您也可以尝试启动 Firefox,看看 me.com 是否转到 localhost。
另外 - 我认为你不必(或应该,除非你已经设置了 DNS 服务器来复制其他 DNS 服务器)将你的名称服务器指向 127.0.0.1,因为 /etc/hosts 的优先级默认高于名称服务器(请参阅主办方-/etc/nsswitch.conf 中的行用于您的设置)
答案3
回答原始问题。
首先,为什么从Chrome,ssh和ping获得三个不同的结果?
在我看来,这三个程序似乎使用了不同的解析器逻辑,可能使用了不同的库或不同的侧翼代码。众所周知,ping 使用遵循 /etc/nsswitch.conf 和 /etc/resolv.conf 的 glibc 解析器。因此,ping 首先尝试 /etc/hosts,然后尝试 DNS。所以ping me.com
ping 成功127.0.0.1
。也许 Chrome 跳过了 /etc/hosts 并且在 DNS 中找不到 www.me.com。至于 ssh,它最终连接到哪个主机?
答案4
我在 Ubuntu 20.04 上使用 resolvconf,对于通过 添加的其他 DNS 服务器resolvconf -a ...
,我需要编辑文件,/etc/nsswitch.conf
以便在以 开头的行中hosts:
,单词dns
前 [NOTFOUND=return]
。因此对我来说,Chrome 和其他浏览器需要以下内容才能正确识别我的附加 DNS 服务器:
hosts: files dns mdns4_minimal [NOTFOUND=return] myhostname