Ubuntu 22 二级DNS服务器某域名TXT记录查询超时问题排查建议求助
遇到这种针对性的故障确实挺闹心的,我结合经验给你整理几个排查方向,你可以逐步验证:
先确认二级DNS的区域数据是否完整:
首先在你的Ubuntu 22二级服务器上,直接查询本地的TXT记录,用命令:dig @localhost your-problem-domain.com TXT(把your-problem-domain.com替换成出问题的域名)。如果没有返回任何TXT记录,说明区域传输可能没同步到这条记录。这时候可以:- 检查主DNS的配置,确认它允许二级服务器拉取该域名的所有记录类型(包括TXT);
- 在二级服务器上手动触发区域重载,比如用Bind的话执行
rndc reload your-problem-domain.com; - 查看Bind的日志(默认在
/var/log/syslog里),搜索该域名的传输日志,看有没有报错信息。
排查TCP/UDP端口限制:
TXT记录有时候会因为内容过长,超过UDP默认的512字节限制,这时候DNS查询会自动切换到TCP协议。如果你的二级服务器没开放TCP 53端口,就会出现超时。可以:- 用
nc -zv <你的二级服务器IP> 53测试TCP 53端口是否可访问; - 检查Ubuntu的防火墙规则,比如执行
ufw status,确认TCP 53端口是允许入站的;如果用iptables的话,查看规则里有没有放行TCP 53的条目。
- 用
检查DNS服务器的配置限制:
如果用的是Bind,打开/etc/bind/named.conf.local或者对应域名的zone配置文件,看看有没有设置allow-query、blackhole之类的规则,是不是不小心限制了TXT记录的查询?另外,有没有启用DNS过滤相关的模块,刚好拦截了这个域名的TXT记录?抓包分析故障细节:
这是定位问题最直接的方法,在二级服务器上执行tcpdump -i any port 53 and host your-problem-domain.com,然后发起TXT查询,观察数据包:- 看看服务器有没有向主DNS发送查询请求;
- 有没有收到主DNS的响应数据包;
- 如果收到了响应,服务器有没有把结果返回给客户端。通过这些细节能快速定位是请求没发出去、响应没收到还是本地处理出了问题。
清空DNS缓存重试:
有时候缓存里的异常记录会导致问题,尝试清空该域名的缓存,Bind的话执行rndc flush your-problem-domain.com,之后再重新查询TXT记录试试。对比主DNS和二级DNS的TXT记录格式:
在主DNS上执行dig @<主DNSIP> your-problem-domain.com TXT,把返回的记录和二级服务器本地的区域文件(默认在/var/cache/bind/目录下)里的内容对比,看看是不是主DNS的TXT记录有特殊格式(比如超长字符串、多段记录),导致二级服务器解析异常。
备注:内容来源于stack exchange,提问作者James McGrady

