=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~~
最新評論