[linux] 域名解析失败案例定位 [Errno -2] Name or service not known

首先发现代码里这段运行报错:

socket.gethostbyname_ex(host_name)
Traceback (most recent call last):
File “”, line 1, in
socket.gaierror: [Errno -2] Name or service not known

import socket
host_name = socket.gethostname()
print(socket.gethostbyname(host_name))

怀疑是域名解析出问题,首先查看域名解析文件resolv.conf ,是否正常,发现文件没问题

cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 114.114.114.114

一直在纠结socket那段代码,host_name 去转换解析为ip地址一直失败,那就是域名解析肯定出了问题,但是配置文件又正常,于是发现ping host_name,其他正常环境都是正常的,ping这个环境就直接失败,反复修改配置也
没效果

查看/etc/hosts,检查localhost是否配置
这些文件都正常,定位了很久,直到发现ping localhost 同样找不到ip,ping127可以成功,但是把dns 114注释了,就又可以成功,重启了NetworkManager,看日志,很多误导性的报错也影响了判断

突然发现往hosts文件里新增域名解析配置没有效果,这时候开始研究hosts文件生效的原理,
发现是由/etc/nsswitch.conf nsswitch服务管理的。

nsswitch(Name Service Switch)是一个用于配置系统命名服务解析的工具。它定义了在系统中查找特定信息的方法,例如主机名、用户和组。/etc/nsswitch.conf 文件是 nsswitch 的配置文件,用于指定系统在查找特定信息时应该使用哪些服务

查看配置文件 ,发现/etc/nsswitch.conf是个软连接,已经飘红,原链接文件已经被删除,
在这里插入图片描述
这时候开始找,authselect这个目录是怎么生成并删除的,在历史记录中发现了终于:
由于 authconfig命令导致的修改了配置并修改了原文件链接到新的目录,我恢复时删除了authselect目录导致域名解析出现问题,从其他节点恢复了这个文件后,hosts文件生效,localhost也可以ping通。

晚上定位了2,3个小时,早上来又一直看,怀疑了很多点,网卡的配置,mac地址是不是冲突,最后才发现是hosts文件不生效导致的,简单的域名解析,??工作感觉是踩了很多坑也。