詳解DNS遞歸查詢與迭代查詢

關於01月23日全國範圍內DNS污染,域名解析故障的根源,資深的IT人士都知道緣由是什麼,並不是國家緩存

互聯網應急中心發出的遭受***一說。

bash

所以這裏介紹一下DNS服務器的查詢原理,也就是遞歸查詢和迭代查詢。服務器


下圖比較簡明的描述了DNS服務器爲客戶端解析主機www.163.com的全過程.tcp

wKioL1LgjkrDu3gqAAKJlJWz1tA163.jpg



根域名服務器:互聯網域名解析系統(DNS)中最高級別的域名服務器,全球有386臺根服務器,被編號爲A到M共13個標號。中國北京有兩臺編號爲F的根服務器鏡像,編號爲I、J、L的各一,共5臺鏡像,在香港有A、F、I、J、L五臺根服務器鏡像,所有藉由任播(Anycast)技術,全部編號相同的根服務器都是同一個IP,386臺根服務器總共只使用了13個IP,所以能夠抵抗針對其所進行的分佈式拒絕服務***(DDoS)。分佈式


根域名服務器列表: (a-m.root-servers.net)ide

wKiom1LgpmuwjkANAACjjH6idLg846.jpg


客戶端經過域名訪問站點時,必需要有DNS服務器解析到指定的IP地址上,才能進行下一步的工具

訪問。客戶端發起訪問請求後,首先檢查本地host文件,檢查是否存在對應的IP映射關係,若是有則spa

直接經過映射的IP進行訪問;若是沒有則將請求發送給首選的DNS服務器。.net


客戶端和DNS服務器之間使用的是遞歸查詢,而DNS服務器之間使用的是迭代查詢.設計


遞歸查詢時要求所請求的DNS服務器應答給客戶端所請求的域名和IP的映射關係;

迭代查詢時所請求的DNS服務器應答給客戶端的不必定是域名和IP地址的映射關係,也能夠是另外一臺

DNS服務器,讓客戶端再將請求發送到另外一臺DNS服務器.


下面按上圖根據實例介紹DNS解析全過程.


客戶端發起訪問請求www.163.com:

1.查看本地hosts文件,發現沒有www.163.com IP 映射關係,將請求發送給本地DNS服務器

                                  ----遞歸查詢----

2.本地DNS服務器不包含163.com的權威域,不存在對應的www記錄,所以將請求轉發到根域名服務器

(假如  a.root-servers.net.)                                  

3.根域名DNS服務器會返回負責.com域解析的服務器(假如 a.gtld-servers.net.)給本地DNS服務器,

本地DNS服務器再將請求發送給 a.gtld-servers.net                                  

4..com域名服務器只能返回負責163.com域的解析服務器(如 ns1.nease.net.)給本地DNS服務器,本地

DNS服務器再將請求發送給ns1.nease.net.                                

5.由ns1.nease.net.域名服務器返回www.163.com 的 IP映射關係給本地DNS服務器

                         (2-5過程)----迭代查詢----

6.本地DNS服務器將結果保存到本地緩存,並保持TTL時間,同時將結果應答給客戶端.

                                  ----遞歸查詢---- ----查詢結束----


7.當其餘客戶端再次向本地DNS服務器查詢www.163.com時,在TTL時間內,本地DNS服務器再也不向根

域名服務器轉發請求,而是直接從緩存中讀取數據應答給客戶端. 若是已經超過TTL時間,則本地DNS

服務器會再次經歷一次上訴2-6的過程.


本地DNS服務器在代替客戶端向其餘服務器查詢時,客戶端徹底處於等待狀態。

遞歸查詢時,返回的結果只有兩種:查詢成功或查詢失敗.

迭代查詢,又稱做重指引,返回的是最佳的查詢點或者主機地址.


瞭解了以上原理,就能夠很容易的判斷DNS解析故障了,甚至於前日的全國DNS污染問題。


固然瞭解原理後,還須要瞭解相關的工具和命令: dig,nslookup,host等.其中以dig命令的功能最爲強大和靈活.


dig命令典型應用形如


     dig  @server   name  type

@server: 指定域名服務器

name:指定查詢請求資源的域名

type:指定查詢類型,如A、CNAME、SRV、MX、SIG等,若是不指定type,默認爲A


好比:

默認狀況下DNS使用UDP查詢,咱們使用查詢選項設置爲TCP查詢


[shizhenning@zabbix ~]$ dig @8.8.8.8  163.com +tcp
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> @8.8.8.8 163.com +tcp
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36041
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;163.com.                       IN      A
;; ANSWER SECTION:
163.com.                277     IN      A       123.58.180.8
163.com.                277     IN      A       123.58.180.7
;; Query time: 54 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Jan 23 13:56:25 2014
;; MSG SIZE  rcvd: 57


查詢MX記錄:

[shizhenning@zabbix ~]$ dig @8.8.8.8  163.com MX
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> @8.8.8.8 163.com MX
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41000
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;163.com.                       IN      MX
;; ANSWER SECTION:
163.com.                13741   IN      MX      50 163mx00.mxmail.netease.com.
163.com.                13741   IN      MX      10 163mx01.mxmail.netease.com.
163.com.                13741   IN      MX      10 163mx02.mxmail.netease.com.
163.com.                13741   IN      MX      10 163mx03.mxmail.netease.com.
;; Query time: 41 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Jan 23 14:01:02 2014
;; MSG SIZE  rcvd: 136


查詢CNAME記錄:

[shizhenning@zabbix ~]$ dig @8.8.8.8  www.163.com CNAME
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> @8.8.8.8 www.163.com CNAME
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27024
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.163.com.                   IN      CNAME
;; ANSWER SECTION:
www.163.com.            347     IN      CNAME   www.163.com.lxdns.com.
;; Query time: 41 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Jan 23 14:01:54 2014
;; MSG SIZE  rcvd: 61


查詢DRV記錄:

[shizhenning@zabbix ~]$ dig @8.8.8.8  163.com SRV
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> @8.8.8.8 163.com SRV
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41227
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;163.com.                       IN      SRV
;; AUTHORITY SECTION:
163.com.                1800    IN      SOA     ns4.nease.net. admin.nease.net. 20130823 7200 1800 1209600 3600
;; Query time: 137 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Jan 23 14:02:46 2014
;; MSG SIZE  rcvd: 80


咱們要查詢某個域名解析的全過程:(此時爲迭代查詢)

[shizhenning@zabbix ~]$ dig @8.8.8.8  163.com +trace
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> @8.8.8.8 163.com +trace
; (1 server found)
;; global options:  printcmd
.                       19586   IN      NS      a.root-servers.net.
.                       19586   IN      NS      b.root-servers.net.
.                       19586   IN      NS      c.root-servers.net.
.                       19586   IN      NS      d.root-servers.net.
.                       19586   IN      NS      e.root-servers.net.
.                       19586   IN      NS      f.root-servers.net.
.                       19586   IN      NS      g.root-servers.net.
.                       19586   IN      NS      h.root-servers.net.
.                       19586   IN      NS      i.root-servers.net.
.                       19586   IN      NS      j.root-servers.net.
.                       19586   IN      NS      k.root-servers.net.
.                       19586   IN      NS      l.root-servers.net.
.                       19586   IN      NS      m.root-servers.net.
;; Received 228 bytes from 8.8.8.8#53(8.8.8.8) in 62 ms
com.                    172800  IN      NS      m.gtld-servers.net.
com.                    172800  IN      NS      l.gtld-servers.net.
com.                    172800  IN      NS      k.gtld-servers.net.
com.                    172800  IN      NS      j.gtld-servers.net.
com.                    172800  IN      NS      i.gtld-servers.net.
com.                    172800  IN      NS      h.gtld-servers.net.
com.                    172800  IN      NS      g.gtld-servers.net.
com.                    172800  IN      NS      f.gtld-servers.net.
com.                    172800  IN      NS      e.gtld-servers.net.
com.                    172800  IN      NS      d.gtld-servers.net.
com.                    172800  IN      NS      c.gtld-servers.net.
com.                    172800  IN      NS      b.gtld-servers.net.
com.                    172800  IN      NS      a.gtld-servers.net.
;; Received 485 bytes from 198.41.0.4#53(a.root-servers.net) in 134 ms
163.com.                172800  IN      NS      ns2.nease.net.
163.com.                172800  IN      NS      ns3.nease.net.
163.com.                172800  IN      NS      ns4.nease.net.
163.com.                172800  IN      NS      ns5.nease.net.
163.com.                172800  IN      NS      ns6.nease.net.
163.com.                172800  IN      NS      ns1.nease.net.
;; Received 238 bytes from 192.55.83.30#53(m.gtld-servers.net) in 137 ms
163.com.                600     IN      A       123.58.180.7
163.com.                600     IN      A       123.58.180.8
163.com.                172800  IN      NS      ns2.nease.net.
163.com.                172800  IN      NS      ns5.nease.net.
163.com.                172800  IN      NS      ns6.nease.net.
163.com.                172800  IN      NS      ns3.nease.net.
163.com.                172800  IN      NS      ns4.nease.net.
163.com.                172800  IN      NS      ns1.nease.net.
;; Received 270 bytes from 114.113.197.12#53(ns2.nease.net) in 34 ms



掌握dig命令後,DNS解析故障就很容易排查了.


關於域名服務器緩存污染只是一種技術,沒有對錯之分,有時咱們企業內部也須要刻意使用這種技

來知足企業需求。關於DNS污染技術在企業中的應用場景,詳見 淺談活動目錄域名稱空間設計

相關文章
相關標籤/搜索