我正在设置 BIND (v9.16) 名称服务器。
它的主要目的是作为我们内部主机的常规递归器。但对于几个特定区域(我们托管的区域),我需要将其设置为转发器。目标是避免对根和 TLD DNS 服务器产生依赖,并且即使在外部网络连接不可用的情况下也能继续使用我们的内部服务。
这很容易设置,这里是我的配置的相关部分:
options {
allow-recursion {
// Here comes the list of our inside networks
};
};
zone "somedomain.example" IN {
type forward;
forward first;
forwarders {
// Here comes the list of the primary servers for this zone
};
// ... repeated for all forward zones
此设置按预期工作,但有一点不方便。必须为所有“前向”区域重复主服务器列表。我们有相当多的主服务器,所有服务器都具有 IPv4 和 IPv6 地址,并且 ^C/^V 所有区域的列表不是我见过的最优雅的东西,也不太符合 DRY 规范。
我知道该forwarders
语句也可以包含在全局options
部分中,但是从基本实验中我了解到该语句不适用于正向区域,它仅适用于仅正向名称服务器(文档不是很清楚,但提到“如果没有forwarders
语句,[...]取消语句中任何转发器的效果options
”)。
有没有办法创建一个命名的转发器列表,大致与我们创建 ACL 的方式相同,并在forwarders
相关区域内的语句中使用这个符号名称?
答案1
与许多其他守护进程和服务一样,ISC Bind 支持include
其配置文件中的指令。
这使您可以将配置设置和指令列表移动到不同的文件,并且您可以在需要的地方引用该文件。
这样就减少了您的管理负担,只需要在一个地方维护您的转发器列表,并且您只需要在需要的地方复制参考即可。
// "/var/named/includes/forwarders.conf"
// master list of forwarders
forwarders {
192.0.2.21;
192.0.2.88;
};
然后在named.conf中:
zone "somedomain.example" IN {
type forward;
forward first;
include "/var/named/includes/forwarders.conf";
}
zone "otherdomain.example" IN {
type forward;
forward first;
include "/var/named/includes/forwarders.conf";
}