部分域名返回servfailed(案例)
问题:
部分异常域名如:
gs-loc.apple.com
ios.synacast.com
stream16.qqmusic.qq.com 系列
19-courier.push.apple.com系列
如上图,这些域名应答失败率接近100% ,在终端nslookup 也无结果。但是在后台递归服务器上,dig与nslookup均正常。
说明及处理方法:
客户端域名应答失败,实际上是客户端收到了servfailed应答,没有收到正常应答。
局方协助我们进行客户端抓包也证实了这个结果。
而且这个应答失败主要为缓存返回,局方管理员将其中一个域名gs-loc.apple.com 添加为不缓存域名中后,该域名可以正常解析,不返回失败。
通过查询缓存状态,发现这些故障域名缓存内容都是servfailed。没有能够缓存正常内容。
故障初步处理
初步分析判断确认该故障为域名缓存刷新有问题。这些故障域名只能缓存servfailed应答,而不能缓存正常应答。
于是临时关闭了缓存系统对于servfailed应答的缓存。
关闭servfailed应答的缓存后,等于不缓存这些故障域名,这些故障域名的请求都是穿透缓存,由后台递归服务器应答。
经过处理后,这些域名能够正常应答,不再返回servfailed。
故障定位
经过局方人员配合进行现网抓包测试及公司内部测试,我们查明是采集机网卡驱动问题。
现网采集机网卡驱动针对DNS进行了优化,对小于512字节的DNS报文进行优化高速处理,但是对于超过512字节的DNS报文处理算法有问题,会出现无法正常缓存的情况,但是可以正常透传。
现网出现应答错误的几个域名都是正常应答内容超过512字节的情况,因此系统无法正常缓存。
而且原来系统打开了域名servfailed缓存,因此这些域名正常应答无法缓存(超过512字节),但是如果偶尔出现servfailed应答,反而被缓存(因为servfailed应答报文小)。
后来关闭servfailed缓存后,这些域名虽然无法缓存,但是能够正常透传,就不会出错了。
故障解决
通过采集机驱动程序的更新,可以解决这个问题。
每台采集机驱动程序更新时,需要先旁路采集机,然后更新驱动程序,重启服务器,再重新串接,整个过程在5分钟左右。
目前已经更新驱动解决该问题。