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其中有一个例子。