●DNS在做些什么?何为更好的DNS?
DNS全称Domain Name System,顾名思义它的功能是把域名和IP地址对应起来。举个简单的例子要访问酷安的网页只需要输入酷安的网址,DNS服务器将会返回酷安服务器的IP地址,客户端取得IP地址后,才能与服务器建立连接。
这个过程看起来很简单对吧,DNS就只是个地址簿嘛,在平时上网的时候,如果不做特殊设置,DNS服务器地址一般由网络运营商下发,在大部分时间里我们甚至感觉不到它的存在。但仔细想想,DNS作为互联网基础设施,完成的功能可能并不像看上去那样简单,一个可以称得上好的DNS,起码需要满足以下条件中一个或几个:
①连接速度
作为打开网页的必要步骤,一个快速响应的DNS很重要。ping一下运营商提供的DNS服务器IP地址,延时都在20ms以下,还是比较优秀的。但如果使用ping一下cloudflare的DNS服务器IP,延时波动就非常大了。
(假装有图)
②准确性
看似简单,实则很难,原因大家应该都了解
用路由器上运营商下发的DNS查询一下
③就近解析
除了准确的对应关系,就近解析对于优化上网体验也很重要。大型网站为了平衡流量负载,往往会使用CDN,简单说来就是有很多部署在各地的服务器,一个域名后对应了多个IP和多台服务器。DNS的重要使命之一就是把离你最近的服务器IP地址发给你,如果贸然设置DNS,可能会大大降低访问速度。
Cloudflare DNS VS 本地自建DNS,解析结果可绕地球半圈
绝大多数情况下,运营商下发的DNS响应速度是最快的,也能获得最佳的CDN效果(下发的DNS和你在同一运营商网络下且客户端与DNS地理位置接近),因此手动更改DNS设置并不是必要的,那么为什么还要折腾呢?
●使用公共DNS或者自建DNS,为什么?
运营商DNS有不错的效果,但也有一些问题。比如访问一个不存在的域名时,直接劫持到运营商自己的广告页面,解析缓存时间太长,更新不够及时或者是隐私问题等等。使用一个纯净的公共DNS可以解决其中一些,但使用公共DNS并非没有自己的问题,最突出的一个就是劣化CDN的加速效果。
举个例子我在使用中国移动提供的网络,从广东向部署在上海联通的公共DNS发起解析请求,如果公共DNS没有该域名的记录,还需要向上一级DNS服务器查询,最终会请求到域名的 NS 服务器。而上一级DNS服务器确是根据公共DNS的IP,即DNS出口地址来下发域名对应IP的。绕来绕去有点晕是吧,简单来说就是我从广东移动发起的DNS解析,最后却拿到了一个最适合上海联通访问的IP地址。
上面已经提到DNS出口与用户不在相近的网络环境下时,反而劣化了访问效果,因此如果执意要选择使用公共DNS,选用服务部署在国内,且有多个出口的DNS是更好的选项,阿里和腾讯提供的公共DNS就具有这些特性,在国内是不错的选择。不推荐直接使用非国内DNS,牺牲连接速度和就近解析代价过于高昂。
广东移动使用腾讯旗下DNSPOD解析,出口在广州移动
而使用自建DNS,比如adguard home,就可以实现更多的功能,比如向多个DNS同时发起解析,直接使用返回最快的结果,直接不解析广告域名来屏蔽广告,甚至分网址选择DNS服务器等等,具体设置我也不算太清楚,就不再赘述了,但他们在选择上一级DNS服务器时同样会面临上文所提到的问题,因此了解一下使用公共DNS的一些原则还是非常有必要的。
●都什么年代了,还在用传统DNS?
DNS作为早期互联网就出现的功能,含有许多缺陷,比如上文提到的DNS出口问题,还有饱受诟病的隐私问题。为了解决DNS出口的问题,Edns-Client-Subnet,简称 ECS,应运而生,简单来说就是在向DNS查询时可以一并提供用户所在的IP段,让上级的DNS服务器可以更好的根据用户位置返回IP,但这也带来了可能暴露IP的隐私问题,cloudflare的DNS服务器就拒绝提供此服务,作为一个比较新的标准,现在也还不算普及。
而传统DNS查询基于UDP协议,无加密,意味着链路上的任何人都可以看到你访问的网址,更改解析的结果,在这个https everywhere的时代实在显得有些格格不入了。因此新的加密DNS也逐渐走进了我们的视野,DOH(DNS over https)和DOT(DNS over TLS)是目前比较主流的技术路线,win11原生支持DOH,安卓上自带的私人DNS则使用了DOT,套上加密后虽然损失了一些速度,但你也不想自己访问的网址被一堆人知道吧。
●总结
运营商DNS,其实挺不错,现在劫持等问题没有之前严重了
选择公共DNS,推荐国内多出口DNS
自建DNS,选好上游
注重隐私,用DOH/DOT
来源酷安:Starflow
最后,祝大家上网冲浪愉快~
欢迎评论区提问/交流探讨
- 最新
- 最热
只看作者