bind視圖工作原理
在我國目前的網絡環境下面,多個運營商並存,運營商之間的存在一定的網絡互通問題,如果把來自不同的運營商或者地域的所有用戶通過簡單的A記錄分配到一個機房,那么就存在部分網民訪問延時大或者丟包的問題。那么bind里面就提供了視圖(Dns view ) 技術來解決這個問題,DNS視圖 就是對同一個資源記錄根據的DNS請求來源IP地址不同,分配到解析器的解析結果也不同,也就是說它可以提供這樣的功能。
- 對於山東省的中國電信的DNS請求,可以把用戶引導到部署在山東省中國電信機房的服務器上。
- 對於無法匹配到某個具體運營商或者國外的用戶,可以把用戶引導到指定的一組默認服務器上。
所以以上的功能,都是為了實現用戶的就近訪問,也就是讓用戶訪問到對他來說網絡質量較好的服務器上。
關於視圖的配置
我們在這里配置的是模擬環境,環境如下:
都是采用Centos6.6系統,yum安裝的bind服務。
dns服務器的named配置如下:
[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內容 :
[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上解析域名
[root@localhost ~]# dig @192.168.141.3 www.ljf.com +short
192.168.141.3
在192.168.45.128上解析域名
root@leo-virtual-machine:~# dig @192.168.45.129 www.ljf.com +short
192.168.45.128
由解析結果看得出來,在不同網段解析同一個域名,解析結果確實不同,展示了bind的view功能的強大之處
總結起來就是用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)
'''''''''