您好,登錄后才能下訂單哦!
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
一個成功的響應
{ "Status": 0, // DNS status. standard DNS response code "TC": false, // Whether response is truncated "RD": true, // Always true for Google Public DNS "RA": true, // Always true to Google Public DNS "AD": false, // Whether all data in response has been cryptographically verified "CD": false, // Whether the client asked to disable DNSSEC "Question": [ { "name": "taobao.com.", // FQDN with training dot. "type": 1 // Standard DNS RR type } ], "Answer": [ { "name": "taobao.com.", // Must match name in question "type": 1, // Standard DNS RR type "TTL": 20, // In seconds "data": "110.75.115.70"http:// IP address in text }, { "name": "taobao.com.", "type": 1, "TTL": 20, "data": "140.205.220.96" } ], "Additional": [], "edns_client_subnet": "119.29.29.29/0" // IP address with network mask }
如果請求失敗則會返回診斷信息
{ "Status": 2, "TC": false, "RD": true, "RA": true, "AD": false, "CD": false, "Question": [ { "name": "dnssec-failed.org.", "type": 1 } ], "Additional": [], "edns_client_subnet": "119.29.29.29/0", "Comment": "DNSSEC validation failure. Please check http://dnsviz.net/d/dnssec-failed.org/dnssec/." }
雖然HTTP不存在截斷的問題,但是權威服務器返回的響應可能會是截斷的,所以需要TC字段來標記。另外,由于HTTP消息沒有大小限制,所以這里的EDNS實現和普通的EDNS實現機制不同,在請求里是一個參數,在響應里是一個字段。
該服務尚處于Beta階段,參數和返回的JSON格式可能會發生改變,但是以Google做事的風格,應該會提供向后兼容的平滑升級方法。
想要嘗試的朋友請移步:https://dns.google.com。墻內的同學請自備×××,話說墻內訪問谷歌的DNS都難,估計這個服務在國內又是不可用狀態。
命令行解析方法:
$ curl 'https://dns.google.com/resolve?name=www.126.com' {"Status": 0,"TC": false,"RD": true,"RA": true,"AD": false,"CD": false,"Question":[ {"name": "www.126.com.","type": 1}],"Answer":[ {"name": "www.126.com.","type": 5,"TTL": 11215,"data": "mcache.mail.163.com."},{"name": "mcache.mail.163.com.","type": 5,"TTL": 16975,"data": "email.163.com.lxdns.com."},{"name": "email.163.com.lxdns.com.","type": 1,"TTL": 116,"data": "176.34.63.150"}]}
目前該功能還處于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污染
。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。