想要上网体验有保障,如何设置一个更安全的 DNS?

我们很难记住所有人的电话号码 , 大部分时候我们都需要通讯录帮助我们把一个人的姓名和号码联系起来 。而 DNS 服务器干的事情和通讯录差不多 , 帮助我们把网址转换成 IP , 让程序知道他们需要链接的服务器具体在哪里(或是服务器不存在) 。

想要上网体验有保障,如何设置一个更安全的 DNS?

文章插图
最为简单的 DNS 请求过程
随着互联网技术的日新月异 , 大家上网的时候遇到下面的情况的概率却一点都没变少:
从官网下载内容的时候 , 下载的地址是一串 IP 而不是官网地址 , 而且下载下来的内容有的时候不是最新的 。打开一个网站以后 , 网站内有部分广告质量明显不如其他的广告 , 或者明显遮挡了网页中的内容输错网站打开一个全是广告的页面网站内的广告画风和整个网站完全不搭经常性地遇到有些页面打不开(无法解析这个网址) , 但是过了一会儿又好了 。
这些问题很多时候都是和你家的 DNS 设置有关系 。
为什么会发生这些问题
只要你接入了互联网 , 互联网服务提供商(也被称为 ISP , 以下简称: 运营商)都会下发两个 DNS 给你 , 这个就是运营商 DNS 。
和电话对应起来 , DNS 服务器则将网址和 IP 对应起来 。随着互联网技术的日新月异 , DNS 服务器也经过了一段漫长的发展 , 衍生出了更多更棒的功能 , 让用户能自由地在网上冲浪 。
每个运营商在几乎在每个城市都会部署自己的独立的 DNS 服务器 , 这也是为什么同一个运营商在不同城市分发下来的 DNS 服务器的地址也都不一样 。加上运营商是最了解 内容分发网络(也就是我们经常说的 CDN , CDN 主要起到两大作用 , 第一个是能让用户用最快的速度访问到用户想要访问的内容 , 第二点是能减少主服务器的所需要的带宽和维护成本)的位置和自家网络的情况 , 所以运营商 DNS 返回的结果应该是:最准确的、最合适的 , 响应时间短的以及 CDN 解析结果最准确的 , 简单来说就是:你能快速访问到位于你附近的有你想要访问到内容的服务器 。
想要上网体验有保障,如何设置一个更安全的 DNS?

文章插图
中国电信的路由表-图源 http://bgp.he.net
在每个城市都要维护一个 DNS 服务器开销自然不会小到那里去 , 所以运营商经常在 DNS 结果上进行改动 , 发生文章开头所说的问题 。运营商那么做主要是为了减少成本 。当然还有种情况是附近的 DNS 服务器没有及时扩容或者维护不善 , 导致了上述的情况 。
利用公共 DNS 服务来解决这个问题
解决上述这个问题的最快的办法就是使用公共 DNS 服务 。
公共 DNS 服务器一般是由大公司搭建的 , 或者非盈利组织搭建的 。公共 DNS 的本质上就是把你的查询请求转发给上游更权威的 DNS , 所以一般这些公司或者组织提供的公共 DNS 服务器提供都是更安全、更准确的结果 。
当然由于资金限制 , 公共 DNS 服务器不会每个城市都有一个 。自然就会遇到使用公共 DNS 服务解析到的 IP 不是最快的情况 。下图展示了相同网址使用运营商 DNS 解析到的结果和使用阿里云公共 DNS 解析到的两种延迟完全不同的结果( time-ios.apple.com 是一个通过 CDN 优化了网站):
想要上网体验有保障,如何设置一个更安全的 DNS?

文章插图
DNS 返回结果对比
小知识:怎么快速知道我到某个服务器之间的延迟?
使用 ping 指令
ping 是一种计算机网络工具 , 用来测试数据包能否透过IP协议到达特定主机 。按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延 , Round-trip delay time)
ping 会直接附带在任何的操作系统的内置终端(或者命令提示符)中 , 使用时 , 用户只需要使用 ping +网址/IP 地址(如 ping 17.253.84.251)并敲击回车即可得到结果 。
因此 , 我们在挑选公共 DNS 的时候 , 要注意以下方面:
在线率:也被叫做 SLA 或者可靠性 , DNS 服务器作为将网址和 IP 联系起来的唯一手段 , 如果在线率不够高 , 那么时不时就会遇到的无法解析网址的情况 , 大大降低网上冲浪的乐趣和连贯性 。响应速度:在访问一个新的网站时 , DNS 对这个网站的响应速度会直接影响到当前网站的直观加载速度 。准确性: 即使不考虑 DNS 污染和投毒 , DNS 对网站访问的结果是否准确是非常重要的 。CDN 友好性:也被叫做 ECS 或是 EDNS , ECS 有助于帮助你获取最准确的 CDN 解析结果 , 这个也是我在挑选公共 DNS 最为看重的一点 。DNS 出口位置: 在没有 ECS 的情况下 , CDN 的权威 DNS 会根据公共 DNS 使用的请求 IP(也就是 DNS 出口)来判定你的运营商、你所在的位置 , 从而返回距离你最近的节点 IP 。在有 ECS 的情况下 , 返回结果的所需要的时间会更低 , CDN 判断会更准确 。

推荐阅读