当前位置: 首页 > 科技观察

如何选择合适的公有DNS

时间:2023-03-14 19:36:42 科技观察

本次写一篇关于递归DNS(也就是公有DNS)的文章。我将从公有DNS的必要性、优缺点等方面来谈谈选择公有DNS需要注意的事项,并列举一些目前主流的公有DNS。2020年更新:新增“是否支持TCP查询”;阿里公网DNS已经支持DoH/DoT;腾讯公有DNS+已经开始公测DoH和DoT是否需要公有DNS。在选择公共DNS之前,您需要考虑一个问题:您真的需要公共DNS吗?无论我们使用PPPoE拨号还是DHCP连接光猫,互联网服务提供商(ISP)都会给你发两个DNS。为了表述方便,以下我将这两个DNS统称为ISPDNS。在DNS解析过程中,用户向递归DNS发起请求,递归DNS向权威DNS请求解析结果。可以说递归DNS起到了转发的作用。运营商的ISPDNS是递归DNS;同时,一些个人或互联网服务提供商也会设置自己的递归DNS供大家使用,称为公共DNS。对于大多数人来说,运营商发布的ISPDNS应该是最准确最合适的,响应时间最短,CDN解析结果最准确。为什么说运营商下发的DNS更快呢?请参阅下文“选择公共DNS时应考虑的事项”部分中“DNS出口”的说明。但是运营商不是在做公益。运营商经常使用DNS投毒来引导用户使用他们的缓存服务器,从而降低运营商的带宽负载;或劫持分辨率,引导用户到他们插入广告的镜像站点,从而获利;或出于国家相关法律政策要求或运营商自身需要,对部分网站进行屏蔽访问(如辽宁联通曾将工信部上报网站域名解析为127.0。尽快更新可能;或者给你返回一个满是错误域名广告的页面等。即使运营商很良心,不使用DNS做坏事,也可能因为设备没有及时扩容或维护而导致体验不佳ISPDNS虽然缺点那么多,但是publicDNS也不是没有问题,下面两篇文章是曾经在CloudXNS工作过的Ephen写的关于使用publicDNS上网的缺点,主要是针对publicDNS的优化公共DNS出口导致的CDN解析结果。使用公有DNS上网的弊端(一)使用公有DNS上网的弊端(二)如果您在阅读了以上文章后,为了追求更安全、更准确的DNS解析结果,决定继续使用公有DNS(如雾如我),你可以继续阅读。选择公共DNS时应考虑的因素有许多公共DNS服务,由大公司、非营利组织和个人构建,令人眼花缭乱。在选择的时候,我们需要考虑很多方面,才能选择到适合自己需求的DNS。通常,在选择对我们上网起着非常重要作用的DNS时,我们需要考虑以下几个方面:SLA服务在线率。DNS是上网时非常重要的一个环节。DNS的可靠性直接影响上网体验;如果DNS宕机,很大一部分网站将无法访问。响应速度响应速度将直接影响当前网站的直观加载速度和准确性。即使不考虑DNS污染和中毒,DNS访问网站的结果是否准确也很重要。EDNS简单来说,EDNS(正确的缩写应该是ECS)帮助您获得最准确的CDN解析结果。其他特性。一些个人搭建的DNS会提供一些广告或者特殊的上网功能。DNS出口通常,公共DNS的入口和出口是不同的。您可以通过dig查看您的DNS出口IP:$digwhoami.akamai.netDNS出口对于CDN非常重要。公有DNS的本质是将你的查询请求转发给上游DNS;在没有EDNS的情况下,CDN的权威DNS会根据公网DNS使用的请求IP(即DNS出口)来判断你的运营商和你所在的位置,从而返回离您最近的节点的IP。因此,理论上,您的ISP分配给您的DNS应该是最快且CDN友好的。本文接下来提到的CDN优化和CDN友好性,也是指DNS出口的IP是否可以让你访问到最快的CDN节点。限于篇幅,本文只介绍一些大的、知名的公共DNS,以及一些服务不稳定的公共DNS如1.1.9.9(由Yamu运营)和速度慢且不符合规范的IBMQuad9DNS和Level3DNSRFC规范,或者360公有DNS,单线单点部署的VerisignDNS,还有NortonDNS、OneDNS等实际上没什么用的“secureDNS”,本文不再介绍。中国部分公共DNS服务腾讯DNSPodAnycast:上海、天津、广州、香港DNS出口:以上四点TCP查询:不支持DoT,DoH:支持。域名dns.pub和doh.pub同时支持DoH和DoTECS:不完全支持https://www.dnspod.cn/Products/Public.DNS119.29.29.29119.28.28.28这是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。阿里云公共DNSAnycast:成都、深圳、杭州DNS出口:以上三点TCP查询:DoT、DoH:都支持。除了可以直接通过IP访问外,还可以使用域名dns.alidns.com。ECS:部分支持(DNSJSONAPI支持edns_client_subnet)http://www.alidns.com/223.5.5.5223.6.6.6阿里建立的公共DNS。与腾讯一样,阿里巴巴的公共DNS也是建立在自己的云服务——阿里云之上。虽然也配置了Anycast,但不包括海外节点,国内只有浙江阿里云和深圳阿里云两个节点,华北隧道回深圳,响应速度比公网DNS略慢由DNSPod提供;DNS不支持ECS,有优化DNS导出(一般是广东导出)。阿里巴巴公网DNS宕机或无法使用的报道并不多。但是听说阿里公网DNS经常返回NXDOMAIN影响用户体验。NSDOMAIN问题已有所缓解。NanjingTradewindPublicDNSAnycast:Nanjing,Jinan,ChicagoDNSegress:NoTCPquery:DoT,DoH:NoECS:Nohttps://www.114dns.com/114.114.114.114114.114.115.115毫无疑问国内最著名的公有DNS,但显然不是最好的。有了Anycast,国内有南京和青岛、济南两个节点,海外有芝加哥一个节点。响应速度并不讨人喜欢。国内最著名的公有DNS,用的人多,SLA非常可靠,所以也是运营商重点劫持的目标。不过考虑到南京德益世提供运营商绕过广告劫持的技术和硬件支持,还是带着有色眼镜看看他们提供的公共DNS服务比较好。清华TUNA协会666DNAnycast:无,只有清华大学单点。DNS导出:北京教育网TCP查询:支持DoT,DoH:都支持。不绑定域名,直接通过IP使用。ECS:不支持https://tuna.moe/help/dns/101.6.6.6清华大学金枪鱼协会运营的公共DNS,他们说ECS还在测试中,还没有上线(不过应该可以)不在线);由于是为清华大学校园打造,所以没有做DNS出口选择等优化,所以只适合北方少数运营商的教育网用户。TUNA公有DNS的特点是准确(但仍受DNS污染),不会篡改解析,可以使用非常规端口(5353)进行查询。近日,CERNET对CERNET进行了审查,要求限制CERNET外的网络向内网的53端口发送流量。传统的DNS查询不再可用。理论上,非常规港口的DoT和DoH不会受到影响。另外,如果您目前正在使用大学教育网,则不会受到影响。如果不能使用,可以按照这里的指引申请清华大学白化贵校出口IP。CNNIC公共DNSAnycast:北京、杭州、香港DNS导出:CNNIC和阿里云TCP查询:不支持DoT、DoH:不支持ECS:不支持http://www.sdns.cn/1.2.4.8210.2.4.8CNNIC口碑不好(CNNICRootCA的故事),所以有些人对CNNIC比较抵触。CNNIC的公共DNS(SDNS)在国内只部署了两点,Anycast配置很差,速度堪忧,解析结果没有经过CDN优化(DNS出口都是阿里云)。至于是否推荐CNNIC谈SDNS推送?SLA比DNSPod的公共DNS差,解析请求时不时超时,嗯。百度公共DNSAnycast:北京、南京、深圳DNS导出:以上三点DoT、DoH:不支持TCP查询:不支持ECS:不支持https://dudns.baidu.com/180.76.76.76百度的口碑是现在比CNNIC更臭。他们的publicDNS是2017年上线的,现在很多人都不知道,不过我简单提两点:百度也配置了Anycast做publicDNS,国内一点百度北京数据中心北京、南京、深圳是三个点,海外是单点百度香港数据中心。很少有人使用它,并且可能不容易被运营商劫持。有兴趣的可以试一试。你注意到国外常用的DNS服务了吗?国内的DNS几乎都不支持TCP查询,但是国外的DNS按照RFC规范都支持TCP查询。GooglePublicDNSAnycast:Google的36个数据中心(不包括GoogleGlobalCache)DNSegress:Google的全球边缘网络TCP查询:DoT,DoH:都支持。除了直接使用IP,还可以使用域名dns.googleECS:支持(DNSJSONAPI支持edns_client_subnet)8.8.8.88.8.4.4https://developers.google.com/speed/public-dns/最著名的公共DNS(在中国也很有名),得益于Google庞大的全球网络设施(不过Google公共DNS没有使用GoogleGlobalCache,在非洲和大洋洲也没有节点),虽然速度不能说是最快,但至少不慢;支持ECS、DoH、DoT,SLA无限接近100(Google搜索引擎的SLA为99.9999%)。海外CDN针对GoogleDNS进行了优化,强烈推荐在解析海外站点时使用。OpenDNSAnycast:OpenDNS32个数据中心DNSegress:未检测到TCP查询:支持DoT,DoH:不支持ECS:支持208.67.222.222208.67.220.220https://www.opendns.com/思科收购的OpenDNS曾经是全球的最快的公共??DNS-OpenDNS在全球拥有30多个节点,并且Anycast配置良好。最多支持100个ECS和SLA,OpenDNS开放非常规端口5353查询和TCP查询,即使直接从国内请求也不易被污染和劫持。如果你使用的是ChinaDNS之类的工具,没有专门为其准备加密隧道,那么5353直连OpenDNS是一个不错的选择。CloudflareDNSAnycast:Cloudflare's160+datacentersDNSegress:Cloudflare's160+datacentersTCPquery:supportDoT,DoH:都支持,可以用域名one.one.one.one或者直接用IPECS:notsupported(自ECS需要根据用户IP查询,有违CloudflareDNS隐私保护)1.0.0.11.1.1.1https://1.1.1.1https://1.0.0.1当Cloudflare接管1.0.0.0/24和1.1.1.0/24并搭建公共DNS,得益于Cloudflare全球160+数据中心(Cloudflare拥有185+数据中心,但其公共DNS并未部署在百度云加速的节点上)、BGPAnycast和CloudflareArgo等技术,成功超越OpenDNS成为全球最快的公有DNS(数据来自DNSPerf),同时还支持DoT、DoH等常见的加密解析方案。由于其隐私政策,Cloudflare的公共DNS不会记录用户IP,这意味着无法使用ECS等技术。但由于节点数量多,DNS出口覆盖全球主要地区,也适合作为主力DNS。FreenomWorldAnycast:有DNS导出:Freenom的Transit的IPTCP查询:支持DoT,DoH:不支持ECS:支持80.80.80.8080.80.81.81https://www.freenom.world/zh/index.html?lang=zh注册如果你有一个后缀为.cf.ga.ml的免费域名,你一定对Freenom这个名字不陌生。荷兰域名注册商还利用自己的云服务资源运营公共DNS服务,卖点是隐私和安全。支持ECS,检测到的DNS出口都是落地IP。部署了Anycast但是节点不多,响应速度不是一流的。Freenom公网DNS的一个特点是电信用163去HK,联通移动用IIJ去JP。所以,如果你所在地区和ISP对国外递归DNS污染不严重的话,可以试试Freenom的DNS。DNS.sbAnycast:YesDNSexport:SBNetwork'supstreamIPTCPquery:DoT,DoH:Support,youcanuseIPordns.sbdomainnameECS:Notsupport185.222.222.222185.184.222.222https://dns.sbandCloudflare它还支持主流的DoT、DoH等加密DNS解析。启用Anycast后,节点数可能没有Cloudflare多,但大部分区域仍然覆盖。公有DNS最佳实践综上所述,如果需要选择公有DNS,还需要尽可能友好的获取CDN解析结果。国内站点推荐使用阿里DNS和腾讯DNSPod(前者稳定,后者准确)解析海外网站,推荐主DNS为1.0.0.1或208.67.222.222,备用DNS为8.8.8.8或8.8.4.4。