如何验证CentOS 7上配置的纯缓存DNS服务器是否正常工作?
排查CentOS 7纯缓存DNS服务器工作状态的实操步骤
兄弟,我懂你现在的状况——主DNS跑的稳稳的,纯缓存DNS配置完也启动设了开机自启,但客户端用它的时候好像出了问题。别着急,咱们一步步拆解排查,先把缓存DNS本身的问题排除,再看客户端的配置。
第一步:先确认缓存DNS服务器自身的状态
先别管客户端,先在缓存DNS机器上做本地验证:
- 检查named服务是否真的正常运行:
执行systemctl status named,看输出里有没有active (running)的绿色标识,同时留意下方的日志有没有报错(比如配置文件语法错误、端口被占用之类的)。 - 检查DNS端口是否正常监听:
执行netstat -tulpn | grep named,要确保named在监听UDP和TCP的53端口(DNS主要用UDP做查询,TCP用于区域传输和大报文查询),如果看不到53端口的监听记录,大概率是配置里的listen-on没设对,或者端口被其他程序占用了。
第二步:本地测试缓存DNS的解析能力
在缓存DNS机器上用dig工具测试,这是最直接的验证方式:
- 第一次执行
dig google.com @127.0.0.1,看输出的ANSWER SECTION有没有返回对应的IP地址,同时记一下Query time的数值(第一次查询因为要向上游DNS请求,时间会稍长)。 - 紧接着再执行一次同样的命令,如果
Query time变成0或者几毫秒,说明缓存已经生效了——这就证明你的纯缓存DNS能正常递归查询并缓存结果,本身是没问题的。
如果本地dig失败,那得回头检查/etc/named.conf的核心配置,重点看这几个关键点:
纯缓存DNS的核心配置示例(你可以对照自己的配置检查):
options { listen-on port 53 { 127.0.0.1; 你的缓存DNS服务器公网/内网IP; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; allow-query { localhost; 你的客户端所在网段/IP; }; # 必须允许客户端访问 recursion yes; # 纯缓存DNS必须开启递归,不然没法向上游查记录 dnssec-enable yes; dnssec-validation yes; pid-file "/run/named/named.pid"; };
- 确认
recursion yes;是否开启:纯缓存DNS的核心就是递归查询上游DNS,没开这个肯定没法工作。 - 确认
allow-query的范围:如果只写了localhost,那客户端根本连不上你的缓存DNS,必须把客户端的IP或者所在网段加进去。 - 检查防火墙:CentOS7默认的firewalld有没有开放DNS服务?执行
firewall-cmd --list-all,看services里有没有dns;如果没有,执行firewall-cmd --add-service=dns --permanent,再firewall-cmd --reload生效。 - 排查SELinux干扰:如果SELinux是enforcing模式,可能会阻止named的网络操作。可以临时执行
setenforce 0关闭试试,要是之后正常了,再配置对应的SELinux规则(比如setsebool -P named_write_master_zones on)。
第三步:检查客户端的配置与连通性
如果缓存DNS本地测试没问题,再看客户端这边:
- 查看
/etc/resolv.conf:确保里面只有你配置的缓存DNS IP,比如:
别留其他nameserver,避免系统优先用其他DNS导致干扰。nameserver 你的缓存DNS服务器IP - 在客户端用
dig测试:执行dig baidu.com,看输出的SERVER字段是不是你的缓存DNS IP,同时看ANSWER SECTION有没有返回结果。 - 关于ping的问题:如果ping域名时提示
unknown host,那是DNS解析失败;如果能解析出IP但ping不通,那是网络连通性的问题,和DNS没关系,得去排查路由、防火墙之类的。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

