概述
本方法只针对使用阿里云解析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操作系统指令执行结果
Linux操作系统指令执行结果
获取到LocalDNS的出口IP地址后,执行 dig 域名 @vip4.alidns.com +subnet=LocalDNS出口IP地址
,看获取的结果是否符合您的预期。
这里的vip4.alidns.com
参数根据您实际的DNS服务器名称进行替换,请参考如何获知云解析DNS分配的DNS服务器。
2. 自定义线路下的解析记录不生效
当使用自定义线路时,用户会自定义解析请求来源IP地址段。但是自定义线路请填写访问终端所用LocalDNS出口IP地址段,不能填写访问终端的IP地址段。否则解析线路不会被命中,只能返回默认线路下的解析记录。
LocalDNS的出口IP往往不止一个,为了使得自定义线路更加准确,请联系所在网络的管理员,获取详细DNS出口IP地址。
如果LocalDNS的出口IP地址比较少,可以多执行几次命令获取出口IP地址:dig +short TXT whoami.ds.akahelp.net(Linux操作系统) 或者 nslookup -q=txt whoami.ds.akahelp.net(Windows操作系统)
自定义不支持IPv6的地址,若LocalDNS出口IP为IPv6地址,自定义线路不会被命中,只能返回默认线路下的解析记录。
3. 默认线路下的CNAME记录缓存导致解析调度不准
前提条件
默认线路下配置了CNAME类型解析记录;
非默认线路下配置了非CNAME类型解析记录,例如A、AAAA、TXT、MX等记录类型。
调度不准原因
当请求非默认线路下解析记录时:
如果请求的解析记录类型为A,且对应线路下设置的解析记录中有AAAA记录但没有A记录,则返回的解析记录为空,不会造成解析调度不准确的情况。
如果请求的解析记录类型为AAAA,且对应线路下设置的解析记录中有A记录但没有AAAA记录,则返回的解析记录为空,不会造成解析调度不准确的情况。
如果请求的解析记录类型为A,且对应线路下设置的解析记录中没有A和AAAA记录,只有TXT、MX等记录,则返回默认线路下CNAME类型的解析记录,并缓存在LocalDNS中。导致解析调度不准。
如果请求的解析记录类型为AAAA,且对应线路下设置的解析记录中没有A和AAAA记录,只有TXT、MX等记录,则返回默认线路下CNAME类型的解析记录,并缓存在LocalDNS中。导致解析调度不准。
如果请求的解析记录为MX、TXT等类型且对应线路下并没有配置对应类型的解析记录,则返回默认线路下CNAME类型的解析记录,并缓存在LocalDNS中。由于CNAME类型的解析记录具有最高优先级,在TTL到期时间内,即使发起了A或AAAA查询请求(非默认线路下配置了A或AAAA类型的解析记录),但域名查询请求均会被缓存命中,返回默认线路下的CNAME解析记录。造成调度不准的情况。
解决方案
将非默认线路下的A和AAAA类型的解析记录加一层CNAME记录类型的解析记录,以域名dns-example.top
为例:先将test.dns-example.top
通过A和AAAA记录类型解析到IPv4和IPv6的地址,再将 中国移动 线路下的业务域名通过CNAME记录类型解析到test.dns-example.top
。
test.dns-example.top
仅作为示例,实际配置时根据您的业务需求选择其他未配置解析记录的二级域名。务必先添加A和AAAA解析记录,再添加CNAME解析记录,否则可能会导致解析中断。
解析设置变更前:
解析设置变更后:
默认线路和非默认线路下均是CNAME记录类型,优先级一样。当请求非默认线路下解析记录为MX、TXT等类型且对应线路下并没有配置对应类型的解析记录时,则返回的解析记录为空,不会导致缓存污染。