Bind View原理
View在Bind中被称为视图功能,DNS最基本的功能就是响应域名的查询,然后返回该域名的地址数据。而view和常规的DNS不同,当用户访问某个域名时,DNS服务器上的view会先判断一下客户端的源IP地址,然后使用acl和内部IP表做匹配,再返回给用户查询请求(一个区域会有多个view,每个view的配置均不相同,当用户访问一个域名时,view会根据用户IP判断此用户IP属于哪个view,然后某个view再给用户返回查询请求)
网络环境
通过配置bind view 对局域网中不同网段或IP的客户端指定不同的forwarders dns,"www.jd.com" 使用dns"8.8.8.8”和"223.5.5.5" 解析为不同主机从而验证结果;
Bind ACL
acl主配置语句用于定义一个命名的访问列表,里面包含了一些用IP表示的主机,这个访问列表可以在其他语句使用,表示其所定义的主机。其格式如下:
代码语言:javascript复制acl acl-name {
address_match_list
address_match_list表示IP地址或IP地址集。其中,none、any、localhost和localnets这4个内定的关键字有特别含义,分别表示无主机、任何主机、本地网络接口IP和本地子网IP。
- none:没有一个主机
- any:任意主机
- localhost: 本机
- localnet:本机的IP同掩码运算后得到的网络地址
vim /var/named/acl/named.acl
代码语言:javascript复制acl "local.cernet" {
192.168.100.161/32;
192.168.100.234/32;
};
代码语言:javascript复制acl "source" { //定义一个名为source的ACL
10.0.0.1; 192.168.23.1; 192.168.23.15; //包含3个单个IP
};
acl "source_lan" { //定义一个名为source_lan的ACL
"someips"; //可以包含其他ACL
10.0.15.0/24; //包含10.0.15.0子网中的所有IP
!10.0.16.1/24; //非10.0.16.1子网的IP
{10.0.17.1;10.0.18.2;}; //包含了一个IP组
localhost;//本地网络接口IP(含实际接口IP和127.0.0.1)
};
访问控制指令
代码语言:javascript复制allow-query {};允许查询的主机:白名单
allow-transfer{};允许区域传送的主机:白名单
allow-recursion{};允许递归的主机,建议全局使用
allow-update{};允许更新区域数据库中的内容
Bind view 配置
视图(view)语句的定义
代码语言:javascript复制view view_name [class] {
match-clients { address_match_list } ;
match-destinations { address_match_list } ;
match-recursive-only { yes_or_no } ;
[ view_option; ...]
zone-statistics yes_or_no ; ]
[ zone_statement; ...]
};
Bind 配置文件
vim /etc/named/named.conf
代码语言:javascript复制include "/var/named/acl/named.acl";
view "in.local" {
match-clients { local.cernet; };
zone "." IN {
type hint;
file "named.ca";
};
forward first;
forwarders { 8.8.8.8; };
include "/etc/named/named.rfc1912.zones";
};
view "out.local" {
match-clients { !local.cernet;any; };
zone "." IN {
type hint;
file "named.ca";
};
forward first;
forwarders { 223.5.5.5; };
include "/etc/named/named.rfc1912.zones";
};
vim /etc/named/named.rfc1912.zones
代码语言:javascript复制zone "zabbix.com" IN {
type master;
file "zabbix.com.zone";
allow-update { none; };
};
zone "rpztest.local" {
type master;
file "rpz.test.local";
allow-update { none; };
};
zone "100.168.192.in-addr.arpa" IN {
type master;
file "100.168.192.loopback";
};
注意
(1)启用view,所有的zone都只能定义在view中
(2)仅在允许递归请求的客户端所在view中定义根区域
(3)客户端请求到达时,是自上而下检查每个view所服务的客户端列表
客户端测试
Client IP 192.168.100.161
Client IP 192.168.100.235
BINd 日志
8-Oct-2022 11:39:16.938 queries: info: client @0x7fc1480a1ae0 192.168.100.161#51765 (www.jd.com): view in.local: query: www.jd.com IN A E(0)K (192.168.100.161)
18-Oct-2022 11:42:09.811 queries: info: client @0x7fc14400fc90 192.168.100.161#43833 (www.jd.com): view in.local: query: www.jd.com IN A E(0)K (192.168.100.161)
18-Oct-2022 11:44:36.697 queries: info: client @0x7fc144070630 192.168.100.235#35406 (www.jd.com): view out.local: query: www.jd.com IN A E(0) (192.168.100.161)
18-Oct-2022 11:45:11.754 queries: info: client @0x7fc1480b0540 192.168.100.235#58196 (www.jd.com): view out.local: query: www.jd.com IN A E(0) (192.168.100.161)