首先,咱们为何关心一个域名在某个地方的真实解析ip?当咱们使用dns 后,域名解析的结果,对于网站方是不可控的,做为cdn 的用户,怎么知道本身网站在某个省的真实质量?若是不知道真实质量,怎么调用新的节点去覆盖?bash
其次,咱们怎么去获取某个域名解析,在某个省或者市的真实质量?当使用融合cdn的时候,域名出现跨运营商,跨省解析,都是颇有可能的。服务器
第一点是作域名监控的意义,第二点咱们该如何去实现,实现的关键就是edns 协议。网站
咱们怎样作一个域名的全网真是ip查询呢?回顾下,咱们上网的通常流程(图片网上搜的)code
通常不设置dns server 的话,咱们使用的localdns 都是isp dns 。当咱们发出请求的时候,全部向baidu.com 所在权威服务器发出的请求,都是isp dns 服务器 所在ip 查对应view 解析的结果。cdn
说到这,关键的点就出来了,咱们可以模拟isp dns 发送请求给权威服务器,或者说,我能把ip 信息传导到权威服务器,权威服务器能根据这个ip 匹配出对应view ,将解析结果返回,这个问题就能够解决。这个能作吗?能作,用edns 协议就能够。server
edns 网上有不少简介了,原理就是扩充协议,附带ip 信息。能够从新编译bind 附带subnet 去抓包查看协议的每一个字段:dns
dig -t A www.alibaba.com @202.119.160.11 ; <<>> DiG 9.10.3-P4-Ubuntu <<>> -t A www.alibaba.com @202.119.160.11 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18762 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.alibaba.com. IN A ;; ANSWER SECTION:zhiwei www.alibaba.com. 300 IN CNAME www-cn.gds.alibaba.com. www-cn.gds.alibaba.com. 120 IN A 106.11.62.61 ;; AUTHORITY SECTION: gds.alibaba.com. 6460 IN NS gdsns1.alibaba.com. gds.alibaba.com. 6460 IN NS gdsns2.alibaba.com. ;; Query time: 34 msec ;; SERVER: 202.119.160.11#53(202.119.160.11) ;; WHEN: Sun Jul 24 22:08:59 CST 2017 ;; MSG SIZE rcvd: 127
使用edns 后,就能透传ip信息了,那咱们怎么去监测全网域名的质量?权威服务器都支持edns ?若是权威服务器不支持edns ,如何作?若是权威服务器支持edns,咱们直接向权威发请求?若是向localdns 发送请求edns 请求,哪些支持,哪些不支持?若是localdns 支持,可是权威不支持,又会是什么状况?而后,目前支持edns 的localdns 有哪些?图片
总结下,直接向权威发edns 作监控是不合适的,加大了权威的负担。通常会向localdns 发请求,目前,支持比较好的是dnspod 和 谷歌的localdns, 114不稳定,百度的也有点问题。而后,dnspod 和 谷歌的localdns 都会透传 edns 请求,若是权威并不支持,那这个请求就不会获取到解析结果。ip
说到这,基本就知道该若是实现了,全国每一个省每一个运营商的网段选出几个ip,分别构造edns 请求,就能够获得真实的解析地址,最后经过 httptrace 或者ping 就能够获取想要的指标。cmd