智能DNS解析之edns-client-subnet篇
摘要:智能DNS解析是CDN的重要組成部份,所謂的智能也就是根據(jù)請求用戶來對同一域名作出相應(yīng)不同解析(目前大多數(shù)域名注冊商還沒提供線路解析的服務(wù)),所以CDN的調(diào)度準確性也就完全依靠DNS智能解析,但于由DNS是互聯(lián)網(wǎng)上較早設(shè)計的協(xié)議但沒有考慮到今天網(wǎng)絡(luò)的情況于應(yīng)用。
一、前言
智能DNS解析是CDN的重要組成部份,所謂的智能也就是根據(jù)請求用戶來對同一域名作出相應(yīng)不同解析(目前大多數(shù)域名注冊商還沒提供線路解析的服務(wù)),所以CDN的調(diào)度準確性也就完全依靠DNS智能解析,但于由DNS是互聯(lián)網(wǎng)上較早設(shè)計的協(xié)議但沒有考慮到今天網(wǎng)絡(luò)的情況于應(yīng)用。讓我們簡單的來看看傳統(tǒng)DNS的工作方式——
在整個解析過程中。公共DNS代替用戶向根,頂級域,權(quán)威DNS去查詢結(jié)果并把結(jié)果返回給用戶,被查詢的權(quán)威DNS服務(wù)器是無法知道具體是哪個用戶來查詢,這也是問題所在,既然無法獲得用戶IP又如何能精準調(diào)度吶?google提交了一份DNS擴展協(xié)議,允許DNS resolver傳遞用戶的ip地址給authoritative DNS server。
二、協(xié)議
DNS query會包含header和RR兩個部分
TYPE=41 為EDNS擴展內(nèi)容
OPTION-CODE: 2個字節(jié)(在RFC里最新定義是 0×0008, 老板本為0x50fa)
OPTION-LENGTH: 2個字節(jié),描述它之后的內(nèi)容長度(BYTE)
FAMILY: 2個字節(jié),1表示ipv4, 2表示ipv6
ADDRESS: 實際存放IP地址的地方,ipv4長度為4
三、測試
目前BIND不能支持EDNS需要打補丁后才能發(fā)送EDNS的查詢包,請先下載edns-client-subnet dig patch并安裝進BIND中。
1. 先將測試域名做多線路的域名解析
分別為edns.dns.com做了兩條DNS智能解析,分別來自上海電信的用戶解析到3.3.3.3,北京電信的用戶解析到2.2.2.2,其它的都解析到1.1.1.1。
2. 使用打過edns-client-subnet patch的DIG來查詢
當client為180.149.128.1(上海電信IP)時可以正確返回對應(yīng)的線路解析。
當client為58.32.1.1(北京電信IP)時也可以正確返回對應(yīng)的線路解析。
四、總結(jié)
經(jīng)上測試使用edns-client-subnet可以解決當前CDN不能精準高度的痛點。但也可以看到真正要支持EDNS0還需要中間各個環(huán)節(jié)的給力。
1. 首先權(quán)威DNS要有智能解析的能力,一份精準的IP庫;
2. 權(quán)威要支持EDNS0的格式并且正確取出客戶端IP;
3. 公共DNS需要將客戶端IP信息打包成EDNS0的格式發(fā)送查詢。
參考文檔
https://tools.ietf.org/html/draft-ietf-dnsop-edns-client-subnet-08
RFC2671中還包含了很多EDNS0實現(xiàn)時請求方和響應(yīng)方注意的事項,以及EDNS0帶來的問題。
總結(jié)
以上是生活随笔為你收集整理的智能DNS解析之edns-client-subnet篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UltraGrid的Row,通过Bind
- 下一篇: 人寿车险电子保单怎么查询