一、DNS服务器视图功能的实现

   DNS服务器有一个高级的功能,能够实现不同的用户访问同一个域名,把域名解析成不同的IP地址,使用户能够访问离他最近的服务器上的数据,这就是DNS服务器的视图功能。使用DNS服务器的视图功能可以增加网站的响应速度。例如,当我们网站的数据同步在两台web服务器上时,一台是电信服务器,一台是网通服务器,那么我们肯定希望全国访问我们网站的用户在打开网站的时候,能够自动实现,电信用户访问电信服务器,网通用户访问网通服务器。配置这种情况的前提是,web服务器必须要有一个电信的IP地址和一个网通的IP地址。DNS服务器的这种解析功能通常也被称之为智能解析。

   DNS服务器的视图通常在配置文件中是使用view实现的。把要使用某些IP地址作单独访问的zone区域,统一放在一个命名的view段落中,并且在view中定义请求的IP地址或IP地址段,把IP地址写入match-clients选项中。如果像上面说的,区分电信和网通路线的话,那么可以使用两个acl访问控制列表写上电信或网通IP地址,定义电信网通路线,把acl名字写入view段落match-clients选项中。如下所示:

acl telecomip{ tele_IP; ... };
acl netcomip{ net_IP; ... };
view telecom {
    match-clients { telecomip; };
    zone "ZONE_NAME" IN {
        type master;
        file "ZONE_NAME.telecom";
    };
};
view netcom {
    match-clients { netcomip; };
    zone "ZONE_NAME" IN {
        type master;
        file "ZONE_NAME.netcom";
    };
};
view default {
    match-clients { any; };
    zone "ZONE_NAME" IN {
        type master;
        file "ZONE_NAME.netcom";
    };
};


需要注意的是:

(1)、如果使用了视图的功能,那么配置文件中的所有zone区域都要必须写在视图里面,如,配置文件里默认要配置的三个区域,根、127.0.0.1、1.0.0.127.in-addr.arpa都要写入视图。

(2)、在acl中定义IP地址,IP地址的写法可以是单个IP地址也可以是一个IP地址段加掩码,如:192.168.0.0/24。

(3)、视图是根据配置文件从上往下匹配的,所以希望优先访问的资源记录文件,区域应该尽量写前面。

(4)、如果定义的若干个视图的IP地址不全的话,那么可以在最后定义一个默认视图,match-clients选项中的IP地址写上any,代表如果此次访问的IP地址上面没有一个能匹配到,则在此处归类。


实例:虚拟两台IP地址不同的主机,实现DNS服务器视图功能。

1、本地电脑只有一个IP地址段,故使用两个IP地址分别代表两个不同的路线。首先,我们配置一个区域wubinary.com的DNS服务器,ip地址为,192.168.0.6。打开/etc/named.rfc1912.zones文件,编辑如下:

acl net { 192.168.0.6; };
acl local { 192.168.0.12; };
view netcom {
    match-clients { net; };
    zone "." IN {
        type hint;
        file "named.ca";
    };
    zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
    };
    zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
    };
    zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
    };
    zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
    };
    zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
    };
    zone "wubinary.com" IN {
        type master;
        file "wubinary.com.net";
    };
};
view localcom {
    match-clients { local; };
    zone "wubinary.com" IN {
        type master;
        file "wubinary.com.local";
    };
};
view default {
    match-clients { any; };
    zone "wubinary.com" IN {
        type master;
        file "wubinary.com.local";
    };
};


说明:我们分别定义两个acl,用于代表两个不同路线,IP地址为192.168.0.6的机器访问的资源记录文件是 wubinary.com.net文件,IP地址为192.168.0.12和其它的机器则访问wubinary.com.local这个文件的资源记录文件。


2、分别编辑这两个文件

编辑文件/var/named/wubinary.com.net

DNS服务器(四):DNS视图及bind中rndc的使用_rndc


编辑文件/var/named/wubinary.com.local

DNS服务器(四):DNS视图及bind中rndc的使用_rndc _02


这里IP地址分别改了,192.168.0.6的机器请求时对应解析的IP是192.168开头的,192.168.0.12请求时对应解析的IP是172.16开头的。配置完成后,记得修改文件所属组及文件权限。


3、测试一下配置文件语法。

DNS服务器(四):DNS视图及bind中rndc的使用_ bind _03


4、好的,重新载入配置文件,在分别在两台机器上测试一下吧。

重载配置文件:

DNS服务器(四):DNS视图及bind中rndc的使用_ bind _04


192.168.0.6的机器,也就是我们DNS所属的这台机器,结果如下:

DNS服务器(四):DNS视图及bind中rndc的使用_DNS视图_05


192.168.0.12的机器,结果如下:

DNS服务器(四):DNS视图及bind中rndc的使用_rndc-confgen_06


两台机器请求DNS服务器时域名解析达到了预期的效果,测试成功。


二、bind中rndc的使用

   rndc是Remote Name Domain Controllerr的简写,它是一个远程管理bind的工具。在使用rndc管理bind前需要使用rndc生成一对密钥文件,一半保存于rndc的配置文件中,另一半保存于bind主配置文件中。rndc的配置文件为/etc/rndc.conf,在CentOS或者RHEL中,rndc的密钥保存在/etc/rndc.key文件中。rndc默认监听在953号端口,其实在bind9中rndc默认就是可以使用可,不需要配置密钥文件。

rndc常用命令:

status #查看DNS状态
reload #重新加载配置文件
reload zone_name #重新加载指定区域
reconfig  #重读配置文件并加载新增的区域
querylog  #关闭或开启查询日志
flush  #清空服务器的缓存
flushname name  #清空指定名称相关的缓存
trace  #打开debug, debug有级别的概念,每执行一次提升一次级别
trace LEVEL  #指定 debug 的级别, trace 0 表示关闭debug


使用rndc:

1、生成密钥文件

命令:

rndc-confgen  > /etc/rndc.conf
或者
rndc-confgen -r /dev/urandom  > /etc/rndc.conf


生成的配置文件如下:

DNS服务器(四):DNS视图及bind中rndc的使用_rndc-confgen_07


2、复制上面配置文件中下面一块被注释的区域至/etc/named.conf文件中,并把注释关闭。

DNS服务器(四):DNS视图及bind中rndc的使用_DNS视图_08


3、重新加载bind后就可以使用rndc管理bind了。

DNS服务器(四):DNS视图及bind中rndc的使用_rndc _09


4、使用rndc重新加载bind的配置文件。

DNS服务器(四):DNS视图及bind中rndc的使用_ bind _10


注意:如果在使用rndc时,出现如上警告时,可以删除/etc/rndc.key文件,或者重命名该文件。


5、DNS服务器的debug功能默认是关闭的,使用rndc trace可以开启该功能,执行一次该命令 debug 级别加一级,也可以在命令后面加一个数字作为参数,指定debug级别,当数字为0时,表示关闭debug功能。

开启debug:

DNS服务器(四):DNS视图及bind中rndc的使用_rndc-confgen_11


关闭debug:

DNS服务器(四):DNS视图及bind中rndc的使用_rndc _12


6、其它命令具体操作相差不大,不在此讨论。