Der*_*ler 5 domain-name-system bind
我在*我们的一个区域有一个记录,我改变了它。但是当我从公共 DNS 服务器查询该区域的某些随机名称时,我仍然收到旧的 IP 地址。
这对我来说毫无意义。我查询的服务器不知道名称的正确 IP 地址,除非他们知道有通配符记录。否则,他们将不得不询问我们的名称服务器。
当我查询我们自己的名称服务器以获得相同的名称时,它们会返回新的 IP 地址。
发生什么了?
我快速查看了是否所有权威域名服务器都已同步。
$ dig +nssearch fm.mg
SOA ns1.hartwig-at.de. hostmaster.hartwig-at.de. 2015022400 86400 10800 2419200 3600 from server 217.70.177.40 in 8 ms.
SOA ns1.hartwig-at.de. hostmaster.hartwig-at.de. 2015060502 86400 10800 2419200 3600 from server 2a00:1158:3::b6 in 25 ms.
SOA ns1.hartwig-at.de. hostmaster.hartwig-at.de. 2015060502 86400 10800 2419200 3600 from server 134.119.4.37 in 26 ms.
SOA ns1.hartwig-at.de. hostmaster.hartwig-at.de. 2015060502 86400 10800 2419200 3600 from server 37.200.99.108 in 28 ms.
SOA ns1.hartwig-at.de. hostmaster.hartwig-at.de. 2015060502 86400 10800 2419200 3600 from server 2a00:1158:3::87 in 28 ms.
$
Run Code Online (Sandbox Code Playgroud)
似乎217.70.177.40正在提供该区域的旧版本,这可能解释了结果的变化。
如果您不使用 DNSSEC,则客户端无法确定回复是由*区域中的记录生成还是由完全匹配生成。
客户端可以使用启发式方法,将查找所需名称所产生的答案与查找随机字符串所产生的答案进行比较。如果答案相同,则可能是*记录,如果答案不同,则可能不是*记录。
如果区域使用 DNSSEC 离线签名,则客户端可以查看是否使用了*记录。这是因为签名中使用的名称实际上将包含一个文字*字符,这将证明答案是使用*记录生成的。此外,NSEC3 可以提供一个签名,表明如果不使用*记录就无法回答请求的名称。