为什么 ping6 将 foo.localdomain 解析为 ::1?

为什么 ping6 将 foo.localdomain 解析为 ::1?

我有一台在 VirtualBox 中运行的 CentOS 7 机器。它连接到仅主机网络。该/etc/hosts文件包含以下内容:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.56.102 prospero.localdomain prospero
192.168.56.105 ariel.localdomain ariel

如果我 ping ariel.localdomain,它会按预期 ping 192.168.56.105:

# ping -c1 ariel.localdomain
PING ariel.localdomain (192.168.56.105) 56(84) bytes of data

如果我 ping6 ariel.localdomain,它会 ping ::1,这是我没想到的:

# ping6 -c1 ariel.localdomain
PING ariel.localdomain(localhost (::1)) 56 data bytes

此外,我可以 ping6 一个不存在的 foo.localdomain 并得到相同的响应,这是我绝对没想到的:

# ping6 -c1 foo.localdomain
PING foo.localdomain(localhost (::1)) 56 data bytes

为什么 ping6 将 *.localdomain 解析为 localhost?

由于仅主机网络上没有 DNS 服务器,因此依赖 DNS 的查询会超时,例如:

  • nslookup
  • dig
  • host

答案1

从您的hosts文件来看,“ariel.localdomain 的 IPv6 地址是什么”这个问题的答案不是来自它,而是最有可能来自 DNS 服务器,该服务器将被配置为回答::1该类型的任何请求*.localdomain(顺便说一句,我不会感到惊讶,这也会在 IPv4 域中foo.localdomain解析)。127.0.0.1

在调试模式下使用nslookup(或dig, 或hosts) 时,您可以找出信息的来源。请参阅下面(虚构的)示例中的前两行:

$ nslookup -debug -type=AAAA foo.localdomain
Server:     ns1.google.com
Address:    216.239.32.10#53
...
foo.localdomain has AAAA address ::1

最后,请注意,它localdomain通常用于您的环回网络 ( 127/8),而不用于您的 LAN(192.168.56/24在您的情况下)。主机xxx.localdomain通常应该位于您的计算机本地(即具有 IPv4 地址127.x.x.x)。虽然这只是一个约定,但这可以解释为什么 DNS 会以这种方式应答。

相关内容