全网独家:修改CoreDNS禁用ipv6解析后的查询反馈信息

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呀。

但客户程序够严谨不怕麻烦,还去解析应答码,然后卡在那里了,如果DNS不改应答码,就需要应用侧改代码,然后还涉及大量客户端设备更新固件,也挺麻烦的。还是想办法试试能不能改改反馈信息吧。

首先测试一下当前反馈情况:

# nslookup -timeout=2 abc.test.com 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   abc.test.com
Address: 192.168.3.140
** server can't find abc.test.com: NXDOMAIN

目前全网给出的CoreDNS的ipv6禁用优化,均是以上配置,查了半天也没有什么有效办法。请教文心一言和ChatGPT,像哄小姑娘一样换了N多种问法,终于问到了以下内容:

CoreDNS 是一个灵活的 DNS 服务器,其主要作用是将域名解析为 IP 地址,以便服务之间进行通信。 CoreDNS 有许多错误类型,常见的如下:

  1. SERVFAIL - DNS 服务器无法响应查询时,将返回 SERVFAIL 错误。

  2. NXDOMAIN - 如果域名不存在,则返回 NXDOMAIN 错误。

  3. NOERROR - 如果查询成功,则返回此错误。

  4. REFUSED - 如果服务器拒绝查询,则返回此错误。

好吧,看到“NXDOMAIN”错误了,现在就是需要当查询ipv6域名不解析时,仍返回查询成功,那就改成“NOERROR”了,让ipv6域名虽不解析,但仍反馈查询成功。

尝试将coredns相关配置修改如下:

    template ANY AAAA {
        rcode NOERROR
    }

重启服务,验证结果:

# nslookup -timeout=2 abc.test.com 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   abc.test.com
Address: 192.168.3.140

业务侧抓包验证:

 客户端反馈问题已经解决。

猜你喜欢

转载自blog.csdn.net/forestqq/article/details/131643409