2016.4.1日,google正式啟用了 dns-over-https 域名安全查詢服務
傳統的dns請求和響應基本上還是基于明文的udp(絕大多數使用udp)或tcp傳輸,非常容易被劫持,尤其是最終使用者和本地dns(i.e營運商的recursive resolver)解析之間這段,相比從本地dns解析到權威域名服務之間的安全性要差很多。雖然已經有很多技術手段嘗試通過驗證和加密來增強最終使用者到本地dns解析之間的安全性,但是沒有一項是被廣泛部署應用的。
要真正解決dns的劫持問題要靠全面部署dnssec,但是統計顯示全球dns流量隻有不到14%是啟用了dnssec保護的。為了在這個過渡階段提供更好的安全和隐私保護,google在2016年4月1日(估計是故意選在這個時間點)推出了dns over https查詢服務作為dnssec的有力補充,提供dns請求的端到端驗證。
google的dns over https使用起來很簡單,提供的是基于http get請求的查詢方式,傳回結果是json格式,可以很容易的被各種開發工具內建(python/php/javascript 等)。
該服務支援以下參數:
name
唯一的一個必選string參數,就是你要查詢的域名位址。長度在1-255,字元在[0-9a-za-z-.],不支援非ascii字元。
type
可選string, 預設是1。rr type可以用[1, 65535]之間的數字表示,或者canonical string表示(a, aaaa等)。目前支援:a, aaaa,cname, mx,any,ptr
cd
布爾型,預設是false。cd(checking disabled)字段,設定為true時禁用dnssec validation。可用格式:cd, cd=0, cd=1, cd=false, cd=true
edns_client_subnet
可選string,預設為空。這個是edns0-client-subnet選項。格式是:ip/mask。比如:1.2.3.4/24,2001:700:300::/48。
反向域名的解析,以查詢taobao.com為例,反向解析可以查詢:110.75.115.70或者70.115.75.110.in-addr.arpa
google的public dns一般會發送經過粗略anonymize的網絡掩碼到權威域名伺服器,進而能夠得到根據客戶ip确定的最優伺服器ip。
google的考慮非常周到,如果你出于隐私原因使用dns over https,不想讓你的任何網絡資訊發送到權威域名伺服器,可以設定edns_client_subnet=0.0.0.0/0。(真是良心服務啊!)
dns響應格式為json
一個成功的響應
如果請求失敗則會傳回診斷資訊
雖然http不存在截斷的問題,但是權威伺服器傳回的響應可能會是截斷的,是以需要tc字段來标記。另外,由于http消息沒有大小限制,是以這裡的edns實作和普通的edns實作機制不同,在請求裡是一個參數,在響應裡是一個字段。
該服務尚處于beta階段,參數和傳回的json格式可能會發生改變,但是以google做事的風格,應該會提供向後相容的平滑更新方法。
想要嘗試的朋友請移步:https://dns.google.com。牆内的同學請自備×××,話說牆内通路谷歌的dns都難,估計這個服務在國内又是不可用狀态。
指令行解析方法:
目前該功能還處于beta階段
https://developers.google.com/speed/public-dns/docs/dns-over-https google developer說明頁面
有同學會說,國内不少公司都已經有類似的産品了:
騰訊有httpdns,是作為一個能夠更好的排程自家流量的工具,僅僅用來解析自家域名的,基于http,不是作為一個公共服務提供給使用者使用的。
dnspod提供dns over http,叫做d+。功能簡陋(基于http,不支援edns)不說,想要加密功能居然還要收錢!要是國内dns.google.com通路的了,此dns over https一出,dnspod的d+立馬就被拍死了。
google的dns over https為使用者免費提供:
高可用的查詢
支援edns選項
使用者隐私保護
支援dnssec validation
支援常見的record types
可作為一個調試工具,傳回查詢失敗原因
服務雖好,但是也有一點不足,就是不支援批量域名,希望将來可以支援。不過支援批量域名查詢需要支援post請求方式,因為url的長度限制問題。
備注
前面提到全球dns請求隻有不到14%是啟用了dnssec,是通過下面的統計網站查詢的。
http://stats.labs.apnic.net
該網站不僅可以查詢dnssec的流量,還能查詢google public dns的流量,目前google public dns流量占全球dns查詢總量的12+%!
之前也有過一種方法實作dns解析加密,參見我的另一篇文章:
http://professor.blog.51cto.com/996189/1601753 bind + dnscrypt 實作安全加密轉發,避免dns污染
。