dig 查找未返回 namservers

dig 查找未返回 namservers

在将一些名称服务器添加到我的域以进行子委派后,我发现如果我运行跟踪和/或直接查询名称服务器,我会得到正确的名称服务器,但是如果我仅通过挖掘来查询名称服务器记录,则不会得到响应,

当 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 解析失败。

相关内容