仙姑本咕

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

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。