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