dig返回错误的记录类型



这似乎是我错过了一些明显的东西,或者以前有人问过我。当我使用-t参数查询dig以指定DNS记录类型时,即使返回的记录是不同的记录类型,结果似乎也包含一个答案。这里有一个例子:

$ dig -t A -q polestar.databaseguy.com.
; <<>> DiG 9.11.3-1ubuntu1.3-Ubuntu <<>> -t A polestar.databaseguy.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33130
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;polestar.databaseguy.com.      IN      A
;; ANSWER SECTION:
polestar.databaseguy.com. 3600  IN      CNAME   databaseguy.ddns.net.
databaseguy.ddns.net.   60      IN      A       173.19.127.251
;; Query time: 30 msec
;; SERVER: 10.0.10.1#53(10.0.10.1)
;; WHEN: Mon Dec 10 14:41:50 STD 2018
;; MSG SIZE  rcvd: 103

ANSWER SECTION中列出的CNAMEA记录是正确的。然而,CNAME用于polestar.databaseguy.com.,而A用于databaseguy.ddns.net.polestar.databaseguy.com.没有A记录,这就是我查询的内容,所以我希望没有结果。

我很有信心这是正确的行为,但我不理解,也没有在man dig页面上看到任何解释。我也找不到其他在线讨论,无论是在这个网站上还是在其他地方。有人能帮我理解吗?

这是预期的行为,可以减少所需的交换量,并且特定于CNAME记录。

它包含在DNS的核心文件中:RFC1034,第3.6.2节

请参阅:

CNAME RR在DNS软件中引起特殊操作。当名称服务器未能在与域名,它会检查资源集是否由CNAME组成具有匹配类的记录。如果是,则名称服务器包括CNAME在响应中记录并在域名处重新启动查询在CNAME记录的数据字段中指定。唯一的例外该规则是,与CNAME类型匹配的查询不重新启动。

有一个与您的情况完全匹配的明确示例:

例如,假设一个名称服务器正在使用处理查询USC-ISIC.ARPA,询问A类信息,并得到以下信息资源记录:

USC-ISIC.ARPA   IN      CNAME   C.ISI.EDU
C.ISI.EDU       IN      A       10.0.0.52

这两个RR都将在对类型A的响应中返回查询,而类型CNAME或*query应该只返回CNAME。

其他要点请参见第5.2.2节。第6.2.7节和第6.2.8节也给出了示例。

它还取决于您查询的是递归名称服务器还是权威名称服务器。

databaseguy.com具有用于名称服务器的

pdns01.domaincontrol.com.
pdns02.domaincontrol.com.

如果您查询其中一个:

$ dig A polestar.databaseguy.com. @pdns01.domaincontrol.com.
; <<>> DiG 9.12.0 <<>> A polestar.databaseguy.com. @pdns01.domaincontrol.com.
;; global options: +cmd
;; Sending:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64115
;; flags: rd ad; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: e45ebc418c94c90a
;; QUESTION SECTION:
;polestar.databaseguy.com. IN A
;; QUERY SIZE: 65
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64115
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;polestar.databaseguy.com. IN A
;; ANSWER SECTION:
polestar.databaseguy.com. 1h IN CNAME databaseguy.ddns.net.

您只能得到CNAME值,因为这个权威名称服务器只知道这一点,并且对ddns.net没有权威性。

但是,如果您询问任何递归名称服务器,它会执行递归并为您提供";"满";回复:

$ for ns in 1.1.1.1 8.8.8.8 9.9.9.9 80.80.80.80 ; do dig A polestar.databaseguy.com. @$ns +noall +ans ; done
; <<>> DiG 9.12.0 <<>> A polestar.databaseguy.com. @1.1.1.1 +noall +ans
;; global options: +cmd
;; connection timed out; no servers could be reached
; <<>> DiG 9.12.0 <<>> A polestar.databaseguy.com. @8.8.8.8 +noall +ans
;; global options: +cmd
polestar.databaseguy.com. 59m59s IN CNAME databaseguy.ddns.net.
databaseguy.ddns.net.   59s IN A 173.19.127.251
; <<>> DiG 9.12.0 <<>> A polestar.databaseguy.com. @9.9.9.9 +noall +ans
;; global options: +cmd
polestar.databaseguy.com. 1h IN CNAME databaseguy.ddns.net.
databaseguy.ddns.net.   1m IN A 173.19.127.251
; <<>> DiG 9.12.0 <<>> A polestar.databaseguy.com. @80.80.80.80 +noall +ans
;; global options: +cmd
polestar.databaseguy.com. 1h IN CNAME databaseguy.ddns.net.
databaseguy.ddns.net.   1m IN A 173.19.127.251

(1.1.1.1没有回复我的询问,但这与这个问题无关(

关于";polestar.databaseguy.com没有A记录,这就是我查询的内容,所以我预计不会有结果"这是错误的一半,因为该名称有一个CNAME,这意味着另一个规范名称,而该规范名称有一条A记录,所以在一天结束时,它就像起始名称有一段A记录一样。任何在本地向OS请求该主机的IP地址的应用程序都将得到A记录;取消引用";CNAME。

相关内容

  • 没有找到相关文章

最新更新