圖解DNS

DNS報文結構

在這裏插入圖片描述

  1. 基礎結構部分

DNS報文基礎部分爲DNS首部。其中包含了事務ID,標誌,問題計數,回答資源計數,回答計數,權威名稱服務器計數和附加資源記錄數。

  • 事務ID:報文標識,用來區分DNS應答報文是對哪個請求進行響應。

  • 標誌:DNS報文中標誌字段。

  • 問題計數:DNS查詢請求了多少次。

  • 回答資源記錄數:DNS響應了多少次。

  • 權威名稱服務器計數: 權威名稱服務器數目。

  • 附加資源記錄數: 權威名稱服務器對應IP地址的數目。

基礎結構中的標誌字段細分如下:
在這裏插入圖片描述

  • QR(Response):查詢請求,值爲0;響應爲1。

  • Opcode:操作碼。0表示標準查詢;1表示反向查詢;2服務器狀態請求。

  • AA(Authoritative):授權應答,該字段在響應報文中有效。通過0,1區分是否爲權威服務器。如果值爲 1 時,表示名稱服務器是權威服務器;值爲 0 時,表示不是權威服務器。

  • TC(Truncated):表示是否被截斷。當值爲1的時候時,說明響應超過了 512字節並已被截斷,此時只返回前512個字節。

  • RD(Recursion Desired):期望遞歸。該字段能在一個查詢中設置,並在響應中返回。該標誌告訴名稱服務器必須處理這個查詢,這種方式被稱爲一個遞歸查詢。如果該位爲 0,且被請求的名稱服務器沒有一個授權回答,它將返回一個能解答該查詢的其他名稱服務器列表。這種方式被稱爲迭代查詢。

  • RA(Recursion Available):可用遞歸。該字段只出現在響應報文中。當值爲 1 時,表示服務器支持遞歸查詢。

  • Z:保留字段,在所有的請求和應答報文中,它的值必須爲 0。

  • rcode(Reply code):通過返回值判斷相應的狀態。

當值爲0時,表示沒有錯誤;
當值爲1時,表示報文格式錯誤(Format error),服務器不能理解請求的報文;
當值爲2時,表示域名服務器失敗(Server failure),因爲服務器的原因導致沒辦法處理這個請求;
當值爲3時,表示名字錯誤(Name Error),只有對授權域名解析服務器有意義,指出解析的域名不存在;
當值爲4時,表示查詢類型不支持(Not Implemented),即域名服務器不支持查詢類型;
當值爲5時,表示拒絕(Refused),一般是服務器由於設置的策略拒絕給出應答,如服務器不希望對某些請求者給出應答。

  1. 問題部分

該部分是用來顯示DNS查詢請求的問題,其中包含正在進行的查詢信息,包含查詢名(被查詢主機名字)、查詢類型、查詢類。

  • 查詢名:一般爲查詢的域名,也可能是通過IP地址進行反向查詢。

  • 查詢類型:查詢請求的資源類型。常見的如果爲A類型,表示通過域名獲取IP。具體如下圖所示。

在這裏插入圖片描述

  • 查詢類:地址類型,通常爲互聯網地址爲1。
  1. 資源記錄部分

資源記錄部分包含回答問題區域,權威名稱服務器區域字段、附加信息區域字段,格式如下:

在這裏插入圖片描述

  • 域名:所請求的域名。

  • 類型:與問題部分查詢類型值一直。

  • 類:地址類型,和問題部分查詢類值一樣。

  • 生存時間:以秒爲單位,表示資源記錄的生命週期。

  • 資源數據長度:資源數據的長度。

  • 資源數據:按照查詢要求返回的相關資源數據。

DNS解析詳解

知道了DNS大概是什麼,它的域名結構和報文結構,是時候看看到底怎麼解析的以及如何保證域名的解析比較穩定和可靠。

  1. DNS核心系統
  • 根域名服務器(Root DNS Server),大哥,管理頂級域名服務並放回頂級域名服務器IP,比如"com",“cn”。

  • 頂級域名服務器(Top-level DNS Server),每個頂級域名服務器管理各自下屬,比如com可以返回baidu.com域名服務器的IP。

  • 權威域名服務器(Authoritative DNS Server),管理當前域名下的IP地址,比如Tencent.com可以返回www.tencent.com的IP地址。

在這裏插入圖片描述
舉個例子,假設我們訪問"www.google.com":

  • 訪問根域名服務器,這樣我們就會知道"com"頂級域名的地址。

  • 訪問"com"頂級域名服務器,可知道"google.com"域名服務器的地址。

  • 最後方位"google.com"域名服務器,就可知道"www.google.com"的IP地址。

嘿嘿,目前全世界13組根域名服務器還有上百臺鏡像,但是爲了讓它能力更強,處理任務效率更高,儘量減少域名解析的壓力,通常會加一層"緩存",意思是如果訪問過了,就緩存,下一次再訪問就直接取出,也就是咱麼經常配置的"8.8.8.8"等。

操作系統中同樣也對DND解析做緩存,比如說曾訪問過"www.google.com"。

其次,還有我們熟知的hosts文件,當在操作系統中沒有命中則會在hosts中尋找。

這樣依賴,相當於有了DNS服務器,操作系統的緩存和hosts文件,能就近(緩存)完成解析就好,不用每次都跑到很遠的地方去解析,這樣大大減輕的DNS服務器的壓力。畫了一個圖,加深印象:

在這裏插入圖片描述
嗯?想必應該知道這個過程了,我們再舉個例子,假設我們訪問www.qq.com:

  • 客戶端發送一個DNS請求,請問qq你的IP的什麼啊,同時會在本地域名服務器(一般是網絡服務是臨近機房)打聲招呼。

  • 本地收到請求以後,服務器會有個域名與IP的映射表。如果存在,則會告訴你,如果想訪問qq,那麼你就訪問XX地址。不存在則會去問上級(根域服務器):"老鐵,你能告訴我www.qq.com"的IP麼。

  • 根DNS收到本地DNS請求後,發現是.com,“www.qq.com喲,這個由.com大哥管理,我馬上給你它的頂級域名地址,你去問問它就好了”。

  • 這個時候,本地DNS跑去問頂級域名服務器,“老哥,能告訴下www.qq.com"的ip地址碼”,這些頂級域名負責二級域名比如qq.com。

  • 頂級域名回覆:“小本本記好,我給你www.qq.com區域的權威DNS服務器地址”,它會告訴你。

  • 本地DNS問權威DNS服務器:“兄弟,能不能告訴我www.qq.com對應IP是啥”。

  • 權威DNS服務器查詢後將響應的IP地址告訴了本地DNS,本地服務器將IP地址返回給客戶端,從而建立連接。

DNS進階之新玩法

這裏主要分享DNS(GSLB)的全局負載均衡。不是所有的互聯網服務都適用於GSLB。

全局負載均衡採用的主要技術是智能DNS,它綜合多種不同的策略(比如根據地理位置或者根據繁忙程度的權重)將客戶訪問的域名解析到不同的線路上。開啓介紹之前,再一次複習下DNS中A記錄和NS記錄。

  • A記錄
    A記錄是名稱解析的重要記錄,它用於將特定的主機名映射到對應主機的IP地址上。你可以在DNS服務器中手動創建或通過DNS客戶端動態更新來創建。

  • NS記錄
    NS記錄此記錄指定負責此DNS區域的權威名稱服務器。

  • 兩者區別
    A記錄直接給出目的IP,NS記錄將DNS解析任務交給特定的服務器,NS記錄中記錄的IP即爲該特定服務器的IP地址。

在全局負載均衡解決方案中,NS記錄指向具有智能DNS解析功能的GSLB設備,通過GSLB設備進行A記錄解析。爲了保證高可用,如果爲多地部署GSLB,則均配置記錄。另外,GSLB設備還會對所在的後端服務器公網IP進行健康檢查,其結果通過自有協議在不同的的GLSB設備間同步。解析的步驟如下圖:

在這裏插入圖片描述

  • 用戶給本地DNS服務器發送查詢請求,如果本地有緩存直接返回給用戶,否則通過遞歸查詢獲得名服務商商處的授權DNS服務器。

  • 授權服務器返回NS記錄給本地DNS服務器。其中NS記錄指向一個GSLB設備接口地址。

  • GSLB設備決策最優解析結果並返回A記錄給本地DNS服務器。

  • 本地服務器將查詢結果通過一條A記錄返回給用戶,並緩存這條記錄。

DNS實戰(wireshark)

使用工具爲wireshark,訪問www.baidu.com。

在這裏插入圖片描述
分析DNS請求幀,如下圖所示:
在這裏插入圖片描述
從上圖我們可知道請求計數爲1,請求的域名爲dss0.bdstatic.com。

在這裏插入圖片描述
從響應頭可以知道,問題計數爲1,正好對應請求幀1個問題。迴應了2個問題。分別爲:

在這裏插入圖片描述

從上圖可以得出當前共有13個權威域名服務器,當然每一個的服務器地址不同,其中類型爲NS代表權威域名服務器。

DNS劫持

到這裏我們至少知道了DNS可以將域名映射爲IP,並且知道了使用了多種緩存方案來減少DNS訪問的壓力。那麼DNS一旦出錯,很可能將域名解析到其他IP地址,這樣我們也就無法正確訪問網頁。(PS:是不是有的時候發現開啓不了網頁但是qq等可以使用,很可能就是DNS搞鬼了喲)

在這裏插入圖片描述

利用DNS服務器進行DDOS攻擊

什麼是DDOS,我們應該知道SYN Flood,是一種DoS(拒絕服務攻擊)與DDOS(分佈式拒絕服務攻擊的方式),利用大量的僞造TCP請求讓被攻擊方資源榨乾。

在這裏插入圖片描述

我們假設攻擊者已經知道了攻擊者IP(如果需要了解這一部分內容,可以去搜索主動被動信息蒐集/sodan等關鍵字),此時攻擊者使用此地址作爲解析命令的源地址,當DNS請求的時候返回恰巧也是被攻擊者。此時如果足夠多的請求(羣肉雞)就很容易使網絡崩潰。

  • 緩存感染
    我們已經知道了在DNS查詢過程中,會經過操作系統的緩存,hosts文件等,如果將數據放入有漏洞的服務器緩存中,當進行DNS請求的時候,就會將緩存信息返回給用戶,這樣用戶就會莫名訪問入侵者所設置的陷阱頁面中。

  • DNS信息劫持
    看到這裏的小夥伴,先思考一個問題,在TCP/IP協議棧中,三次握手中的序列號到底什麼意思?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章