我相信对于第一个问题最简单的答案是“不,你有”A“为此”,但我不小心设置了一些使用CNAME指向ip地址的子域,它在我办公室的几台计算机上工作.我想知道怎么可能?
现在,当我在家里检查时,我有以下错误:
beast:~ viroos$host somesubdomain.somedomain.com Host somesubdomain.somedomain.com not found: 3(NXDOMAIN)
我100%曾经在我的办公室工作(目前它看起来没有,但我在不同的机器上检查它).因此,如果由于某些特殊的网络设置或因为我在添加DNS条目后测试它,我不是100%.
我知道这个故事听起来有点疯狂/令人难以置信,但有人可以帮我解决这个难题.
; <<>> 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
解决方法
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之外的其他记录,因此没有给客户端的答案.
它尝试在域0.2.1内查询主机名192的记录.它没有为该名称缓存任何内容,因此它会询问根服务器.它们服务于.com和.net等TLD请求,但此请求是对.1的请求.他们立即回应没有这样的,这就是递归发送给你的东西.
您在dig中看到的响应是您的递归名称服务器,“好吧,您寻找的名称指向其他地方,并且某处不存在 – 如果您不相信我,请询问根服务器”.
所以,是的,在CNAME记录中放置一个IP地址永远不会有效,我怀疑正在运行的系统通过其他机制(如主机文件或本地名称解析)正常运行 – 调查其名称解析行为.