详解DNS递归查询与迭代查询

时间:2024-03-20 12:25:47

关于01月23日全国范围内DNS污染,域名解析故障的根源,资深的IT人士都知道原因是什么,并非国家

互联网应急中心发出的遭受攻击一说。

因此这里介绍一下DNS服务器的查询原理,也就是递归查询和迭代查询。


下图比较简明的描述了DNS服务器为客户端解析主机www.163.com的全过程.

详解DNS递归查询与迭代查询



根域名服务器:互联网域名解析系统(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)

详解DNS递归查询与迭代查询


客户端通过域名访问站点时,必须要有DNS服务器解析到指定的IP地址上,才能进行下一步的

访问。客户端发起访问请求后,首先检查本地host文件,检查是否存在对应的IP映射关系,如果有则

直接通过映射的IP进行访问;如果没有则将请求发送给首选的DNS服务器。


客户端和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查询


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[[email protected] ~]$ 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记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[[email protected] ~]$ 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记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[[email protected] ~]$ 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记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[[email protected] ~]$ 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


我们要查询某个域名解析的全过程:(此时为迭代查询)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[[email protected] ~]$ 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污染技术在企业中的应用场景,详见 浅谈活动目录域名称空间设计





     本文转自marbury 51CTO博客,原文链接:http://blog.51cto.com/magic3/1354084,如需转载请自行联系原作者