CentOS域名故障排查与解决方法
本地hosts文件(/etc/hosts)可能覆盖DNS解析结果。使用sudo vi /etc/hosts命令打开文件,检查是否有目标域名的静态IP映射(如192.168.1.100 example.com)。若有错误条目,修改或删除后保存,再测试域名解析。
DNS解析依赖/etc/resolv.conf文件的配置。使用cat /etc/resolv.conf命令查看,确认包含有效的DNS服务器地址(如公共DNS:nameserver 8.8.8.8、nameserver 8.8.4.4,或内网DNS服务器IP)。若文件被修改(如被NetworkManager覆盖),需调整对应网卡的配置文件(/etc/sysconfig/network-scripts/ifcfg-ensXX),确保PEERDNS=yes(允许网络服务更新resolv.conf)且DNS1/DNS2设置正确,然后重启网络服务:sudo systemctl restart network。
使用nslookup或dig命令手动测试域名解析。例如:
nslookup example.com(显示解析过程的详细信息);dig @8.8.8.8 example.com(指定DNS服务器查询,更精准)。
若命令返回正确的IP地址,说明DNS解析正常;若返回“unknown host”或超时,需继续排查网络或DNS服务问题。ping 8.8.8.8测试是否能访问外网。若无法ping通,检查网卡状态(ip link show)、IP地址(ip addr)和默认网关(ip route)是否正确。firewalld可能阻止DNS流量(UDP/TCP 53端口)。使用sudo firewall-cmd --list-all查看规则,确保允许DNS服务:sudo firewall-cmd --add-service=dns --permanent,然后sudo firewall-cmd --reload。若使用iptables,需添加规则:sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT、sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT。SELinux可能限制DNS服务的访问。使用getenforce命令查看SELinux状态(Enforcing为开启)。若开启,检查SELinux日志(/var/log/audit/audit.log)是否有与DNS相关的拒绝记录(如avc: denied)。临时关闭SELinux测试:sudo setenforce 0(重启后恢复Enforcing);永久关闭需修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=permissive。
若服务器作为DNS服务器(如BIND9),需确认服务运行状态:
sudo systemctl status named查看BIND9服务是否启动(active (running)为正常)。sudo ss -tulnp | grep :53,确认BIND9是否监听53端口。/var/log/messages或/var/log/named.log),定位配置错误(如区域文件语法错误、权限问题)。若系统或应用程序缓存了错误的DNS记录,需清除缓存:
nscd(Name Service Cache Daemon)的系统,执行sudo systemctl restart nscd;systemd-resolved的系统,执行sudo systemctl restart systemd-resolved;sudo systemctl restart named。查看系统日志获取详细错误信息:
journalctl -xe查看实时日志,过滤DNS相关错误(如named、resolv.conf);/var/log/messages或/var/log/named.log(BIND日志),定位配置错误、网络问题或权限问题。