(以下实例基于Red Hat Enterprise Linux Server release 5.8版本)

使用当前主机172.16.9.1 进行解析:配置过程
假如名称叫做ns.mm.com
ns.mm.com
别名:www ftp
为其他主机进行解析。
第一步,
修改主机名:
vim /etc/sysconfig/network
HOSTNAME=ns.mm.com
hostname ns.mm.com  让它立即生效,重新登录便可以看到效果。

安装软件:
先卸载之前的 rpm -e bind-libs bind-utils
安装bind97:yum list -y bind97 bind97-libs bind97-utils(实现存在yum源,我在之前已经安装过,这里不多做解释)

提供主配置文件/etc/named.conf, 将默认配置文件删除,或者修改名称。
vim /etc/named.conf
options {                                   //全局设置
        directory "/var/named";             //路径
};

zone "." IN {                                 //定义根区域
        type hint;
        file"named.ca";                       //文件会在装上bind后自动生成,如果没有,就用dig -t NS. > /FILE 去获取根域内的所有记录,重定向到该文件即可
};
zone "localhost" IN {
        type master;
        file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "127.0.0.zone";
};
zone "mm.com" IN {
        type master;
        file "mm.com.zone";
};
zone "9.16.172.in-addr.arpa" IN {
        type master;
        file "172.16.9.zone";
        allow-transfer { none; };
};

cd /var/named                //切换目录
编辑相应的区域文件localhost.zone   127.0.0.zone   mm.com.zone  172.16.9.zone
以区域文件"mm.com.zone"为例
内容为:
$ORIGIN .       ;区域名称附加后缀
$TTL 86400      ; 1 day
mm.com              IN SOA  ns.mm.com. admin.mm.com. (
                                2012102001 ; serial  序列号
                                12H      ; refresh (12 hours) 刷新时间
                                1H       ; retry (1 hour)  重试时间
                                30D      ; expire (4 weeks 2 days)  过期时间
                                2D       ; minimum (2 days)  否定回答的TTL值
                                )  
                        NS      ns.mm.com.
                        NS      ns2.mm.com.
                        MX      10 mail.mm.com.
$ORIGIN mm.com.
ftp                     CNAME   www
mail                    A       172.16.9.4
ns                      A       172.16.9.1
ns2                     A       172.16.9.2
www                     A       172.16.9.1
~                                             

注:在此文件中定义各记录,以SOA记录为第一条,任何主机名都要给他一个A记录,MX记录一定不要忘记定义优先级。
反向解析文件记录,以172.16.9.zone为例:
$ORIGIN .
$TTL 86400      ; 1 day
9.16.172.in-addr.arpa   IN SOA  ns.mm.com. admin.mm.com. (
                                2012102001 ; serial
                                12H      ; refresh (12 hours)
                                1H        ; retry (1 hour)
                                30D      ; expire (4 weeks 2 days)
                                2D        ; minimum (2 days)
                                )  
                        NS      ns.mm.com.
                        NS      ns2.mm.com.
                        MX      10 mail.mm.com.
$ORIGIN 9.16.172.in-addr.arpa.
1                       PTR     ns.mm.com.
                        PTR     www.mm.com.
2                       PTR     ns2.mm.com.
4                       PTR     mail.mm.com.

注:反向区域中,PTR记录的NAME是IP 剩下的部分(主机地址)要反过来写

区域文件全部定义好之后,可以先检测一下语法:
相应的命令:
named-checkconf 检测主配置文件中的语法错误
named-checkzone 检测区域文件中的语法错误

如检测mgedu.com 这个区域文件有没有语法错误:
named-checkzone  "mm.com"  mm.com.zone

如果两项都没有错误便可以启动服务:service named restart
验证一下是否启动:netstat -tunlp | grep 53

rndc 远程名称服务控制器(安全性要求很重要)
remote name domain controller
 默认只工作在tcp/127.0.0.1的953端口
rndc
    reload          重新载入配置文件和区域文件
    stop             停止服务
    flush             清空缓存
    reconfig        重新载入主配置文件和发生过更新的区域文件
    reload zone   重新载入某区域文件
    status            显示当前服务状态
使用rndc-confgen 可以生成一对密钥,用这对密钥可以实现远程控制的安全性,将该密钥的两段分别设置在主配置文件/etc/named.conf
和另一个远程服务器的主配置文件中去掉注释,即可实现密钥的远程控制。
如果指定外网为DNS服务器,把rndc.conf 的前半段复制粘贴到DNS 服务器的主配置文件中即可。
这个用法在这里先不使用。
到这里DNS 的简单配置宣告成功!!

验证解析:
正向:dig -t A www.mm.com  @127.0.0.1
反向:dig -x 172.16.9.2 @127.0.0.1

dig 里有一个用法:AXFR 完全区域传送:

使用:dig -t AXFR  mm.com   可以把对方所有的记录全部拿过来,
这样做对DNS服务器来说是很不安全的,所以应该控制其不能随意访问该记录。
所以应该设定传送权限,仅允许在自己控制范围内的主机进行区域传送。

仅允许谁传送的指令:
allow-transfer { 172.0.0.0/8; 172.16.100.2; }
{} 里面是允许传送的网络地址或者IP地址,中间用空格隔开,每个地址后分号结尾。
有两个特殊的地址:
none: 全都不允许同步
any:  任何人都允许同步
传送定义zone 当中,说明该区域受到控制;如果设置到全局中,说明全局区域都受到控制。
vim /etc/named.conf  设定仅允许谁传送(注:根区域中是不允许传送的哦)
zone "mm.com" IN {
        type master;
        file "mm.com.zone";
        allow-transfer { 127.0.0.0/8; 172.16.9.2; };  //设定允许传送的网络和主机
};
zone "9.16.172.in-addr.arpa" IN {
        type master;
        file "172.16.9.zone";
        allow-transfer { none; };                     //设定都不允许传送

rndc reconfig 重新载入一下配置文件
service named restart  重启服务

测试一下:dig -t axfr mm.com [@172.16.9.2] 地址控制很严格的,要按照允许传送的地址输入才可以
 

 

配置从服务器
从服务器是从主服务器中同步数据的,所以不用为从服务器定义配置文件。
例如用172.16.9.2这台主机来配置mm.com 这台主机的从服务器。
主机名假设为ns2.mm.com
修改主机名
vim /etc/sysconfig/network
HOSTNAME=ns2.mm.com
service network restart

从服务器中:
安装bind和主服务器的安装方法相同,在这里就不重复了。
从区域的声明方法:
zone"ZONE" IN {
 type slave;
 file "slaves/FILE_NAME"  ;
 masters { master _ server;};
};
注:同步过来的文件属组应该有写权限的,在这里有一个固定的目录slaves将同步的文件保存在slaves 中
注:selinux 应该关闭,setenforce 0 (临时有效的)
如果让其永久有效,改配置文件
vim /etc/selinux/config
# SELINUX=permissive

让两台主机进行通信,基于密钥认证。
两台主机中设置:
ssh-keygen -t rsa  -N ''(自动生成.ssh目录)  //-t 是指定密钥的类型,-N '' 指定密码为空
ssh-copy-id -i .ssh/id_rsa.pub root@172.16.9.1/2      //-i 指定密钥文件

检测一下通信:
ssh 172.16.9.1 'ifconfig'
ssh 172.16.9.2 'ifconfig'
可以看到对方的地址信息。

然后在主服务器中复制,
scp -p /etc/named.conf 172.16.9.2:/etc(将一台主机上的named.conf复制到172.16.9.1这台主机上的/etc下
然后改变文件的属组
ll /etc/named.conf
chmod 640 /etc/named.conf
chown :named /etc/named.conf

主服务器上复制另外的数据文件:
scp -p /var/named/localhost.zone 127.0.0.zone  root@172.16.9.2:/var/named

在从服务器中检测下是否复制成功了,然后更改其权限640和属组named
注:在主从服务器中,根区域和localhost ,172.0.0.1  都是不能让别人解析的

在从服务器中设置:这里只是设置正向解析
vim /etc/named.conf
在zone "mkgedu.com"里设置
type slave ;
file "slave/mm.com.zone ";
masters { master_ip; }

rndc-confgen 要重新生成的或把另外一台主机的密钥复制过来也可以
mm.com.zone 文件的内容是从主服务器中同步过来的,不用再自定义。
named-checkconf
named-checkzone "mm.com" mm.com.zone
检测语法错误
启动named:  service named start
查看日志文件信息:tail /var/log/messages

在从服务器中进行解析:dig -t A www.mm.com @127.0.0.1
反向解析:  dig -x 172.16.9.1

注:修改一次主服务器的数据文件内容的时候,要将其序列号加上1
    在启动服务和查询过程中,要经常查看日志信息,有利于发现错误。