在将一些名称服务器添加到我的域以进行子委派后,我发现如果我运行跟踪和/或直接查询名称服务器,我会得到正确的名称服务器,但是如果我仅通过挖掘来查询名称服务器记录,则不会得到响应,
当 DNS 的递归查找从 dns2.stabletransit.com 检索 NS 记录(nsX.macmonster.co.uk)并将其传回客户端时,它是否应该停止?
新添加的名称服务器记录是:
subdomain.codecrab.org. 300 IN NS ns1.macmonster.co.uk.
subdomain.codecrab.org. 300 IN NS ns2.macmonster.co.uk.
痕迹
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> +trace subdomain.codecrab.org ns
;; global options: printcmd
. 94441 IN NS f.root-servers.net.
. 94441 IN NS g.root-servers.net.
. 94441 IN NS h.root-servers.net.
. 94441 IN NS i.root-servers.net.
. 94441 IN NS j.root-servers.net.
. 94441 IN NS k.root-servers.net.
. 94441 IN NS l.root-servers.net.
. 94441 IN NS m.root-servers.net.
. 94441 IN NS a.root-servers.net.
. 94441 IN NS b.root-servers.net.
. 94441 IN NS c.root-servers.net.
. 94441 IN NS d.root-servers.net.
. 94441 IN NS e.root-servers.net.
;; Received 228 bytes from 83.138.151.80#53(83.138.151.80) in 0 ms
org. 172800 IN NS a0.org.afilias-nst.info.
org. 172800 IN NS b2.org.afilias-nst.org.
org. 172800 IN NS c0.org.afilias-nst.info.
org. 172800 IN NS a2.org.afilias-nst.info.
org. 172800 IN NS d0.org.afilias-nst.org.
org. 172800 IN NS b0.org.afilias-nst.org.
;; Received 442 bytes from 192.5.5.241#53(f.root-servers.net) in 96 ms
codecrab.org. 86400 IN NS dns2.stabletransit.com.
codecrab.org. 86400 IN NS dns1.stabletransit.com.
;; Received 95 bytes from 199.19.56.1#53(a0.org.afilias-nst.info) in 108 ms
subdomain.codecrab.org. 300 IN NS ns1.macmonster.co.uk.
subdomain.codecrab.org. 300 IN NS ns2.macmonster.co.uk.
;; Received 92 bytes from 65.61.188.4#53(dns2.stabletransit.com) in 0 ms
;; connection timed out; no servers could be reached
标准查询
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> subdomain.codecrab.org NS
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 50516
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;subdomain.codecrab.org. IN NS
;; Query time: 1 msec
;; SERVER: 83.138.151.80#53(83.138.151.80)
;; WHEN: Thu Sep 26 16:32:34 2013
;; MSG SIZE rcvd: 40
额外的
[root@monty webtools]# dig ns1.macmonster.co.uk +short
1.1.1.1
有任何想法吗 ?
答案1
递归 DNS 解析器要求它递归获取的信息具有权威性,才能将其作为查询的响应返回;它不会进行推断。
DNS 中的权威性是使用 SOA 和 NS 记录建立的。前者用于在权威服务器之间建立权威性,并在区域内提供服务。例如,当某个区域的权威 DNS 服务器进行区域传输时,SOA 记录指示哪个区域数据的副本较新。后者用于在查询时建立权威性。
当子域的 NS 记录位于域中,并且拥有该记录的服务器不是所查询名称的权威服务器时,此 NS 记录是委托记录。因此,递归解析器将从根开始查询委托记录。.
在您的例子中,它会沿着链条向上到达以下响应dns2.stabletransit.com.
:
subdomain.codecrab.org. 300 IN NS ns1.macmonster.co.uk.
这是一个委托记录,因为这些数据确实不是存在:
subdomain.codecrab.org. 300 IN NS dns2.stabletransit.com
实际存在的情况是这样的:
codecrab.org. 86400 IN NS dns2.stabletransit.com.
因此, 的服务器dns2.stabletransit.com.
可以为 提供权威答复codecrab.org.
,因为先前的解析器已将该区域委托给它。但它对 不具有权威性subdomain.codecrab.org.
,因此它无法回答查询;它只能委托。
当然,DNS解析器可以配置为对管理员想要的任何名称具有权威性。但是,如果将它们配置为对它们试图委托的区域具有权威性,它们将给出答复(没有数据),因此这显然是行不通的。
递归的工作方式很简单,即使最初并不直观。递归解析器将完整查询发送到名称服务器.
(它在其根区域的提示文件中有查询)。.
名称服务器发送回复,但回复有两个我们关心的部分:授权部分和答案部分(还有附加部分和问题部分)。回复将包含以下记录:
org. 172800 IN NS b0.org.afilias-nst.org.
这告诉递归解析器在那里重复查询,因为该区域已被委托。它还在附加部分中包含“粘合”,该部分给出了授权部分中的名称服务器的 IP 地址,因为它知道否则您将无法找到名称服务器来查询它。这是管理 DNS 的管理决策;如果不存在粘合记录,递归解析器将在继续之前查询其中一个授权服务器的AAAA
或记录。A
IN NS subdomain.codecrab.org.
因此,您可能会注意到,当您向最后一个代表团发送查询时dns2.stabletransit.com.
,答复如下:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35461
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;subdomain.codecrab.org. IN NS
;; AUTHORITY SECTION:
subdomain.codecrab.org. 300 IN NS ns2.macmonster.co.uk.
subdomain.codecrab.org. 300 IN NS ns1.macmonster.co.uk.
;; Query time: 104 msec
;; SERVER: 65.61.188.4#53(65.61.188.4)
;; WHEN: Sat Sep 28 14:50:45 MDT 2013
请注意,您既没有获得附加部分,也没有获得答案部分(但也NOERROR
有返回状态)。这是因为记录是ns2.macmonster.co.uk.
对 的委托subdomain.codecrab.org.
,而dns2.stabletransit.com.
知道它不是权威的。没有附加部分,因为名称服务器在 ,co.uk.
并且从管理上讲,没有必要包含粘合,因为它们在那边是可解析的(尽管当然可以包括粘合)。因此,要回答您的问题,因为答案必须来自答案部分(意味着它被答复服务器识别为来自权威机构的答案),您的递归解析器将尝试查找ns1.macmonster.co.uk.
,并在找到它后1.1.1.1
,将其查询发送到那里。
当然(因为这个地址带有 debogon 前缀),那里还没有名称服务器(目前还没有)。至于ns2.macmonster.co.uk.
,2.2.2.2
如果 Wanadoo France 的某个人决定要有一个名称服务器来承载subdomain.codecrab.org.
和 的权威记录,特别是:
subdomain.codecrab.org 99999999 IN NS now.go.away.or.i.will.taunt.you.a.second.time.
有一半的时间(只要选择该名称服务器),查询就会返回now.go.away.or.i.will.taunt.you.a.second.time.
您所在区域的名称服务器,即使常识表明它应该是这样的ns2.macmonster.co.uk.
(即使是后者的名称服务器权威地给出了该答案)。
答案2
@Zoredache 在评论中回答了这个问题。挖掘跟踪显示了答案,域级别的名称服务器无法解析:
subdomain.codecrab.org. 300 IN NS ns1.macmonster.co.uk.
subdomain.codecrab.org. 300 IN NS ns2.macmonster.co.uk.
;; Received 92 bytes from 65.61.188.4#53(dns2.stabletransit.com) in 0 ms
dig: couldn't get address for 'ns1.macmonster.co.uk': not found
... 因此,两个 dig 查询都失败了,但 +trace 输出显示了失败的位置。运行 dig +trace 时,您将遵循 DNS 服务器解析查询的路径,从“根”名称服务器开始。您的第二个查询询问了您的 DNS 服务器 (83.138.151.80),该服务器执行了相同的操作(有效),但无法解析 ns1/ns2.macmonster.co.uk,因此失败并且没有给出答案。为了获得答案,这些名称服务器需要解析为该子域运行 DNS 的 IP 地址,而 NS 查询这些服务器的结果就是将返回的答案。
~汤米
答案3
问题:您的授权记录是正确的,但使用的名称服务器(ns1.macmonster.co.uk 和 ns2.macmonster.co.uk)没有正确的 IP 地址。在我的例子中,ns1.macmonster.co.uk 的 IP 为 1.1.1.1,n2.macmonster.co.uk 的 IP 为 2.2.2.2。这些 IP 地址是真实有效的,但我不认为这些 IP 地址指向 DNS 服务器。
怎么修:我假设您出于某种原因使用了这些名称服务器。请向 macmonster.co.uk 说明为什么这些名称服务器无法从 Internet 连接(也许它们仅用于本地或 Intranet 用途)或为您的委托使用不同的名称服务器。
为什么这不起作用:嗯,如果我没记错的话,有一个故事讲的是阿斯特里克斯和奥贝利克斯试图获得通行证/徽章 A38,他们必须从一个房间跑到另一个房间才能拿到它。然而,DNS 比这更方便用户使用。如果您请求 host1.subdomain.codecrab.org.,您的 DNS 会尝试将其解析为 IP 地址。它要求 org. 提供 codecrab.org.,要求 codecrab.org. 提供 subdomain.codecrab.org.,并要求 subdomain.codecrab.org. 提供 host1.subdomain.codecrab.org。如果此链不起作用 - DNS 解析失败。