这是预期的行为,它减少了所需的交换量,并且特定于 CNAME 记录。
DNS 上的核心文档涵盖了它:RFC1034,第 3.6.2 节
看这个:
CNAME RR 会导致 DNS 软件中的特殊操作。当一个名称服务器
未能在与
域名,它检查资源集是否包含 CNAME
用匹配的类记录。如果是这样,名称服务器包括
响应中的 CNAME 记录并在域名处重新开始查询
在 CNAME 记录的数据字段中指定。一个例外
此规则是匹配 CNAME 类型的查询不
重新启动。
使用与您的情况完全匹配的清晰示例:
例如,假设名称服务器正在处理带有 for 的查询
USC-ISIC.ARPA,要求 A 类信息,并具有以下内容
资源记录:
USC-ISIC.ARPA IN CNAME C.ISI.EDU
C.ISI.EDU IN A 10.0.0.52
这两个 RR 都会在类型 A 的响应中返回
查询,而类型 CNAME 或 * 查询应该只返回 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 没有权威。
但是,如果您询问任何 recursive 域名服务器,它会执行递归并给您“完整”答复:
$ 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 记录一样。任何在本地向操作系统询问该主机的 IP 地址的应用程序都将获得 A 记录,因为操作系统将负责完整的递归解析并“取消引用”CNAME。