问题现象

Linux 服务器内部无法正常解析域名, IP访问正常
curl xxx.xxx Could not resolve host: xxx.xxx

可能原因

可能的原因包括:

  • DNS 设置问题
  • 防火墙策略问题
  • NSCD 服务问题

处理办法

1、通过如下指令,检查系统是否正确设置了 dns 服务器。

1
2
3
4
5
6
7
8
9
10
11
12
cat /etc/resolv.conf
# Generated by NetworkManager
# No nameservers found; try putting DNS servers into your
# ifcfg files in /etc/sysconfig/network-scripts like so:
#
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# DOMAIN=lab.foo.com bar.foo.com
nameserver 10.242.197.247
nameserver 10.242.197.248

如果没有 DNS 的配置则需要添加设置,公网服务器可以设置为阿里云如下公共 DNS:

1
2
nameserver 223.5.5.5
nameserver 223.6.6.6

2、检查防火墙 iptables,查看是否有拦截 53 端口的相关规则。

可以先使用命令 service iptables stop 关闭防火墙对比测试。如果存在 iptables 规则,尝试删除 deny 策略或修改规则为 ACCEPT 策略。

3、检查是否开启 dns 缓存服务 nscd:

通过 service nscd status 命令查看服务状态。如果已经开启,尝试使用命令 service nscd stop 关闭服务后再对比测试。

1
2
service nscd status
service nscd stop