在一个vps服务器上,ping一个.com的域名:
# ping mail.moneyslow.com
PING mail.moneyslow.com.com (104.26.4.148) 56(84) bytes of data.
64 bytes from 104.26.4.148 (104.26.4.148): icmp_seq=1 ttl=58 time=1.07 ms
64 bytes from 104.26.4.148 (104.26.4.148): icmp_seq=2 ttl=58 time=1.01 ms
64 bytes from 104.26.4.148 (104.26.4.148): icmp_seq=3 ttl=58 time=0.966 ms
发现没有,自动添加了.com ,同样可以验证:
# ping google
PING google.com (172.217.14.110) 56(84) bytes of data.
64 bytes from lax31s01-in-f14.1e100.net (172.217.14.110): icmp_seq=1 ttl=59 time=0.348 ms
64 bytes from lax31s01-in-f14.1e100.net (172.217.14.110): icmp_seq=2 ttl=59 time=0.351 ms
以上是明确有正确解析的域名,来一个不存在的域名:
~# ping -v asdfafiidkdddkdkdkdkdkdkdkdddddd
ping: asdfafiidkdddkdkdkdkdkdkdkdddddd: Name or service not known
(这个确实不存在,加了com也不存在)
# ping -v asdfafiidkdddkdkdkdkdkdkdkdddddd.com
PING asdfafiidkdddkdkdkdkdkdkdkdddddd.com.com (104.26.4.148) 56(84) bytes of data.
64 bytes from 104.26.4.148 (104.26.4.148): icmp_seq=1 ttl=58 time=1.08 ms
64 bytes from 104.26.4.148 (104.26.4.148): icmp_seq=2 ttl=58 time=0.998 ms
同样的,自动添加了.com
开始不知道为什么,后来查了资料才知道是因为自己设置主机名是moneyslow.com造成的,简单说,就是你如果设置了主机名为moneyslow.com,那么默认你的主机是在.com的域里,你自己的名字是moneyslow,这个.com是你所属的“域”,当你查找另外一个主机时,系统会自动在.com的域里为你查找,这是一个功能,所以会给你自动加上.com,表示在.com域里进行查找。
所以解决办法有两个:
1、在/etc/resolv.conf里添加:
search .
options ndots:1
最终/etc/resolv.conf的内容如下:
# cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
search .
options ndots:1
2、修改主机名,不带.com
参考地址:https://superuser.com/questions/630939/linux-ping-and-telnet-automatically-add-com-to-non-existing-domain-names
另外,本例子中由于运营商的问题,mail.moneyslow.com在解析正确的情况下,依然不能ping通,是这个运营商的问题,但是这个问题是另外一个问题,恰巧引起了这个问题。