仙姑本咕

Hexg's Blog

没有理想的人不伤心

公共 DNS 選擇指南

本文基於 CC BY-NC-SA 4.0 由 Sukka 的《如何選擇適合的公共 DNS? [2020] 》 修改而來
去除了部分的公共 DNS 評測內容,僅保留了推薦的公共 DNS ,同時對部分 DNS 的信息進行了完善

選擇公共 DNS 時應該考慮什麼#

公共 DNS 服務有很多,有大公司搭建的,有非盈利組織搭建的,還有個人搭建的,令人眼花繚亂。在選擇的時候我們需要考慮很多方面才能選出適合我們需求的 DNS。通常在選擇對我們上網起非常重要作用的 DNS 時,我們需要考慮以下方面:

  • SLA 服務在線率。DNS 是上網衝浪時非常重要的一個環節,DNS 的可靠性直接影響到上網的體驗;如果 DNS 當機,那麼很大一部分網站將無法訪問
  • 響應速度 在訪問一個新網站時,DNS 對這個網站的響應速度會直接影響到當前網站的直觀加載速度
  • 準確性 即使不考慮 DNS 汙染和投毒,DNS 對網站訪問的結果是否準確是非常重要的
  • EDNS 簡單地說,EDNS(正確的簡稱應該是 ECS)有助於幫助你獲取最準確的 CDN 解析結果
  • 其它特性 一些個人搭建的 DNS 會提供一些去廣告或者愛國上網的功能
  • DNS 出口 通常情況下,公共 DNS 的入口和出口不同。你可以通過 dig 查看你的 DNS 出口 IP: $ dig whoami.akamai.net

DNS 出口對於 CDN 非常重要。公共 DNS 的本質上就是把你的查詢請求轉發給上游 DNS;在沒有 EDNS 的情況下,CDN 的權威 DNS 會根據公共 DNS 使用的請求 IP(也就是 DNS 出口)來判定你的運營商、你所在的位置,從而返回距離你最近的節點 IP。 所以說,理論上 ISP 給你分配的 DNS 應該是最快的、也是 CDN 友好的。本文接下來提到的 CDN 優化、CDN 友好,也是指的 DNS 出口的 IP 能否讓你訪問到最快的 CDN 節點。

中國大陸推薦使用的一些公共 DNS 服務#

騰訊 DNSPod#

  • Anycast:深圳、上海、天津、中國香港和北美
  • DNS 出口: 84 條
  • TCP 查詢:不支持
  • DoT、DoH:支持。域名 dns.pub 和 doh.pub,同時支持 DoH 和 DoT
  • ECS:不完整支持
協議
IPv4119.29.29.29119.28.28.28
IPv62402:4e00::2402:4e00:1::
DoHhttps://doh.pub/dns-queryhttps://dot.pub/dns-query
DoH (IP)https://1.12.12.12/dns-queryhttps://1.12.12.12/dns-query
DoH (國密)https://sm2.doh.pub/dns-query
DoTdot.pubdoh.pub
DoT (IP)1.12.12.121.12.12.12

這是 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)
協議
IPv4223.5.5.5223.6.6.6
IPv62400:3200::12400:3200:baba::1
DoHhttps://dns.alidns.com/dns-query
DoH (IP)https://223.5.5.5/dns-queryhttps://223.6.6.6/dns-query
DoTdns.alidns.com
DoT (IP)223.5.5.5223.6.6.6

阿里建立的公共 DNS。和騰訊一樣,阿里公共 DNS 也是搭建在自家的雲服務 —— 阿里雲上。阿里公共 DNS 不支持 ECS ,有 DNS 出口的優化 。關於阿里的公共 DNS 沒有聽說太多當機、無法使用相關的報告。

海外地區推薦使用的一些公共 DNS 服務#

OpenDNS#

  • Anycast:OpenDNS 的 32 個數據中心
  • DNS 出口:未測出
  • TCP 查詢:支持
  • DoT、DoH:支持
  • ECS:支持
協議
IPv4208.67.222.222208.67.220.220
IPv62620:119:35::352620:119:53::53
DoHhttps://doh.opendns.com/dns-queryhttps://doh.familyshield.opendns.com/dns-query
DoTdns.opendns.com

被 Disco 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 保護隱私相違背)
協議
IPv41.0.0.11.1.1.1
IPv62606:4700:4700::11112606:4700:4700::1001
DoHhttps://cloudflare-dns.com/dns-query
DoH (IP)https://1.0.0.1/dns-queryhttps://1.1.1.1/dns-query
DoT1dot1dot1dot1.cloudflare-dns.comone.one.one.one
DoT (IP)1.1.1.11.0.0.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。

Google Public DNS#

  • Anycast:Google 的 36 個數據中心(不包括 Google Global Cache)
  • DNS 出口:Google 全球邊緣網絡
  • TCP 查詢:支持
  • DoT、DoH:均支持。除了可以直接通過 IP 使用,還可以使用域名 dns.google
  • ECS:支持(DNS JSON API 支持 edns_client_subnet)
協議
IPv48.8.8.88.8.4.4
IPv62001:4860:4860::88882001:4860:4860::8844
DoHhttps://dns.google/dns-query
DoTdns.google

最著名的公共 DNS(即使在國內也是很有名的),得益於 Google 龐大的全球網絡設施(不過 Google 公共 DNS 並未使用 Google Global Cache,並且在非洲和大洋洲也沒有節點),速度雖然不能說是最快的,但是至少不慢;支持 ECS、DoH、DoT,SLA 無限接近 100(Google 搜索引擎的 SLA 是 99.9999%),海外 CDN 都有針對 Google DNS 做優化,解析海外站點時強烈推薦。

海外伺服器推薦使用的一些公共 DNS 服務#

DNS.sb#

  • Anycast:是
  • DNS 出口:SB Network 的上游的 IP
  • TCP 查詢:支持
  • DoT、DoH:支持,可以使用 IP 或 dns.sb 域名
  • ECS:不支持
協議
IPv4185.222.222.22245.11.45.11
IPv62a09::2a11::
DoHhttps://doh.dns.sb/dns-queryhttps://doh.sb/dns-query
DoH (IP)https://45.11.45.11/dns-queryhttps://185.222.222.222/dns-query
DoTdot.sb
DoT (IP)185.222.222.22245.11.45.11

和 Cloudflare 一樣支持主流的 DoT、DoH 等加密 DNS 解析。啟用了 Anycast,節點可能沒有 Cloudflare 那麼多,不過還是覆蓋了大部分地區;此外,有 VPS 的可以試試 trace 一下 185.222.222.222、沒准你會發現你的 VPS 和 dns.sb 在同一內網裡。

公共 DNS 最佳實踐#

綜上所述,如果你需要選擇公共 DNS 的話同時需要獲得儘可能友好的 CDN 解析結果

解析國內站點推薦使用阿里 DNS騰訊 DNSPod

解析海外網站推薦主 Cloudflare DNSOpenDNS,備 Google Public DNS

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。