使用 BIND 9 如何在多个视图中匹配客户端?

使用 BIND 9 如何在多个视图中匹配客户端?

BIND 似乎从上到下查看配置文件,并根据匹配客户端将查询分配给第一个匹配的视图。根据http://www.zytrax.com/books/dns/ch7/view.html这正是它应该工作的方式。

在我的配置中,match-clients 配置中可能还有其他适用于用户的视图,我想以某种方式循环遍历它们。如果没有找到正确的结果(从上到下也可以),理想情况下应该继续检查以下视图。

使用 BIND 是否可行?下面是一个例子。在下面的配置中,来自 192.168.1.100 或 192.168.200 的用户都只能访问第一个视图。相反,我希望用户 192.168.1.200 也能访问第二个视图。

acl "kids" {
        192.168.1.100;
        192.168.1.200;
};

view "kids"{
        response-policy { zone "kids"; };
        match-clients { kids; };
        recursion yes;
        zone "kids" {
                type master;
                file "kids.db";
                allow-query { none; };
        };
};

acl "teens" {
        192.168.1.200;
};

view "teens"{
        response-policy { zone "teens"; };
        match-clients { teens; };
        recursion yes;
        zone "teens" {
                type master;
                file "teens.db";
                allow-query { none; };
        };
};

答案1

它无法按照您想要的方式完成。视图匹配在第一次匹配时停止,并且在视图之外,只能存在一组默认条目。客户端只能匹配一组区域。

您可以让所有视图都包含要提供给客户端的所有区域定义(在您的示例中,192.168.1.200 应该只在“teens” acl 中,而“teens”视图将同时包含“kids”和“teens”区域的定义)。您可以使用“include”命令来避免不必要的重复,但仅此而已。

答案2

绝对有可能……

acl "kids" {
        192.168.1.100;
};

view "kids"{
        response-policy { zone "kids"; };
        match-clients { kids; };
        recursion yes;
        zone "kids" {
                type master;
                file "kids.db";
                allow-query { none; };
        };
};

acl "teens" {
        192.168.1.200;
};

view "teens"{
        response-policy { zone "teens"; };
        match-clients { teens; };
        recursion yes;
        zone "teens" {
                type master;
                file "teens.db";
                allow-query { none; };
        };
        zone "kids" {
                type master;
                file "kids.db";
                allow-query { none; };
        };
};

对于你的奴隶,你需要使用 tsig 并将你的奴隶从视图中排除,请参阅bind 如何处理 allow-notify 和 match-clients其中有一个例子。

相关内容