8.4.2  DNS服务的搭建(1)
这里我们的讲述环境如下。
操作系统:Red Hat Enterprise Linux Server release 5。
bind软件版本:系统自带bind-9.3.4。
1.安装bind软件
RHEL 5系统下安装bind时,需要同时安装bind-utils、bind-chroot、ypbind、bind-libs和caching-nameserver几个支持bind的软件包。要检查系统是否正确安装了bind软件,可执行如下命令:
  1. [root@localhost ~]# rpm -qa |grep bind  
  2. bind-libs-9.3.4-6.0.2.P1.el5_2  
  3. bind-utils-9.3.4-6.0.2.P1.el5_2  
  4. bind-chroot-9.3.4-6.0.2.P1.el5_2  
  5. ypbind-1.19-8.el5  
  6. bind-9.3.4-6.0.2.P1.el5_2  
  7. [root@localhost ~]# rpm -qa |grep caching-nameserver           
  8. caching-nameserver-9.3.4-6.0.2.P1.el5_2 
上面的几个软件包都可以从系统安装光盘中找到。如果没有安装或者缺少某些包,应自行通过RPM方式进行安装,这里不再过多讲述。
如果你的系统支持yum方式自动升级,那么只需执行如下命令即可自动完成安装。
  1. [root@localhost ~]#yum install bind caching-nameserver 
2.配置DNS服务
bind软件在RHEL 5版本中使用了chroot技术,与其他Linux版本下的配置不尽相同。例如没有DNS服务的核心配置文件named.conf以及任何区域数据文件,安装程序的路径也与其他版本不同。不过这些并不影响我们对DNS的配置。下面首先讲述bind在RHEL 5下的安装目录结构。
bind安装完毕后,主程序目录默认为/var/named。由于RHEL 5下的bind默认安装后没有named.conf文件,而我们在上面安装了caching-nameserver包,这个包提供了RHEL 5下bind的初始化模板文件,因此/var/named/chroot/etc是DNS的核心配置文件目录,/var/named/chroot/var/named目录则是系统自带的区域数据文件及自己建立的区域数据文件的位置。
(1)named.conf文件详解
这里我们通过系统提供给bind的初始化模板文件构造出named.conf文件来。
  1. [root@localhost ~]#cd /var/named/chroot/etc  
  2. [root@localhost etc]# cp named.rfc1912.zones  named.conf  
  3. [root@localhost etc]#chown root:named named.conf 
在这里,我们通过拷贝named.rfc1912.zones文件构造出了named.conf主配置文件。然后将named.conf的权限设置为root:named。
注意 这个授权很重要,要不然DNS无法正常工作。
  1. [root@localhost ~]#vi /var/named/chroot/etc/named.conf  
  2. // named.rfc1912.zones:  
  3. // Provided by Red Hat caching-nameserver package   
  4. // ISC BIND named zone configuration for zones recommended by  
  5. // RFC 1912 section 4.1 : localhost TLDs and address zones  
  6. // See /usr/share/doc/bind*/sample/ for example 
    named configuration files. 
在named.conf配置文件中主要使用"//"和"/* */"来进行注释。
  1. options {  
  2. directory     "/var/named";  
  3. }; 
上面这段通过options选项定义了一些影响整个DNS服务器的环境设置。directory选项指定named从/var/named目录下读取DNS数据文件,这个目录用户可自行指定并创建,指定后所有的DNS数据文件都存放在此目录下。
  1. zone "ixdba.net" IN {  
  2.         type master;  
  3.         file "ixdba.net";  
  4.         allow-update { none; };  
  5. };  
上面这段设置是用zone关键字来定义一个正向域区,对应的域名为ixdba.net。在这里type类型有3种,它们分别是master、slave和hint,含义分别如下。
Master:表示定义的是主域名服务器。
slave:表示定义的是辅助域名服务器。
hint:表示是互联网中根域名服务器。
file用来指定存放DNS记录的文件,allow-update定义是否允许客户主机或服务器自行更新DNS记录,上面指定的这个正向区域不允许更新DNS记录。
  1. zone "60.168.192.in-addr.arpa" IN {  
  2.         type master;  
  3.         file "60.168.192.zone";  
  4.         allow-update { none; };  
  5. }; 
上面这段设置是定义一个IP为192.168.60.*的反向区域。
(2)区域数据文件的设定
在/var/named/chroot/var/named目录下,我们定义出上面指定的几个区域数据文件。
  1. [root@localhost ~]#cd /var/named/chroot/var/named  
  2. [root@localhost named]#cp localhost.zone  ixdba.net  
  3. [root@localhost named]#cp named.local  60.168.192.zone  
  4. [root@localhost named]#chown root:named ixdba.net 60.168.192.zone 
下面我们分析一下正向区域数据文件的格式和含义,主要看看我们已经设定好的ixdba.net区域数据文件。
  1. [root@localhost named]#more /var/named/chroot/var/named/ixdba.net  
  2. $TTL    86400  
  3. @               IN SOA  ns.ixdba.net.    root.ixdba.net.(  
  4.                                         42           
    ; serial (d. adams)  
  5.                                         3H         
    ; refresh  
  6.                                         15M       
    ; retry  
  7.                                         1W         
    ; expiry  
  8.                                         1D )      
    ; minimum  
  9.                 IN NS           ns.ixdba.net.  
  10.                   IN MX 10      mail  
  11.                 IN A            192.168.60.133  
  12. ns              IN A            192.168.60.133  
  13. www           IN A          192.168.60.135  
  14. mail              IN A          192.168.60.136  
  15. linux         IN CNAME      www 
    8.4.2  DNS服务的搭建(2)
    可以看出,区域数据文件的内容很简单。
    第1行是一个TTL设定,定义区域数据文件里面的各项记录的默认TTL值为86400s,缺少此行不影响使用,但是会出现警告信息。
    第2行是一个SOA记录的设定,"@"代表相应的域名,也就是在named.conf中设定的zone,如在这里表示ixdba.net,IN表示后面的数据使用的是Internet标准。SOA的全称是"Start Of Authority",表示目前区域授权开始。每一个区域数据文件只能有一个SOA,不能重复,而且必须是所负责的zone中第一个"记录"。在SOA后面分别指定了这个区域的授权主机名称和管理者的信箱。
    注意 授权主机名和管理员信箱后面都要有一个".",而且授权主机名称必须能够在DNS设置中找到一个A记录(下面会讲到)。由于"@"在区域数据文件中有其他含义,因此管理员信箱邮件地址中用"."代替"@"符号。
    接下来包含在括弧中的5组数字是作为与Slave服务器同步信息而设置的,含义如下。
    Serial:表示配置文件的修改版本,格式是年月日加上修改的次数,每次修改这个配置文件时都应该修改这个数字,因为Slave DNS进行信息同步时,会比较这个数值。如果这个数值比自身的数值大,就进行更新,否则忽略更新。
    注意 这个设置很重要,如果在修改区域数据文件后,没有更新该值,那么所做的更改就不会更新到网上的其他DNS服务器。
    refresh:用来设定Slave DNS与Master DNS进行同步的间隔时间。
    retry:设定Slave DNS在更新失败后,再进行重试的间隔时间。
    expiry:设定Slave DNS在与Master DNS同步失败后,多长时间清除对应的记录。
    Minimum:这是默认的最小TTL值,如果在前面没有指定TTL值,就以这个为基准。
    以上的数字都是以s(秒)为单位的,但也可以用H(小时)、D(天)、W(星期)来作单位。
    第8~14行,是对域名解析的具体设置,第1列表示不同的主机域名,但是省略了后面的域信息。例如"www"其实是www.ixdba.net,"mail"是指mail.ixdba.net。其他具有相同的含义。"IN"后面的指令含义说明如下。
    NS:用来定义这个主机是个域名服务器。
    MX:定义了一个邮件交换器。
    A指针:定义了一个A记录,即域名到IP的记录。
    CNAME:定义了域名的别名。
    从上面的例子可知,我们首先定义了一个NS(Name Server)为ns.ixdba.net,然后定义了一个邮件交换器,交换优先级为10,接着定义了4个A记录,不同域名指向了不同的IP地址。最后定义了一个www的别名,即访问linux.ixdba.net与访问www.ixdba.net是相同的。
    下面接着分析一下反向区域数据文件60.168.192.zone的各个选项的含义:
    1. [root@localhost named]#more /var/named/chroot/var/named/60.168.192.zone  
    2. $TTL    86400  
    3. 60.168.192.in-addr.arpa.       IN      SOA     
      ns.ixdba.net. root.ixdba.net.(  
    4.                                       1997022700 ; Serial  
    5.                                       28800      ; Refresh  
    6.                                       14400      ; Retry  
    7.                                       3600000    ; Expire  
    8.                                       86400 )    ; Minimum  
    9.         IN      NS      ns.ixdba.net  
    10. 136     IN      PTR     mail.ixdba.net.  
    11. 135     IN      PTR     www.ixdba.net. 
    可以看出,基本结构与正向区域数据文件完全相同,只不过这里多出了一个PTR选项。PTR用来定义一个反向记录,也就是通过IP可以查到对应的域名信息。最后两行的第1列表示的是主机的IP地址,只不过省略了网络地址部分,如136对应的IP为192.168.60.136,同理,135对应的IP为192.168.60.135。
    至此,DNS文件配置部分已经讲述完毕。从配置DNS的过程可以看出,DNS配置文件对格式要求非常严格。如果设置语句以空格键或"Tab"键开始的话,其设置就被认为是一个"记录项"的内容;如果设置语句不是以空格键或"Tab"键开头,也不在SOA指定的括号内,那么表示这个语句要定义一个新的"记录项"。因此,在修改配置文件时要特别小心。
    3.测试DNS配置
    在对DNS文件的所有配置完成后,需要重启服务,以使配置生效。执行如下命令重启DNS服务:
    1. [root@localhost named]#/etc/init.d/named restart 
    下面我们用nslookup命令对DNS解析情况进行测试。
    1. [root@localhost ~]# nslookup 
    下面指定DNS服务器为本机,因为我们在DNS本机进行测试。
    1. > server 127.0.0.1   
    2. Default server: 127.0.0.1  
    3. Address: 127.0.0.1#53 
    下面是测试A记录解析情况。
    1. > www.ixdba.net  
    2. Server:         127.0.0.1  
    3. Address:        127.0.0.1#53  
    4. Name:   www.ixdba.net  
    5. Address: 192.168.60.135  
    6. > mail.ixdba.net  
    7. Server:         127.0.0.1  
    8. Address:        127.0.0.1#53  
    9. Name:   mail.ixdba.net  
    10. Address: 192.168.60.136 
    下面是测试CMANE记录解析情况。
    1. > linux.ixdba.net  
    2. Server:         127.0.0.1  
    3. Address:        127.0.0.1#53  
    4. linux.ixdba.net canonical name = www.ixdba.net.  
    5. Name:   www.ixdba.net  
    6. Address: 192.168.60.135 
    下面是测试MX记录解析情况。
    1. > set type=mx 
    2. > ixdba.net  
    3. Server:         127.0.0.1  
    4. Address:        127.0.0.1#53  
    5. ixdba.net       mail exchanger = 10 mail.ixdba.net. 
    下面是测试PTR记录解析情况。
    1. > set type=PTR 
    2. > 192.168.60.135  
    3. Server:         127.0.0.1  
    4. Address:        127.0.0.1#53  
    5. 135.60.168.192.in-addr.arpa      name = www.ixdba.net.  
    6. > 192.168.60.136      
    7. Server:         127.0.0.1  
    8. Address:        127.0.0.1#53  
    9. 136.60.168.192.in-addr.arpa      name = mail.ixdba.net. 
    下面是测试NS记录解析情况。
    1. > set type=ns 
    2. > ixdba.net  
    3. Server:         127.0.0.1  
    4. Address:        127.0.0.1#53  
    5. ixdba.net       nameserver = ns.ixdba.net. 
    从上面的输出可以看出,DNS都可以正确解析,说明我们上面的配置没有问题,DNS服务器已经可以工作了。