![hostname -i 在 Linux 中返回奇怪的结果](https://linux22.com/image/93341/hostname%20-i%20%E5%9C%A8%20Linux%20%E4%B8%AD%E8%BF%94%E5%9B%9E%E5%A5%87%E6%80%AA%E7%9A%84%E7%BB%93%E6%9E%9C.png)
如果我运行下面的命令,我会得到一些奇怪的 IP 地址。
hostname -i
198.105.244.11 198.105.254.11
我的主机文件条目采用默认配置,以下是我的 /etc/hosts 文件条目的内容
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
本机实际IP为192.168.2.31
/etc/hosts
我希望,一旦我在文件中添加了以下条目,
192.168.2.31 myhost
我可能会得到预期的输出,
hostname -i
192.168.2.31
但是,为什么它在运行时显示不同的 IP 范围hostname -i
?
更新:
ip r
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.31
169.254.0.0/16 dev eth0 scope link metric 1002
default via 192.168.2.1 dev eth0
ifconfig eth0
eth0 Link encap:Ethernet HWaddr ##removed##
inet addr:192.168.2.31 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feca:24c2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2153703 errors:0 dropped:0 overruns:0 frame:0
TX packets:612859 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:189727756 (180.9 MiB) TX bytes:761146814 (725.8 MiB)
(使用 Cent 6.4)
答案1
您在用于该主机名的 DNS 服务器中可能有先前的 DNS a 记录。您可以使用 dig 来验证这一点:
dig <your.host.name>
答案2
这看起来像是来自 DNS 服务器的诡计。查询任何未知的主机名/FQDN 将准确返回您获得的两个 IP 地址:
$ nslookup 任何未知名称 4.2.2.2 服务器:4.2.2.2 地址:4.2.2.2#53 非权威答案: 名称:任何未知名称 地址:198.105.244.11 名称:任何未知名称 地址:198.105.254.11
您的服务器配置为首先查询 DNS,然后查看 /etc/hosts 文件,因此如果您的 DNS 服务器正在解析您的主机名,则您在后者中输入的任何内容都将被忽略。问题是它通过将任何未知名称“解析”为您获得的固定 IP 地址来欺骗您。
要解决此问题,请编辑您的/etc/nsswitch.conf
文件并将其放在该行files
之前。dns
hosts