首先,咱們爲何關心一個域名在某個地方的真實解析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