DNS 服务器聚合组

DNS 服务器聚合组

我有一个如下图所示的网络配置:

网络配置

有一台面向互联网的机器,分配了静态IP,还有一组只有本地地址的机器。

每台“私有”计算机都运行一个 DNS 服务器,每个服务器解析几个域。假设我们有这样的内容:

机器 192.168.1.2

example1.com A 192.168.1.2
example2.com A 192.168.1.2

机器 192.168.1.3

example3.com A 192.168.1.3

机器 192.168.1.4

example4.com A 192.168.1.4

面向公众的服务器还运行 DNS 服务器。它应充当所有内部服务器的代理,聚合其区域并将地址转换为公共地址。因此,它应该使用类似以下内容来响应 DNS 查询

机器 123.123.123.123

example1.com A 123.123.123.123
example2.com A 123.123.123.123
example3.com A 123.123.123.123
example4.com A 123.123.123.123

考虑到我无法控制“私人”机器,是否有可能实现这样的事情?它们可以被视为黑匣子,不知道“代理”服务器

答案1

您可能可以设置 DNS 服务器使用条件转发器,指向其他 DNS 服务器,以便解析您想要解析的域名。这并非完全透明,但它会传递查询并返回结果。

否则,您必须配置负载均衡器来检查查询并将其发送到正确的服务器。我不知道有任何负载均衡器支持此功能,但您可以使用 iptables 和第 7 层过滤构建一个,使用 DNAT 重定向查询并使用 SNAT 来“代理”它们。

答案2

这听起来像是 dnsmasq 的工作(http://www.thekelleys.org.uk/dnsmasq/doc.html),这样可以轻松为不同的域定义权威服务器。例如,如果 example1.com 的 DNS 位于 192.168.1.2,您可以告诉 dnsmasq --server=/example2.com/192.168.1.2。

dnsmasq 提供了多种地址别名方法 - 它可以将内部地址转换为外部地址(我认为这里可能不需要)。它可以充当通用解析器,也可以仅充当权威服务器。而且,您可以将其绑定到各种接口或端口。例如,我们在端口 53 上使用 dnsmasq 作为 5353 上的内部绑定/命名服务器的前端,以执行各种插入和转换。

dnsmasq 用于许多防火墙和网关,并且(可以说)是 DNS 瑞士军刀。

答案3

假设是 Unix/Linux 系统(Windows 应该类似):

  1. 在面向世界的DNS服务器中,只包含您希望外界看到的信息。
  2. 网关机器应该使用内部 DNS 服务器进行解析(例如,将内部 DNS 服务器放在 /etc/resolv.conf 中)。
  3. 内部 DNS 服务器应该在其“转发器”语句中使用网关机器。

如果面向世界的 DNS 服务器不是您的网关,那就更好了,因为这样可能会暴露您的内部 DNS 数据。为什么不将您的外部区域托管在其他地方,例如您的服务提供商处?如果您可以将面向世界的 DNS 服务器移动到不同的框(甚至是不同的网络),则网关上的 DNS 服务器应该只监听内部 NIC 上的端口 53。

相关内容