我最近开始升级到 bind 9.9.7,但在使用 bind 时不幸遇到了障碍。
我在我的环境中设置了视图,以便根据主机运行查询的位置区分具有不同 IP 地址的 4 个区域。我服务的其他 36 个区域不区分 IP 地址,而是始终为每个主机提供相同的地址。为了实现这一点,我创建了一个单独的主机列表,然后我使用指令include
将named.conf
这些条目包含在两个区域中。以下是我在其中一台从属服务器上运行的配置的简短示例:
首先,这是我的 named.conf 的一个片段
view "sitea" {
match-clients {192.168.1.0/24;};
zone "mydomain.com." IN {
type slave;
masters { 192.168.1.100;};
file "sitea_mydomain.com.db";
};
include "/etc/common_zones.conf";
};
view "siteb" {
match-clients {any; };
zone "mydomain.com." IN {
type slave;
masters {192.168.1.100; };
file "mydomain.com.db";
};
include "/etc/common_zones.conf";
};
以下是该文件的一个片段common_zones.conf
:
zone "1.168.192.in-addr.arpa." IN {
type slave;
masters {192.168.1.100;};
file "192.168.1.db";
};
以前,bind 在视图构造中使用同一个文件两次是完全没问题的,但现在不行了。在两个不同的视图中两次列出区域文件会导致错误,该错误明确告诉您 bind 不允许此配置。在这种情况下,它告诉我它不会启动,因为我使用了重复的文件192.168.1.db
。具体来说,错误消息是:
writeable file '192.168.1.db': already in use: /etc/common_zones.conf
我遇到的问题是,在现实世界中,我有超过 40 个区域(反向区域),无论它们来自哪个视图,它们始终都是相同的答案。能够使用如上所示的通用包含是一种很好的方法,让我能够区分域“ mydomain.com
”的几个主机。现在,我可能需要在每个视图中输入 40 个区域,每个区域都指向不同的文件,尽管数据是相同的。
有人能对此有一个巧妙的解决方案吗?
答案1
如果可以升级到 Bind 9.10,则“in-view”语句可以完美地解决这个问题(http://www.zytrax.com/books/dns/ch7/zone.html#in-view)。
但是,如果这不可能的话,我在查找“in-view”时注意到了一些我不知道的非常有趣的事情。对于从属区域,“file”参数(它恰好位于上述链接中的“in-view”之前)是选修的。这可能正是您正在寻找的解决方案。我假设该区域仅存在于 RAM 中,每次从属重新启动或重新加载区域时都会重新传输。值得一试。(编辑:您仍然需要 2 个版本的通用文件,一个用于具有文件名的主文件,另一个用于没有文件名的主文件 - 因此这不是一个完美的解决方案)
答案2
或许采用named.conf
以下配置:
view "sitea" {
include "/etc/common_zones.conf";
match-clients {localhost; ...; };
};
view "siteb" {
include "/etc/UNcommon_zones.conf";
match-clients {any;};
};
然后common_zones.conf
就是目前的情况,当UNcommon_zones.conf
你放入转发器时:
zone "..." IN {
type forward;
forward only;
forwarders { 127.0.0.1; };
};
至少在非常有限的测试中不会出错,使用一个测试 virt 拉动主区域,另一个测试 virt 向所述测试从属 NS 发出查询。