实验:有三台服务器,Master主服务器(192.168.184.132)也做转发服务器,Slave从服务器(192.168.184.134),子域名服务器(192.168.184.135)

把Master的数据全部复制到Slave的数据,然后通过Master的做转发,子域名授权。
 
一、DNS解析原理:
在了解解析原理之前,先了解一下DNS的端口号,基于UDP和TCP的端口号都是53,一般查询用的是UDP/53,一般区域传送用的是TCP/53,可以用netstat -tulnp进行查看,DNS在服务器上运行的进程名叫named,对应的软件包名叫bind,我们这里只安装bind97(97表示版本号),bind97-libs,bind97-utils.
说一下原理:
1、客户端查询本地的/etc/hosts文件,看是否有相应的
2、查询本地dns缓存
3、根据/etc/resolv.conf指定的第一台nameserver查询
查询dns是否是自己负责的区域,如果是的,则无条件响应,aa表示权威答案,返回给客户端如果不是dns所负责的区域名,并看一下是否允许递归,如果允许,就提交给根,然后通过一系列的迭代,最近返回给客户端,并把数据缓存在本地的dns中
 
 
二、资源记录类型:
1、SOA
SOA称为起始授权记录,SOA定义了域的全局参数,进行整个域的管理设置,一个区域文件只允许存在唯一
SOA记录
2、NS
NS称为名称服务器,记录在一个区域至少有一条,记录了某个区域名的授权服务器
3、A
A称为地址记录,把FQDN映射到IP地址,A记录可以有多个
4、CNAME
CNAME称为别名记录
5、PTR
PTR称为反向地址记录,跟A记录相反,把IP地址映射为FQDN
6、MX
MX称为邮件交换记录,用于邮件服务器,如果这个记录没有做客户端无法收取邮件
 
三、主反向解析的配置
 安装DNS相关软件包
1、DNS的软件包名字为bind,由于版本有很多种,请自己到DNS官方网站www.isc.org下载自己所需要的版本,
我们所安装的版本已经在上面说过了,使用bind97版本
yum -y install bind97 bin97-libs bind97-utils
 
安装好以后请用rpm -qa |grep bind进行查询一下
[root@localhost ~]# rpm -qa |grep bind
bind97-9.7.0-6.P2.el5_7.4
bind97-libs-9.7.0-6.P2.el5_7.4
ypbind-1.19-12.el5_6.1
bind97-utils-9.7.0-6.P2.el5_7.4
我们已经安装成功
 
bind的启动,暂停,重新启动,重新加载,状态命令
  service named status
  service named status
  service named start
  service named stop
  service named restart
  service named reload
  service named status
bind设置开机启动
chkconfig named on
chkconfig named --level 2345
 
2、建立主配置文件/etc/named.conf配置
DNS的主配置文件放在/etc/named.conf,区域配置文件放在/var/named/*,注意:我们这里没有使用chroot机制
[root@localhost ~]# mv /etc/named.conf /etc/named.conf.bak  /为了方便我们不用默认安装的配置文件,我们把它重新命名了,自己重新建立个配置文件/
[root@localhost ~]# touch /etc/named.conf   /这里重新建立了配置文件/
[root@localhost ~]# vim /etc/named.conf
options { 
 directory "/var/named";
 
 };
 
zone "." IN {
     type hint;   /表示区域类型,这里是根区域类型/
     file "named.ca";
};
 
zone "test.com" IN {
     type master;
     file "test.com.zone";  /表示正向区域配置/
};
zone "184.168.192.in-addr-arpa" IN {
     type master;
     file "192.168.184.zone"; /表示反向区域配置/
};
 
注意:建立好配置文件以后不要忘记改属主和权限
[root@localhost ~]# chown :named /etc/named.conf
[root@localhost ~]# chmod 640 /etc/named.conf
 
[root@localhost ~]# named-checkconf /etc/named.conf  /named-checkconf是用于检查主配置文件是否有错误的命令/
 
 
3、建立区域文件并配置
建立区域文件
[root@localhost ~]# touch /var/named/named.ca /默认这个文件已经存在的/
[root@localhost ~]# touch /var/named/test.com.zone
[root@localhost ~]# touch /var/named/192.168.184.zone
 
修改属主与权限
[root@localhost named]# chown :named named.ca test.com.zone 192.168.184.zone 
[root@localhost named]# chmod 640 named.ca test.com.zone 192.168.184.zone 
 
配置区域文件
1、named.ca的配置,由于这个文件是根,我们用一个命令直接生成就可以了
[root@localhost named]# dig -t NS . @A.ROOT-SERVERS.NET. > /var/named/named.ca
注意:查看以后里面是全球的13台根服务器你可以用cat /var/named/named.ca进行查询一下,这里的文件不需要任何的更改
 
2、test.com.zone的配置(正向解析)
$TTL 600
@       IN      SOA     ns.test.com.    admin.test.com. (
                                        2012061601
                                        30M
                                        5M
                                        3D
                                        1D
)
 
@       IN      NS      ns.test.com.
ns      IN      A       192.168.184.132
@       IN      A       192.168.184.132
www     IN      A       192.168.184.132
mail    IN      A       192.168.184.132
@       IN      MX 5    mail.test.com.
 
[root@localhost named]# named-checkzone "test.com" /var/named/test.com.zone  /named-checkzone检查区域文件是否有语法错误/
zone test.com/IN: loaded serial 2012061601
OK
 
 
3、192.168.184.zone的配置(反向解析)
[root@localhost named]# vim 192.168.184.zone 
 
$TTL 600
@       IN      SOA     132.184.168.192.in-addr.arpa.   admin.test.com. (
                                        2012061601
                                        30M
                                        5M
                                        3D
                                        1D
)
@       IN      NS      ns.test.com.
132     IN      PTR     ns.test.com.
131     IN      PTR     mail.test.com.
132     IN      PTR     test.com.
133     IN      PTR     www.test.com.
 
[root@localhost named]# named-checkzone "184.168.192.in-addr-arpa" /var/named/192.168.184.zone 
zone 184.168.192.in-addr-arpa/IN: loaded serial 2012061601
OK
 
重启DNS
[root@localhost named]# service named restart
Stopping named:                                            [  OK  ]
Starting named:                                            [  OK  ]
 
最后进行验证:
 
正向解析验证
dig -t A test.com
dig -t A www.test.com
dig -t MX test.com 
注意:在验证之前把/etc/resolve.conf文件改变本地ip地址,或者也不用改用dig -t A www.test.com @192.168.184.132
 
反向解析验证
dig -x 192.168.184.132
 
 
四:从服务器的配置(192.168.184.134)
1、安装DNS软件
yum -y install bind97 bin97-libs bind97-utils
安装好以后请用rpm -qa |grep bind进行查询一下
[root@localhost ~]# rpm -qa |grep bind
bind97-9.7.0-6.P2.el5_7.4
bind97-libs-9.7.0-6.P2.el5_7.4
ypbind-1.19-12.el5_6.1
bind97-utils-9.7.0-6.P2.el5_7.4
我们已经安装成功
 
 
重点说明:配置slave服务器只要配置/etc/named.conf主配置文件就可以了,配置完成以后它会从master服务器把区域文件复制过来
在/var/named/slave可以看到相关的区域文件,注意它的权限
[root@localhost named]# ll -ld /var/named/slaves/
drwxrwx--- 2 named named 4096 Nov 17  2011 /var/named/slaves/
跟上面一样,我们把/etc/named.conf文件进行删除,然后我们用scp复制192.168.184.132(master服务器)的主配置文件/etc/named.conf
 
[root@localhost named]# scp 192.168.184.132:/etc/named.conf /etc/named.conf
The authenticity of host '192.168.184.132 (192.168.184.132)' can't be established.
RSA key fingerprint is 29:1e:da:fe:9d:8f:63:ed:81:24:75:cc:f8:fd:8c:b3.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.184.132' (RSA) to the list of known hosts.
 
root@192.168.184.132's password: 
named.conf                                                                                100%  256     0.3KB/s   00:00 
 
复制成功
 
 
2、修改一下属主
[root@localhost named]# chown :named /etc/named.conf
编辑主配置文件/etc/named.conf
[root@localhost slaves]# vim /etc/named.conf
 
options {
 directory "/var/named";
 
 };
 
zone "." IN {
     type hint;
     file "named.ca";
};
 
zone "test.com" IN {
     type slave; /表示区域类型,这里是从的,填写slave/
     masters { 192.168.184.132; };   /这个指定主的ip地址,表示从主这台服务器复制数据/
     file "slaves/test.com.zone";    /表示从这个主的服务器复制test.com.zone到/var/named/slaves目录下/
};
zone "184.168.192.in-addr.arpa" IN {
     type slave;  /表示区域类型,这里是从的,填写slave/
     masters { 192.168.184.132; };    /这个指定主的ip地址,表示从主这台主服务器复制数据/
     file "slaves/192.168.184.zone";   /表示从这个主的服务器复制192.168.184.zone到/var/named/slaves目录下/
};
 
 
修改完以后检查一下主配置文件是否有语法错误:
[root@localhost slaves]# named-checkconf /etc/named.conf
 
3、重启DNS
[root@localhost named]# service named restart
Stopping named:                                            [  OK  ]
Starting named:                                            [  OK  ]
 
4、查看一下tail -f /var/log/messages日志
[root@localhost named]# tail -f /var/log/messages 
Jun 15 17:15:57 localhost named[5116]: running
Jun 15 17:15:57 localhost named[5116]: zone 184.168.192.in-addr.arpa/IN: Transfer started.
Jun 15 17:15:57 localhost named[5116]: transfer of '184.168.192.in-addr.arpa/IN' from 192.168.184.132#53: connected using 192.168.184.134#53703
Jun 15 17:15:57 localhost named[5116]: zone 184.168.192.in-addr.arpa/IN: transferred serial 2012061601
Jun 15 17:15:57 localhost named[5116]: transfer of '184.168.192.in-addr.arpa/IN' from 192.168.184.132#53: Transfer completed: 1 messages, 7 records, 222 bytes, 0.041 secs (5414 bytes/sec)
Jun 15 17:15:57 localhost named[5116]: zone 184.168.192.in-addr.arpa/IN: sending notifies (serial 2012061601)
Jun 15 17:15:57 localhost named[5116]: zone test.com/IN: Transfer started.
这里显示已经成功复制过去了
 
 
5、最后验证一下/var/named/slave是否有区域文件
[root@localhost slaves]# ll
total 16
-rw-r--r-- 1 named named 423 Jun 15 17:15 192.168.184.zone
-rw-r--r-- 1 named named 402 Jun 15 17:15 test.com.zone
检查已经复制过来,可以用/cat 192.168.184.zone查看一下。
[root@localhost slaves]# cat 192.168.184.zone 
$ORIGIN .
$TTL 600 ; 10 minutes
184.168.192.in-addr.arpa IN SOA 132.184.168.192.in-addr.arpa. admin.test.com. (
2012061601 ; serial
1800       ; refresh (30 minutes)
300        ; retry (5 minutes)
259200     ; expire (3 days)
86400      ; minimum (1 day)
)
NS ns.test.com.
$ORIGIN 184.168.192.in-addr.arpa.
131 PTR mail.test.com.
132 PTR ns.test.com.
PTR test.com.
133 PTR www.test.com.
 
 
五、子域名授权服务器和转发配置(192.168.184.135))
1、首先要到master主(184.132)去修改区域名配置文件vim /var/named/test.com.zone
在里面加入一条NS记录:
tech    IN      NS      ns.tech.test.com.
ns.tech IN      A       192.168.184.135
然后重启DNS:
[root@localhost named]# service named restart
Stopping named:                                            [  OK  ]
Starting named:                                            [  OK  ]
 
 
 
 
2、在子域授权服务器安装DNS
安装DNS软件
yum -y install bind97 bin97-libs bind97-utils
安装好以后请用rpm -qa |grep bind进行查询一下
[root@localhost ~]# rpm -qa |grep bind
bind97-9.7.0-6.P2.el5_7.4
bind97-libs-9.7.0-6.P2.el5_7.4
ypbind-1.19-12.el5_6.1
bind97-utils-9.7.0-6.P2.el5_7.4
我们已经安装成功
 
3、编辑主配置文件/etc/named.conf
[root@bogon named]# vim /etc/named.conf
options {
 directory "/var/named";
forward only;
forwarders { 192.168.184.132; }; /注意这里设置了转发服务器184.132/
 };
zone "." IN {
     type hint;
     file "named.ca";
};
 
zone "tech.test.com" IN {
     type master;
     file "tech.test.com.zone";   /注意,这里改变了,变成子域名了,我们一般做的正向/
};
zone "184.168.192.in-addr.arpa" IN {
     type master;
     file "192.168.184.zone";
};
 
检查一下配置文件是否有语法错误:
[root@bogon named]# named-checkconf /etc/named.conf 
 
 
4、建立区域配置文件tech.test.com.zone
[root@bogon named]# touch tech.test.com.zone
[root@bogon named]# vim tech.test.com.zone 
 
$TTL 600
@       IN      SOA     ns.tech.test.com.       admin.tech.test.com. (
                                        2012061602
                                        30M
                                        5M
                                        3D
                                        1D
)
 
@       IN      NS      ns.tech.test.com.
ns      IN      A       192.168.184.135
www     IN      A       192.168.184.135
 
检查一下区域配置文件是否有错误
[root@bogon named]# named-checkzone tech.test.com tech.test.com.zone 
zone tech.test.com/IN: loaded serial 2012061602
OK
 
重启DNS
[root@localhost named]# service named restart
Stopping named:                                            [  OK  ]
Starting named:                                            [  OK  ]
 
测试:
在本地服务器(184.135测试)
[root@bogon named]# dig -t A tech.test.com
结果测试是正常的
 
在本地服务器(184.135测试)
[root@bogon named]# dig -t A www.test.com 
结果测试是正常的,为什么呢,因为前面我们做了转发到184.132上面去了,所以测试可以的
如果把这个转发给去掉就无法解析了,因为它是子域,不是它所负责的域,但是我们到父域
测试解析是正常的。
 
补充知识点:rndc的用法
生成rndc配置文件:
可以用rndc-confgen查看配置文件
然后输出重定向到:rndc-confgen > /etc/rndc.conf
把/etc/rndc.conf里的下半部分内容,存取到/etc/named.conf
最后重启named服务