DNS 是互聯網的基石之一,之前我在博客的 DNS 標簽下寫了不少關于權威 DNS 的文章,這次寫一篇關于遞歸 DNS(也就是公共 DNS)的文章,從公共 DNS 的必要性、利弊來講一講選擇公共 DNS 需要關注的事情,以及列舉一些當前主流的公共 DNS。
2020 年更新:新增「是否支持 TCP 查詢」;阿里公共 DNS 已支持 DoH/DoT;騰訊 Public DNS+ 開始公測 DoH、DoT
是否需要公共 DNS
在選擇公共 DNS 之前,你需要考慮一個問題:你是否真的需要公共 DNS 么?
無論我們是 PPPoE 撥號上網,還是 DHCP 連接光貓上網,互聯網服務提供商(ISP)都會下發兩個 DNS 給你。為了方便介紹,在下文中我稱這兩個 DNS 為 ISP DNS。在 DNS 的解析過程中,用戶向遞歸 DNS 發起請求,遞歸 DNS 向權威 DNS 請求解析結果,可以說遞歸 DNS 起到一種轉發的作用。運營商的 ISP DNS 就是遞歸 DNS;同時一些個人或互聯網服務提供商也會架設自己的遞歸 DNS 開放給所有人使用,稱為公共 DNS。
對于絕大部分人來說,運營商下發的 ISP DNS 應該是最準確的和最合適的,響應時間短、CDN 解析結果也會最準確。
為什么說運營商下發的 DNS 更快?請看下文「選擇公共 DNS 時應該考慮什么」章節中關于「DNS 出口」的描述。
但是運營商不是做公益的。運營商經常使用 DNS 投毒來引導用戶去使用他們的 緩存服務器,從而降低運營商帶寬負載;或者劫持解析將用戶引導去他們已經插入了廣告的鏡像站點,從而獲利;或者為了國家相關法律政策要求或者運營商自己的需求屏蔽一些網站的訪問(如遼寧聯通曾將工信部舉報站點的域名解析至 127.0.0.1);或者自行篡改 TTL(DNS 結果緩存時間)降低 DNS 的負載,結果就是解析結果不能盡快更新;或者對于不正確的域名給你返回一個滿是廣告的頁面,等等。即使運營商非常良心不使用 DNS 做壞事,也有可能因為設備沒有及時擴容或者維護不善而導致不佳的體驗。
ISP DNS 固然有這么多弊端,但是公共 DNS 也不是沒有問題。下面兩篇文章是曾就職于 CloudXNS 的 Ephen 大佬寫的關于使用公共 DNS 上網的弊端,主要圍繞公共 DNS 出口導致的 CDN 解析結果優化問題展開的。
使用公共 DNS 上網的弊端(一)
使用公共 DNS 上網的弊端(二)
如果你閱讀完上述文章后,為了追求更安全、更準確的 DNS 解析結果而決定繼續使用公共 DNS(比如和我一樣 霧),你就可以繼續閱讀下去了。
選擇公共 DNS 時應該考慮什么
公共 DNS 服務有很多,有大公司搭建的,有非盈利組織搭建的,還有個人搭建的,令人眼花繚亂。在選擇的時候我們需要考慮很多方面才能選出適合我們需求的 DNS。通常在選擇對于我們上網起非常重要作用的 DNS 時,我們需要考慮以下方面:
SLA 服務在線率。DNS 是上網沖浪事時非常重要的一個環節,DNS 的可靠性直接影響到上網的體驗;如果 DNS 宕機,那么很大一部分網站將無法訪問
響應速度 在訪問一個新的網站時,DNS 對這個網站的響應速度會直接影響到當前網站的直觀加載速度
準確性 即使不考慮 DNS 污染和投毒,DNS 對網站訪問的結果是否準確是非常重要的
EDNS 簡單地說,EDNS(正確的簡稱應該是 ECS)有助于幫助你獲取最準確的 CDN 解析結果
其它特性 一些個人搭建的 DNS 會提供一些去廣告或者特殊上網的功能
DNS 出口 通常情況下,公共 DNS 的入口和出口不同。你可以通過 dig 查看你的 DNS 出口 IP:
$digwhoami.akamai.net
DNS 出口對于 CDN 非常重要。公共 DNS 的本質上就是把你的查詢請求轉發給上游 DNS;在沒有 EDNS 的情況下,CDN 的權威 DNS 會根據公共 DNS 使用的請求 IP(也就是 DNS 出口)來判定你的運營商、你所在的位置,從而返回距離你最近的節點 IP。
所以說,理論上 ISP 給你分配的 DNS 應該是最快的、也是 CDN 友好的。本文接下來提到的 CDN 優化、CDN 友好,也是指的 DNS 出口的 IP 能否讓你訪問到最快的 CDN 節點。
受篇幅限制,本文只介紹一些大型的、有名的公共 DNS,而一些類似服務不穩定的 1.1.9.9(由牙木運營)公共 DNS 和速度慢還不遵守 RFC 規范 的 IBM Quad9 DNS、Level 3 DNS,亦或是只有單線單點部署的 360 公共 DNS、Verisign DNS,還有實際上沒什么卵用的“安全 DNS” 如諾頓 DNS 和 OneDNS,本文就不介紹了。
中國國內一些公共 DNS 服務
騰訊 DNSPod
Anycast:上海、天津、廣州、香港
DNS 出口:上述四點
TCP 查詢:不支持
DoT、DoH:支持。域名 dns.pub 和 doh.pub,同時支持 DoH 和 DoT
ECS:不完整支持
119.29.29.29119.28.28.28
這是 DNSPod 建立的公共 DNS,之后 DNSPod 被騰訊收購以后由騰訊云負責運營。騰訊 DNSPod 公共 DNS 配置了 Anycast,節點囊括了騰訊云所有可用區的節點(包括海外),所以速度還是不錯的,并且除了支持 ECS 以外還有一些關于 DNS 出口選擇優化的加成,所以 CDN 解析結果相對準確很多。但是 SLA 卻并不優秀—— 曾經 經常遭遇 DDoS 攻擊導致無法解析。除此以外,由于相對出名、使用人數較多,是運營商重點劫持的對象。
值得一提的是,DNSPod 的公共 DNS 是免費提供 HTTPDNS 的,Demo 可以看 這里
需要注意,DNSPod 的公共 DNS 不支持 cookie 查詢。如果你在使用最新版 Bind 內置的 dig 工具、通過 @119.29.29.29 查詢時,需要額外添加參數 +nocookie。
阿里云公共 DNS
Anycast:成都、深圳、杭州
DNS 出口:上述三點
TCP 查詢:不支持
DoT、DoH:均支持。除了可以直接通過 IP 使用,還可以使用域名 dns.alidns.com。
ECS:部分支持(DNS JSON API 支持 edns_client_subnet)
223.5.5.5223.6.6.6
阿里建立的公共 DNS。和騰訊一樣,阿里公共 DNS 也是搭建在自家的云服務——阿里云上。雖然也配置了 Anycast,不過不包括海外節點,國內也就浙江阿里云和深圳阿里云兩個節點, 而且華北地區都是隧道穿透回深圳,響應速度略遜于 DNSPod 提供的公共 DNS;阿里公共 DNS 不支持 ECS ,有 DNS 出口的優化 (一般都是廣東出口),。關于阿里的公共 DNS 沒有聽說太多宕機、無法使用相關的報告。但是倒是聽說阿里公共 DNS 時常有返回 NXDOMAIN 影響使用體驗。 NSDOMAIN 問題已得到一定緩解。
南京信風公共 DNS
Anycast:南京、濟南、芝加哥
DNS 出口:未測出
TCP 查詢:不支持
DoT、DoH:不支持
ECS:不支持
114.114.114.114114.114.115.115
無疑是國內最著名的公共 DNS,但是顯然不是最好的。有 Anycast,國內有南京和青島濟南兩個節點、海外有芝加哥節點,響應速度不敢恭維。國內最著名的公共 DNS、使用的人很多,SLA 非常可靠,因此也是運營商重點劫持的對象。但是考慮到南京信風為運營商旁路廣告劫持提供技術和硬件支持,對他們提供的公共 DNS 服務還是戴著有色眼鏡來看吧。
清華 TUNA 協會 666DNS
Anycast:無,僅清華大學單點。
DNS 出口:北京教育網
TCP 查詢:支持
DoT、DoH:均支持。直接通過 IP 使用,沒有綁定域名。
ECS:不支持
101.6.6.6
由清華大學 TUNA 協會運營的公共 DNS,看他們說 ECS 還在測試,并沒有上線(不過應該不會上線了);由于是為清華大學校內搭建,所以也沒有做 DNS 出口選擇之類的優化,所以只適合北方 少數運營商 教育網的用戶使用。TUNA 公共 DNS 的特點是準確(但是依然會受到 DNS 污染)、不會篡改解析、可以使用非常規端口(5353)查詢。
近期賽爾網絡對 CERNET 進行審查,要求限制 CERNET 以外的網絡向網內的 53 端口發送流量,常規 DNS 查詢已經不可用,理論上非常規端口的 DoT、DoH 不會受到影響。 另外,如果你當前使用的是高校教育網則不會受到影響,如果無法使用可以按照這里的指南申請清華大學為你所在高校院校的出口 IP 加白。
CNNIC 公共 DNS
Anycast:北京、杭州、香港
DNS 出口:CNNIC 和阿里云
TCP 查詢:不支持
DoT、DoH:不支持
ECS:不支持
1.2.4.8210.2.4.8
CNNIC 名聲并不好(CNNIC Root CA 的故事),因此有些許人相對都有些對 CNNIC 的抵觸心理。CNNIC 的公共 DNS(SDNS)國內僅雙點部署、Anycast 配得一塌糊涂、速度堪憂,解析結果沒有 CDN 優化(DNS 出口都是阿里云)。至于撇開 CNNIC 來談 SDNS 推不推薦使用?SLA 比 DNSPod 的公共 DNS 還慘,解析請求時不時超時,嗯。
百度公共 DNS
Anycast:北京、南京、深圳
DNS 出口:上述三點
DoT、DoH:不支持
TCP 查詢:不支持
ECS:不支持
180.76.76.76
百度的名聲現在怕是比 CNNIC 還要臭得多,他們的公共 DNS 于 2017 年上線,現在也不被太多人知道,不過還是簡單提兩筆:百度也為公共 DNS 也配置了 Anycast,國內是單點百度北京數據中心北京、南京、深圳三點,海外是單點百度香港數據中心。用的人少,也許不容易被運營商劫持,有興趣的可以試一試看。
國外常用 DNS 服務
你注意到沒有?國內的 DNS 幾乎沒有支持 TCP 查詢的,反而國外的 DNS 全都按照 RFC 規范支持 TCP 查詢。
Google Public DNS
Any cast:Google 的 36 個數據中心(不包括 Google Global Cache)
DNS 出口:Google 全球邊緣網絡
TCP 查詢:支持
DoT、DoH:均支持。除了可以直接通過 IP 使用,還可以使用域名 dns.google
ECS:支持(DNS JSON API 支持 edns_client_subnet)
8.8.8.88.8.4.4
最著名的公共 DNS(即使在國內也是很有名的),得益于 Google 龐大的全球網絡設施(不過 Google 公共 DNS 并未使用 Google Global Cache,并且在非洲和大洋洲也沒有節點),速度雖然不能說是最快的,但是至少不慢;支持 ECS、DoH、DoT,SLA 無限接近 100(Google 搜索引擎的 SLA 是 99.9999%),海外 CDN 都有針對 Google DNS 做優化,解析海外站點時強烈推薦。
OpenDNS
Anycast:OpenDNS 的 32 個數據中心
DNS 出口:未測出
TCP 查詢:支持
DoT、DoH:不支持
ECS:支持
208.67.222.222208.67.220.220
被 Cisco 收購的 OpenDNS 一度是世界上最快的公共 DNS——OpenDNS 在全球擁有 30 余節點并且 Anycast 配的很棒。支持 ECS 和 SLA 達到 100,而且 OpenDNS 開放非常規端口 5353 查詢和 TCP 查詢,即使從國內直接請求也不容易被污染和劫持。如果你在使用 ChinaDNS 這類工具同時又沒有專門為其準備一條加密隧道,那么直連 OpenDNS 的 5353 就是一個不錯的替代選擇。
Cloudflare DNS
Anycast:Cloudflare 的 160+ 個數據中心
DNS 出口:Cloudflare 的 160+ 個數據中心
TCP 查詢:支持
DoT、DoH:均支持,可以使用域名 one.one.one.one 也可以直接使用 IP
ECS:不支持(由于 ECS 需要基于用戶 IP 查詢,和 Cloudflare DNS 保護隱私相違背)
1.0.0.11.1.1.1
當 Cloudflare 從 APNIC 手上接過 1.0.0.0/24 和 1.1.1.0/24 并架設了公共 DNS 以后,得益于 Cloudflare 全球 160+ 數據中心(Cloudflare 擁有 185+ 數據中心,但其公共 DNS 并沒有部署在百度云加速的節點上)、BGP Anycast 和 Cloudflare Argo 等技術,成功超越 OpenDNS 成為了世界上最快的公共 DNS(數據來自 DNSPerf),還支持 DoT、DoH 等常見加密解析方案。由于其隱私政策,Cloudflare 公共 DNS 不記錄用戶 IP,意味著無法使用 ECS 等技術,不過仗著節點數量眾多、DNS 出口覆蓋全球各大區域,也適合作為主力 DNS。
Freenom World
Anycast:是
DNS 出口:Freenom 的 Transit 的 IP
TCP 查詢:支持
DoT、DoH:不支持
ECS:支持
80.80.80.8080.80.81.81
注冊過后綴如 .cf .ga .ml 的免費域名的,對 Freenom 這個名字一定不會陌生。這家荷蘭域名注冊商借助自己旗下的云服務資源也運營了一家公共 DNS 服務,賣點是隱私和安全。支持 ECS,測到的 DNS 出口都是落地 IP。部署了 Anycast 但是節點不多,響應速度并不算拔尖。Freenom 的公共 DNS 的一個特點其實是電信走 163 去 HK,聯通移動走 IIJ 去 JP,因此如果你所在的地區和 ISP 對國外遞歸 DNS 的污染并不嚴重的話可以嘗試使用 Freenom 的 DNS。
DNS.sb
Anycast:是
DNS 出口:SB Network 的上游的 IP
TCP 查詢:支持
DoT、DoH:支持,可以使用 IP 或 dns.sb 域名
ECS:不支持
185.222.222.222185.184.222.222
和 Cloudflare 一樣支持主流的 DoT、DoH 等加密 DNS 解析。啟用了 Anycast,節點可能沒有 Cloudflare 那么多,不過還是覆蓋了大部分地區。
公共 DNS 最佳實踐
綜上所述,如果你需要選擇公共 DNS 的話同時需要獲得盡可能友好的 CDN 解析結果,解析國內站點推薦使用阿里 DNS 和騰訊 DNSPod(注重穩定請用前者、注重準確請用后者);解析海外網站推薦主 DNS 1.0.0.1 或 208.67.222.222,備 DNS 8.8.8.8 或 8.8.4.4。
審核編輯:劉清
-
互聯網
+關注
關注
54文章
11148瀏覽量
103237 -
服務器
+關注
關注
12文章
9123瀏覽量
85329 -
DNS
+關注
關注
0文章
218瀏覽量
19828
原文標題:如何選擇適合的公共 DNS
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論