Bind服务器:

      bind(Berkeley Internet Name Domain Service),它是一款实现DNS服务器的开源软件,现在为最广泛的DNS服务器软件

 Socket: 套接字,及IP:port(IP地址端口对) 端口: TCP:0~65535  UDP:0~65535

 注: 小于1024的端口为知名端口,只有root用户有权限开放和关闭。


1.bind的安装

 包名: bind
 进程: named
 协议: dns
 使用端口: 53(tcp,udp)

 相关的包:

 

[root@localhost ~]# rpm -qa bind*
  bind-utils-9.8.2-0.37.rc1.el6_7.4.x86_64  #提供一些客户端工具
  bind-9.8.2-0.37.rc1.el6_7.4.x86_64   #bind主程序包
  bind-libs-9.8.2-0.37.rc1.el6_7.4.x86_64  #服务器端和客户端使用的公共库文件
  bind-chroot-9.8.2-0.37.rc1.el6_7.4.x86_64 #将named进程的活动范围限定在chroot目录中,保证安全性
  bind-devel-9.8.2-0.37.rc1.el6_7.4.x86_64 #开发使用的头文件和库文件(编译安装时使用)

[root@localhost ~]# yum install bind*
已加载插件:fastestmirror, refresh-packagekit, security
设置安装进程
Loading mirror speeds from cached hostfile
 * base: mirror.bit.edu.cn
 * c6-media: 
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
解决依赖关系
--> 执行事务检查
---> Package bind.x86_64 32:9.8.2-0.37.rc1.el6_7.4 will be 安装
---> Package bind-chroot.x86_64 32:9.8.2-0.37.rc1.el6_7.4 will be 安装
---> Package bind-devel.x86_64 32:9.8.2-0.37.rc1.el6_7.4 will be 安装
---> Package bind-dyndb-ldap.x86_64 0:2.3-8.el6 will be 安装
---> Package bind-libs.x86_64 32:9.8.2-0.30.rc1.el6 will be 升级
---> Package bind-libs.x86_64 32:9.8.2-0.37.rc1.el6_7.4 will be an update
---> Package bind-sdb.x86_64 32:9.8.2-0.37.rc1.el6_7.4 will be 安装
--> 处理依赖关系 libpq.so.5()(64bit),它被软件包 32:bind-sdb-9.8.2-0.37.rc1.el6_7.4.x86_64 需要
---> Package bind-utils.x86_64 32:9.8.2-0.30.rc1.el6 will be 升级
---> Package bind-utils.x86_64 32:9.8.2-0.37.rc1.el6_7.4 will be an update
--> 执行事务检查
---> Package postgresql-libs.x86_64 0:8.4.20-3.el6_6 will be 安装
--> 完成依赖关系计算

依赖关系解决

==========================================================================================
 软件包                架构         版本                              仓库           大小
==========================================================================================
正在安装:
 bind                  x86_64       32:9.8.2-0.37.rc1.el6_7.4         updates       4.0 M
 bind-chroot           x86_64       32:9.8.2-0.37.rc1.el6_7.4         updates        74 k
 bind-devel            x86_64       32:9.8.2-0.37.rc1.el6_7.4         updates       383 k
 bind-dyndb-ldap       x86_64       2.3-8.el6                         base           72 k
 bind-sdb              x86_64       32:9.8.2-0.37.rc1.el6_7.4         updates       311 k
正在升级:
 bind-libs             x86_64       32:9.8.2-0.37.rc1.el6_7.4         updates       886 k
 bind-utils            x86_64       32:9.8.2-0.37.rc1.el6_7.4         updates       186 k
为依赖而安装:
 postgresql-libs       x86_64       8.4.20-3.el6_6                    updates       202 k

事务概要
==========================================================================================
Install       6 Package(s)
Upgrade       2 Package(s)

总下载量:6.0 M
确定吗?[y/N]:y
下载软件包:
(1/8): bind-9.8.2-0.37.rc1.el6_7.4.x86_64.rpm                      | 4.0 MB     00:04     
(2/8): bind-chroot-9.8.2-0.37.rc1.el6_7.4.x86_64.rpm               |  74 kB     00:00     
(3/8): bind-devel-9.8.2-0.37.rc1.el6_7.4.x86_64.rpm                | 383 kB     00:00     
(4/8): bind-dyndb-ldap-2.3-8.el6.x86_64.rpm                        |  72 kB     00:00     
(5/8): bind-libs-9.8.2-0.37.rc1.el6_7.4.x86_64.rpm                 | 886 kB     00:01     
(6/8): bind-sdb-9.8.2-0.37.rc1.el6_7.4.x86_64.rpm                  | 311 kB     00:00     
(7/8): bind-utils-9.8.2-0.37.rc1.el6_7.4.x86_64.rpm                | 186 kB     00:00     
(8/8): postgresql-libs-8.4.20-3.el6_6.x86_64.rpm                   | 202 kB     00:00     
------------------------------------------------------------------------------------------
总计                                                      677 kB/s | 6.0 MB     00:09     
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
 Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>
 Package: centos-release-6-6.el6.centos.12.2.x86_64 (@anaconda-CentOS-201410241409.x86_64/6.6)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
确定吗?[y/N]:y
运行 rpm_check_debug 
执行事务测试
事务测试成功
执行事务
  正在升级   : 32:bind-libs-9.8.2-0.37.rc1.el6_7.4.x86_64                            1/10 
  正在安装   : 32:bind-9.8.2-0.37.rc1.el6_7.4.x86_64                                 2/10 
  正在安装   : postgresql-libs-8.4.20-3.el6_6.x86_64                                 3/10 
  正在安装   : 32:bind-sdb-9.8.2-0.37.rc1.el6_7.4.x86_64                             4/10 
  正在安装   : 32:bind-chroot-9.8.2-0.37.rc1.el6_7.4.x86_64                          5/10 
  正在安装   : bind-dyndb-ldap-2.3-8.el6.x86_64                                      6/10 
  正在升级   : 32:bind-utils-9.8.2-0.37.rc1.el6_7.4.x86_64                           7/10 
  正在安装   : 32:bind-devel-9.8.2-0.37.rc1.el6_7.4.x86_64                           8/10 
  清理       : 32:bind-utils-9.8.2-0.30.rc1.el6.x86_64                               9/10 
  清理       : 32:bind-libs-9.8.2-0.30.rc1.el6.x86_64                               10/10 
  Verifying  : 32:bind-utils-9.8.2-0.37.rc1.el6_7.4.x86_64                           1/10 
  Verifying  : 32:bind-devel-9.8.2-0.37.rc1.el6_7.4.x86_64                           2/10 
  Verifying  : 32:bind-chroot-9.8.2-0.37.rc1.el6_7.4.x86_64                          3/10 
  Verifying  : 32:bind-9.8.2-0.37.rc1.el6_7.4.x86_64                                 4/10 
  Verifying  : 32:bind-sdb-9.8.2-0.37.rc1.el6_7.4.x86_64                             5/10 
  Verifying  : 32:bind-libs-9.8.2-0.37.rc1.el6_7.4.x86_64                            6/10 
  Verifying  : bind-dyndb-ldap-2.3-8.el6.x86_64                                      7/10 
  Verifying  : postgresql-libs-8.4.20-3.el6_6.x86_64                                 8/10 
  Verifying  : 32:bind-utils-9.8.2-0.30.rc1.el6.x86_64                               9/10 
  Verifying  : 32:bind-libs-9.8.2-0.30.rc1.el6.x86_64                               10/10

已安装:
  bind.x86_64 32:9.8.2-0.37.rc1.el6_7.4                                                   
  bind-chroot.x86_64 32:9.8.2-0.37.rc1.el6_7.4                                            
  bind-devel.x86_64 32:9.8.2-0.37.rc1.el6_7.4                                             
  bind-dyndb-ldap.x86_64 0:2.3-8.el6                                                      
  bind-sdb.x86_64 32:9.8.2-0.37.rc1.el6_7.4                                              

作为依赖被安装:
  postgresql-libs.x86_64 0:8.4.20-3.el6_6                                                

更新完毕:
  bind-libs.x86_64 32:9.8.2-0.37.rc1.el6_7.4  bind-utils.x86_64 32:9.8.2-0.37.rc1.el6_7.4

完毕!


安装完成后bind会自动创建用户named系统用户

注: 由于早期的linux都为root用户权限,服务的复杂导致BUG越来越多,黑客利用漏洞入侵系统,获得root权限后控制了整个系统,为了防止类似事件发生,服务软件用root权限启动,启动后自动放弃root.由低权限的系统用户(named)来运行进程,如果黑客入侵也只有很低级的权限而不至于控制整个系统。


2.bind 的配置文件:

[root@localhost ~]# rpm -qc bind
/etc/logrotate.d/named   
/etc/named.conf   #主配置文件
/etc/named.iscdlv.Key
/etc/named.rfc1912.zones#区域配置文件
/etc/named.root.Key  #根区域的key文件实现数字签名
/etc/rndc.conf   #远程服务控制器的配置文件
/etc/rndc.Key     #远程控制器加密密钥
/etc/sysconfig/named
/var/named/named.ca   #13个根文件存放位置
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback


主配置文件: /etc/named.conf
 
  定义区域
  定义各区域的全局配置
  定义视图
  定义日志


注释省略:

options { #服务器的全局配置选项及一些默认设置
        listen-on port 53 { any; }; #监听端口,也可写为 { 127.0.0.1; 192.168.139.46; }
         listen-on-v6 port 53 { ::1; }; #对ip6支持
        directory       "/var/named";  #区域文件存储目录
        dump-file       "/var/named/data/cache_dump.db"; #dump cach的目录directory
        statistics-file "/var/named/data/named_stats.txt";
         memstatistics-file "/var/named/data/named_mem_stats.txt";

         pid-file        "/var/run/named/named.pid"; #存着named的pid
        forwarders     { 168.95.1.1; 139.175.10.20; }; # 如果域名服务器无法解析时,将请求交由168.95.1.1; 139.175.10.20来解析
        allow-query    { any; };   #指定允许进行查询的主机,当然是要所有的电脑都可以查啦
        allow-transfer { none; }; #指定允许接受区域传送请求的主机,说明白一点就是辅dns定义,比如辅dns的ip是192.168.139.5,那么可以这样定义{ 192.168.139.5; },要不然主辅dns不能同步,当然,{}里的也可以用下面提到的acl。
        // those options should be used carefully because they disable port
         // randomization
         // query-source    port 53;     
         // query-source-v6 port 53;
 };
 logging { #指定服务器日志记录的内容和日志信息来源
        channel default_debug {
                 file "data/named.run";
                 severity dynamic;
         };
 };
#这里定义一个acl列表
acl "acl1" {
         192.168.139.0/200; 192.168.1.0/200 
 };

 view localhost_resolver { #定义一个视图
        match-clients      { any; }; #查询者的源地址,any表示localhost_resolver视图对任何主机开放,如果写成{ acl1; },那么就只有acl1表里的ip可以递归查询了
        match-destinations { any; }; #查询者的目标地址,这里也可以写成{ localhost; acl1; }
        recursion yes;  3设置进行递归查询
        include "/etc/named.rfc1912.zones"; #包含文件,这里也就是载入/etc/named.rfc1912.zones
 };


bind客户端工具:

[root@localhost ~]# rpm -ql bind-utils
/usr/bin/dig   #常用的DNS服务器测试工具
/usr/bin/host    #轻量级DNS测试工具
/usr/bin/nslookup  #DNS查询工具,在众多平台都有使用
/usr/bin/nsupdate   #更新工具
/usr/share/man/man1/dig.1.gz #以上工具的man文档
/usr/share/man/man1/host.1.gz
/usr/share/man/man1/nslookup.1.gz
/usr/share/man/man1/nsupdate.1.gz


host命令:  host -t  资源记录类型 名称

[root@localhost ~]# host -t A www.baidu.com   #baidu的A记录
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 119.75.217.109
www.a.shifen.com has address 119.75.218.70

3.dig命令的使用:
 语法: dig -t 资源记录类型(如NS  A )名称@server-IP

 工作机制:  不加“@server-ip” 的话根据/etc/resolv.conf文件解析查询

[root@localhost ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
domain DHCP
search DHCP HOST
nameserver 124.207.160.106
nameserver 219.239.26.42
nameserver 144.144.144.144   #通过这些ip来查询DNS


[root@localhost ~]# dig -t NS www.baidu.com  #查询百度的NS记录

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t NS www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48075
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 # 表示权威应答

;; QUESTION SECTION:
;www.baidu.com.   IN NS 

;; ANSWER SECTION:
www.baidu.com.  506 IN CNAME www.a.shifen.com.  #别名为a.shifen.com

;; AUTHORITY SECTION:
a.shifen.com.  523 IN SOA ns1.a.shifen.com. baidu_dns_master.baidu.com. 1509110003 5 5 86400 3600#起始授权

;; Query time: 6 msec
;; SERVER: 124.207.160.106#53(124.207.160.106)# 通过第一个ip:124.207.160.106查询,ip按顺序来查询
;; WHEN: Wed Sep 16 23:17:02 2015
;; MSG SIZE  rcvd: 115

如果后边加@server-ip则会跳过/etc/resole.conf配置文件,用指定DNS服务ip查询


[root@localhost ~]# dig -t NS www.baidu.com @8.8.8.8

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t NS www.baidu.com @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9503
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;www.baidu.com.   IN NS

;; ANSWER SECTION:
www.baidu.com.  291 IN CNAME www.a.shifen.com.

;; AUTHORITY SECTION:
a.shifen.com.  599 IN SOA ns1.a.shifen.com. baidu_dns_master.baidu.com. 1509110003 5 5 86400 3600

;; Query time: 154 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)   #指定的DNS查询,ip 8.8.8.8
;; WHEN: Wed Sep 16 23:26:09 2015
;; MSG SIZE  rcvd: 115


查询反向解析: dig -x server-ip

[root@localhost ~]# dig -x 8.8.8.8  #反向解析google的域名服务

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -x 8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12388
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 2#权威应答

;; QUESTION SECTION:
;8.8.8.8.in-addr.arpa.  IN PTR

;; ANSWER SECTION:
8.8.8.8.in-addr.arpa. 62709 IN PTR google-public-dns-a.google.com.#google公共dns

;; AUTHORITY SECTION:
8.8.8.in-addr.arpa. 692 IN NS ns3.google.com.  #google的反向解析
8.8.8.in-addr.arpa. 692 IN NS ns1.google.com.
8.8.8.in-addr.arpa. 692 IN NS ns4.google.com.
8.8.8.in-addr.arpa. 692 IN NS ns2.google.com.

;; ADDITIONAL SECTION:
ns1.google.com.  292900 IN A 216.239.32.10  #google的A记录
ns3.google.com.  263708 IN A 216.239.36.10

;; Query time: 19 msec
;; SERVER: 124.207.160.106#53(124.207.160.106)
;; WHEN: Wed Sep 16 23:30:39 2015
;; MSG SIZE  rcvd: 186


追踪解析过程: dig -t 资源记录类型  名称 +trace

[root@localhost ~]# dig -t A www.baidu.com +trace

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A www.baidu.com +trace
;; global options: +cmd
.   247435 IN NS i.root-servers.net.
.   247435 IN NS m.root-servers.net.
.   247435 IN NS f.root-servers.net.
.   247435 IN NS k.root-servers.net.
.   247435 IN NS b.root-servers.net.
.   247435 IN NS c.root-servers.net.
.   247435 IN NS a.root-servers.net.
.   247435 IN NS e.root-servers.net.
.   247435 IN NS h.root-servers.net.
.   247435 IN NS j.root-servers.net.
.   247435 IN NS l.root-servers.net.
.   247435 IN NS g.root-servers.net.
.   247435 IN NS d.root-servers.net.    #首先找13台根域
;; Received 496 bytes from 124.207.160.106#53(124.207.160.106) in 1193 ms

com.   172800 IN NS f.gtld-servers.net.
com.   172800 IN NS j.gtld-servers.net.
com.   172800 IN NS d.gtld-servers.net.
com.   172800 IN NS l.gtld-servers.net.
com.   172800 IN NS g.gtld-servers.net.
com.   172800 IN NS e.gtld-servers.net.
com.   172800 IN NS c.gtld-servers.net.
com.   172800 IN NS m.gtld-servers.net.
com.   172800 IN NS b.gtld-servers.net.
com.   172800 IN NS i.gtld-servers.net.
com.   172800 IN NS h.gtld-servers.net.
com.   172800 IN NS k.gtld-servers.net.
com.   172800 IN NS a.gtld-servers.net.   #然后找.com.一级域
;; Received 503 bytes from 192.5.5.241#53(192.5.5.241) in 115 ms

baidu.com.  172800 IN NS dns.baidu.com.
baidu.com.  172800 IN NS ns2.baidu.com.
baidu.com.  172800 IN NS ns3.baidu.com.
baidu.com.  172800 IN NS ns4.baidu.com.
baidu.com.  172800 IN NS ns7.baidu.com.  #再找baidu.com.二级域
;; Received 201 bytes from 192.42.93.30#53(192.42.93.30) in 252 ms

www.baidu.com.  1200 IN CNAME www.a.shifen.com.
a.shifen.com.  1200 IN NS ns4.a.shifen.com.
a.shifen.com.  1200 IN NS ns3.a.shifen.com.
a.shifen.com.  1200 IN NS ns1.a.shifen.com.
a.shifen.com.  1200 IN NS ns2.a.shifen.com.
a.shifen.com.  1200 IN NS ns5.a.shifen.com.  #接着找到www三级域及到达。www.baidu.com.
;; Received 228 bytes from 61.135.165.235#53(61.135.165.235) in 12 ms


DNS(bind)服务的具体配置:

 配置主要有:

  正向解析
  反向解析
  辅助解析
  主辅区域传送


配置域主服务器

阶段

1.在bind的主配置文件中添加该域

2.在/var/named中创建该域的zone文件

3.编辑zone文件添加需要的信息

4.测试是否有语法错误

5.设置区域文件的权限

6.检测防火墙或selinux设置

7.启动bind服务

8.使用host或nslookup命令   检测域信息是否正常


首先在配置文件中添加域:vim /etc/named.conf

options {
        listen-on port 53 { any; }; #把127.0.0.1本地修改为any;
        listen-on-v6 port 53 { ::1; };#ipv6不用,删除此行
        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";
        allow-query     { any; };#localhost改为any;
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* 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;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

zone "hong.com" IN {  #添加正向解析域
        type master;
        file "hong.com.zone";
};

zone "0.168.192.in-addr.arpa" IN {   #添加反向解析域
        type master;
        file "0.168.192.zone";

};


include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";


接下来配置正向区域文件: 
 目录位于; /var/named/

[root@localhost ~]# cd /var/named/
[root@localhost named]# ls
chroot  data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@localhost named]# cp named.localhost hong.com.zone  #拷贝本地模板编辑到正向区域文件
[root@localhost named]# vim hong.com.zone   #vim编辑正向区域文件


$TTL 86400  #缓存时间
@       IN  SOA          ns.hong.com. admin.hong.com. (  #DNS服务器名
                                        0       ; serial  #序列号
                                        1D      ; refresh  #服务器更新时间
                                        1H      ; retry  #重新更新时间间隔
                                        1W      ; expire #多久之后提示失败
                                        3H )    ; minimum  #缓存记忆时间
@       IN      NS      ns.hong.com.   
@       IN      MX  10  mail.hong.com.  #10为优先级,必须指定
ns      IN      A       192.168.0.107
mail    IN      A       192.168.0.107
www     IN      A       192.168.0.107
ftp     IN      CNAME   mail

编辑反向区域文件:

[root@localhost named]# cp named.localhost 0.168.192.zone
[root@localhost named]# vim 0.168.192.zone

$TTL 86400
@       IN SOA  ns.hong.com. admin.hong.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        
@       IN      NS      ns.hong.com.
107     IN      NS      ns.hong.com.
107     IN      PTR     mail.hong.com.
107     IN      PTR     www.hong.com. #反向区域不需要指定CNAME记录


配置好正向,反向区域文件后,我们检查一下是否有语法错误:

 named-checkconf
 named-checkzone "反向区域名"  /PATH/TO/反向区域名称

[root@localhost named]# named-checkconf
[root@localhost named]# named-checkzone "0.168.192.zone" /var/named/0.168.192.zone 
zone 0.168.192.zone/IN: 107.0.168.192.zone/NS 'ns.hong.com' (out of zone) has no addresses records (A or AAAA)
zone 0.168.192.zone/IN: loaded serial 0
OK


显示OK说明配置语法没有问题,这个OK很重要啊。。我的心都跟着跳啊。。。

接下来我们设置区域文件的权限:

 文件属主: root
 文件属组:  named
 权限为: 640

[root@localhost named]# chown root:named /var/named/hong.com.zone 
[root@localhost named]# chown root:named /var/named/0.168.192.zone 
[root@localhost named]# chmod 640 /var/named/hong.com.zone
[root@localhost named]# chmod 640 /var/named/0.168.192.zone 
[root@localhost named]# ll hong.com.zone 0.168.192.zone 
-rw-r-----. 1 root named 236 9月  17 00:50 0.168.192.zone 
-rw-r-----. 1 root named 282 9月  17 00:40 hong.com.zone

配置防火墙(iptables)和selinux设置:

 可用命令:getenforce  #查询selinux状态
   setenforce 0  #设置selinux

[root@localhost named]# getenforce 
Enforcing #强制
[root@localhost named]# setenforce 0
[root@localhost named]# getenforce
Permissive  #现在表示selinux不起作用

设置防火墙: /etc/sysconfig/iptables
 添加三条记录把53和953端口放开

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-AINPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT  #添加记录通过53和952端口
-AINPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
-AINPUT -m state --state NEW -m tcp -p tcp --dport 953 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

重启防火墙: service iptables restart 即可


启动bind服务:

 service named start

配置host 文件:
 /etc/resolv.conf  添加服务器ip地址

# Generated by NetworkManager
domain DHCP
search DHCP HOST
nameserver 124.207.160.106
nameserver 219.239.26.42
nameserver 144.144.144.144
nameserver 192.168.0.107
  
至此搭建成功,测试一下

我们使用本地windows系统测试一下

C:\Users\f>nslookup
默认服务器:  bjdns.drpeng.com.cn
Address:  124.207.160.106

> server 192.168.0.108
默认服务器:  [192.168.0.108]
Address:  192.168.0.108

> set q=PTR  
> 192.168.0.108
服务器:  [192.168.0.108]
Address:  192.168.0.108

108.0.168.192.in-addr.arpa      name = mail.hong.com  #反向解析成功
108.0.168.192.in-addr.arpa      name = ns.hong.com
108.0.168.192.in-addr.arpa      name = www.hong.com
0.168.192.in-addr.arpa  nameserver = ns.hong.com
ns.hong.com     internet address = 192.168.0.108
>#解析成功


> server 192.168.0.108
默认服务器:  [192.168.0.108]
Address:  192.168.0.108

> set q=A
> www.hong.com
服务器:  [192.168.0.108]
Address:  192.168.0.108

> set q=NS #查询NS记录
> hong.com
服务器:  [192.168.0.108]
Address:  192.168.0.108

hong.com        nameserver = ns.hong.com
ns.hong.com     internet address = 192.168.0.108
>
> set q=CNAME  #别名记录
> ftp.hong.com
服务器:  [192.168.0.108]
Address:  192.168.0.108

ftp.hong.com    canonical name = mail.hong.com
hong.com        nameserver = ns.hong.com
ns.hong.com     internet address = 192.168.0.108
>

测试没有问题,即可正向解析又可以反向解析。。


rndc的使用:
 
 rndc(Remote Name Domain Controller)远程名称域控制器

 rndc 通过一个 TCP 连接与名字服务器通信,发送经过数字签名认证的命令。在当前版本的rndc 和 named 中,唯一
支持的认证算法是 HMAC-MD5,在连接的两端使用共享密钥。它为命令请求和名字服务器的响应提供 TSIG类型的认
证。所有经由通道发送的命令都必须被一个服务器所知道的 key_id 签名。

 监听端口:tcp:953

 语法:

  rndc [-b address] [-c config] [-s server] [-p port][-k key-file ] [-y key] [-V] command

 command is one of the following:
   reload   Reload configuration file and zones. #重新加载配置文件和区域文件
   reconfig  Reload configuration file and new zones only. #重新加载配置文件和新的区域文件
   freeze   Suspend updates to all dynamic zones.
   stats   Write server statistics to the statistics file. #将服务器统计信息写入统计文件中
   stop   Save pending updates to master files and stop the server.
   halt   Stop the server without saving pending updates.
   flush   Flushes all of the server's caches. #清空DNS缓存
   status   Display status of the server. #显示bind服务器的工作状态


 rndc的调试和日志:

  调试:显示程序运行中的详细信息(会产生I/O,正常情况下建议关闭)
  调试级别:0,1,2,3...
  提升调试级别:
  rndc trace
  rndc trace LEVEL
  rndc notrace
  打开查询日志:记录查询动作(会增加磁盘I/O)
  ndc querylog

[root@localhost named]# rndc status
version: 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4
CPUs found: 1
worker threads: 1
number of zones: 21
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

辅助DNS配置:

 新建一个虚拟机,这里还是用CentOS6.6作为辅助DNS


 1. 同样在辅助DNS服务器安装bind服务并做相应的配置: 编辑/etc/named.rfc1912.zones,添加以下记录:


zone "hong.com" IN {
        type slave;
        file "slaves/hong.com.zone";
        masters{ 192.168.0.108; };
};

zone "0.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/0.168.192.zone";
        masters{ 192.168.0.108; };

};


检测一下语法是否有错:

[root@localhost slaves]# named-checkconf #没有提示信息说明没有错误



2. 编辑主DNS服务器所在的ns1主机上的区域文件/var/named/hong.com.zone 和/var/named/0.168.192.zone中添加相应记录:

正向区域:
$TTL 86400
@       IN  SOA          ns1.hong.com. admin.hong.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      ns1
@       IN      NS      ns2 #添加NS记录
@       IN      MX  10  mail
ns1     IN      A       192.168.0.108
ns2     IN      A       192.168.0.106 #添加ns2的A记录
mail    IN      A       192.168.0.108
www     IN      A       192.168.0.108
www     IN      A       192.168.0.106
ftp     IN      CNAME   www

反向区域:

$TTL 86400
@       IN SOA  ns1.hong.com. admin.hong.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum

@       IN      NS      ns1.hong.com.
@       IN      NS      ns2.hong.com.#添加NS记录
108     IN      PTR     ns1.hong.com.
106     IN      PTR     ns2.hong.com.#添加ns2PTR记录
108     IN      PTR     www.hong.com.
106     IN      PTR     www.hong.com.#www记录
108     IN      PTR     mail.hong.com.

添加完记录同样检测一下语法:

[root@localhost named]# named-checkconf
[root@localhost named]# named-checkzone "hong.com.zone" /var/named/hong.com.zone 
zone hong.com.zone/IN: loaded serial 0
OK
[root@localhost named]# named-checkzone "0.168.192.zone" /var/named/0.168.192.zone 
zone 0.168.192.zone/IN: loaded serial 0
OK
[root@localhost named]#

没有问题,在主DNS上测试一下是否有记录

[root@localhost named]# dig -t NS hong.com @192.168.0.108

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t NS hong.com @192.168.0.108
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24224
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2

;; QUESTION SECTION:
;hong.com.   IN NS

;; ANSWER SECTION:
hong.com.  86400 IN NS ns1.hong.com.
hong.com.  86400 IN NS ns2.hong.com. #已经有ns2记录

;; ADDITIONAL SECTION:
ns1.hong.com.  86400 IN A 192.168.0.108 #A记录也已经存在
ns2.hong.com.  86400 IN A 192.168.0.106

;; Query time: 1 msec
;; SERVER: 192.168.0.108#53(192.168.0.108)
;; WHEN: Thu Sep 17 06:34:08 2015
;; MSG SIZE  rcvd: 94

反向解析:

[root@localhost named]# dig -x 192.168.0.108 @192.168.0.108

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -x 192.168.0.108 @192.168.0.108
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15453
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;108.0.168.192.in-addr.arpa. IN PTR

;; ANSWER SECTION:
108.0.168.192.in-addr.arpa. 86400 IN PTR ns1.hong.com.
108.0.168.192.in-addr.arpa. 86400 IN PTR www.hong.com.
108.0.168.192.in-addr.arpa. 86400 IN PTR mail.hong.com.

;; AUTHORITY SECTION:
0.168.192.in-addr.arpa. 86400 IN NS ns2.hong.com.#辅助ns2已经存在
0.168.192.in-addr.arpa. 86400 IN NS ns1.hong.com.

;; ADDITIONAL SECTION:
ns1.hong.com.  86400 IN A 192.168.0.108
ns2.hong.com.  86400 IN A 192.168.0.106  #对应的A记录
;; Query time: 1 msec
;; SERVER: 192.168.0.108#53(192.168.0.108)
;; WHEN: Thu Sep 17 06:36:23 2015
;; MSG SIZE  rcvd: 171


辅助DNS上查看一下是否同步


[root@localhost slaves]# dig -t axfr hong.com @192.168.0.108

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t axfr hong.com @192.168.0.108
;; global options: +cmd
hong.com.  86400 IN SOA ns1.hong.com. admin.hong.com. 0 86400 3600 604800 10800
hong.com.  86400 IN NS ns1.hong.com.
hong.com.  86400 IN NS ns2.hong.com.
hong.com.  86400 IN MX 10 mail.hong.com.
ftp.hong.com.  86400 IN CNAME www.hong.com.
mail.hong.com.  86400 IN A 192.168.0.108
ns1.hong.com.  86400 IN A 192.168.0.108
ns2.hong.com.  86400 IN A 192.168.0.106    #可以看到都已经同步过来
www.hong.com.  86400 IN A 192.168.0.108
www.hong.com.  86400 IN A 192.168.0.106
hong.com.  86400 IN SOA ns1.hong.com. admin.hong.com. 0 86400 3600 604800 10800
;; Query time: 1 msec
;; SERVER: 192.168.0.108#53(192.168.0.108)
;; WHEN: Wed Sep 16 18:42:44 2015
;; XFR size: 11 records (messages 1, bytes 263)


我们可以查看到辅助DNS服务器上是否有区域文件

[root@localhost slaves]# ls
0.168.192.zone  hong.com.zone  #正向反向区域文件已经存在

进入区域文件:

$ORIGIN .
$TTL 86400      ; 1 day
hong.com                IN SOA  ns1.hong.com. admin.hong.com. (
                                0          ; serial
                                86400      ; refresh (1 day)
                                3600       ; retry (1 hour)
                                604800     ; expire (1 week)
                                10800      ; minimum (3 hours)
                                )
                        NS      ns1.hong.com.
                        NS      ns2.hong.com.
                        MX      10 mail.hong.com.
$ORIGIN hong.com.  #ORIGIN意思为每个资源记录末尾自动附加所定义的内容
ftp                     CNAME   www
mail                    A       192.168.0.108
ns1                     A       192.168.0.108
ns2                     A       192.168.0.106
www                     A       192.168.0.108
                        A       192.168.0.106
#辅助DNS里的区域文件是不能手动修改的。。由主DNS服务器同步而来。。


到此我们的服务配置完成。。。


DNS服务器的基本配置就这么多哈,下面来简单总结下:

1、每个DNS服务器必须要有一个对应的NS资源记录;

2、创建slave的时候,其配置文件类型必须是type slve; 必须指定主服务器的 IP地址 ;

3、可以使用dig -t axfr test.com @server_IP 从主DNS服务器拉取所有解析库资源记录;

4、主辅同步完成后,将自动在slave服务器上的slaves/目录下生成zone文件,这些区域文件是从主DNS同步过来的,一般为只读,不建议更改slave的zone文件;

5、在主DNS上修改区域文件时,必须将SOA记录的serial加1 因为slave是通过serial值来进行判断更新的(windows系统上是自动完成的);

6、DNS的日志默认全部保存在/var/log/messege 文件中;

7、DNS的解析依赖于解析库,所以就算是所配置的内容是完全不存在的也可以解析(且正向解析和反向解析的解析库是各自独立的)。需要注意,正向解析里没有PTR记录,而反向解析库里不需要A记录、MX记录和CNAME记录