Dragon
主机之家测评主机之家测评  2019-08-23 09:52 主机之家测评 隐藏边栏 |   抢沙发  6 
文章评分 0 次,平均分 0.0

给大家扫盲一下 DNS 的常识。既然是扫盲 DNS,也顺带说说“域名劫持”和“域名污染”这两个很容易混淆的概念。提醒一下:这两者的其中之一是 GFW 的大杀器。

DNS 是啥?

DNS 是洋文“Domain Name System”的缩写,直译过来就是“域名系统”。

DNS 有啥用?

咱们打交道的这个互联网,其底层的基石是“IP”。IP 是“Internet Protocol”的缩写,中文就“互联网协议”(光看名字就知道这玩意儿很重要)。咱们日常用的那些互联网软件(浏览器、聊天工具、下载工具、等等)在工作时,必须依靠【 IP 地址 】才能进行网络数据传输。

“IP 地址”是设计给软件用滴——虽然软件很容易处理,但对于人类而言,却很难记忆。于是,后来又发明了 DNS。有了 DNS,人类就不需要记住长长的一串 IP 地址,而只需记住“域名”(域名通常更短,也更具有可读性)。

比如你上网的时候,只需在地址栏输入的“域名”,而不用输入网站的“IP 地址”。然后电脑系统会利用 DNS 来把“域名”翻译成“IP 地址”。这个翻译的过程术语叫“域名解析/DNS 解析”。

域名的结构是咋样滴?

域名是按照“树形结构”组织的。不懂得啥是“树形结构”的同学,可以对照一下电脑硬盘上的目录结构。域名的结构和目录结构很类似,目录结构是用“斜杠”作分隔符,而域名是用小数点作分隔符。两者的主要区别在于:目录结构名称的形式是从左到右(上级在左,下级在右),而域名是从右到左(上级在右,下级在左)。

以博主博客的域名为例:

www.771633.com 的上级域名是 .771633.com

.771633.com 的上级域名是 .com

这里的 .com 就被称为顶级域名(Top-Level Domain,简称 TLD),跟 .com 类似的那些 .net .org .gov 也是顶级域名。还有那些以国家/地区的代码命名的(比如 .cn .tw .hk .jp 等等)也是顶级域名。

“域名解析”是咋实现滴?

如果你曾经配置过电脑的网卡,应该记得上面除了有 IP 地址、掩码等设置,还有一项设置是“DNS 服务器/域名服务器”。这项设置就是用来帮助你的电脑进行域名解析的。你可以把这个“DNS 服务器”想象成 114 查号台。每当电脑需要翻译某个域名,就找这个域名服务器查询,然后域名服务器会告诉你的电脑,要查询的域名对应的 IP 地址是啥。

下面简单说一下,你的电脑进行域名解析的过程。

为了叙述方便,以博主博客为例。当你在浏览器的地址栏中输入 http://www.771633.com ,然后敲回车,这时候电脑软件会进行如下一系列事情。

1. 首先根据输入的网址,提取出域名(在本例中,也就是 www.771633.com )

2. 如果你在系统中配置了 Hosts 文件,那么电脑会先查询 Hosts 文件,看这个 www.771633.com 否已经在 Hosts 里面有了对应的记录。如果有,直接就可以拿到该记录中的 IP 地址,过程就结束了。

3. 如果 Hosts 里面没有这个别名,那么电脑会看你有没有设置域名服务器(DNS 服务器)。如果你的系统没有设置域名服务器,那电脑就没辙了,浏览器直接会报错,说网站的域名无法解析。过程就结束了。

4. 如果你设置过“域名服务器”,那么电脑会向这个域名服务器发送一个域名查询(DNS query)的请求,然后等候域名服务器的回应。

5. 如果域名服务器始终没有回应(比如域名服务器挂了,或域名服务器的 IP 填错了,或请求被 GFW 拦截了),那么电脑还是没辙(浏览器会报错)。

6. 如果域名服务器回应了,那么你的电脑就可以根据域名服务器的应答信息,得到该域名的 IP 地址。之后浏览器就会向这个 IP 地址 对应的 Web 端口发送 HTTP 请求。

通常情况下,电脑拿到的(DNS 服务器)应答信息是正确的——也就是说,应答中的 IP 地址 确实对应那个域名——这种情况下,你的网络软件就可以正常工作了。

但是在天朝这个奇葩的国家,电脑拿到的 DNS 应答有可能是【 错的 】。为啥会这样捏,本文的后半部,博主会介绍一下“域名劫持”和“域名污染”。

域名服务器如何知道这些信息?

(本小节的内容偏技术化,技术菜鸟请仔细理解)

刚才介绍了“客户端域名解析”的过程。接下来说说域名服务器是如何得到这些信息的。

域名的缓存

我们平时使用的域名服务器,技术术语叫“递归域名服务器”。“递归服务器”是面向普通网友的。刚才介绍“域名解析”的时候提到的服务器就是“递归服务器”。

“递归服务器”的内部通常会有一个 DNS 记录 的缓存——这个缓存是为了提高查询效率的。当某台电脑向递归服务器发起域名查询时,递归服务器首先看自己的缓存中有没有该域名的记录,如果有,直接就回复该记录给查询的电脑。

万一对方想要查询的域名没找到,咋办捏?这时候就要进行缓存的同步。

缓存的同步

下面就拿博主博客的域名为例,说说这种情况的处理流程。

1. 对方查询 www.771633.com 这个域名,“递归服务器”发现自己的缓存中没有

2. “递归服务器”会先去找“根域名服务器”帮忙,“根服务器”会告诉“递归服务器”说:这个域名属于 com 这个分支之下,你去找 com 这个域名的“权威服务器”,这个权威服务器的 IP 地址 是 xxx。

3. 然后“递归服务器”根据拿到的这个 xxx 地址,又去找“com 域名的权威服务器”。“com 域名的权威服务器”告诉它:你应该去找“771633.com 域名的权威服务器”,这个权威服务器的 IP 地址 是 yyy

4. 然后“递归服务器”又屁颠屁颠地去找“771633.com 域名的权威服务器”。这时候“771633.com 域名的权威服务器”才会告诉它,www.771633.com 这个域名的 IP 地址 到底是多少。

大伙儿看到没有?整个过程如同“踢皮球”,效率是很低的。所以博主前面提到,“递归域名服务器”必须得有一个缓存,以此来优化效率(不用每次查询都来一次“踢皮球”)。

同步的周期

说完了“域名的同步”,顺便提一下“同步的周期”。

因为互联网上的域名信息是有可能发生变化的。比如增加了某个新域名,注销了某个旧域名,或者某个域名对应的 IP 地址 变了。所以,“递归服务器”上保留的缓存中,每一条域名记录都有一个生命周期(可能是几分钟,也可能是几小时)。如果某条记录的生命周期过了,就会被删除,然后重新同步。

啥是“域名劫持”?

刚才说了,域名服务器上都会保存一大堆的域名记录(每条记录包含“域名”和“IP 地址”)。当收到域名查询的时候,域名服务器会从这堆记录中找到对方想要的,然后回应给对方。

如果域名服务器上的某条记录被【人为修改】了(改成错的),那么一旦要查询这条记录,得到的就是错误的结果。这种情况称之为“域名劫持”。

谁有“域名劫持”的企图?

“域名劫持”通常是电信运营商(ISP)干的好事儿。很多宽带用的域名服务器就是 ISP 提供给你的。而天朝的 ISP 也是很奇葩的——经常耍流氓。

举例:

谷歌离开前曾经出现过:某个 ISP 跟百度勾结,把谷歌的流量重定向到百度。具体搞法是:该 ISP 篡改自己的域名服务器的记录,把里面跟 google.com 相关的域名记录的 IP 地址 修改为百度服务器的 IP 地址。如此一来,假设你用的是这个 ISP 的域名服务器,当你在浏览器输入 www.gooogle.com 的时候,你的电脑查询到的 IP 地址 其实是百度的 IP 地址,所以浏览器打开的是“百度”的主页。

如何对付“域名劫持”?

刚才说了,“域名劫持”的根源在于:域名服务器上的记录被人给改了。要对付这种耍流氓,最直接的办法就是不要使用这种流氓 ISP 提供的域名服务器,改用国外那些比较靠谱的。目前口碑最好的,大概是 Google 提供的两个域名服务器,IP 地址 分别是 8.8.8.8 和 8.8.4.4 ——这俩不光是地址好记,更重要的是,不会耍流氓。

啥是“域名污染”?

先提醒一下:“域名污染”这个词还有其它几个别名,分别是“域名欺骗”、“域名缓存投毒”(洋文叫:DNS cache poisoning)。今后看到这几个别名,要晓得是同一个意思。

“域名污染”的原理,简单说来是这样滴:当你的电脑向域名服务器发送了“域名查询”的请求,然后域名服务器把回应发送给你的电脑,这之间是有一个时间差的。如果某个攻击者能够在域名服务器的“DNS 应答”还没有到达你的电脑之前,先伪造一个错误的“DNS 应答”发给你电脑。那么你的电脑收到的就是错误的信息,并得到一个错误的 IP 地址。

谁有“域名污染”的企图?

从技术上讲,只要攻击者能够位于“你”和“域名服务器”的传输线路中间,那么攻击者就有机会搞“域名污染”。能够做到这点的,可能是一个黑客/骇客,也可能是 ISP。不过这些都不是本节聊的重点。本节的重点是 GFW——它是最有资源搞域名污染的,同时也最有意愿搞域名污染的。

举例:

比如某个国外网站,长年累月地抹黑咱们伟大光荣正确的党国,搞得咱们的“伟光正”很没面子,很不爽。那么朝廷的“真理部”就会给 GFW 下达封杀令——要求 GFW 全面封锁某某网站。对于 GFW 而言,要全面封掉某个网站,最简单的一个办法就是直接污染该网站的域名。用了这招之后,网友只要是通过【域名的方式】访问该网站,他们的电脑进行 DNS 查询 之后,多半会得到错误的结果(也就是说,查到的 IP 地址 是假的);既然拿到假的 IP 地址,当然就无法打开这个网站的页面啦。

GFW 的两种“域名污染”

刚才博主解释了“域名污染”的原理,那种形式不妨称为“直接污染”。由于 GFW 的特殊性,它不但可以做到“直接污染”,还可以做到“间接污染”。而普通的骇客顶多只能做到“直接污染”,难以做到“大范围的间接污染”。

那么这两种污染有啥区别捏?且听博主细细道来。

GFW 部署在哪?

首先有必要先扫盲一下“GFW 的部署位置”。咱们天朝的互联网只有少数几个国际出口(名气较大的是:北京出口、上海出口、广州出口)。如果你要访问天朝之外的网站,你的网络数据流就必定会经过其中的某个“国际出口”。而天朝的【每一个】国际出口都部署了 GFW 的设备。

说到 GFW 的设备,顺便插一句:

GFW 是洋文“Great FireWall”的缩写。很多同学(包括很多懂技术的同学)都望文生义,想当然地以为 GFW 就是某种“防火墙”设备。其实不然。GFW 是基于 IDS(IDS 是“入侵监测系统”的缩写)打造的。

GFW 的直接污染

因为 GFW 部署在天朝的国际出口。如果你用的是【 国外的 】域名服务器,你的“DNS 请求”必定会经过国际出口;同样,域名服务器的“DNS 应答”必定也会经过国际出口才能到你的电脑。这一来一回就给 GFW 提供了耍流氓的机会。

这种污染就是博主所说的“直接污染”。

GFW 的间接污染

刚才介绍了“使用国外域名服务器会被直接污染”。那如果你用的是【 国内的 】域名服务器捏?就会被“间接污染”。过程如下:

1. 比方说你用的是电信的 DNS 服务器,然后你想要访问某个(被封杀的)反共网站。因为这个反共网站在国外,所以反共网站对应的“权威域名服务器”肯定也是在国外。

2. 当你向“电信的 DNS 服务器”查询反共网站的域名,这台“电信的 DNS 服务器”会去找这个反共网站的上一级域名对应的“权威域名服务器”去进行“域名查询”。

3. 因为是从国外进行域名查询,相关的数据流必定要经过国际出口。一旦经过国际出口,就会被 GFW 污染。

4. 如此一来,“电信的域名服务器”拿到的是已经被污染的域名记录(里面的 IP 是错的)。而且“电信的域名服务器”会把这条错误的记录保存在自己的域名缓存中。

5. 下次如果有另一个网友也找这台“电信的域名服务”查询这个反共网站,也会查到错误的结果。

上述过程不断重复,最终会导致:全国所有的域名服务器,它们的缓存中只要是包含了那个反共网站的记录,记录中的 IP 地址 必定是错的(这个错误的 IP 地址 也就是 GFW 伪造的那个)。所以说“间接污染”是很牛逼的,可以把错误的域名记录扩散到全国。

刚才博主说了,“域名污染”也叫“域名缓存投毒”。“投毒”一词真的非常形象——就好象在某条河流的源头下毒,从而把整条河流的水都污染。在互联网时代搞“域名污染”是非常卑鄙下流的。因为 DNS 是互联网的基础设施,而“域名污染”直接破坏了互联网的基础设施。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

发表评论

扫一扫二维码分享