了解为什么 hostname -i 返回奇怪的 IP 地址

s20*_*der 1 linux dns hostname centos hosts

我引用以下问题是因为它相似但不相同:

在我的 CentOS 7 系统上,我在更改主机名后从“hostname -i”得到一个奇怪的 IP 地址,我想弄清楚为什么会这样。

我使用以下命令更改主机名:

# hostnamectl set-hostname saturn
# systemctl restart systemd-hostnamed
Run Code Online (Sandbox Code Playgroud)

我的 /etc/hosts 文件显示:

 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
Run Code Online (Sandbox Code Playgroud)

以下在我的 /etc/nsswitch.conf 文件中:

hosts:      files dns myhostname
Run Code Online (Sandbox Code Playgroud)

我的服务器 IP 地址是 192.168.1.13,但是“hostname -i”返回了一个奇怪的 IP 地址:

# hostname -i
92.242.140.21
Run Code Online (Sandbox Code Playgroud)

但是,“主机名 -I”很好:

# hostname -I
192.168.1.13
Run Code Online (Sandbox Code Playgroud)

为什么主机名 -i 返回 92.242.140.21。它是由 DNS 分配给我的系统的随机动态 IP 吗?有人可以解释一下吗?谢谢!

ozz*_*zzy 6

hostname -I仅列出所有网络接口上所有已配置 IP 地址的hostname -i命令不同,该命令执行名称解析(请参阅hostname手册页)。

由于无法使用该/etc/hosts文件解析新分配的主机名,因此运行hostname -i将导致系统的名称解析器生成对外部 DNS 服务器的 DNS 查询。在这个服务器上(我认为它属于你的 ISP),这个查询是空的(NXDOMAIN 结果:即不存在的域)。由于您的 ISP 已与 Barefruit 合作,因此您不会收到 NXDOMAIN 结果,而是收到一个 Barefruit IP 地址来响应您的查询:

$ dig +short -x 92.242.140.21
unallocated.barefruit.co.uk.
Run Code Online (Sandbox Code Playgroud)

我想将您的新主机名添加到您的/etc/hosts文件将使奇怪的 Barefruit IP 地址在您运行hostname -i命令时消失。如果没有,您可以忽略此答案:)


只是为了它的乐趣:使用该dig命令,您可以询问不同的名称服务器。要查看响应的差异,您可以运行以下两个命令:

$ dig saturn
$ dig @8.8.8.8 saturn
Run Code Online (Sandbox Code Playgroud)

第一个导致通过系统预配置的 DNS 服务器进行名称解析,并可能导致返回 Barefruit IP 地址。第二个命令要求Google 公共 DNS解析名称,并返回 NXDOMAIN 状态。或不?

如果是这样,您的 ISP 可能参与了DNS 劫持的可疑做法,您可能想弄清楚是否有选择退出的可能性,或更改您的 DNS 服务提供商。