RedHat服务器tcpdump抓包发现DNS重复域名异常求助
分析RedHat服务器上重复域名的DNS查询异常原因
这种重复追加域名后缀的DNS查询问题,我在排查RedHat服务器DNS问题时遇到过好几次——虽然暂时没影响解析,但确实得揪出根源避免后续出问题。下面从最常见的原因开始分析,给你一步步排查的思路:
1. DNS搜索域(Search Domain)配置是头号嫌疑
这是触发这类问题最常见的原因,先去检查/etc/resolv.conf里的相关配置:
- 如果
search字段重复写了目标域(比如search domainspec.com domainspec.com),DNS客户端处理查询时可能会多次追加后缀; - 另一种情况是
options ndots:n的配置,比如你设了ndots:3,而程序发起查询的my.domainspec.com只有2个点,DNS客户端会判定这是相对域名,自动追加search里的domainspec.com,就变成了my.domainspec.com.domainspec.com。要是客户端重试,甚至会出现三次后缀的情况。
2. 应用程序自身的域名构造错误
有些服务或脚本在生成查询域名时存在逻辑bug,比如字符串拼接失误:本来应该是my + .domainspec.com,结果写成了my.domainspec.com + .domainspec.com,甚至循环追加后缀。
要定位是哪个程序搞的鬼,可以这么做:
- 用
tcpdump抓包时加上端口和详细信息,找到异常查询的来源端口:tcpdump -i any port 53 -n -v | grep "domainspec.com.domainspec.com" - 用
ss命令对应到具体进程:ss -tulnp | grep <查到的来源端口> - 还可以用
strace跟踪该进程的网络调用,看它实际发起的域名是什么:strace -f -e trace=network -s 200 <进程名或PID>
3. NSSwitch配置的解析顺序影响
去看/etc/nsswitch.conf里的hosts行,比如如果配置了hosts: files dns mdns4_minimal,某些辅助解析服务(比如mdns)可能在处理域名时出现异常。不过这种情况相对少见,优先排除前面两个原因再考虑这个。
4. /etc/hosts的格式错误
虽然概率低,但如果/etc/hosts里有格式不规范的条目(比如域名后面多了空格、不小心写了重复后缀),某些依赖hosts解析的程序可能会把错误的域名传递给DNS客户端。可以检查下hosts里有没有和domainspec.com相关的异常条目。
排查步骤总结
- 优先检查
/etc/resolv.conf的search、domain和options ndots配置,这是最快能找到问题的地方; - 定位发起异常查询的进程,确认是不是应用程序的bug;
- 再依次检查
nsswitch.conf和/etc/hosts的配置。
内容的提问来源于stack exchange,提问作者fuser
相关产品推荐
相关产品推荐

