假设我有两个 DNS 服务器为一个私有域提供记录。
DNS1: 192.168.1.10 - PowerDNS on Linux, primary authoritative
DNS2: 192.168.1.11 - Windows DNS for a custom application, acting as authoritative
Domain: mydomain.com
DNS1 是一个“静态”服务器,托管一些很少或从不改变的 A 记录:
server-01.mydomain.com
gateway.mydomain.com
test.mydomain.com
DNS2 是一个接受动态更新的服务器,它与需要 Windows DNS 的自定义应用程序连接,并托管可以实时更改的 A 记录:
dyn-100.mydomain.com
dyn-101.mydomain.com
iot-lights.mydomain.com
...
照原样,这两个服务器都是 的“权威服务器” mydomain.com
。但是,它们各自托管不同的记录。这两个服务器还托管一个反向查找域,其中包含它们所知道的 A 记录的相应 PTR 记录。
我不想在客户端上配置多个 DNS 服务器。
如果 PowerDNS 服务器本身没有可以满足请求的记录,我可以配置它来自动查询其他服务器吗?
例如:如果我查询 DNS1 以查找dyn-100.mydomain.com
,它没有该主机的记录 - 因此通常NXDOMAIN
会发送回复。相反,我希望 DNS1 在发现它无法满足请求时查询 DNS2;如果 DNS2 回复有效记录,DNS1 应将该记录转发给客户端。如果 DNS2 也没有记录,则 DNS1 应发送NXDOMAIN
。
我理解,在这种情况下,DNS1 可能会为 DNS2 进行缓存 - 只要 DNS1 遵守 TTL,那就没问题。这样,我就可以设置具有低 TTL 的动态记录。
对于反向区域中的 PTR 记录也应如此 - 如果dyn-100.mydomain.com
为192.168.1.100
,则查询 DNS1100.1.168.192.in-addr.arpa
应该从 DNS2 返回dyn-100.mydomain.com.
。
SOA 记录配置为在两个主机上匹配,因此这不是问题,但在 SOA 不同的情况下(这不是一个好主意),被查询的服务器应该返回其 SOA,因为它有一个。换句话说,如果 DNS1 本身无法满足域的请求,则应该只调用 DNS2。
这可能吗?
编辑:我同意某种形式的复制的想法,但我不知道这在 Windows 和 PowerDNS 之间是否可行。例如,我很乐意看到这样的场景:PowerDNS 服务器每小时一次单向同步来自 Windows 服务器的数据,根据需要添加、更新和删除记录,然后让所有查询都来自 PowerDNS 服务器。这里的警告是,PowerDNS 服务器本地存在的记录绝不能删除,但 Windows 服务器已删除的记录必须从 PowerDNS 服务器中删除。将静态记录放入 Windows DNS 服务器将不起作用,因为它会干扰自定义应用程序。
答案1
如果您将每个静态 A(您似乎没有很多)放入它们自己的区域(因此每个名称一个区域!),您可以mydomain.com
在每次更新时从 Windows 执行 AXFR。PowerDNS 将允许更具体的区域覆盖 中的内容mydomain.com
。
或者,在您使用的递归器中配置显式转发 - 将其中的静态记录列表指向 DNS1,将区域的其余部分指向 DNS2。
如果您不想在递归器中执行此操作,您可以将 dnsdist 放在 DNS1 上以执行相同的拆分,但这再次要求您明确列出静态名称。
答案2
是的,您可以这样做,但是如果客户端只获得一个 DNS 服务器,那么拥有多个 DNS 服务器有什么意义呢?
您可以在您的区域部分中forward ( only | first );
使用。forwarders { ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; ... ] };
更多信息请点击此处