CoreDNS是用Go开发的,可以配置多种插件来扩展其功能,非常灵活高效,它是Kubernetes的默认DNS服务器。笔者的平台采用CoreDNS来作单独的高并发域名解析服务器,在禁用ipv6解析后应用侧遇到反馈信息识别问题,本例全网独家提供了修改反馈信息的解决方法。
一、问题背景
CoreDNS在非双栈环境中为提升效率,最佳实践是禁用ipv6的DNS解析,方法是启用template插件,给所有IPV6的AAAA请求立即返回一个空结果的应答,避免请求forward到上游DNS。这是客户端会出现ipv6解析不成功,降级到ipv4的A解析。
template插件默认是在coredns启用的,只需要在配置文件中添加如下配置即可:
template ANY AAAA {
rcode NXDOMAIN
}
笔者的平台配置以后,性能得到极大提升,但某应用客户端说存在问题,称跟踪DNS解析包结果如下:
应答报文中的所询域名的ipv6应答码是:“No such name (3)”,非其期望值“No error (0)”,导致应用响应有问题。
二、问题分析及解决措施
从系统运行逻辑上来说,我既然不提供ipv6域名解析,你请求域名的ipv6地址,我反馈“No such name (3)”,结果非常ok呀。
但客户程序够严谨不怕麻烦,还去解析应答码