DNS:如何让本地服务器将结果叠加到权威服务器上?

DNS:如何让本地服务器将结果叠加到权威服务器上?

我有一个域名,其 DNS 由我控制,并托管在互联网上。我还有一个 NAT 内部网络 (192.168.0.0/24),它可以访问互联网,也是我控制的。在这个内部网络上,我还有一个 DNS 解析器。两者的 DNS 软件都是 PowerDNS。

我希望能够让内部网络上的 DNS 解析器能够添加/更改来自权威服务器的查询和结果记录。例如,权威服务器可能只有一条有关 animal.example.com 的记录:

animal.example.com.    IN    AAAA    2001:140:283::1

然而,我希望当内部客户端对 animal.example.com 进行 DNS 查找时,他们可能会得到以下内容:

animal.example.com.    IN    AAAA    2001:140:283::1
animal.example.com.    IN    A       192.168.0.2

显然,我可以设置内部 DNS 服务器来假装是 example.com 的权威服务器,但这需要付出相当大的努力才能使主 DNS 服务器和内部 DNS 服务器保持同步,因为两者之间的记录是相同的。如果内部 DNS 服务器可以以某种方式成为主 DNS 服务器的从属服务器,但也可以添加自己的结果,那就太理想了。

这可能吗?

答案1

事实上如果我为了做到这一点,我将使用带有递归器的 Lua 脚本,该脚本会对 postresolve 上的数据进行处理。

但是我确实推荐一些不同的东西:只需使用一个单独的权威区域,如 internal.example.com,您可以在其中从权威服务器 AXFR example.com 并简单地附加您本地的 RFC1918 数据。

这样,您仍然可以从 LAN 调试权威区域(就像在互联网上一样)并使用内部数据。

关于 PowerDNS Recursor Lua 脚本:http://doc.powerdns.com/recursor-scripting.html

答案2

我认为您需要的是水平分割 DNS 设置,但是 PowerDNS 并不直接支持这种设置(与 Bind 或 DJBDNS 不同)。作者对此的官方回应如下: http://mailman.powerdns.com/pipermail/pdns-users/2006-September/003779.html

我自己从未发现过水平分割 DNS 特别令人困惑,特别是当文件在文件系统中布局清晰时,例如 ./master-interal/domain.com ./master-external/domain.com

他们建议的唯一选择是让两个不同的 PowerDNS 实例在服务器上运行,监听不同的端口。我猜你会利用 iptables 将流量重定向到端口 53 到相关的实例。

答案3

我强烈建议您不要走这条路,因为它非常混乱、复杂且难以管理。相反,您应该设置一个单独的内部域,如inside.example.com。然后,如果您的外部 DNS 服务器也位于您的内部网络上,您应该将其设置为对两个域都具有权威性。但是,如果您的外部 DNS 服务器不在您的内部网络上,您应该将您的内部 DNS 服务器设置为对 inside.example.com 具有权威性。然后您的内部 DNS 服务器应该将所有其他请求转发到外部 DNS 服务器。

我意识到这样做的缺点是你必须在所有的内部机器上更改域,但是现在做好这项前期工作将为你节省以后的很多混乱。

答案4

使用管道后端在 PowerDNS 中。我在 Python 上创建了几个系统。

管道后端:

PipeBackend 主要用于快速开发新的后端,而无需与 PowerDNS 紧密集成。它允许最终用户使用任何语言编写 PDNS 后端。

相关内容