在我国目前的网络环境下面,多个运营商并存,运营商之间的存在必定的网络互通问题,若是把来自不一样的运营商或者地域的全部用户经过简单的A记录分配到一个机房,那么就存在部分网民访问延时大或者丢包的问题。那么bind里面就提供了视图(Dns view ) 技术来解决这个问题,DNS视图 就是对同一个资源记录根据的DNS请求来源IP地址不一样,分配到解析器的解析结果也不一样,也就是说它能够提供这样的功能。服务器
咱们在这里配置的是模拟环境,环境以下:
网络
都是采用Centos6.6系统,yum安装的bind服务。优化
dns服务器的named配置以下:debug
[root@localhost etc]# cat /etc/named.conf options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursion yes; dnssec-enable yes; dnssec-validation yes; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; channel query_log { #开启请求日志 file "/var/log/dns/query.log" versions 5 size 30m; severity info; print-time yes; print-category yes; }; category queries { query_log; }; }; view "view_localnet_45" { match-clients { # 使用match-clients指令,指定匹配来自这些用户的ip localnet45; # 写的是acl配置文件定义的aclname }; zone "ljf.com" { type master; file "ljf.com.zone45"; #不一样的匹配规则我这里写的是用不一样的域名文件,方便管理 }; }; view "view_localnet_141" { match-clients { localnet141; }; zone "ljf.com" { type master; file "ljf.com.zone141"; }; }; #include "/etc/named.rfc1912.zones"; # 注释掉这条,由于开启view之后,全部的zone必须包含在view里面,否则启动报错。 include "/etc/named.root.key"; include "/etc/named/acl/localnet141.conf"; # 引入acl配置文件 include "/etc/named/acl/LocalNet45.conf"; # 引入acl配置文件
下面咱们看看ACL的配置文件:日志
[root@localhost named]# cat /etc/named/acl/localnet141.conf acl "localnet141" { 192.168.141.0/24; #针对192.168.141的网段 }; You have new mail in /var/spool/mail/root [root@localhost named]# cat /etc/named/acl/LocalNet45.conf acl "localnet45" { # 定义acl的名字,方便named.conf里面的match-clients 去调用 192.168.45.0/24; # 针对192.168.45的网段 };
再看下zone的file内容 :code
[root@localhost named]# cat /var/named/ljf.com.zone141 $TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS ns www IN A 192.168.141.3 ns IN A 102.168.141.3 [root@localhost named]# cat /var/named/ljf.com.zone45 $TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS ns www IN A 192.168.45.128 test IN A 192.168.45.2 ns IN A 192.168.45.129
那么就开始去验证咱们刚才的配置的DNS功能
在192.168.141.4上解析域名blog
[root@localhost ~]# dig @192.168.141.3 www.ljf.com +short 192.168.141.3
在192.168.45.128上解析域名dns
root@leo-virtual-machine:~# dig @192.168.45.129 www.ljf.com +short 192.168.45.128
由解析结果看得出来,在不一样网段解析同一个域名,解析结果确实不一样,展现了bind的view功能的强大之处ip
总结起来就是用acl指令去圈定一批来源IP,使用view的match-clients匹配该acl,为其分配zone文件用于解析用于解析。
***资源
相信你们能够看到,view里面的核心内容就是匹配来源IP,那么问题来了,这些ip哪里来的?毫无疑问,确定是本身经过dns请求日志去收集的
日志配置我在这里在贴下:
[root@localhost named]# cat /etc/named.conf ''''' logging { channel default_debug { file "data/named.run"; severity dynamic; }; channel query_log { #开启请求日志 file "/var/log/dns/query.log" versions 5 size 30m; severity info; print-time yes; print-category yes; }; category queries { query_log; }; }; '''''
日志格式以下
[root@localhost named]# cat /var/log/dns/query.log 06-Nov-2016 11:56:43.045 queries: client 192.168.45.128#40987: view view_localnet_45: query: www.ljf.com IN A +E (192.168.45.129) 06-Nov-2016 11:56:43.518 queries: client 192.168.45.128#60098: view view_localnet_45: query: www.ljf.com IN A +E (192.168.45.129) '''''''''