我遇到了 AD Dns 解析器的一些奇怪行为。我们的 Windows 网络使用 AD 作为其 DNS 解析器,然后 AD 解析 Google.com 等查询。一切都很顺利。
有一天,我启动 dig(在 Windows 上,太棒了!)向同事展示一个问题,然后我查询:
$ dig ANY google.com
。结果非常少,只有A
记录,这让我最初以为 Google 已经关闭了他们的服务。后来我改变了主意,然后查询:$ dig ANY @8.8.8.8 google.com
,当然这给出了预期的包含所有记录的巨大结果。
我发现微软似乎使用了缓存技巧,他们ANY
根据当前缓存拼凑查询的响应。以下步骤将有助于重现此问题。针对 AD DNS 服务器执行所有这些步骤。
使用查询来查询目标域
ANY
:$ dig ANY example.com
。请注意,结果仅包含 A 和 AAAA 记录。使用其他类型查询目标域,例如
MX
orTXT
:$ dig MX example.com
。验证结果是否符合预期。再次发出原始
ANY
查询,现在注意结果包括MX
来自步骤 2 的记录。
我发现每次测试最好都选择一个新域,因为之前的测试会在 AD DNS 中缓存结果。使用 Google 的解析器(或其他解析器)来验证预期结果,例如:$ dig ANY example.com @8.8.8.8
。
有人能证实这一点吗?这是 AD DNS 中的一项设置,阻止它以递归方式解析ANY
查询 - 因为它们以某种方式比其他任何东西都更昂贵?
我个人认为这种行为是完全错误的。
答案1
答案是 ANY 实际上不是 DNS 资源类型。相反,它指的是查询类型 *。根据维基百科,“返回名称服务器已知的所有类型的所有记录。如果名称服务器没有关于名称的任何信息,则将转发请求。返回的记录可能不完整。例如,如果名称同时有 A 和 MX,但名称服务器仅缓存了 A 记录,则只会返回 A 记录。”如果您感兴趣的话,这个想法在 RFC 1034 和 1035 中有更明确的表达。
因此,您的 Windows AD DNS 服务器正在按照您要求的方式做出响应 - 使用它当前已缓存的信息。
尝试 dig MX google.com 或 dig TXT google.com,然后重复 dig ANY google.com。
祝你好运。