=w=大概今天15:30的时候,Ovear正在调试新的服务器,结果发现肿么忽然上不去了。。结果ping了如下,结果吓尿了,Ovear的域名都指向到[65.49.2.178]这个IP。Ovear第一反应就是,尼玛DNSPOD又被黑了! 为何说DNSPOD被黑了呢,其实之前DNSPOD就出过一次相似的问题=。=,致使全部的域名都跪了,恰好Ovear这个域名还有测试的几个域名都是那里的,而后就到某交流群吐槽。结果管理员说他们的DNS被污染了,Ovear心想不会是全国DNS都被污染了吧。结果乌鸦嘴说中了。。还真的是全国劫持。php
而后Ovear就很好奇,究竟是怎么回事呢~有谁能作到这样的事情~因而就有了如下的分析和科普~css
——如下内容为Ovear家电脑中病毒所致,跟本人无任何关系,谢绝跨省——html
balablabala说了这么久,确定有同窗问了,窝又不是学计算机的,(╯‵□′)╯︵┻━┻dns是什么玩意,跟我有什么关系!html5
那么DNS是什么呢,Ovear就来科普下┑( ̄Д  ̄)┍。java
咱们访问通常是经过域名[Domain]来访问的,咦DNS怎么也是D开头的,难道有关系?说对了!就是有关系:DNS的全称实际上是[Domain Name System]翻译过来就是域名系统。node
在互联网中,是只存在IP的,IP其实就是一串数字,至关于你家里的门牌号,你们在网络中想找到你,必须经过这个,因此IP对于每一个人来讲是惟一的。可是第四代IP都是http://XXX.XXX.XXX.XXX这样的,多难记啊,谁会没事记住IP呢,更况且之后天那么长的IPV6,要记住不是得要人命!python
这时候一个聪明的科学家出来,咱们给IP加一个别名,你们经过别名不就能够不记住这个IP,也能够知道这个IP了!因而就有了域名[Domain]这个东西.mysql
当你访问Ovear’s Blog的时候jquery
电脑的DNS解析系统就会自动问DNS服务器:尼知道Ovear’s Blog对应的IP地址是神马么?
- DNS:窝帮你查查,奥,找到了,IP是[122.10.94.169].
- Ovear的电脑:谢啦,再见
- DNS:恩
对应现实就是,问知道张三的人:尼知道张三家在哪里么? 回答 在南山区 balabalabla。
固然这样解释仍是不怎么恰当的,由于一个DNS服务器是不可能知道全部域名的地址的,由于这须要耗费极大地代价,因此这时候就出现了递归DNS和根DNS。
(因为篇幅缘由,Ovear就简单的说一下,其实仍是有问题的。Ovear之后再写一篇文章详细阐述下DNS的工做原理,或者看[Domain Name System] QAQ)
(补充:QAQ这里Ovear说的有点过简单了,其实根DNS(ROOT DNS)指的是全球一共13台的根DNS,负责记录各后缀所对应的TOPLEVEL Domain Server[顶级域名根服务器],而后接下来的就是[权威DNS服务器],就是这个域名用的DNS服务器(能够在whois中看到)
总结一下:
- [根服务器]:全球一共13个A-M[.http://root-servers.net],储存着各个后缀域名的[顶级域名根服务器]
- [顶级域名根服务器]:每一个后缀对应的DNS服务器,存储着该[后缀]全部域名的权威DNS
- [权威DNS]:这个域名所使用的DNS,好比说我设置的DNSPOD的服务器,权威DNS就是DNSPOD。在WHOIS(一个查看域名信息的东西)中能够看到。储存着这个域名[对应着的每条信息] 如IP等~
因此正确的解析过程应该跟下面的图同样
用户使用的DNS(边缘DNS)->(还会网上推不少级最终到)根DNS->顶级域名根服务器->权威DNS)
根DNS是什么呢?你们想一想,每一个域名都有一个后缀,好比说ovear是[.info]后缀的。那么就有一个专门记录[.info]后缀的dns服务器,其余后缀也同样。这个DNS就是该域名的根DNS。
那么递归DNS呢?其实递归DNS就是一个代理人,是用来缓解[根DNS]压力的,若是你们都去问[根DNS],那[根DNS]不早就跪了。毕竟一我的(网站)的地址不是常常变的,因此就有了TTL这一说法,根据DNS的规定,在一个TTL时间呢,你们就认为你家里(域名所指向的IP)的地址是不会变的,因此代理人[递归DNS]在这个时间内,是只会问一次[根DNS]的,若是你第二次问他,他就会直接告诉你域名所指向的IP地址。这样就能够解决[根DNS]负载过大的问题啦。
顺便这一张图也能够很准确反映出来以前所说的~ =w=
说了这么久,口水都干了,那么DNS到底跟此次事件有什么关系呢~
首先来看张图
瓦特!肿么这么多域名都指向同一个IP了,这是什么状况0 0。其实这就是典型的[DNS污染]了。
咱们知道互联网有两种协议,一种是TCP,一种则是UDP了(知道泥煤啊(╯‵□′)╯︵┻━┻都说我不是学计算机的了)。
TCP和UDP的主要差异就是:能不能保证传递信息的可靠性。UDP是无论消息是否到达了目标,也无论经过什么途径的,他只管我发出去了就好,因此UDP比TCP快得多,可是可靠性没有TCP好。
而DNS查询默认就是用的是UDP,那么就很好劫持啦。在UDP包任何传输的路途上,直接拦截,而后返回给接收端就好了。
啧啧,说道这你们也隐隐约约知道此次事件的问题了吧,范围如此之广的劫持,必需要在各个省市的主干网上进行,而能处理这么大数据,同时能控制这么多主干网的。。啧啧啧。。。没错!就是***了~至于***是什么,Ovear在这就不说了,否则可能你们都见不到Ovear了QAQ。
说道这里,Ovear就准备手动查一下,究竟是不是所推测的***呢?因而拿到了这个图(From XiaoXin)
与此同时运维也在各地的服务器上开始了跟踪查询,发现全国各地解析时间均为25ms左右。这时候结论就出来了。
这样就明显了,确定是***作的了~~因而Ovear又好奇的查了下,这个IP是什么来头,为何都要指向到这里去,因而Ovear发现了一些好玩的东西~(65.49.2.0/24)
从侧面点出了这次事件的始做俑者。
那么某FW为何要这么作呢?Ovear在这里作一个无责任的推测,最有可能的就是:某FW的员工原本是想屏蔽这个IP段的,可是呢一不当心点进去了DNS污染这个选项,而后又没写污染目标,因而就全局污染了啧啧啧~
可是有些童鞋会问了(╯‵□′)╯︵┻━┻为何他们都说用8.8.8.8就没事了~
其实这样子说是不正确的,由于Ovear以前用的就是8.8.8.8,上面也说了DNS查询默认使用的UDP查询,因此无论你用什么,照样劫持不误。其实8.8.8.8没问题是由于污染事件已经基本结束致使的,那么为何污染结束后其余国内DNS都不能用,而Goole的DNS确能够正常的使用~因而Ovear就找到了张有趣的图片~
我先来解释下上面命令的用途吧~这个命令是用来直接向DNS服务器查询域名的~
其中的[-vc]参数是强制使用TCP来查询DNS服务器,这样就能够避免UDP污染的地图炮。
那么为何污染结束后,DNS还会受到污染呢?其实缘由很简单。Ovear以前说了,[递归DNS]是须要询问[根DNS]的,而默认的询问方式是采用的UDP,因此在国内的DNS服务器,天然就受到污染了。而以前Ovear也提到过TTL这件事~
在TTL周期内,根据协议[递归DNS]是直接吧结果缓存在本身那,是不会再去查询[根DNS]的,因此国内的DNS就把错误的结果缓存起来了~
而Google的DNS服务器基本都是在国外,因此查询的时候影响并不大,可是国内挺多域名使用DNSPOD啦,DNSLA的DNS,因此Google进国内查,仍是会受到必定影响的。
所以,若是要彻底避免此次的影响,有两个条件
一、你的域名的DNS必须是在国外 二、你查询的DNS必须在国外,并且若是在污染期须要经过TCP查询。
这样就能够避免这个问题了。
而后Ovear又手贱查了下此次的TTL,啧啧
若是没有人员来手动干预,此次的事件仍是要持续蛮久的~。
哎呀先不说了,Ovear去开门收个快递~,双十二买的好东西终于到了,咕嘿嘿期待了好久呢~回来继续说O(∩_∩)O~~
最新评论