關於01月23日全國範圍內DNS污染,域名解析故障的根源,資深的IT人士都知道緣由是什麼,並不是國家緩存
互聯網應急中心發出的遭受***一說。
bash
所以這裏介紹一下DNS服務器的查詢原理,也就是遞歸查詢和迭代查詢。服務器
下圖比較簡明的描述了DNS服務器爲客戶端解析主機www.163.com的全過程.tcp
根域名服務器:是互聯網域名解析系統(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
客戶端經過域名訪問站點時,必需要有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污染技術在企業中的應用場景,詳見 淺談活動目錄域名稱空間設計。