一、DNS 是啥?
DNS 是洋文“Domain Name System”的縮寫,直譯過來就是“域名系統(tǒng)”。
二、DNS 有啥用?
咱們每天打交道的這個互聯(lián)網(wǎng),其底層的基石是“IP”。IP 是“Internet Protocol”的縮寫,中文就“互聯(lián)網(wǎng)協(xié)議”(光看名字就知道這玩意兒很重要)。咱們?nèi)粘S玫哪切┗ヂ?lián)網(wǎng)軟件(瀏覽器、聊天工具、下載工具、等等)在工作時,必須依靠【IP地址】才能進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)傳輸。
“IP地址”是設(shè)計給軟件用滴——雖然軟件很容易處理,但對于人類而言,卻很難記憶。于是,后來又發(fā)明了 DNS。有了 DNS,人類就不需要記住長長的一串 IP地址,而只需記住“域名”(域名通常更短,也更具有可讀性,例如)。
比如你上網(wǎng)的時候,只需在地址欄輸入網(wǎng)站的“域名”,而不用輸入網(wǎng)站的“IP地址”。然后電腦系統(tǒng)會利用 DNS 來把“域名”翻譯成“IP地址”。這個翻譯的過程術(shù)語叫“域名解析/DNS解析”。
三、域名的結(jié)構(gòu)是咋樣?
域名是按照“樹形結(jié)構(gòu)”組織的。不懂得啥是“樹形結(jié)構(gòu)”的同學(xué),可以對照一下電腦硬盤上的目錄結(jié)構(gòu)。域名的結(jié)構(gòu)和目錄結(jié)構(gòu)很類似,目錄結(jié)構(gòu)是用“斜杠”作分隔符,而域名是用小數(shù)點(diǎn)作分隔符。兩者的主要區(qū)別在于:目錄結(jié)構(gòu)名稱的形式是從左到右(上級在左,下級在右),而域名是從右到左(上級在右,下級在左)。
以網(wǎng)易的域名為例:
3g.163.com 的上級域名是 .163.com
163.com 的上級域名是 .com
這里的 .com 就被稱為頂級域名(Top-Level Domain,簡稱 TLD),跟 .com 類似的那些 .net .org .gov 也是頂級域名。還有那些以國家/地區(qū)的代碼命名的(比如 .cn .tw .hk .jp 等等)也是頂級域名。
四、“域名解析”是咋實(shí)現(xiàn)?
如果你曾經(jīng)配置過電腦的網(wǎng)卡,應(yīng)該記得上面除了有IP地址、掩碼等設(shè)置,還有一項(xiàng)設(shè)置是“DNS服務(wù)器/域名服務(wù)器”。這項(xiàng)設(shè)置就是用來幫助你的電腦進(jìn)行域名解析的。你可以把這個“DNS服務(wù)器”想象成114查號臺。每當(dāng)電腦需要翻譯某個域名,就找這個域名服務(wù)器查詢,然后域名服務(wù)器會告訴你的電腦,要查詢的域名對應(yīng)的IP地址是啥。
下面簡單說一下,你的電腦進(jìn)行域名解析的過程。
為了敘述方便,以網(wǎng)易為例。當(dāng)你在瀏覽器的地址欄中輸入 ,然后敲回車,這時候電腦軟件會進(jìn)行如下一系列事情。
1. 首先根據(jù)輸入的網(wǎng)址,提取出域名(
2. 如果你在系統(tǒng)中配置了 Hosts 文件,那么電腦會先查詢 Hosts 文件,看這個 否已經(jīng)在 Hosts 里面有了對應(yīng)的記錄。如果有,直接就可以拿到該記錄中的 IP地址,過程就結(jié)束了。
3. 如果 Hosts 里面沒有這個別名,那么電腦會看你有沒有設(shè)置域名服務(wù)器(DNS 服務(wù)器)。如果你的系統(tǒng)沒有設(shè)置域名服務(wù)器,那電腦就沒轍了,瀏覽器直接會報錯,說網(wǎng)站的域名無法解析。過程就結(jié)束了。
4. 如果你設(shè)置過“域名服務(wù)器”,那么電腦會向這個域名服務(wù)器發(fā)送一個域名查詢(DNS query)的請求,然后等候域名服務(wù)器的回應(yīng)。
5. 如果域名服務(wù)器始終沒有回應(yīng)(比如域名服務(wù)器掛了,或域名服務(wù)器的IP填錯了,或請求被 攔截了),那么電腦還是沒轍(瀏覽器會報錯)。
6. 如果域名服務(wù)器回應(yīng)了,那么你的電腦就可以根據(jù)域名服務(wù)器的應(yīng)答信息,得到該域名的 IP地址。之后瀏覽器就會向這個 IP地址 對應(yīng)的 Web 端口發(fā)送 HTTP 請求。
通常情況下,電腦拿到的(DNS服務(wù)器)應(yīng)答信息是正確的——也就是說,應(yīng)答中的 IP地址 確實(shí)對應(yīng)那個域名——這種情況下,你的網(wǎng)絡(luò)軟件就可以正常工作了。
但是在某些國家,例如CHAOXIAN,電腦拿到的 DNS 應(yīng)答有可能是【錯的】。為啥會這樣捏,本文的后半部,俺會介紹一下“域名劫持”和“域名污染”。
五、域名服務(wù)器如何知道這些信息?
(一)域名的緩存
大伙兒平時使用的域名服務(wù)器,技術(shù)術(shù)語叫“遞歸域名服務(wù)器”?!斑f歸服務(wù)器”是面向普通網(wǎng)友的。剛才介紹“域名解析”的時候提到的服務(wù)器就是“遞歸服務(wù)器”。
“遞歸服務(wù)器”的內(nèi)部通常會有一個 DNS記錄 的緩存——這個緩存是為了提高查詢效率的。當(dāng)某臺電腦向遞歸服務(wù)器發(fā)起域名查詢時,遞歸服務(wù)器首先看自己的緩存中有沒有該域名的記錄,如果有,直接就回復(fù)該記錄給查詢的電腦。
萬一對方想要查詢的域名沒找到,咋辦捏?這時候就要進(jìn)行緩存的同步。
(二)緩存的同步
下面就拿網(wǎng)易的域名為例,說說這種情況的處理流程。
1. 對方查詢3g.163.com 這個域名,“遞歸服務(wù)器”發(fā)現(xiàn)自己的緩存中沒有
2. “遞歸服務(wù)器”會先去找“根域名服務(wù)器”幫忙,“根服務(wù)器”會告訴“遞歸服務(wù)器”說:這個域名屬于 com 這個分支之下,你去找 com 這個域名的“權(quán)威服務(wù)器”,這個權(quán)威服務(wù)器的 IP地址 是 xxx。
3. 然后“遞歸服務(wù)器”根據(jù)拿到的這個 xxx地址,又去找“com 域名的權(quán)威服務(wù)器”?!癱om 域名的權(quán)威服務(wù)器”告訴它:你應(yīng)該去找“163.com 域名的權(quán)威服務(wù)器”,這個權(quán)威服務(wù)器的 IP地址 是 yyy
4. 然后“遞歸服務(wù)器”又屁顛屁顛地去找“163.com 域名的權(quán)威服務(wù)器”。這時候“163.com 域名的權(quán)威服務(wù)器”才會告訴它,3g.163.com 這個域名的 IP地址 到底是多少。
大伙兒看到?jīng)]有?整個過程如同“踢皮球”,效率是很低的。所以俺前面提到,“遞歸域名服務(wù)器”必須得有一個緩存,以此來優(yōu)化效率(不用每次查詢都來一次“踢皮球”)。
(三)同步的周期
說完了“域名的同步”,順便提一下“同步的周期”。
因?yàn)榛ヂ?lián)網(wǎng)上的域名信息是有可能發(fā)生變化的。比如增加了某個新域名,注銷了某個舊域名,或者某個域名對應(yīng)的 IP地址 變了。所以,“遞歸服務(wù)器”上保留的緩存中,每一條域名記錄都有一個生命周期(可能是幾分鐘,也可能是幾小時)。如果某條記錄的生命周期過了,就會被刪除,然后重新同步。
六、啥是“域名劫持”?
剛才說了,域名服務(wù)器上都會保存一大堆的域名記錄(每條記錄包含“域名”和“IP地址”)。當(dāng)收到域名查詢的時候,域名服務(wù)器會從這堆記錄中找到對方想要的,然后回應(yīng)給對方。
如果域名服務(wù)器上的某條記錄被【人為修改】了(改成錯的),那么一旦要查詢這條記錄,得到的就是錯誤的結(jié)果。這種情況稱之為“域名劫持”。
★誰有“域名劫持”的企圖?
“域名劫持”通常是電信運(yùn)營商(ISP)干的好事兒。很多寬帶用戶用的域名服務(wù)器就是 ISP 提供給你的。
舉例:
前幾年曾經(jīng)出現(xiàn)過:某個 ISP 跟某網(wǎng)站勾結(jié),把維基百科的流量重定向到XX。具體搞法是:該 ISP 篡改自己的域名服務(wù)器的記錄,把里面跟維基百科 相關(guān)的域名記錄的 IP地址 修改為XX的 IP地址。如此一來,假設(shè)你用的是這個 ISP 的域名服務(wù)器,當(dāng)你在瀏覽器輸入 的時候,你的電腦查詢到的 IP地址 其實(shí)是XX的 IP地址,所以瀏覽器打開的是“XX”的主頁。
★如何對付“域名劫持”?
剛才說了,“域名劫持”的根源在于:域名服務(wù)器上的記錄被人給改了。要對付這種耍流氓,最直接的辦法就是不要使用這種流氓 ISP 提供的域名服務(wù)器,改用國外那些比較靠譜的。目前口碑最好的,大概是 Google 提供的兩個域名服務(wù)器,IP地址 分別是 8.8.8.8 和 8.8.4.4 ——這倆不光是地址好記,更重要的是,不會耍流氓。
七、啥是“域名污染”?
先提醒一下:“域名污染”這個詞還有其它幾個別名,分別是“域名欺騙”、“域名緩存投毒”(洋文叫:DNS cache poisoning)。今后看到這幾個別名,要曉得是同一個意思。
“域名污染”的原理,簡單說來是這樣滴:當(dāng)你的電腦向域名服務(wù)器發(fā)送了“域名查詢”的請求,然后域名服務(wù)器把回應(yīng)發(fā)送給你的電腦,這之間是有一個時間差的。如果某個攻擊者能夠在域名服務(wù)器的“DNS應(yīng)答”還沒有到達(dá)你的電腦之前,先偽造一個錯誤的“DNS應(yīng)答”發(fā)給你電腦。那么你的電腦收到的就是錯誤的信息,并得到一個錯誤的 IP地址。
★誰有“域名污染”的企圖?
從技術(shù)上講,只要攻擊者能夠位于“你”和“域名服務(wù)器”的傳輸線路中間,那么攻擊者就有機(jī)會搞“域名污染”。能夠做到這點(diǎn)的,可能是一個黑客/駭客,也可能是 ISP。
★某國家防火墻的兩種“域名污染”
剛才俺解釋了“域名污染”的原理,那種形式不妨稱為“直接污染”。由于某國家防火墻的特殊性,它不但可以做到“直接污染”,還可以做到“間接污染”。而普通的駭客頂多只能做到“直接污染”,難以做到“大范圍的間接污染”。
那么這兩種污染有啥區(qū)別捏?且聽俺細(xì)細(xì)道來。
◇某國家防火墻部署在哪?
首先有必要先掃盲一下“某國家防火墻(其實(shí)是一種IDS,也就是入侵檢測系統(tǒng))的部署位置”。X國互聯(lián)網(wǎng)只有少數(shù)幾個國際出口(名氣較大的是:A出口、B出口、C出口)。如果你要訪問國外網(wǎng)站,你的網(wǎng)絡(luò)數(shù)據(jù)流就必定會經(jīng)過其中的某個“國際出口”。
◇某國家防火墻的直接污染
因?yàn)槟硣曳阑饓Σ渴鹪趪H出口。如果你用的是【國外的】域名服務(wù)器,你的“DNS請求”必定會經(jīng)過國際出口;同樣,域名服務(wù)器的“DNS應(yīng)答”必定也會經(jīng)過國際出口才能到你的電腦。這一來一回就給某國家防火墻 提供了機(jī)會。
這種污染就是俺所說的“直接污染”。
◇某國家防火墻 的間接污染
剛才介紹了“使用國外域名服務(wù)器會被直接污染”。那如果你用的是【國內(nèi)的】域名服務(wù)器捏?就會被“間接污染”。過程如下:
1. 比方說你用的是電信的 DNS服務(wù)器,然后你想要訪問某個被不受歡迎的網(wǎng)站。
2. 對于不受歡迎的網(wǎng)站,其網(wǎng)站服務(wù)器必定在國外,而且網(wǎng)站的域名肯定也不會使用 CN 之下的域名。所以,被封鎖的網(wǎng)站,其上級域名的“權(quán)威域名服務(wù)器”肯定也是在國外。
3. 當(dāng)你向“電信的DNS服務(wù)器”查詢反共網(wǎng)站的域名,這臺“電信的DNS服務(wù)器”就會去找這個不受歡迎的網(wǎng)站的上一級域名對應(yīng)的“權(quán)威域名服務(wù)器”去進(jìn)行“域名查詢”。
4. 因?yàn)槭菑膰膺M(jìn)行域名查詢,相關(guān)的數(shù)據(jù)流必定要經(jīng)過國際出口。一旦經(jīng)過國際出口,就會被 某國家防火墻 污染。
5. 如此一來,“電信的域名服務(wù)器”拿到的是已經(jīng)被污染的域名記錄(里面的IP是錯的)。而且“電信的域名服務(wù)器”會把這條錯誤的記錄保存在自己的域名緩存中。
6. 下次如果有另一個網(wǎng)友也找這臺“電信的域名服務(wù)”查詢這個不受歡迎的網(wǎng)站,也會查到錯誤的結(jié)果。
上述過程不斷重復(fù),最終會導(dǎo)致:全國所有的域名服務(wù)器,它們的緩存中只要是包含了不受歡迎的網(wǎng)站的記錄,記錄中的 IP地址 必定是錯的(這個錯誤的 IP地址 也就是 某國家防火墻 偽造的那個)。所以說“間接污染”是很牛逼的,可以把錯誤的域名記錄擴(kuò)散到全國。
剛才俺說了,“域名污染”也叫“域名緩存投毒”?!巴抖尽币辉~真的非常形象——就好象在某條河流的源頭下毒,從而把整條河流的水都污染。“域名污染”直接破壞了互聯(lián)網(wǎng)的基礎(chǔ)設(shè)施。