你是否也遇到过这样的情况,就是当我们想访问一个网站时,页面显示的确是“无法访问此网站”,这是怎么回事?如果检查发现ping不通了,这可能就与DNS有关了。那么,啥是DNS?常听到的DNS劫持指的又是什么?
所谓DNS,其实是Domain Name System的缩写,翻译过来就是域名系统。作为将域名和IP地址相互映射的一个分布式数据库,其最主要的作用就是将域名翻译成IP地址,从而使我们更方便地访问互联网。
IP地址应该不用多说了吧?它是IP协议提供的一种统一的地址格式,为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。最常见的,就是每台联网的PC上都需要有IP地址,才能正常通信。IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(即4个字节),用“点分十进制”表示成(a.b.c.d)的形式。例如192.168.100.1。
域名可以说是一个IP地址的代称,目的是为了方便我们记忆IP地址。例如,wikipedia.org是一个域名,与其对应的IP地址就是208.80.152.2。我们可以直接访问wikipedia.org来代替IP地址,然后域名系统(DNS)就会将它转化成便于机器识别的IP地址。而有了DNS,我们不需要记住每一个网站的多个IP地址,而只需知道该网站的域名就可以了。
换言之,当我们访问网站的时候输入域名,是DNS在帮你解析并访问具体的IP地址。但是你知道吗?如此重要的DNS一旦被污染或者被劫持,将导致网站无法正常访问。某些网络运营商,为了某些目的,可能会限制某些用户访问某些特定的网站,而限制手段最常用的就是DNS污染和DNS劫持。
先来说说DNS污染,又称域名服务器缓存投毒,指那些刻意制造或无意中制造出来的域名服务器数据包,把域名指向不正确的IP地址。通常,DNS查询没有任何认证机制,且DNS查询通常基于的UDP,是个无连接不可靠的协议,导致DNS查询非常容易被篡改,通过对UDP端口53上的DNS查询进行入侵检测,一经发现与关键词相匹配的请求,便立即伪装成目标域名的解析服务器(NS)给查询者返回虚假结果。
一旦相关网域的局域域名服务器的缓存受到污染,就会把网域内的电脑导引往错误的服务器或服务器的网址。因此,简单点说,DNS污染指的就是把自己伪装成DNS服务器,在检查到用户访问某些网站后,使域名解析到错误的IP地址。
说完DNS污染,DNS劫持又是什么呢?实际上,DNS劫持是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名并把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能访问或访问的是假网址。换言之,DNS劫持就是通过非法手段,获取DNS服务器的权限,然后把DNS配置进行修改,使域名解析到错误的IP地址。
这样看来,两者看上去似乎有些相似,其区别在何处呢?首先,DNS劫持是劫持DNS服务器,进而修改其解析结果;DNS污染是国内某些服务器对DNS查询进行入侵检测,发现与黑名单上匹配的请求,该服务器就伪装成DNS服务器,给查询者返回虚假结果。它利用了UDP协议是无连接不可靠性。也就是说,一个是劫持DNS服务器,一个是伪装成DNS服务器,造成的结果都是返回错误的IP地址。