我可以将 CNAME 与 IP 地址一起使用吗?为什么有时有效?

我可以将 CNAME 与 IP 地址一起使用吗?为什么有时有效?

我认为第一个问题最简单的答案是“不,你对此有“A””,但我意外地使用指向 IP 地址的 CNAME 设置了一些子域,并且它在我办公室的几台计算机上运行。我想知道这是怎么可能的?

现在,当我从家检查它时,出现以下错误:

beast:~ viroos$ host somesubdomain.somedomain.com
Host somesubdomain.somedomain.com not found: 3(NXDOMAIN)

我确信它曾经在我的办公室里发挥作用(目前看起来好像不行,但我在另一台机器上检查了)。因此我不能 100% 确定它是否因为某些特殊的网络设置而起作用,或者因为我在添加 DNS 条目后就对其进行了测试。

我知道这个故事听起来有点疯狂/难以置信,但有人能帮我解开这个谜题吗?

//编辑:我正在添加挖掘输出

; <<>> DiG 9.6-ESV-R4-P3 <<>> somesubdomain.somedomain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 60224
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;somesubdomain.somedomain.com.      IN  A

;; ANSWER SECTION:
somesubdomain.somedomain.com.   67  IN  CNAME   xxx.xxx.xxx.xx1.

;; AUTHORITY SECTION:
.           1800    IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2012040901 1800 900 604800 86400

;; Query time: 72 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Apr 10 00:11:01 2012
;; MSG SIZE  rcvd: 136

答案1

记录上的数据CNAME必须始终是另一个 DNS 名称 - 这就是 的全部意义所在CNAME

正如 RFC 1034 简明扼要地指出的那样,a 中的数据CNAME应该是:

            CNAME           a domain name.

但是,如果您希望指向 IP 地址,那么您的票是:

            A               For the IN class, a 32 bit IP address

CNAME被设计和实现为 DNS 别名;它没有在数据字段中包含 IP 地址的概念。因此,按照设计,它被解释为另一个 DNS 名称的别名;毕竟,IP 地址符合 DNS 名称的语法。

因此,为了举例说明,假设您的 DNS 数据是:

somesubdomain.somedomain.com.   60  IN  CNAME   192.0.2.1.

您正在查询的递归 DNS 服务器发现记录是CNAME,并认为您需要它所包含的实际数据。除 之外没有CNAME找到其他记录,因此无法向客户端提供任何答案。

192它尝试查询域 中的主机名 的记录0.2.1。它没有该名称的任何缓存,因此它会询问根服务器。它们为诸如.com和 之类的 TLD 提供请求.net,但此请求是对 的请求.1。它们立即响应说没有这样的请求,这就是递归器发送给您的内容。

您看到的响应dig是您的递归名称服务器说:“嗯,您寻找的名称指向其他地方,而那个地方并不存在 - 如果您不相信我,请询问根服务器”。


所以,是的,将 IP 地址放入CNAME记录中永远是无效的,并且我怀疑正在运行的系统通过其他机制(如主机文件或本地名称解析)正常运行 - 调查它们的名称解析行为。

答案2

cname 是规范名称,它只是另一个名称的别名,通常是 A 记录或另一个 cname 等。如果您将 cname 设置为指向 IP,那么它只是该 IP 的别名。我不认为您的 DNS 服务器会检查目标是否合法,因为标准 RFC 并没有真正说明 cname 目标的数据格式/验证是什么。这不是通常的用法,但如果它对您有用,那么它就是有效的。我认为,有时它不起作用这一事实应该足以让您使用它的常规用法。

答案3

你可以有:

example IN CNAME 1.2.3.4.

其中 1.2.3.4 是有效的 IP 地址。不过请注意 CNAME 中的尾部点。您办公室中的某些机器确实可以使用此地址,而其他机器则不能,这让我相信那些可以使用此地址的机器在 或 文件中设置了子lmhosts/etc/hosts

相关内容