DNS服务器仅自身可解析内部域名,其他主机无法解析
遇到这种本地能正常解析,但局域网其他机器访问DNS服务器查不到内部域名的情况,我帮你梳理几个最可能的排查方向:
检查内部区域的查询权限配置
你用的是named(Bind)服务,默认情况下很多配置会限制只有本地主机能查询内部私有区域。打开你的DNS配置文件(通常是/etc/named.conf或者/etc/named/zones/下的区域配置文件),找到对应internal.site的zone块,看看有没有allow-query选项。如果它只设置了localhost或者127.0.0.1,那其他机器肯定查不了。建议改成允许整个局域网段访问,比如:zone "internal.site" IN { type master; file "internal.site.db"; allow-query { 127.0.0.1; 192.168.1.0/24; }; };修改后记得重启named服务生效,比如
systemctl restart named。排查服务器防火墙规则
虽然netstat显示端口在监听,但服务器上的防火墙很可能没放行DNS的流量(DNS主要用UDP协议,部分场景会用到TCP)。比如用firewalld的话,执行这两条命令开放DNS服务并生效:firewall-cmd --add-service=dns --permanent firewall-cmd --reload如果是iptables,就添加针对局域网段的放行规则:
iptables -A INPUT -p udp --dport 53 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 53 -s 192.168.1.0/24 -j ACCEPT别忘了保存iptables规则,避免重启后失效。
确认named的监听配置
再核对下named.conf里的listen-on配置,确保它包含了服务器的局域网IP(192.168.1.10),而不是只监听127.0.0.1。正常的配置应该类似:listen-on port 53 { 127.0.0.1; 192.168.1.10; };虽然你的
netstat显示已经在监听这个IP,但偶尔也会出现配置和实际监听不一致的情况,确认下更稳妥。验证客户端请求是否到达服务器
可以在DNS服务器上用tcpdump抓包,看看客户端的请求有没有过来:tcpdump udp port 53然后在客户端执行
nslookup internal.site 192.168.1.10,如果服务器端没抓到包,那问题可能出在局域网路由或者客户端的防火墙;如果抓到了但没有响应,那还是回到服务器的权限配置上排查。
备注:内容来源于stack exchange,提问作者kit

