如何选择适合的公共 DNS

发布于 2021-06-08  903 次阅读


原文地址

是否需要公共 DNS

在选择公共 DNS 之前,你需要考虑一个问题:你是否真的需要公共 DNS?

无论我们是 PPPoE 拨号上网,还是 DHCP 连接光猫上网,互联网服务提供商(ISP)都会下发两个 DNS 给你。为了方便介绍,在下文中我称这两个 DNS 为 ISP DNS。
在 DNS 的解析过程中,用户向递归 DNS 发起请求,递归 DNS 向权威 DNS 请求解析结果,可以说递归 DNS 起到一种转发的作用。ISP DNS 就是递归 DNS;同时一些个人或互联网服务提供商也会架设自己的递归 DNS 开放给所有人使用,称为公共 DNS。

对于绝大部分人来说,ISP 下发的 ISP DNS 应该是最准确的和最合适的,响应时间短、CDN 解析结果也会最准确。
但是大部分 ISP 不是做公益的。运营商经常使用 DNS 投毒来引导用户去使用他们的 缓存服务器,从而降低 ISP 外网带宽的负载;或者劫持解析将用户引导去他们已经插入了广告的镜像站点获利;或者为了国家相关法律政策要求或者 ISP 自己的需求屏蔽一些网站的访问(如辽宁联通曾将工信部举报站点的域名解析至 127.0.0.1);或者自行篡改 TTL(DNS 结果缓存时间)降低 DNS 服务的请求数导致解析结果不能尽快更新;或者对于不正确的域名运营商给你返回一个满是广告的页面,等等。即使 ISP 非常良心不使用 DNS 做坏事,也有可能因为设备没有及时扩容或者维护不善而导致不佳的体验。

下面两篇文章是曾就职于 CloudXNS 的 Ephen ~大姐姐~ 大佬写的关于使用公共 DNS 上网的弊端,主要围绕公共 DNS 出口导致的 CDN 解析结果优化问题展开的。

如果你阅读完上述文章后,为了追求更安全、更准确的 DNS 解析结果而决定继续使用公共 DNS(比如和我一样 ~雾~),你就可以继续阅读下去了。

选择公共 DNS 时应该考虑什么

公共 DNS 服务有很多,有大公司搭建的,有非盈利组织搭建的,还有个人搭建的,令人眼花缭乱。在选择的时候我们需要考虑很多方面才能选出适合我们需求的 DNS。通常在选择对于我们上网起非常重要作用的 DNS 时,我们需要考虑以下方面:

  • SLA 服务在线率。DNS 是上网冲浪事时非常重要的一个环节,DNS 的可靠性直接影响到上网的体验;如果 DNS 宕机,那么很大一部分网站将无法访问
  • 响应速度 在访问一个新的网站时,DNS 对这个网站的响应速度会直接影响到当前网站的直观加载速度
  • 准确性 即使不考虑 DNS 污染和投毒,DNS 对网站访问的结果是否准确是非常重要的
  • EDNS 简单地说,EDNS(正确的简称应该是 ECS)有助于帮助你获取最准确的 CDN 解析结果
  • 其它特性 一些个人搭建的 DNS 会提供一些去广告或者爱国上网的功能
  • DNS 出口 通常情况下,公共 DNS 的入口和出口一般不同。你可以用 这个工具 查看你的 DNS 出口 IP

受篇幅限制,本文只介绍一些大型的、有名的公共 DNS,而一些类似服务不稳定的 1.1.9.9 公共 DNS 和 IBM Quad9 DNS,或者最好不被公开的 USTC 抗污染 DNS,亦或是只有单线单点部署的 360 公共 DNS、Verisign DNS,还有实际上没什么卵用的 “安全 DNS” 如诺顿 DNS 和 OneDNS,本文就不介绍了。

国内一些公共 DNS 服务

腾讯 DNSPod

https://www.dnspod.cn/Products/Public.DNS

119.29.29.29 119.28.28.28

这是 DNSPod 建立的公共 DNS,之后 DNSPod 被腾讯收购以后由腾讯云负责运营。腾讯 DNSPod 公共 DNS 配置了 Anycast,节点囊括了腾讯云所有可用区的节点(包括海外),所以速度还是不错的,并且除了支持 ECS 以外还有一些关于 DNS 出口选择优化的加成,所以 CDN 解析结果相对准确很多。但是之前 SLA 却并不优秀——曾经由于遭遇 DDoS 攻击导致部分节点离线同时由于 ISP 的缘故无法 Reroute,最终导致了部分地区无法正常使用。

值得一提的是,DNSPod 的公共 DNS 是免费提供 HTTPDNS 的,Demo 可以看 这里

阿里云公共 DNS

http://www.alidns.com/

223.5.5.5 223.6.6.6

阿里建立的公共 DNS。和腾讯一样,阿里公共 DNS 也是搭建在自家的云服务——阿里云上。虽然也配置了 Anycast,不过不包括海外节点,国内也就浙江阿里云和深圳阿里云两个节点(比阿里云 VIP 云解析的节点还少),响应速度肯定会略逊于 DNSPod 提供的公共 DNS;阿里公共 DNS 支持 ECS 但是没有做 DNS 出口的优化(一般都是广东出口)。关于阿里的公共 DNS 没有听说太多宕机、无法使用相关的报告,但是倒是听说阿里公共 DNS 经常返回 NXDOMAIN,比较影响使用体验。

南京信风公共 DNS

https://www.114dns.com/

114.114.114.114 114.114.115.115

无疑是国内最著名的公共 DNS,但是显然不是最好的。单程 Anycast,去程一律去南京,回程一般从青岛、深圳等 DNS 出口节点发起,响应速度的话不敢恭维。因为是国内最著名的公共 DNS,所以使用的人很多,从 SLA 来看相对可靠。但是考虑到南京信风为运营商旁路广告劫持提供技术支持和硬件支持,对他们提供的公共 DNS 服务还是戴着有色眼镜来看吧。

清华 TUNA 协会 666DNS

https://tuna.moe/help/dns/

101.6.6.6

由清华大学 TUNA 协会运营的公共 DNS,看他们说 ECS 还在测试,并没有上线;由于是为清华大学校内搭建,所以也没有做 DNS 出口选择之类的优化,所以只适合北方少数运营商的用户使用。TUNA 公共 DNS 的特点是准确(除 DNS 污染以外)、不会篡改解析到缓存服务器之类的,而且可以使用非常规端口(5353)查询可以规避很大一部分 ISP 的 DNS 劫持。

CNNIC 公共 DNS

http://www.sdns.cn/

1.2.4.8 210.2.4.8

CNNIC 名声并不好(CNNIC Root CA 的故事),因此有些许人相对都有些对 CNNIC 的抵触心理。CNNIC 的公共 DNS(SDNS)部署在阿里云上,浙江阿里云单点,速度堪忧,解析结果存疑。至于撇开 CNNIC 来谈 SDNS 推不推荐使用?SLA 比 DNSPod 的公共 DNS 还惨,解析请求时不时会超时,嗯。

百度公共 DNS

180.76.76.76

百度的名声现在怕是比 CNNIC 还要臭得多,所以他们的公共 DNS 应该不会有太多人去用了。不过还是简单提两笔,:百度也为公共 DNS 也配置了 Anycast,国内是单点百度北京数据中心,海外是单点百度香港数据中心。

其它个人搭建的 DNS

一般个人搭建公共 DNS,是为了提供更多相对特殊的服务——比如解析结果返回 SNI 代理服务器用于爱国上网,或者去广告,或者抗 DNS 污染。相对有名的个人搭建的公共 DNS 服务有 PureDNS、PdomoDNSHiXNS(前身为 BAIDNS)。这些 DNS 一般都是单点部署,速度和可靠性都不能和规模相对更大的公共 DNS 媲美。除非没有特殊需要,一般不推荐使用个人搭建的公共 DNS——爱国上网可以自建也可以去购买对应的服务、而不是去用 SNI 代理,去广告可以用浏览器插件搭配 Hosts。

国外常用 DNS 服务

Google Public DNS

8.8.8.8 8.8.4.4

https://developers.google.com/speed/public-dns/

最著名的公共 DNS(即使在国内也是很有名的),得益于 Google 庞大的全球网络设施(不过 Google 公共 DNS 并未使用 Google Global Cache,并且在非洲和大洋洲也没有节点),速度虽然不能说是最快的,但是至少不会慢;支持 ECS,SLA 无限接近 100,解析海外站点时强烈推荐。

OpenDNS

208.67.222.222 208.67.220.220

https://www.opendns.com/

被 ~Disco~ Cisco 收购的 OpenDNS 一度是世界上最快的公共 DNS——OpenDNS 在全球拥有大量节点并且 Anycast 不绕路。不仅支持 ECS 和 SLA 达到 100,而且 OpenDNS 开放非常规端口 5353 供查询,即使从国内直接请求也基本不会会被污染和劫持。如果你在使用 ChinaDNS 这类工具同时又没有专门为其准备一条加密隧道,那么直连 OpenDNS 的 5353 就是一个不错的替代选择。

Cloudflare DNS

1.0.0.1 1.1.1.1

https://1.1.1.1 https://1.0.0.1

当 Cloudflare 从 APNIC 手上接过 1.0.0.0/241.1.1.0/24 并架设了公共 DNS 以后,得益于 Cloudflare 全球 130+ 数据中心(Cloudflare 拥有 150+ 数据中心,但其公共 DNS 并没有部署在百度云加速的节点上)、BGP Anycast 和 Cloudflare Argo 等技术,成功超越 OpenDNS 成为了世界上最快的公共 DNS(数据来自 DNSPerf)。虽然快是很快,但是由于其隐私政策,Cloudflare 公共 DNS 不记录用户 IP,意味着无法使用 ECS 等技术,加上 Cloudflare 公共 DNS 只有没有洛杉矶的单一出口,所以对 CDN 并不友好,更适合作为备用 DNS 而不是主力 DNS。

Freenom World

80.80.80.80 80.80.81.81

https://www.freenom.world/zh/index.html?lang=zh

注册过后缀如 .cf .ga .ml 的免费域名的,对 Freenom 这个名字一定不会陌生。这家荷兰域名注册商借助自己旗下的云服务资源也运营了一家公共 DNS 服务,卖点是隐私和安全。支持 ECS 并且有对 DNS 出口选择做了优化。部署了 Anycast 但是节点不多,响应速度并不能算拔尖。Freenom 的公共 DNS 的一个特点其实是电信走 163 去 HK,联通移动走 IIJ 去 JP,因此如果你所在的地区和 ISP 对国外递归 DNS 的污染并不严重的话可以尝试使用 Freenom 的 DNS。

公共 DNS 最佳实践

综上所述,如果你需要选择公共 DNS 的话同时需要获得尽可能友好的 CDN 解析结果,解析国内站点推荐使用主 DNS 119.29.29.29 备 DNS 223.5.5.5(南方)/ 101.6.6.6(北方)的选择;解析海外网站推荐主 DNS 8.8.8.8(除非洲和大洋洲地区用户)或 208.67.222.222,备 DNS 1.0.0.180.80.80.80

如果你在使用 ChinaDNS,你可以试试我的配置:

119.29.29.29,101.6.6.6:5353,208.67.222.222:443,80.80.80.80,8.8.8.8,8.8.4.4


或许明日太阳西下倦鸟已归时