DNS超时问题排查

背景

今天通过kibana查看错误日志时发现有域名解析超时情况,不应该啊,明明已经启用了dnsmasq,并且服务调用量也不大,为啥会报错呢?继续观察发现服务只有这一台机器存在域名解析超时,其他机器都没问题。紧接着使用tcpdump抓包机器的dnsmasq也是工作正常没发现什么问题,对比下这台机器的的resolv.conf文件与正常机器的resov.conf

问题机器

1
2
nameserver 127.0.0.1
options timeout:1 attempts:1 rotate

正常机器

1
2
3
4
nameserver 127.0.0.1
nameserver x.x.x.x
nameserver x.x.x.x
options timeout:1 attempts:1 rotate

剖析

相比下问题机器resolv配置少了几个nameserver,直觉告诉我们问题就出在这里,那么为什么只有一个dnsserver会引发超时呢?先说说resolv.conf的dns的配置

1
2
3
4
5
nameserver 域名解析服务器地址
options
timeout 域名解析超时时间 默认5
attempts 所有dns服务器都查询一遍的次数 (默认为2,如果有三个nameserver,attempts 1表示依次查询nameserver 1,nameserver2,nameserver3整个一遍)
rotate 从多个dns服务器中轮训查询,dns负载均衡,有助于缓解第一个dns服务器压力 (默认选取第一个服务器进行解析)

由此我们明白了,正常机器会在轮训server1,server2,server3,等于最大可以查询3次。问题机器由于只配置了一个nameserver,所以只查询一次。
找到了问题我们增加域名解析重试次数即可,对于问题机器将attempts调整为3后问题解决

小插曲

在修改/etc/resolv.conf时报错无写权限,然后chmod 744 resolv.conf报错chmod: changing permissions of /etc/resolv.conf': Operation not permitted
可当前我使用的已经是root用户,依旧没有修改权限,为什么?
网上查询资料后发现原来是文件权限有猫腻

1
2
3
4
5
6
7
8
9
10
# 查看文件属性
$ lsattr resolv.conf
----i--------e- # i表示文件不能修改, 删除, 不能被设置链接关系
# attr权限是一种非常特殊的权限,它设置的属性对超级用户root也有效。只不过,它设置的属性也可以通过root来删除
# 修改文件属性
$ chattr -i resolv.conf # +增加 -去除 =设置
# 成功修改为可写
$ chmod 744 resolv.conf

参考

Linux下域名解析的优化