手动执行递归DNS查询

时间:2014-10-20 14:34:32

标签: dns

在我正在进行的了解DNS的实验中,我试图理解名称服务器如何进行递归查询。我得到了基本的想法 - 你从一个顶级dns服务器开始,然后它会向你发送一个权威的名称服务器列表来联系,然后你联系这些服务器等,直到你得到一个权威的响应。

听起来很简单。

但是当我在练习中尝试时,我在第一步后就陷入了困境。我只是使用命令行工具手动执行此操作 - (我确保将关闭递归。)

好的,步骤1:从根名称服务器开始。我从root name servers on Wikipedia列表中随机选择了198.41.0.4(Verisign)。

我发送请求以解决" google.com"。

它将以下内容发回给我:

+---------------------------------------------------------------------------+
| 47547 | QR: 1 | OP: 00 | AA: 0 | TC: 0 | RD: 1 | RA: 0 | Z: 0 | RCODE: 00 |
+---------------------------------------------------------------------------+
| QDCOUNT:     1,   ANCOUNT:     0,   NSCOUNT:    13,   ARCOUNT:    15      |
+---------------------------------------------------------------------------+

ANSWERS : 0

AUTHORITIES:
NS: m.gtld-servers.net
NS: l.gtld-servers.net
NS: k.gtld-servers.net
NS: j.gtld-servers.net
NS: i.gtld-servers.net
NS: h.gtld-servers.net
NS: g.gtld-servers.net
NS: f.gtld-servers.net
NS: e.gtld-servers.net
NS: d.gtld-servers.net
NS: c.gtld-servers.net
NS: b.gtld-servers.net
NS: a.gtld-servers.net

ADDITIONAL:
A: 192.55.83.30
A: 192.41.162.30
A: 192.52.178.30
A: 192.48.79.30
A: 192.43.172.30
A: 192.54.112.30
A: 192.42.93.30
A: 192.35.51.30
A: 192.12.94.30
A: 192.31.80.30
A: 192.26.92.30
A: 192.33.14.30
AAAA: 2001:0503:231d:0000:0000:0000:0002:0030
A: 192.5.6.30
AAAA: 2001:0503:a83e:0000:0000:0000:0002:0030

好的,所以我不确定所有这些附加记录的重点是什么 - 它们看起来都是本地局域网地址所以我不知道它们对我有什么用处。但无论如何,看看权限部分返回的结果,我看到另一个名称服务器列表。好的,所以我想下一步是我需要选择一个返回的名称服务器,并获得它的IP。所以我发出了解决a.gtld-servers.net和...

的请求

...它只返回完全相同的名称服务器列表。

所以...我不确定如何继续这里。我如何最终到达#34; google.com"?

的权威名称服务器

修改

好的,所以看来那些192地址不是我错误假设的LAN地址,但它们是其他名称服务器。我假设我可以联系这些域名服务器以更接近权威。但是,我怎么知道使用这些名称服务器?我认为ARCOUNT部分只是为了获取更多信息...为什么所有这些名称服务器都放在附加部分而不是作为答案或权限?是否只是某些约定,其他名称服务器的引用进入附加部分?

2 个答案:

答案 0 :(得分:0)

您对Verisign服务器的查询有问题。试试这个:

  1. dig @<VeriSign-nameserver> google.com NS.:这应该为您提供google.com
  2. 的权威名称服务器
  3. dig @<NS for google.com> www.google.com A.:这会从A名称服务器获取www.google.com的{​​{1}}条记录。
  4. 注意:如果google.com名称服务器与google.com位于同一区域,则#1应返回粘合记录,这意味着它还将解析名称服务器的IP地址。

答案 1 :(得分:0)

您可以使用dig +trace命令:它将准确地向您显示由典型的递归名称服务器进行的每个查询。

例如,如果您尝试使用www.google.com(如果未指定类型,则dig默认使用A,而我使用+nodnssec删除了与DNSSEC相关的信息,以简化输出):

$ dig +trace www.google.com +nodnssec

; <<>> DiG 9.12.0 <<>> +trace www.google.com +nodnssec
;; global options: +cmd
.           307678 IN NS f.root-servers.net.
.           307678 IN NS a.root-servers.net.
.           307678 IN NS m.root-servers.net.
.           307678 IN NS e.root-servers.net.
.           307678 IN NS i.root-servers.net.
.           307678 IN NS l.root-servers.net.
.           307678 IN NS c.root-servers.net.
.           307678 IN NS g.root-servers.net.
.           307678 IN NS b.root-servers.net.
.           307678 IN NS k.root-servers.net.
.           307678 IN NS h.root-servers.net.
.           307678 IN NS d.root-servers.net.
.           307678 IN NS j.root-servers.net.
;; Received 447 bytes from 192.168.10.229#53(192.168.10.229) in 5 ms

com.            172800 IN NS j.gtld-servers.net.
com.            172800 IN NS m.gtld-servers.net.
com.            172800 IN NS g.gtld-servers.net.
com.            172800 IN NS i.gtld-servers.net.
com.            172800 IN NS k.gtld-servers.net.
com.            172800 IN NS b.gtld-servers.net.
com.            172800 IN NS h.gtld-servers.net.
com.            172800 IN NS c.gtld-servers.net.
com.            172800 IN NS a.gtld-servers.net.
com.            172800 IN NS f.gtld-servers.net.
com.            172800 IN NS l.gtld-servers.net.
com.            172800 IN NS e.gtld-servers.net.
com.            172800 IN NS d.gtld-servers.net.
;; Received 839 bytes from 192.36.148.17#53(i.root-servers.net) in 88 ms

google.com.     172800 IN NS ns2.google.com.
google.com.     172800 IN NS ns1.google.com.
google.com.     172800 IN NS ns3.google.com.
google.com.     172800 IN NS ns4.google.com.
;; Received 291 bytes from 192.5.6.30#53(a.gtld-servers.net) in 145 ms

www.google.com.     300 IN A 172.217.7.196
;; Received 48 bytes from 216.239.34.10#53(ns2.google.com) in 83 ms

每个段落都是一个查询,显示答复和答复者(我们查询过的人)。

让我们返回第一个查询,以重做您对198.41.0.4(又名a.root-servers.net

$ dig A www.google.com @198.41.0.4 +nodnssec

; <<>> DiG 9.12.0 <<>> A www.google.com @198.41.0.4 +nodnssec
;; global options: +cmd
;; Sending:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44332
;; flags: rd ad; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: b56cbe6c8ffd3856
;; QUESTION SECTION:
;www.google.com.        IN A

;; QUERY SIZE: 55

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44332
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 27
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1472
;; QUESTION SECTION:
;www.google.com.        IN A

;; AUTHORITY SECTION:
com.            172800 IN NS a.gtld-servers.net.
com.            172800 IN NS b.gtld-servers.net.
com.            172800 IN NS c.gtld-servers.net.
com.            172800 IN NS d.gtld-servers.net.
com.            172800 IN NS e.gtld-servers.net.
com.            172800 IN NS f.gtld-servers.net.
com.            172800 IN NS g.gtld-servers.net.
com.            172800 IN NS h.gtld-servers.net.
com.            172800 IN NS i.gtld-servers.net.
com.            172800 IN NS j.gtld-servers.net.
com.            172800 IN NS k.gtld-servers.net.
com.            172800 IN NS l.gtld-servers.net.
com.            172800 IN NS m.gtld-servers.net.

;; ADDITIONAL SECTION:
a.gtld-servers.net. 172800 IN A 192.5.6.30
b.gtld-servers.net. 172800 IN A 192.33.14.30
c.gtld-servers.net. 172800 IN A 192.26.92.30
d.gtld-servers.net. 172800 IN A 192.31.80.30
e.gtld-servers.net. 172800 IN A 192.12.94.30
f.gtld-servers.net. 172800 IN A 192.35.51.30
g.gtld-servers.net. 172800 IN A 192.42.93.30
h.gtld-servers.net. 172800 IN A 192.54.112.30
i.gtld-servers.net. 172800 IN A 192.43.172.30
j.gtld-servers.net. 172800 IN A 192.48.79.30
k.gtld-servers.net. 172800 IN A 192.52.178.30
l.gtld-servers.net. 172800 IN A 192.41.162.30
m.gtld-servers.net. 172800 IN A 192.55.83.30
a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30

;; Query time: 134 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Wed Aug 15 09:39:43 EST 2018
;; MSG SIZE  rcvd: 839

那么这是怎么回事:

  1. 您没有aa标志的答复,这表明名称服务器对此查询的答复(对于您的查询. NS,它是权威的)例子)
  2. 它在AUTHORITY SECTION中告诉您下一步的权威者,即com.;这意味着给您一组名称服务器(NS个记录)
  3. 为了帮助您更快地使用ADDITIONAL SECTION,它会为您提供上述名称服务器的IP地址,否则您首先需要将其名称解析为IP才能与他们联系。

这些部分在RFC1034中定义:

  

这四个部分是:

     

问题携带查询名称和其他查询参数。

     

回答携带直接回答查询的RR。

     

权威机构进行了RR描述其他权威机构   服务器。                   可以选择为权威机构携带SOA RR                   答案部分中的数据。

     

附加携带RR,可能有助于在以下情况下使用RR:   的                   其他部分。

因此,由于无法直接回答所显示的查询,因此无法将数据放入“答案”部分,也无法将数据放入“权限”部分,因为您查询的名称服务器对gtld-servers.net的权威性不强< / p>

这也解释了为什么dig A e.gtld-servers.net. @198.41.0.4 +nodnssec将返回基本相同的答案,但这主要是因为.com.net由同一个注册表处理( VeriSign ),它们共享相同的权威名称服务器(而 VeriSign 也处理两个根名称服务器-aj-但这无关)

因此,是的,下一步将是连接到为gtld-servers.net域名服务器提供的任何IP,以重做查询,并确定它是否对www.google.com具有权威性,由于不是,它将进行在“权限”部分中提供下一步。

像这样:

$ dig A www.google.com @a.gtld-servers.net. +norecurse +nodnssec

; <<>> DiG 9.12.0 <<>> A www.google.com @a.gtld-servers.net. +norecurse +nodnssec
;; global options: +cmd
;; Sending:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26904
;; flags: ad; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 22d54e7533355129
;; QUESTION SECTION:
;www.google.com.        IN A

;; QUERY SIZE: 55

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26904
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 9

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.com.        IN A

;; AUTHORITY SECTION:
google.com.     172800 IN NS ns2.google.com.
google.com.     172800 IN NS ns1.google.com.
google.com.     172800 IN NS ns3.google.com.
google.com.     172800 IN NS ns4.google.com.

;; ADDITIONAL SECTION:
ns2.google.com.     172800 IN AAAA 2001:4860:4802:34::a
ns2.google.com.     172800 IN A 216.239.34.10
ns1.google.com.     172800 IN AAAA 2001:4860:4802:32::a
ns1.google.com.     172800 IN A 216.239.32.10
ns3.google.com.     172800 IN AAAA 2001:4860:4802:36::a
ns3.google.com.     172800 IN A 216.239.36.10
ns4.google.com.     172800 IN AAAA 2001:4860:4802:38::a
ns4.google.com.     172800 IN A 216.239.38.10

;; Query time: 142 msec
;; SERVER: 192.5.6.30#53(192.5.6.30)
;; WHEN: Wed Aug 15 09:54:27 EST 2018
;; MSG SIZE  rcvd: 291

以此类推。

您还误会了:

  

它们似乎都是本地LAN地址,所以我不知道它们对我有什么用。

RFC 1918描述了专用地址空间,其中列出:

  

10.0.0.0-10.255.255.255(前缀10/8)

     

172.16.0.0-172.31.255.255(172.16 / 12前缀)

     

192.168.0.0-192.168.255.255(192.168 / 16前缀)

谢天谢地,这些IP中没有一个。

相关问题