介绍
传统DNS解析,不判断访问者来源,会随机选择其中一个 IP 地址返回给访问者。而智能 DNS 解析,会判断访问者的来源(ECS),为不同的访问者智能返回不同的 IP 地址,可使访问者在访问网站时可获取用户指定的 IP 地址,能够减少解析时延,并提升网站访问速度的功效
权威 DNS 可以根据信息做出不同响应,比如可将移动用户解析到移动节点、联通用户解析到联通节点,电信用户解析到电信节点等,当然了, EDNS 可以做到的不止按运营商分别解析。
ECS
- edns-client-subnet
在之前,它使用 DNS 解析器(LocalDNS)的 IP 地址对内容进行 DNS 查询。在特定解析器具有单一固定地理位置的时代,此模型运行良好。今天,许多流行的 DNS 解析器在地理上分散(Google DNS 和 OpenDNS 是两个很好的例子),并且特定解析器的位置不再是客户端位置的准确预测器。如果对内容的请求被路由到比需要更远的边缘位置,这可能会导致性能欠佳,因此 Google 提交了一份 DNS 扩展协议,允许 DNS resolver 传递用户的 IP 地址给 authoritative DNS server。
DNS 协议的 EDNS-Client-Subnet 扩展通过返回附加信息以响应 DNS 查询来解决此问题。该信息允许内容交付网络做出更好的决策。此扩展是作为 Faster Internet 项目的一部分开发的。
智能解析实现原理
云解析是通过识别LOCALDNS的出口 IP,来判断访问者来源
- 客户端
LOCALDNS支持EDNS
因为云解析 DNS 支持 edns-client-subnet ,所以在获取访问者来源 IP 时,优先获取 edns-client-subnet 扩展里携带的 IP ,如果 edns-client-subnet 扩展里存在 IP,云解析 DNS 会以该 IP 来判断访问者的地理位置 ;如果不存在,则以 LocalDNS 出口 IP 来判断访问者的地理位置。 - 客户端
LocalDNS不支持EDNS
LocalDNS 会迭代请求至云解析 DNS,云解析 DNS 根据访问者 LocalDNS 出口 IP 来判断访问者的地址位置,实现智能解析 - 客户端
LocalDNS变相支持EDNS
用户发起 DNS 请求,递归到 LocalDNS,则 LocalDNS 将本次请求发送到二级节点,通过二级节点向云解析 DNS 发起请求,此时云解析DNS会根据 LocalDNS二 级节点的地域位置返回具体的细分线路解析结果
查看DNS是否支持 ECS
使用o.myaddr.l.google.comTXT记录集,把Resolver-IP替换为你查询的 LocalDNS IP
dig +nocl TXT o-o.myaddr.l.google.com @Resolver-IP +short
- 如果不支持 EDNS 客户端子网扩展,则输出将与以下类似
- 国内外的机器执行可能会有
不一样的结果,可能假(有些DNS国内不支持EDNS)
[root@wiki-doc /]# dig +nocl TXT o-o.myaddr.l.google.com @223.5.5.5 +short//国内"219.128.79.148"[root@7qrdsfdses0 /]# dig +nocl TXT o-o.myaddr.l.google.com @223.5.5.5 +short//境外"47.242.82.131""edns0-client-subnet 5.181.224.0/25"
在此例中,输出表明 IP 地址为47.242.82.131的解析程序支持EDNS客户端子网扩展。客户端子网5.181.224.025信息将被发送到权威名称服务器,权威DNS通过客户端子网判断请求者的地理位置,进而应答精确的地理 IP
DNS请求传递客户端子网
- 如果您使用的是
DIG9.9.3或更高版本,则还可以使用dig命令传递客户端子网 - 第一行表示
DN解析程序的IP地址。第二行提供了edns0-client-subnet,该值已传递给权威名称服务器
[root@7qrdsfdses0 /]# dig +nocl TXT o-o.myaddr.l.google.com @8.8.8.8 +subnet=1.1.1.0/24 +short"172.253.5.4""edns0-client-subnet 1.1.1.0/24"