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