BIND是实现DNS服务的一套软件(官方站点:isc.org),其包含了服务器端程序named(由bind程序包提供,监听套接字:53/tcp、53/udp),和客户端工具host、nslookup、dig(由bind-utils程序包提供)。为保证服务器的安全性,bind还提供了一种“沙箱机制”,bind-chroot是将原文件系统的根“/”替换成“/var/named/chroot”来使用。

     目前主流的bind程序依旧是9.x系列。使用yum install bind命令即可安装bind程序,安装完成后会自动添加named用户,named组。使用rpm -qc bind可查看安装完成后生成的配置文件列表。

DNS服务之bind安装配置与应用_第1张图片

     其服务脚本是:/etc/rc.d/init.d/,主配置文件:/etc/named.conf、/etc/named.rfc1912.zones,以及/var/named/下以“.zone”为后缀的区域数据解析库文件。/etc/named.conf由3段组成,见图示。

DNS服务之bind安装配置与应用_第2张图片

    要想配置成一台可供他人服务的DNS服务器,还需要修改配置文件/etc/named.conf(帮助文档 man named.conf)。必须的配置有:

    ① 监听的地址:配置能与外部进行通信的地址,也可以将此项注释掉,表示监听在本机(注:本机在此不表示127.0.0.1)如:本机IP是172.16.24.1,则可配置如下:

      listen-on port 53 {127.0.0.1;172.16.24.1;};

    ② 允许所有主机查询(也可定义为一部分主机查询,详见下文):

      allow-query     { any; };

    ③ 关闭dnssec相关配置,并注释掉ISC DLV key:    

      dnssec-enable no;
      dnssec-validation no;
      dnssec-lookaside no;
      /* Path to ISC DLV key 
      bindkeys-file "/etc/named.iscdlv.key";
      managed-keys-directory "/var/named/dynamic";
      */

     ④ 定义zone,其格式是如下:

       zone "ZONE_NAME" IN {
       type master|slave|forward;/*唯有根域.的type为hint*/
       file "ZoneData_FILE"; /*区域数据解析库文件,工作目录是:/var/named/,通常以.zone命名。*/
       };

注:a.ZONE_NAME的定义,正向区域直接写域名即可,反向区域定义格式为:逆向网络地址.in-addr.arpa,如:1.168.192.in-addr.arpa

    b.若type是slave,还要注明master服务器的IP;若是forward,file项可无。  

    ⑤ 根据实际需求自定义区域数据解析库文件(在/var/named/目录下),定义完成后记得将文件的属组改为named。

各项配置都完成之后,可以使用named-checkconf检查配置文件是否有语法错误,使用named-checkzone "ZONE_NAME" /path/to/ZoneData_FILE检查区域解析数据库文件是否有语法错误。    

    ⑥ 启动named,并测试

       service named start
       dig -t A www.baidu.com @localhost


客户端工具dig的使用

dig常用来测试DNS服务是否正常的工具,供攻城师们及时排查DNS故障。其常用语法格式为

dig [@DNS_Server] [-t RR_Type]  Name [Query_Options]

当不指定DNS_Server时,dig将使用/etc/resolv.conf中定义的DNS服务器

 dig @192.168.120.132 -t A www.test.com

DNS服务之bind安装配置与应用_第3张图片

 其常用命令:dig @192.168.120.132 -t axfr  Zone_Name表示查看该区域文件的所有资源类型

DNS服务之bind安装配置与应用_第4张图片

其常用的查询选项有 +[no]trace表示是否跟踪其查询过程

 dig @192.168.120.132 -t A www.baidu.com +trace

DNS服务之bind安装配置与应用_第5张图片

   示例 配置DNS服务器为某正向区域(test.com)的主DNS服务器

    ① 配置其成为缓存DNS服务器

    ② 在/etc/named.rfc1912.zones中定义区域zone

       vim /etc/named.rfc1912.zones
       …… …… …… …… …… ……
       zone "test.com" IN {
       type master;
       file "test.com.zone";
       allow-update { none; };
       };

     ③ 定义区域数据解析库文件test.com.zone,并参照named.empty修改其访问权限以及属主、属组

       vim test.com.zone
       $TTL 600
       $ORIGIN test.com.
       @ IN SOA ns.test.com. admin.ns.test.com. (
                             201504101 ;序列号
                             1H ;1小时后刷新
                             5M ;5分钟后重试
                             1W ;1周后失效
                             1H );缓存TTL是1小时 
         IN NS ns ;由于定义了ORIGIN,此处相当于ns.test.com.。
         IN MX 10 mx
       ns IN A 1.1.1.1
       mx IN A 2.2.2.2
       www IN A 3.3.3.3
       www IN A 3.3.3.4
       pop3 IN A 4.4.4.4
       web IN CNAME www
       imap4 IN CNAME pop3
      chmod 640 test.com.zone
      chown :named test.com.zone

④ 检查语法是否配置有误

     named-checkconf
     named-checkzone "test.com" test.com.zone

⑤ 重载DNS服务

    service named reload

⑥ 使用dig工具验证结果

dig -t A www.test.com @localhost

结果表明,当有同一主机的多条A记录时,DNS服务器会以“轮询”的方式向客户端提供查询服务。

DNS服务之bind安装配置与应用_第6张图片

DNS服务之bind安装配置与应用_第7张图片