我们为我们的域设置了拆分 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 具有定义的格式,可以进行保护,并可以按照您需要的任何方式编写脚本。