为什么 chrome 解析域名的方式和 ping 不同,而 ping 的解析方式又和 ssh 不同?

为什么 chrome 解析域名的方式和 ping 不同,而 ping 的解析方式又和 ssh 不同?

当我在 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.comping 成功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

相关内容