我想问是否可以在 Windows 或 Linux 上配置客户端以进行迭代查询而不是递归查询。
我只找到有关关闭 DNS 服务器上的递归的文章。
谢谢
答案1
我不知道迭代 DNS 查询是什么。
发送到 DNS 服务器的查询可能会设置“请求递归”标志。用人类的话来说,这就像是说“[东西] 的地址是什么,如果你不知道,请帮我查一下”。服务器可能会否认这一点,只返回“我不知道,也没问”的等价内容,或者它可能会回复“我问过,它是 [这个]”或“我问过,被告知它是 [这个]”,或者“我知道这个,它是 [这个],我实际上是该地址的权威。”
非递归查询只是“[东西]的地址是什么,但如果你不知道,就直接说出来”。服务器可能已经知道了上一个递归查询的答案并返回它,也可能不知道,但无论哪种方式它都不会反过来查询任何东西。
假设一个服务器(我们称之为 S)尊重递归请求,它将采用名称 - 例如“www.example.com” - 并从它具有信息的最右边的组件开始。
这可能什么都没有,在这种情况下,S 会将查询发送到根服务器,该根服务器的列表要么是缓存的,要么是作为硬编码或预配置列表给出的。其中一个根服务器将收到“www.example.com,请求递归”的请求;根服务器不会递归,但它们将返回它们所知道的下一个最佳信息:“.com”的名称服务器及其地址。
尝试运行dig www.google.com @c.root-servers.net
然后,S 向其中一个服务器询问“www.example.com,请求递归”。它们也不会递归,而是返回下一个最佳结果:“example.com”的名称服务器及其地址(再次跳过它们从哪里获得这些信息 - 查找“粘合记录”)。
尝试运行dig www.google.com @k.gtld-servers.net
然后 S 向其中一个服务器询问“www.example.com,请求递归”。他们不需要递归,因为他们知道答案,所以他们会将其连同“权威答案”标志一起发回。
尝试运行dig www.google.com @ns3.google.com
(注意“aa”标志;这里是回复标志列表)。
然后,S 会将最终答案发回给客户端,但不带“aa”标志,因为 S 不具有权威性,即它必须询问。
在某些方面,“递归”查询由 S“迭代”处理。如果客户端想要直接执行此操作,则需要有一个预配置的根服务器列表(可以通过询问这些服务器来更新),并且它应该缓存结果以供其他本地程序重复使用。这基本上意味着您将在本地主机上运行递归、仅缓存(因为它对任何事情都不具有权威性)的名称服务器。
那么...你能解释一下你的问题吗?你认为你想做什么?
答案2
当你向服务器发送 DNS 请求时,你可以调至迭代模式。在此请求上,它将忽略 DNS 服务器的设置。
例如,您可以在 dig 或 nslookup 下尝试
dig +norecurse netpas.co
如果 DNS 服务器缓存了该记录,您将获得 A 记录。或者,获得下一步需要尝试哪个 DNS 服务器的建议。