我可以通过IP地址使用CNAME吗?为什么(有时)可以工作?


13

我相信第一个问题的最简单答案是“不,为此,您有” A”,但是我无意中使用CNAME指向ip地址来设置一些子域,并且该子域在我办公室的几台计算机上都有效。我想知道这怎么可能?

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

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

我100%曾经在我的办公室上班(目前看来好像不行,但是我正在其他机器上进行检查)。因此,如果由于某些特殊的网络设置还是因为我在添加DNS条目之后对其进行了测试而无法正常运行,我并不是100%的。

我知道这个故事听起来有些疯狂/令人难以置信,但是有人可以帮助我解决这个难题。

// edit:我要添加挖掘输出

; <<>> 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

2
您确定不是其他原因使办公机器正常工作了吗?缓存的条目?覆盖公共解决方案的本地网络上该域的权威服务器?托管文件?
Shane Madden

确切地说,它可以在两台机器上运行,两者都是OSX。在Ubuntu机器上不能运行。由于它在两台计算机上工作,因此我忽略了“ ubuntu”问题(这是一个错误),因为我认为这是dns传播问题或dns缓存。我只检查了每个客户端上的DNS设置,它是相同的(这给DNS传播理论带来了一些不确定性)。其中一台机器是我的MacBook,目前我正在家里使用它,而我设置的网站也无法在其上正常工作:“找不到在subsubdomain.somedomain.com的服务器,因为DNS查找失败。”
Maciek Sawicki '04年

使用来查询名称时会返回什么dig
Shane Madden

我向问题添加了挖掘输出。
Maciek Sawicki '04年

我强烈怀疑OSX计算机正在使用DNS以外的其他方式来进行查找,例如mDNS(这根本不是一回事)。
克里斯·S

Answers:


16

CNAME记录中的数据必须始终是另一个DNS名称-这就是的重点CNAME

正如RFC 1034简要说明的那样,中的数据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.net,但这一要求是一个要求.1。他们迅速回答说没有,这就是递归器发送给您的东西。

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


因此,是的,将IP地址CNAME记录在记录中永远是无效的,并且我怀疑正在运行的系统通过某种其他机制(如主机文件或本地名称解析)可以正常运行-研究其名称解析行为。


2

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


0

你可以有:

example IN CNAME 1.2.3.4.

其中1.2.3.4是有效的IP地址。不过请注意CNAME中的结尾点。您办公室中的某些计算机可以使用此功能,而另一些计算机则不能使用这一事实,这使我相信那些确实在lmhostsor /etc/hosts文件中设置了子域的计算机。


1
虽然这对于CNAME是有效的数据,但我相当确定不会对名为“ 4?” 的不存在的TLD引起额外的查找。
Shane Madden

附加查询将使用ANY(例如host -a)查询执行。
adamo 2012年

@ShaneMadden BTW,您的评论让我想起了DJB的本地TLD
adamo 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.