BIND v9.9.7,视图和包含

BIND v9.9.7,视图和包含

我最近开始升级到 bind 9.9.7,但在使用 bind 时不幸遇到了障碍。

我在我的环境中设置了视图,以便根据主机运行查询的位置区分具有不同 IP 地址的 4 个区域。我服务的其他 36 个区域不区分 IP 地址,而是始终为每个主机提供相同的地址。为了实现这一点,我创建了一个单独的主机列表,然后我使用指令includenamed.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 发出查询。

相关内容