在CentOS 7系统中,DNS解析失败是一个常见且令人困扰的问题,它表现为无法通过域名访问网站或服务,但直接使用IP地址却可以正常通信,这通常意味着系统的DNS查询机制出现了故障,本文将系统性地介绍排查和解决CentOS 7 DNS不通问题的方法,从基础配置检查到高级故障排除,帮助您快速定位并修复问题。

确认问题现象
在开始排查之前,首先需要确认问题的具体表现,这有助于缩小故障范围。
:尝试 ping一个公共域名,如ping www.baidu.com,如果显示“unknown host”或“Name or service not known”,则明确是DNS解析问题。ping一个已知的IP地址,如ping 8.8.8.8,如果此操作成功,则进一步证实网络连通性正常,问题出在DNS解析环节。- 使用专业工具查询:
nslookup和dig是更强大的DNS诊断工具。-
nslookup www.baidu.com:此命令会直接向系统配置的DNS服务器发起查询,并返回详细的解析结果或错误信息。 -
dig www.baidu.com:dig提供比nslookup更为详尽的输出,包括查询时间、DNS服务器响应、Answer Section等,是深入分析DNS问题的首选工具。
-
检查核心配置文件
DNS配置的核心在于/etc/resolv.conf文件,但在CentOS 7中,此文件通常由网络管理服务动态生成,直接修改可能无效。
检查
/etc/resolv.conf
此文件定义了系统使用的DNS服务器,其内容通常如下:# Generated by NetworkManager nameserver 114.114.114.114 nameserver 8.8.8.8请检查
nameserver后面的IP地址是否正确、可达,如果文件内容为空或地址错误,解析必然失败,请注意文件开头的注释,如果提示由NetworkManager生成,则不应手动编辑此文件。检查网卡配置文件
在CentOS 7中,正确的DNS配置方式是修改网卡配置文件,该文件位于/etc/sysconfig/network-scripts/目录下,通常名为ifcfg-ens33(接口名可能不同),使用vi或nano编辑器打开它,重点关注以下参数:DNS1=<DNS_SERVER_IP>:设置首选DNS服务器,例如DNS1=114.114.114.114。DNS2=<DNS_SERVER_IP>:设置备用DNS服务器,例如DNS2=8.8.8.8。PEERDNS=yes/no:这是一个关键参数,如果设置为yes(默认值),系统在通过DHCP获取IP时,会自动用DHCP服务器提供的DNS覆盖/etc/resolv.conf,如果您希望使用手动设置的DNS,请确保PEERDNS=no。
修改完成后,保存文件并重启网络服务使配置生效。

检查网络管理服务
CentOS 7默认使用NetworkManager服务来管理网络,确保该服务正常运行是DNS配置生效的前提。
- 查看服务状态:
systemctl status NetworkManager - 重启服务:如果配置修改后仍未生效,可以尝试重启该服务:
systemctl restart NetworkManager
对于使用传统network脚本的系统,则使用systemctl restart network命令。
排查防火墙与SELinux
防火墙和安全模块可能会阻止DNS查询所需的端口。
- 防火墙:DNS主要使用UDP协议的53端口,如果本地运行了防火墙(如
firewalld),需要确保此端口已开放,可以使用以下命令进行管理。
| 操作 | 命令 | 说明 |
|---|---|---|
| 查看防火墙状态 | systemctl status firewalld | 确认服务是否运行 |
| 查看当前区域规则 | firewall-cmd --list-all | 检查是否已放行dns服务或53端口 |
| 临时放行DNS服务 | firewall-cmd --add-service=dns | 立即生效,重启后失效 |
| 永久放行DNS服务 | firewall-cmd --add-service=dns --permanent | 需要执行firewall-cmd --reload重载配置 |
- SELinux:虽然SELinux较少导致客户端DNS问题,但在某些复杂环境中,它也可能成为因素,可以临时将其设置为宽松模式进行测试:
setenforce 0,如果问题解决,则说明是SELinux策略限制,需要调整相关策略而非禁用。
验证DNS服务器可用性
如果本地配置无误,问题可能出在DNS服务器本身,可以绕过系统配置,直接向一个可靠的公共DNS服务器发起查询。
: dig @8.8.8.8 www.google.com
这个命令会直接向Google的DNS服务器(8.8.8.8)查询www.google.com的IP,如果此命令能返回结果,说明您的网络可以连接到外部DNS服务器,问题很可能在于您在/etc/resolv.conf中配置的DNS服务器不可用或响应缓慢,如果此命令也超时,则可能是更深层次的网络连接问题。
检查名称服务切换配置
/etc/nsswitch.conf文件决定了系统解析主机名和用户名等信息时的查找顺序,确保其中包含dns服务。
检查hosts那一行,确保其值为:hosts: files dns
这表示系统首先查找本地的/etc/hosts文件,如果找不到,再使用DNS服务,如果此行中没有dns,系统将永远不会进行DNS查询。

相关问答FAQs
问题1:为什么我修改了 /etc/resolv.conf 文件,重启网络后就失效了?
答:这是因为在CentOS 7中,NetworkManager服务默认会接管并动态生成/etc/resolv.conf文件,当您手动修改后,一旦网络服务重启或NetworkManager重新检测网络状态,它就会根据网卡配置文件(如ifcfg-ens33)中的DNS1、DNS2参数或DHCP获取的信息来覆盖您的修改,正确的做法是直接编辑网卡配置文件,在其中设置DNS1和DNS2参数,并确保PEERDNS=no(如果不想被DHCP覆盖),然后重启网络服务。
问题2:ping命令可以通IP地址,但域名不通,nslookup也超时,可能是什么原因?
答:这是一个典型的DNS解析故障,可能的原因包括:
- DNS服务器配置错误:
/etc/resolv.conf中配置的DNS服务器IP地址错误、无法访问或已宕机。 - 网络防火墙限制:本地网络或上游网络设备(路由器、交换机)的防火墙策略阻止了UDP 53端口的出站流量。
- DNS服务器本身问题:您所配置的DNS服务器负载过高或出现故障,导致响应超时。
- 系统层面限制:极少数情况下,可能是
/etc/nsswitch.conf文件配置错误,删除了dns查找项。
排查建议:首先使用dig @8.8.8.8 some-domain.com命令直接测试公共DNS的连通性,如果成功,则问题出在您配置的DNS服务器上,更换为公共DNS(如114.114.114.114或8.8.8.8)即可,如果不成功,则应检查防火墙规则和整体网络连接。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复