我相信对于第一个问题,最简单的答案是“不,你有”这个“A”,但我不小心设置了一些使用CNAME指向IP地址的子域,它在我办公室里的几台电脑上工作。 我不知道怎么可能?
现在,当我从家里检查时,我有以下错误:
beast:~ viroos$ host somesubdomain.somedomain.com Host somesubdomain.somedomain.com not found: 3(NXDOMAIN)
我100%曾经在我的办公室工作 (目前看起来没有,但是我在不同的机器上查看)。 因此,如果由于某些特殊的networking设置而导致我不是100%,或者是因为我在添加DNS条目之后对其进行了testing。
我知道这个故事听起来有点疯狂/令人难以置信,但有人可以帮我解决这个难题。
//编辑:我正在添加挖掘输出
; <<>> 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
CNAMElogging上的数据必须始终是另一个DNS名称 – 这就是CNAME的全部要点。
正如RFC 1034所简要说明的那样, CNAME的数据应该是:
CNAME a domain name.
而如果你想指向一个IP地址,那么你的票是:
A For the IN class, a 32 bit IP address
CNAME的devise和实现是一个DNS别名; 它没有在该数据字段中拥有IP地址的概念。 因此,按照devise,它被解释为另一个DNS名称的别名; 毕竟,IP地址适合DNS名称的语法。
所以,举例来说,假设你的DNS数据是:
somesubdomain.somedomain.com. 60 IN CNAME 192.0.2.1.
您查询的recursionDNS服务器会看到该logging是一个CNAME ,并指出您将需要它包含的实际数据。 除了CNAME之外,没有其他logging被发现,所以没有答案给客户。
它试图在域0.2.1查询一个主机名为192的logging。 它没有任何caching的名称,所以它要求根服务器。 他们为.com和.net等顶级域名(TLD)提出请求,但是这个请求是对.1的请求。 他们及时回应说没有这样的,这就是recursion者发给你的。
您在dig看到的回应是您的recursion名称服务器说:“您寻找的名称指向其他地方,并且某个地方不存在 – 询问根服务器,如果您不相信我”。
因此,将IP地址放入CNAMElogging是无效的,我怀疑正在工作的系统是否通过其他机制正常工作,如主机文件或本地名称parsing – 调查其名称parsing行为。
cname是规范名称,它只是另一个名称的别名,通常是Alogging或另一个cname等。如果您将cname设置为指向IP,则它只是该IP的别名。 我不认为你的DNS服务器检查目标是否合法,因为标准RFC并没有真正说明cname目标的数据格式/validation是什么。 这不是一个常用的用法,但如果它为你工作,那么它正在工作。 事实上,它不工作有时应该足以让你使用它通常使用的,我想。
你可以有:
example IN CNAME 1.2.3.4.
1.2.3.4是一个工作的IP地址。 注意CNAME中的尾部点。 事实上,你的办公室中的一些机器确实可以解决这个问题,而另一些机器却不会让我相信那些在lmhosts或/etc/hosts文件中设置了子域的机器。