智能解析调度不准问题

概述

本方法只针对使用阿里云解析DNS产品的域名,若您的域名托管在其他厂商的DNS服务器上,请联系您的DNS服务器厂商处理。使用阿里云解析DNS服务器的域名,如果您设置的智能解析线路出现调度不准的情况,可以参考如下内容进行排查。

说明

如果您不知道当前域名是否使用了阿里云解析DNS服务器,请参考如何获知云解析DNS分配的DNS服务器

1. 查看LocalDNS的出口IP

云解析DNS的智能解析调度是依据手机、PC、IoT等访问终端所用的LocalDNS出口IP地址进行调度的,而非访问终端的IP地址。可以参考如下方案获取终端所用LocalDNS的出口IP:

  • 联系所在网络的管理员,获取详细的DNS出口IP地址。

  • 多执行几次命令获取IP地址 dig +short TXT whoami.ds.akahelp.net(Linux操作系统) 或者 nslookup -q=txt whoami.ds.akahelp.net(Windows操作系统)。

重要

使用命令拨测时,可能会获取到如下几个参数:

$ dig +short TXT whoami.ds.akahelp.net ok at 11:20:47#Linux操作系统执行命令。
"ns" "123.126.xx.xx" #ns是本地机器使用的DNS出口IP地址,可能是IPv4或IPv6。
"ecs" "120.52.xx.xx/32/24" #ecs(EDNS-client-subnet)记录是查询请求中携带的客户端子网。
"ip" "123.126.xx.xx" #ip记录由权威名称服务器从ecs中选择的客户端代表IP地址,LocalDNS为了保护用户隐私不携带客户端真实IP。

Windows操作系统指令执行结果

image.png

Linux操作系统指令执行结果

1702299255277_3F96CC19-CDDD-46f7-9ABD-206397980758.png

获取到LocalDNS的出口IP地址后,执行 dig 域名 @vip4.alidns.com +subnet=LocalDNS出口IP地址,看获取的结果是否符合您的预期。

说明

这里的vip4.alidns.com参数根据您实际的DNS服务器名称进行替换,请参考如何获知云解析DNS分配的DNS服务器

2. 自定义线路下的解析记录不生效

当使用自定义线路时,用户会自定义解析请求来源IP地址段。但是自定义线路请填写访问终端所用LocalDNS出口IP地址段,不能填写访问终端的IP地址段。否则解析线路不会被命中,只能返回默认线路下的解析记录。

重要
  1. LocalDNS的出口IP往往不止一个,为了使得自定义线路更加准确,请联系所在网络的管理员,获取详细DNS出口IP地址。

  2. 如果LocalDNS的出口IP地址比较少,可以多执行几次命令获取出口IP地址:dig +short TXT whoami.ds.akahelp.net(Linux操作系统) 或者 nslookup -q=txt whoami.ds.akahelp.net(Windows操作系统)

  3. 自定义不支持IPv6的地址,若LocalDNS出口IPIPv6地址,自定义线路不会被命中,只能返回默认线路下的解析记录。

3. 默认线路下的CNAME记录缓存导致解析调度不准

前提条件

  1. 默认线路下配置了CNAME类型解析记录;

  2. 非默认线路下配置了非CNAME类型解析记录,例如A、AAAA、TXT、MX等记录类型。

调度不准原因

当请求非默认线路下解析记录时:

  1. 如果请求的解析记录类型为A,且对应线路下设置的解析记录中有AAAA记录但没有A记录,则返回的解析记录为空,不会造成解析调度不准确的情况。

  2. 如果请求的解析记录类型为AAAA,且对应线路下设置的解析记录中有A记录但没有AAAA记录,则返回的解析记录为空,不会造成解析调度不准确的情况。

  3. 如果请求的解析记录类型为A,且对应线路下设置的解析记录中没有AAAAA记录,只有TXT、MX等记录,则返回默认线路下CNAME类型的解析记录,并缓存在LocalDNS中。导致解析调度不准。

  4. 如果请求的解析记录类型为AAAA,且对应线路下设置的解析记录中没有AAAAA记录,只有TXT、MX等记录,则返回默认线路下CNAME类型的解析记录,并缓存在LocalDNS中。导致解析调度不准。

  5. 如果请求的解析记录为MX、TXT等类型且对应线路下并没有配置对应类型的解析记录,则返回默认线路下CNAME类型的解析记录,并缓存在LocalDNS中。由于CNAME类型的解析记录具有最高优先级,在TTL到期时间内,即使发起了AAAAA查询请求(非默认线路下配置了AAAAA类型的解析记录),但域名查询请求均会被缓存命中,返回默认线路下的CNAME解析记录。造成调度不准的情况。

解决方案

将非默认线路下的AAAAA类型的解析记录加一层CNAME记录类型的解析记录,以域名dns-example.top为例:先将test.dns-example.top通过AAAAA记录类型解析到IPv4IPv6的地址,再将 中国移动 线路下的业务域名通过CNAME记录类型解析到test.dns-example.top

重要
  1. test.dns-example.top仅作为示例,实际配置时根据您的业务需求选择其他未配置解析记录的二级域名。

  2. 务必先添加AAAAA解析记录,再添加CNAME解析记录,否则可能会导致解析中断。

解析设置变更前:

image.png

解析设置变更后:

image.png

默认线路和非默认线路下均是CNAME记录类型,优先级一样。当请求非默认线路下解析记录为MX、TXT等类型且对应线路下并没有配置对应类型的解析记录时,则返回的解析记录为空,不会导致缓存污染。