一篇你看了就懂的DNS詳解
時(shí)間:2023-02-04 08:12:01 | 來(lái)源:建站知識(shí)
時(shí)間:2023-02-04 08:12:01 來(lái)源:建站知識(shí)
DNS(Domain Name System,
域名系統(tǒng)),萬(wàn)維網(wǎng)上作為域名和
IP地址相互映射的一個(gè)
分布式數(shù)據(jù)庫(kù),能夠使用戶更方便的訪問(wèn)
互聯(lián)網(wǎng),而不用去記住IP。
通過(guò)域名,最終得到該域名對(duì)應(yīng)的IP地址的過(guò)程叫做域名解析(或主機(jī)名解析)。
為什么需要DNS解析域名為IP地址?
首先計(jì)算機(jī)在網(wǎng)絡(luò)上通訊時(shí)只能識(shí)別IP地址(網(wǎng)絡(luò)通訊大部分是基于TCP/IP協(xié)議,而TCP/IP是基于IP地址的),比如我要在瀏覽器中訪問(wèn)百度的地址,我可以在地址欄直接輸入14.215.177.39就能訪問(wèn)到百度的首頁(yè)。但是我們無(wú)法記住更多的IP地址。那么域名就出現(xiàn)了,域名是由一串用”.”分隔的唯一名字。所以現(xiàn)在我們?cè)L問(wèn)網(wǎng)站的時(shí)候,就可以在瀏覽器地址欄中輸入域名(
http://www.baidu.com),那么DNS就會(huì)把域名翻譯成IP,然后訪問(wèn)IP
域名
域名按照從右到左的順序來(lái)劃分優(yōu)先等級(jí),最右邊的是最高級(jí)的根域,根域就是所謂的”.”,其實(shí)我們的域名
http://www.baidu.com在配置當(dāng)中應(yīng)該是www.baidu.com.(最后有一個(gè)點(diǎn)),一般我們?cè)跒g覽器里輸入時(shí)會(huì)省略后面的點(diǎn)。接下來(lái)就是頂級(jí)域又稱一級(jí)域,一級(jí)域之后還有二級(jí)三級(jí)域。如何區(qū)分當(dāng)前域名是幾級(jí)域,可以參考域名中有幾個(gè)點(diǎn)來(lái)判斷(除了根域外),比如
http://baidu.com就是個(gè)一級(jí)域,而
http://www.baidu.com就是個(gè)二級(jí)域(它是在
http://baidu.com這個(gè)域里面有一個(gè)叫做www的主機(jī))
每一層域都會(huì)有一堆域名(DNS)服務(wù)器,DNS服務(wù)器是能提供域名解析的服務(wù)器,記錄類型可以是A(address)記錄,NS(name server)記錄,MX(mail),CNAME等,這些記錄類型后續(xù)會(huì)一一介紹到。
這里有個(gè)知識(shí)點(diǎn),百科中說(shuō)全世界只有13臺(tái)根DNS服務(wù)器,但其實(shí)這是錯(cuò)誤的觀點(diǎn),根DNS服務(wù)器只有具體的13個(gè)IP地址,但機(jī)器的數(shù)量不止13臺(tái)。
DNS服務(wù)器一般分三種,根DNS服務(wù)器,頂級(jí)DNS服務(wù)器,權(quán)威DNS服務(wù)器
接下來(lái)會(huì)講到這些DNS服務(wù)器和我們今天說(shuō)的DNS解析有什么關(guān)系,在講述DNS解析流程前先要理解什么是本地DNS
本地DNS一般是指你電腦上網(wǎng)時(shí)IPv4或者IPv6設(shè)置中填寫(xiě)的那個(gè)DNS。這個(gè)有可能是手工指定的或者是自動(dòng)分配的。
如果你的電腦是直連運(yùn)營(yíng)商(ISP)網(wǎng)絡(luò),一般默認(rèn)設(shè)置情況下DNS為ISP的服務(wù)器地址。
如果你的電腦和ISP之間還加了無(wú)線或者有線路由(一般的路由器本身還會(huì)內(nèi)置DNS轉(zhuǎn)發(fā)器),它的作用是將發(fā)往它所有的DNS請(qǐng)求轉(zhuǎn)發(fā)到上層DNS,但最終會(huì)轉(zhuǎn)發(fā)到ISP的DNS。
如果手動(dòng)修改了DNS,比如改成8.8.8.8這樣的公用DNS服務(wù)器,那么指的就是這個(gè)服務(wù)器。
本地DNS不是權(quán)威服務(wù)器,相當(dāng)于一個(gè)代理的DNS解析服務(wù)器,他會(huì)幫你迭代權(quán)威服務(wù)器返回的回答,然后把最終查到的IP返回給你。
如下圖所示,就是之后我們講到的本地DNS服務(wù)器。
- 現(xiàn)在我有一臺(tái)電腦,在瀏覽器中輸入http://www.baidu.com域名,瀏覽器會(huì)從瀏覽器的DNS緩存中檢查是否有這個(gè)網(wǎng)址的映射關(guān)系,如果有,就返回IP,完成域名解析
- 如果沒(méi)有,操作系統(tǒng)會(huì)先檢查自己本地的hosts文件是否有這個(gè)網(wǎng)址的映射關(guān)系,如果有,就返回IP,完成域名解析。看到這里大家應(yīng)該都猜到了,有DNS的地方,就有緩存。瀏覽器、操作系統(tǒng)、本地DNS、根域名服務(wù)器,它們都會(huì)對(duì)DNS結(jié)果做一定程度的緩存。
- 如果還沒(méi)有,我的電腦就要向本地DNS服務(wù)器發(fā)起請(qǐng)求查詢http://www.baidu.com這個(gè)域名。
- 本地DNS服務(wù)器拿到請(qǐng)求后,先檢查一下自己的緩存中有沒(méi)有這個(gè)地址,有的話直接返回。這個(gè)時(shí)候拿到的IP地址,會(huì)被標(biāo)記為非權(quán)威服務(wù)器的應(yīng)答
- 如果本地DNS服務(wù)器的緩存中沒(méi)有的話,本地DNS服務(wù)器會(huì)從配置文件中讀取13個(gè)根DNS服務(wù)器的地址,然后向其中一臺(tái)發(fā)起請(qǐng)求
- 根DNS服務(wù)器拿到請(qǐng)求后,知道他是com.這個(gè)頂級(jí)域名下的,所以會(huì)返回com域名中的NS記錄(用來(lái)表明哪臺(tái)服務(wù)器對(duì)該域名進(jìn)行解析),其實(shí)就是一個(gè)IP(com對(duì)應(yīng)的服務(wù)器IP)
- 本地DNS服務(wù)器根據(jù)返回的IP(com DNS服務(wù)器)發(fā)起請(qǐng)求,com DNS服務(wù)器發(fā)現(xiàn)你這請(qǐng)求的是http://baidu.com這個(gè)域,查到這個(gè)域的NS記錄,然后返回IP(http://baidu.com)
- 本地DNS服務(wù)器在根據(jù)IP(http://baidu.com DNS服務(wù)器)訪問(wèn)這些權(quán)威服務(wù)器,http://baidu.com服務(wù)器在A記錄(正向解析記錄,域名到IP地址的映射)中查找到http://www.baidu.com的IP地址,返回IP(http://www.baidu.com)
- 最終本地DNS服務(wù)器拿到用戶想訪問(wèn)的http://www.baidu.com的IP,返回給客戶端,并進(jìn)行緩存操作,以便下次使用。
看上面的圖,再理解一遍:
瀏覽器:@瀏覽器緩存,你知道
http://www.baidu.com對(duì)應(yīng)的IP么?
瀏覽器緩存:知道,是xxxx
瀏覽器:好的,我去訪問(wèn)啦!
瀏覽器緩存:不知道
瀏覽器:@系統(tǒng)緩存,你知道
http://www.baidu.com對(duì)應(yīng)的IP么?
系統(tǒng)緩存:我看下hosts哦,找到了,是xxxx
瀏覽器:好的,我去訪問(wèn)啦~
系統(tǒng)緩存:我看下hosts哦,哎呀?jīng)]有找到哎
瀏覽器:好的,我無(wú)能為力了,@客戶機(jī)想想辦法
客戶機(jī):我去問(wèn)問(wèn)@本地DNS服務(wù)器,你知道
http://www.baidu.com對(duì)應(yīng)的IP么?
本地DNS服務(wù)器:我去DNS服務(wù)器緩存中找找,找到了,是xxxx
客戶機(jī):@瀏覽器,是xxxx,你去訪問(wèn)吧
瀏覽器:好的,我去訪問(wèn)啦#
本地DNS服務(wù)器:我去DNS服務(wù)器緩存中找找,哎呀?jīng)]有找到哎
本地DNS服務(wù)器:想個(gè)辦法,先去找大哥@根DNS服務(wù)器,你知道
http://www.baidu.com對(duì)應(yīng)的IP么?
根DNS服務(wù)器:我知道com DNS服務(wù)器的IP,你叫他給你查
本地DNS服務(wù)器:好的,@com DNS服務(wù)器,你知道
http://www.baidu.com對(duì)應(yīng)的IP么?
com DNS服務(wù)器:我知道
http://baidu.com DNS服務(wù)器的IP,你叫他給你查
本地DNS服務(wù)器:怎么開(kāi)始踢皮球了,@
http://baidu.com DNS服務(wù)器,你知道
http://www.baidu.com對(duì)應(yīng)的IP么?
http://baidu.com DNS服務(wù)器:我這里查到了,IP是xxxx
本地DNS服務(wù)器:太開(kāi)心了@客戶機(jī)IP是xxxx。這么麻煩,先記到DNS服務(wù)器緩存,免得下次又這么折騰。
客戶機(jī):@瀏覽器 IP是xxxx
瀏覽器:好的,我去訪問(wèn)啦
上面就把正常的DNS解析流程講解完畢了,其中有提到的迭代查詢,在整個(gè)DNS解析過(guò)程中會(huì)存在遞歸查詢過(guò)程和迭代查詢過(guò)程。
學(xué)習(xí)地址:Dpdk/網(wǎng)絡(luò)協(xié)議棧/vpp/OvS/DDos/NFV/虛擬化/高性能專家 (更多DPDK學(xué)習(xí)資料有需要的可以自行報(bào)名學(xué)習(xí),免費(fèi)訂閱,永久學(xué)習(xí))也可以點(diǎn)擊這里加Q群免費(fèi)領(lǐng)取,關(guān)注我持續(xù)更新哦!!
相關(guān)視頻推薦
dpdk高性能數(shù)據(jù)處理框架/netmap/協(xié)議棧/硬件/零拷貝/柔性數(shù)組/vhost/virtio/虛擬化/網(wǎng)卡/內(nèi)核
tcp是如何一層一層封裝出來(lái)的(一)/udp/ether/源碼/協(xié)議棧/dpdk/spdk/vpp/柔性數(shù)組/網(wǎng)卡/內(nèi)核驅(qū)動(dòng)/ovs/虛擬化
我的電腦向本地DNS服務(wù)器的查詢一般都是采用遞歸查詢
本地DNS服務(wù)器向其他DNS服務(wù)器的查詢是迭代查詢
總結(jié)下就是發(fā)起查詢的機(jī)器改變了就是遞歸查詢,反之,發(fā)起查詢的機(jī)器不變就是迭代查詢。
DNS解析過(guò)程中解釋了DNS服務(wù)器記錄中的NS記錄和A記錄,那么接下來(lái)就看下DNS服務(wù)器中的這些記錄的作用
其實(shí)在上面DNS解析
http://www.baidu.com域名的時(shí)候,在實(shí)際操作中就有遇到CNAME記錄。
當(dāng)我們向
http://baidu.com請(qǐng)求
http://www.baidu.com的時(shí)候,返回了一個(gè)別名
http://www.a.shifen.com一般解析過(guò)程中遇到CNAME,查詢會(huì)終止,重新向根DNS服務(wù)器發(fā)起查詢別名的請(qǐng)求,最終返回給電腦
http://www.baidu.com 的CNAME以及別名的IP。
以上所有流程可以使用nslookup或dig(linux自帶,windows可裝)命令查詢驗(yàn)證
DNS劫持
DNS決定的是我們的域名將解析到哪一個(gè)IP地址的記錄,是基于UDP協(xié)議的一種應(yīng)用層協(xié)議。這種攻擊的前提是攻擊者掌控了你的本地DNS服務(wù)器
攻擊者劫持了DNS服務(wù)器,通過(guò)某些手段取得某域名的解析記錄控制權(quán),進(jìn)而修改此域名的解析結(jié)果,導(dǎo)致用戶對(duì)該域名地址進(jìn)行訪問(wèn)的時(shí)候,由原來(lái)的IP地址轉(zhuǎn)入到修改后的IP地址。結(jié)果就是讓正確的網(wǎng)址不能解析或者是被解析到另一個(gè)網(wǎng)址的IP,實(shí)現(xiàn)獲取用戶資料或者破壞原有網(wǎng)址正常服務(wù)的目的。
原理如下圖所示:
由于域名劫持往往只能在特定的被劫持的網(wǎng)絡(luò)范圍內(nèi)進(jìn)行,所以在此范圍外的DNS服務(wù)器能夠返回正常的IP地址,或者修改DNS以及直接IP訪問(wèn)。
一般而言,用戶上網(wǎng)的DNS服務(wù)器都是運(yùn)營(yíng)商分配的,所以在這個(gè)節(jié)點(diǎn)上,運(yùn)營(yíng)商可以做一些事情,比如,你去訪問(wèn)
http://www.a.com,正常DNS應(yīng)該返回10.0.0.1,而運(yùn)營(yíng)商劫持后,會(huì)返回一個(gè)運(yùn)營(yíng)商的中間服務(wù)器IP,訪問(wèn)該服務(wù)器會(huì)一致性的返回302(暫時(shí)重定向),讓用戶瀏覽器跳轉(zhuǎn)到預(yù)處理好的帶廣告的網(wǎng)頁(yè),在該網(wǎng)頁(yè)中再通過(guò)iframe打開(kāi)用戶原先訪問(wèn)的地址。
DNS污染
又稱域名服務(wù)器緩存投毒(DNS cache poisoning),它和DNS劫持的不同之處,在于污染針對(duì)的是DNS緩存,是在查詢信息到達(dá)目標(biāo)DNS服務(wù)器前,經(jīng)過(guò)的節(jié)點(diǎn)上做手腳,而劫持是DNS服務(wù)器中記錄的是錯(cuò)誤的內(nèi)容。
總結(jié)下就是DNS劫持是修改DNS服務(wù)器,DNS污染是修改DNS緩存。
看下圖舉個(gè)例子:對(duì)于GFW來(lái)說(shuō),DNS劫持用于國(guó)內(nèi)服務(wù)器,因?yàn)榭梢孕薷姆?wù)器中的DNS記錄,而對(duì)于國(guó)外服務(wù)器GFW無(wú)法更改其內(nèi)容,故采用DNS污染的方式篡改用戶收到的信息。其中的過(guò)程是,當(dāng)你向國(guó)外DNS服務(wù)器查詢DNS記錄時(shí),這些流量走到國(guó)際出口帶寬的時(shí)候會(huì)遇到GFW的關(guān)鍵字審查,如果上了黑名單,GFW會(huì)立即向你返回一個(gè)虛假的DNS記錄。上面也說(shuō)到DNS走的是UDP協(xié)議,加上DNS查詢結(jié)果只認(rèn)最快返回的,所以一定是先收到了GFW給你返回的虛假DNS記錄,就算馬上你收到了真正的來(lái)自國(guó)外DNS的回復(fù),也會(huì)被你的系統(tǒng)無(wú)視掉。這種攻擊也被稱為中間人攻擊。
原文鏈接:https://www.cnblogs.com/anyhoo/p/10369589.html