我*
在我们的一个区域上有一条记录,我更改了它。但是当我从公共 DNS 服务器查询该区域上的某些随机名称时,我仍然收到旧的 IP 地址。
我觉得这毫无意义。我查询的服务器不可能知道该名称的正确 IP 地址,除非他们知道有通配符记录。否则,他们就必须询问我们的名称服务器。
当我向我们自己的名称服务器查询同一个名称时,他们会返回新的 IP 地址。
发生什么了?
答案1
我快速查看了一下所有权威名称服务器是否已同步。
$ 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.
$
看起来它217.70.177.40
正在为该区域的旧版本提供服务,这可能解释了结果的变化。
答案2
如果您不使用 DNSSEC,则客户端无法确定答复是由*
区域中的记录还是由完全匹配产生的。
客户端可以使用启发式方法,将查找所需名称所产生的答案与查找随机字符串所产生的答案进行比较。如果答案相同,则很可能是一条*
记录,如果答案不同,则很可能不是一条*
记录。
但是,如果区域使用 DNSSEC 进行离线签名,客户端就有可能查看是否*
使用了记录。这是因为签名中使用的名称实际上将包含文字*
字符,这将证明答案是使用*
记录生成的。此外,NSEC3 可以提供签名,表明如果不使用记录,就无法回答所请求的名称*
。