Name or service not known问题解决和分析过程解析
目 录
一、问题描述
二、问题查处过程
(一)为何不能识别到bogon
(二)为何会出现bogon
(三)能不能更改bogon
(四)能识别其他host的名字
三、问题分析
四、问题解决
(一)解决掉bogon
1、查看dns
2、修改DNS
3、查看结果
(二)正常识别hostname
1、删除外部DNS解析
2、查看结果
一、问题描述
程序执行错误,查看日志信息发现出现:bogon 不能识别,于是进行如下查处:
[root@bogon vcms]#
[root@bogon vcms]# hostname
bogon
[root@bogon vcms]#
[root@bogon vcms]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@bogon vcms]#
[root@bogon vcms]#vi /etc/hosts
认为bogon不在hosts列表,于是准备把bogon增加到hosts列表中,操作如下:
[root@bogon vcms]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 bogon
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 bogon
[root@bogon vcms]#
[root@bogon vcms]#sudo systemctl restart network
[root@bogon vcms]#
程序仍然执行错误,查看日志信息发现出现:bogon 不能识别。
现在应该如何办?
二、问题查处过程
(一)为何不能识别到bogon
Linux系统在向DNS服务器发出域名解析请求之前会查询/etc/hosts文件。如果/etc/hosts文件中有相应的记录,系统就会使用这个文件中的记录。因此,如果hostname在/etc/hosts文件中没有对应的条目,或者条目不正确,那么系统可能无法正确解析hostname。
于是我们编辑/etc/hosts文件,把bogon添加到hosts文件中对应的条目,但是结果还是不行。
[root@bogon vcms]#hostname -i
hostname: Name or service not known
(二)为何会出现bogon
我们了解到,一般情况下,当centos系统的hostname变为bogon时,这通常是由于网络配置或DNS解析问题导致的。bogon一词通常用来表示一个虚假的、不存在的或无效的IP地址。
看来,不能出现bogon。
(三)能不能更改bogon
根据上面的情况,我们就像改掉这个bogon,但是尝试了各种办法,都没办法凑效!
(四)能识别其他host的名字
我们尝试了一下,包括localhost, localhost.localdomain,都不能解析
使用hostname -i,发现出现错误
hostname: Name or service not known
三、问题分析
理论上,在CentOS等linux系统中,解析主机名是由Name Service Switch Library(NSS)和DNS服务器共同处理的。具体流程为:
- 当一个程序需要解析一个主机名时,它会调用gethostbyname()函数来获取IP地址。
- NSS是Linux下的一个服务,它使用gethostbyname()函数从/etc/hosts文件中查找主机名对应的IP地址。如果找到匹配的主机名,则返回对应的IP地址。
- 如果在/etc/hosts文件中没有找到匹配的主机名,NSS会继续使用DNS服务器来解析主机名。它通过发出一个网络请求到DNS服务器,请求该主机名的IP地址。
- DNS服务器收到请求后,会查询其数据库来找到相应的IP地址,然后返回给客户端。
- NSS接收到DNS服务器返回的IP地址后,将其返回给原始调用者,完成主机名的解析。
因此,我们需要重NSS和DNS服务器上入手。
四、问题解决
通过以上分析,我们理出思路,应该就是主机名解析的问题
(一)解决掉bogon
1、查看dns
[root@bogon vcms]#cat /etc/sysconfig/network-scripts/ifcfg-exxx
……………………..
DNS1=192.168.10.3
DNS2=221.8.16.1
2、修改DNS
[root@bogon vcms]#vi /etc/sysconfig/network-scripts/ifcfg-exxx
……………………..
DNS1=8.8.8.8
DNS2=114.114.114.114
[root@bogon vcms]# sudo systemctl restart network
3、查看结果
[root@bogon vcms]#
[root@bogon vcms]# hostname
localhost
[root@bogon vcms]#
看来凑效了。但是,错误依旧,如下图:
[root@bogon vcms]#
[root@bogon vcms]# hostname -i
hostname: Name or service not known
[root@bogon vcms]#
(二)正常识别hostname
分析到,可能是外部dns进行了名字解析,若把外部dns去掉呢?
1、删除外部DNS解析
[root@bogon vcms]#vi /etc/sysconfig/network-scripts/ifcfg-exxx
……………………..
#DNS1=8.8.8.8
#DNS2=114.114.114.114
[root@bogon vcms]# sudo systemctl restart network
2、查看结果
[root@bogon vcms]#
[root@bogon vcms]# hostname
localhost
[root@bogon vcms]#
[root@localhost vcms]# hostname -i
::1 127.0.0.1
[root@localhost vcms]#
看来凑效了。
然后,程序执行OK,看到了成功运行的久违的界面。