Mac*_*cki 14 domain-name-system
我相信第一个问题的最简单答案是“不,你有“A””,但我不小心使用指向 IP 地址的 CNAME 设置了一些子域,并且它在我办公室的几台计算机上工作。我想知道怎么可能?
现在,当我在家检查时,出现以下错误:
beast:~ viroos$ host somesubdomain.somedomain.com
Host somesubdomain.somedomain.com not found: 3(NXDOMAIN)
Run Code Online (Sandbox Code Playgroud)
我 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
Run Code Online (Sandbox Code Playgroud)
Sha*_*den 20
CNAME记录上的数据必须始终是另一个 DNS 名称 - 这就是CNAME.
正如 RFC 1034 所言, a 中的数据CNAME应该是:
CNAME a domain name.
Run Code Online (Sandbox Code Playgroud)
同时,如果您想指向一个 IP 地址,那么您的票证是:
A For the IN class, a 32 bit IP address
Run Code Online (Sandbox Code Playgroud)
CNAME被设计和实现为一个 DNS 别名;它没有在该数据字段中具有 IP 地址的概念。因此,按照设计,它被解释为另一个 DNS 名称的别名;毕竟,IP 地址符合 DNS 名称的语法。
因此,例如,假设您的 DNS 数据是:
somesubdomain.somedomain.com. 60 IN CNAME 192.0.2.1.
Run Code Online (Sandbox Code Playgroud)
您正在查询的递归 DNS 服务器看到记录是CNAME,并认为您需要它包含的实际数据。除了CNAME已找到的记录外,没有其他记录,因此无法向客户提供答案。
它尝试192在域内查询主机名的记录0.2.1。它没有为该名称缓存任何内容,因此它会询问根服务器。他们为像.com和.net这样的TLD 请求提供服务,但这个请求是对.1. 他们迅速回应说没有这样的,这就是递归器发送给你的。
您看到的响应dig是您的递归名称服务器说,“好吧,您查找的名称指向其他地方,而某处不存在 - 如果您不相信我,请询问根服务器”。
所以,是的,将 IP 地址放在CNAME记录中永远不会有效,我怀疑正在工作的系统通过某种其他机制正常运行,例如主机文件或本地名称解析 - 调查它们的名称解析行为。