我有一个Windows域:contoso.local,我想通过转发DNS服务器将所有请求转发到另一个some.contoso.local服务器:
contoso.Local.DNS => Proxy.DNS => some.contoso.local.DNS
由于某些原因,我不能允许直接从contoso.Local.DNS => some.contoso.local.DNS转发。Proxy.DNS是必需的。
Proxy.DNS是具有配置(部分)的简单Bind9机器。
zone "some.contoso.local" {
type forward;
forward only;
forwarders { 1.2.3.4; }
}在contoso.Local.DNS上有一个NS记录说some.contoso.local NS ip.of.Proxy.DNS
问题:
a.some.contoso.local直接查询Proxy.DNS时,就可以了。a.some.contoso.local查询contoso.Local.DNS时,会出现查询错误。我认为原因是contoso.Local.DNS用flags = 0x0000向Proxy.DNS发送查询,nslookup客户端设置flags = 0x0100。这个位表示Allow recursive request。

我可以以某种方式解决这个问题吗?
Allow recursive request位或发布于 2021-04-15 12:25:20
遵循NS记录是递归解析的一部分--因此此时已经确定contoso.local.DNS将是负责整个查询的递归解析器。
因此,发出的查询不是最终的查询,而是下一步,代理将无法知道客户端需要什么。同时,仅转发的服务器并不期望具有“递归所需”清晰的查询,因为它们所能做的就是转发到另一个(递归)服务器,该服务器对于当前的查询可能是权威的,也可能不是权威的--但是作为递归查找的一部分的查询总是需要指向具有权威性的服务器。
因为只有转发的服务器从来都不是权威的,所以它需要拒绝非递归的查询,这就是您所看到的--但是仅仅改变标志是不够的。
发布于 2021-04-15 14:01:47
回答我自己您应该同时创建: NS记录和条件转发器。
首先,为some.contoso.local在contoso.local.DNS上创建NS记录(在windows服务器上:区域名上的RightClick,->新委派.)并指定some.contoso.local.DNS服务器的名称(此区域的真正主服务器)。
这将确保在发生contoso.local区域的区域传输时,辅助服务器将收到some.contoso.local由some.contoso.local.DNS承载的信息,并将避免像no such host这样的答案。
为了避免验证(如果some.contoso.local.DNS服务器无法从contoso.local.DNS访问),您应该通过PowerShell创建此记录。
在这一步中,如果您不使用代理,它就完成了。Windows DNS将自动转发到指定的NS,但这些查询是不可转发的.
如果您需要将查询直接转发到NS服务器,而是通过代理,请参见下一步。
第二:只有在完成第一步时,Windows MMC插件将允许您为任何服务器创建区域some.contoso.local的条件转发器。您在这里编写转发器Proxy.DNS:这将解决some.contoso.local.DNS服务器无法从contoso.local.DNS服务器访问的问题:所有查询都将以这种方式转发:
Client => contoso.Local.DNS => Proxy.DNS => some.contoso.local.DNS
https://serverfault.com/questions/1060473
复制相似问题