[DNS] 1. 什么是DNS?
玩软路由不折腾DNS是没有灵魂的。
———我说的
DNS是使用互联网无法避免的存在,想要折腾好DNS,了解DNS是必要的,本系列主要介绍DNS以及相关的技术名词、概念等。本篇做为该系列的第一章,简单介绍了一下DNS的作用、请求方式和常见的响应类型。
互联网依靠IP地址来寻找要访问的主机,早期互联网规模很小只需要记住IP地址就能满足使用需求,后来互联网规模不断壮大记下IP地址几乎是不可能的,由数字组成的IP地址很不直观,必须给这些IP地址一个代称。
为了解决这些问题,DNS(Domain Name System) 域名系统应运而生,它的作用很简单:记下域名以及对应的IP,你只要告诉它域名,它就告诉你IP。这一流程被称为域名解析
为了方便管理,域名被 “ . ” 分开,用于区分域名所在区域,比如 teapotium.com
代表本站的域名属于 .com
下,而 www.teapotium.com
或者 sub.www.teapotium.com
则都属于本站的子域名。
在日常上网时主要使用互联网上的公共DNS服务,比如谷歌的 8.8.8.8
和 8.8.4.4
,Cloudflare的 1.1.1.1
和 1.0.0.1
,或者是阿里的 223.5.5.5
和 223.6.6.6
等等,另外运营商也会维护一个DNS服务器来给自己的客户使用。
错误配置DNS可能带来的问题
以前,向互联网开放一个网站很简单,在服务器上搭建一个网页服务,然后再配置一个域名即可完成,这台服务器就会向全球提供服务,在全球的所有地方的DNS解析结果都是相同的,可以说随便设置一个DNS服务器就可以用了。
在CDN大规模使用的今天,网站的可用IP分散在全球各地,而DNS的任务就变成了找到最近的正确服务器了。比如:你人在美国,使用谷歌的 8.8.8.8
作为你的DNS服务器,DNS服务器就会返回给你最近的可用IP,有和你同一地区的IP就用同一地区的,没有就选同一个国家的,再没有就选一个离美国最近的…
在国内使用 8.8.8.8
就不一样了,因为谷歌在国内没有DNS服务器,在谷歌DNS内部会被分配到香港服务器处理,所有的网站的解析结果都会变成香港的入口,或者是最接近香港的入口。使用 Cloudflare 的 1.1.1.1
甚至直接会分配到美国,所有的结果都更适合在美国访问而不是中国大陆。错误的结果会导致网页访问缓慢或者是无法访问!
所以,正确配置的DNS服务器应该直接使用运营商的DNS服务器,或者是其他国内的DNS服务器。
CDN(内容分发网络),为防止全球的大量访问让服务器停摆,CDN在全球各地设置服务器,让访问流量分担到各个CDN的服务器。访问了使用CDN的网站就等于先访问CDN,然后CDN在去实际的网站服务器获取并临时存储你需要的数据。如果有人访问到了相同的内容CDN就会把临时存储的数据发送回去,这样就减少了源服务器的压力,还提升了访问速度(因为离服务器的网络距离近了)。
DNS污染和劫持
简单来说就是有人因为各种目的使用各种手段篡改结果,目的可能只是单纯不想让你访问这个网站,也可能是将你引向另一个网站骗取你的个人信息,或者是利用你对其他网站进行攻击,也可能是展示一些广告。通常更换一个DNS服务器即可解决。
DNS分流
在很多情况下DNS污染或劫持都是出现在运营商的DNS中,此时更换其他DNS服务器往往不是最优方式,因为除了受篡改的域名以外,运营商的DNS服务器延迟低反应快,还有最适合自己的结果,而DNS分流则是使用其他的纯净DNS服务器解析易受篡改的域名,做到两全其美。
有很多软件可以实现按域名分流DNS解析的功能,比如Openwrt内置的Dnsmasq,Adguardhome,mosdns或者是SmartDNS等等,不过玩起DNS分流有一定难度。
运营商提供的DNS因为和你处于同一网络下距离近通信延迟很低,由于是运营商为你提供的互联网服务,运营商的DNS也能获取更适合你的结果。
DNS缓存
DNS的解析结果可能会经常改变,如果客户端不能尽快获取新的结果就会导致无法访问,所以解析结果都带有一个TTL的属性,它代表结果的有效时间(单位是秒),在有效时间内不需要再次获取解析结果,超出有效期后结果应当被丢弃需要重新获取解析结果。
这只是一个君子协议,实际上过期后也不影响你使用过期的结果,就是说解析结果你想怎么用都行。
乐观缓存
乐观缓存(Lazy cache),在一些DNS软件中可以见到这个功能,工作过程大概是:在TTL过期后继续保存解析记录,如果有客户端请求解析这个域名就将对应的过期记录发给客户端(过期记录的有效期被设置为几秒),然后DNS解析器获取新的结果更新过期记录。由于过期记录的有效期很短,即使客户端拿到的过期记录无法访问也只是几秒钟的事,几秒的有效期一过,客户端再次发起解析请求,这次就会拿到未过期的正确结果。
乐观缓存可以大幅拉低DNS平均响应时间,因为都是从缓存中提供的,只要几毫秒就能获取记录。
大部分的域名记录变化都是不变或者是很少的,通常乐观缓存不会带来太多的负面影响,但是对于频繁更新DDNS域名就不怎么适合了。
乐观缓存只适合在家中自建的DNS服务器(解析器)中使用,不适合在面向互联网的DNS服务器上使用。