聚合DNS服务器组

我有一个networkingconfiguration,如图所示:

网络配置

有一台机器面向互联网,分配了一个静态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 

考虑到我无法控制“私人”机器,是否有可能完成这样的事情呢? 他们可以被认为是黑盒子,不知道“代理”服务器

您可能可能设置您的DNS服务器使用条件转发器,指向其他DNS服务器,为您想要它解决的域。 这不是完全透明的,但它将通过查询并将结果传回。

否则,您将不得不configuration负载均衡器来检查查询并将其发送到正确的服务器。 我不知道任何负载平衡器,这将支持这一点,虽然你可以构build一个与iptables和第7层过滤,使用DNATredirect查询和SNAT“代理”他们。

这听起来像dnsmasq工作( http://www.thekelleys.org.uk/dnsmasq/doc.html ),可以很容易地为不同的域定义权威的服务器。 例如,如果exam​​ple1.com的DNS位于192.168.1.2,那么可以告诉dnsmasq –server = / example2.com / 192.168.1.2。

dnsmasq提供了各种地址别名方法 – 它可以将内部地址转换为外部地址(我不认为这可能是需要的)。 它可以充当一般的parsing器,或者只是一个权威的服务器。 而且,您可以将其绑定到各种接口或端口。 例如,我们使用端口53上的dnsmasq作为5353的内部绑定/命名服务器的前端来执行各种插入和转换。

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

假设Unix / Linux的框(Windows应该是相似的):

  1. 在面向世界的DNS服务器中,只包含您想要外部世界看到的信息。
  2. 网关机器应该使用内部DNS服务器来parsing(即将内部DNS服务器放在/etc/resolv.conf中)。
  3. 内部DNS服务器应该在其“转发器”语句中使用网关机器。

如果面向世界的DNS服务器不是您的网关,因为您冒着暴露您的内部DNS数据的风险。 为什么不把你的外部区域托pipe在其他地方,比如你的服务提供商? 如果您可以将面向世界的DNS服务器移动到另一个盒子(甚至不同的networking),则网关上的DNS服务器应该只侦听内部NIC上的端口53。