分割 DNS - 最干净且易于维护的解决方案?

分割 DNS - 最干净且易于维护的解决方案?

我们为我们的域设置了拆分 DNS,这导致内部客户端解析与外部客户端不同的 DNS 记录。

目前,这两个区域是完全分开管理的。对于内部和外部不同的记录,这没有问题,但对于其他所有记录,必须在两个地方复制所有记录。大多数 CNAME 记录、MX 记录、SPF 记录和一些 A 记录都需要在两个地方输入和维护。

虽然这不是固有地不可接受,从设计角度来看,这样的数据重复并不理想。我觉得理想情况下,内部名称服务器只会转发来自外部名称服务器的结果,但允许我们覆盖或添加其他记录。虽然看起来我可以使用指定的转发器(如域名系统) 来做这样的事情,平面文件配置会使向团队其他成员推销这个想法变得困难。

除此之外,我能想到的最佳解决方案是强力DNS使用 MySQL 后端和网络界面。这使得添加 并且我们要覆盖的每个子域的根 A 记录(例如 www.example.com),这意味着根域上的其他记录(例如 example.com)仍将从外部名称服务器转发。

对于这种本该很常见的事情,我似乎还是有点偏离常态,对吧?有没有更简洁的方法来管理拆分 DNS 而不保留重复记录?还是我遗漏了什么?

答案1

在其中一个权威名称服务器位于内部网络边界的网络中,我使用bind视图和$INCLUDE指令:

mydomain-global.zone

@ IN SOA ns1 hostmaster ( 12345; 1D; 2M; 1M; 3H )
  IN NS ns1
  IN NS ns2

  IN MX 10 mail

  www               IN A 1.2.3.4
  other-public-host IN A 1.2.3.5

mydomain-internal.zone

$INCLUDE mydomain-global.zone

an-internal-record IN A   10.20.30.40
_kerberos          IN SRV 0 0 88 dir

根据视图定义选择区域:

view "internal" {
  match-clients { 10.0.0.0/8; };
  zone "mydomain" {
    type master;
    file "mydomain-internal.zone";
  };
  include "named.conf.internalzones";
}

view "global" {
  match-clients { any; };
    zone "mydomain" {
    type master;
    file "mydomain-global.zone";
  };

为了能够为内部/外部查询分配记录不同的目标,请$INCLUDE在底部添加两个另外的区域片段和mydomain-(internal|global).zone

答案2

区域必须具有单一权威的管理点这一事实是 DNS 工作方式所固有的;这种情况在短期内改变的可能性很小。

实现自动化的最佳(也是官方)方法是使用 ddns 和 nsupdate。DDNS 具有定义的格式,可以进行保护,并可以按照您需要的任何方式编写脚本。

相关内容