红色为写的命令行;红色加粗为必须注意的内容;蓝色为文件内容。

      我们这里如何实现在一台Linux服务器上装配置DNS服务器并且让其真正的工作起来。这有一个magedu.com这个域,而且我们得到的IP地址网段172.16.58.0/24这个网段,我们规划一下,加入ns服务器,地址是172.16.58.1www172.16.58.1172.16.58.3,另外的邮件服务器mail 172.16.58.2,另外我们还有一台ftp,ftp这台主机在www主机上所以它是www主机的别名。这是我们的一个规划,看看这样一个DNS服务器改如何实现?

一、创建yum

   我们先下载一个文件server.repo放到/etc/yum.repos.d下面。   

二、查看bind及安装bind97-libsbind97-utils

      安装上yum库以后我们就要查看一下bind这个文件相关的软件包,这里有两个系列的。有一个系列软件包名就叫Bind,版本号是9.3.6的,还有另外一个系列bind97,版本号是9.7的,注意这是两个组不同的包,我们要用哪一种,确定各个软件包彼此之间都要搭配起来,我们前面将rpm包的时候说过,rpm包有主包和子包之分。红色框中的就是主包,划横线以上的除了主包剩下的都是bind的子包,划线下面的除了红色框中的主包剩下的都是bind97系列子包。我们这里准备使用bind97,比较新的版本,但是我们看到bind93这个版本已经安装了两个【提示:装完系统以后这两个包会自动装上的】,所以我们这里要先卸载掉这两个然后在安装bind97

这个bind-utils这个包给我们提供了很多的工具,我们查看一下,而那个bind-libs是它的库文件,这些程序运行的时候红色框中的程序运行的时候可以要依赖于那个库文件所以一般来讲,你要装bind-utils 这个bind-libs也是必须要装的,这里我们准备装bind97,所以要先卸载掉那两个,然后安装bind97-libsbind97-utils。这里的主包叫bind97版本的叫bind97,它才是我们的服务器端包,所以要配置服务器,我们要先安装bind97这个包。

[root@localhost yum.repos.d]# rpm -e bind-libs bind-utils

[root@localhost yum.repos.d]# yum install bind97-libs bind97-utils

bind97中除了bind97-libsbind97-utils以外,还有bind97-devel。我们一块看一下bind97是什么?因为它没有装,所以我们这里使用yum info bind97-devel来查看。里面包含了头文件和库文件,我们是针对bind9bind8做二次开发的时候才用到这些头文件和库文件的,除非我们创建开发环境的时候才需要安装它,这里我们就不需要装了。

[root@localhost yum.repos.d]# yum info bind97-devel

Description : The bind-devel package contains all the header files and libraries

         : required for development with ISC BIND 9 and BIND 8

三、安装bind

这里还有bind97-chroot,它是加强DNS服务器安全性的一种手段,只不过使用chroot以后,我们所有文件的路径都要相对chroot之后的目录而言了。不过我们这里只演示正常情况下是如何工作的,这里我们要求这个软件包一定不要装上去。所以我们这里只需要装bind97,这是服务器端包。除了它之外,我们还有可能用到另外一个rpm包(caching-nameserver),它能够让我们的DNS服务器立马成为一个缓存DNS服务器,所以他给我们提供了一个配置文件这个配置文件结合我们安装以后的bind,并启动bind以后,能够立即让bind成为一个缓存DNS服务器。有时候我们可以借助caching-nameserver实现快速构建缓存名称服务器的。我现在先讲如何配置一个DNS服务器的,在这里不打算将如何使用caching-nameserver的,也不安装caching-nameserver。回头我会交大家如何配置一个缓存DNS服务器。

[root@localhost yum.repos.d]# yum info caching-nameserver

Description: The  caching-nameserver package includes the configuration files which will make

     : the ISC BIND named DNS name server act as a simple caching nameserver.

     : A caching nameserver is a DNS Resolver, as defined in RFC 1035, section 7.

这里我们就真正的开始安装bind97。我们这里用rpm –ql bind97查看一下它安装成功后都生成了哪些文件,虽然生成的文件很多但是对我们而言核心的东西很少,

[root@localhost yum.repos.d]# yum install bind97 –y

[root@localhost yum.repos.d]# rpm -ql bind97

/etc/named.conf  :主配置文件【提示:其实这个配置文件,它就相当于已经安装了caching-nameserver,这是bind97的特性,它使我们不再需要额外安装caching-nameserver了,但在RHEL6上可能并非如此,这里只是给大家做个说明】

/etc/rc.d/init.d/named :服务控制脚本

/etc/rndc.conf  rndc的配置文件

/etc/rndc.key   rndc的密钥

/etc/sysconfig/named  :这是服务脚本的配置文件

/usr/sbin/named  :主程序

/usr/sbin/named-checkconf  :检查配置文件的(检查配置文件中有没有语法错误)

/usr/sbin/named-checkzone  :检查区域文件的(检查区域文件中有没有语法错误)

/usr/sbin/rndc  :远程控制工具

/usr/sbin/rndc-confgen  :生成/etc/rndc.conf这个配置文件的

/var/named :区域数据文件

/var/named/named.ca  :根名称服务器地址

/var/named/named.localhost :将localhost解析成127.0.0.1(提示:为了避免我们DNS配置错误将localhost解析成一个正常地址,我们都知道每个机器都使用localhost主机名访问本机,所以定义成一个独特的区域叫localhost区域,专门将localhost解析为127.0.0.1,以及IPv6的::1,称为本地回环地址)

/var/named/named.loopback :用于实现将127.0.0.1解析成localhost

一、手动创建主配置文件

    我们安装bind的时候生成主配置文件,我们现在不要他的配置文件,自己来创建配置文件【提示:我们要查看一下它的属主属组和权限之后在进行修改】

     我们这里说以说/etc/named.conf这个配置文件的语法:每一个完整的语句都必须用;(分号)结尾,花括号的前后必须要有空格(只要不是在同一行中),花括号的前后有字符要有空格,没字符就无所谓,华阔号后面是分号的话,有没有空格都无所谓,中间的任何一个指令都必须要;(分号)结尾。

根区域的定义:

zone "ZONE NAME" IN {

    type {master|slave|hint|forward}; 【提示:写的时候不要花括号,{|||转发}里面是选一个的。】     

};

主区域

    file “区域数据文件”

从区域

file "区域数据文件"

masters { DNS服务器地址;}  

[root@localhost named]# ll /etc/named.conf

-rw-r----- 1 root named 930 Feb 15  2010 /etc/named.conf

[root@localhost named]# mv /etc/named.conf /etc/named.conf.orig

[root@localhost named]# vim /etc/named.conf 

 
  
  1. options { 
  2.         directory "/var/named"; 
  3. }; 
  4.  
  5. zone "." IN { 
  6.         type hint; 
  7.         file "named.ca"; 
  8. }; 
  9.  
  10. zone "localhost" IN { 
  11.         type master; 
  12.         file "named.localhost"; 
  13. }; 
  14.  
  15. zone "0.0.127-in-addr.arpa" IN { 
  16.         type master; 
  17.         file "named.loopback"; 
  18. }; 
  19.  
  20. zone "magedu.com" IN { 
  21.         type master; 
  22.         file "magedu.com.zone"; 
  23. }; 
  24.  
  25. zone "58.16.172.in-addr.arpa" IN { 
  26.         type master; 
  27.         file "172.16.58.zone"; 
  28. }; 

四、更改权限

我们开始修改属主、属组,更改权限,然后检查配置文件,我们发现配置文件竟然没有报错,原因是named-checkconf只能检查语法错误检查不出来逻辑错误的。只有重启的时候才能发现逻辑错误。

五、建立区域文件

      这里创建的区域文件名字要同主配置文件里面指定的文件名一样,区域文件格式如下:在如果在/etc/named.conf中如果定义了,那在区域文件中不用写区域名称了用@代表就行。

[root@localhost ~]# vim magedu.com.zone

 
  

 $TTL 600 

  1. @                IN      SOA     nsl.magedu.com.         admin.magedu.com. ( 
  2.                                 2013040101 
  3.                                 1H 
  4.                                 5M 
  5.                                 2D 
  6.                                 6H ) 
  7.                 IN      NS      nsl 
  8.                 IN      MX 10   mail 
  9. nsl             IN      A       172.16.58.1 
  10. mail            IN      A       172.16.58.2 
  11. www             IN      A       172.16.58.1 
  12. www             IN      A       172.16.58.3 
  13. ftp             IN      CNAME   www  

[root@localhost ~]# vim 172.16.58.zone

 
  
  1. $TTL 600 
  2. @               IN      SOA     nsl.magedu.com.         admin.magedu.com. ( 
  3.                                 2013040101 
  4.                                 1H 
  5.                                 5M 
  6.                                 2D 
  7.                                 6H ) 
  8.                 IN      NS      nsl.magedu.com. 
  9. 1               IN      PTR     nsl.magedu.com. 
  10. 1               IN      PTR     www.magedu.com. 
  11. 2               IN      PTR     mail.magedu.com. 
  12. 3               IN      PTR     www.magedu.com. 

六、给区域文件设定权限并检查错误及重启程序named

【提示:启动之后它的文件都会记录在/var/logmessages这里面会有记录的。】

 

[root@ localhost ~ named]# chown root:named magedu.com.zone  :更改属主属组

[root@ localhost ~ named]# chmod 640 magedu.com.zone  :设定权限

[root@ localhost ~ named]# named-checkzone "magedu.com" /var/named/magedu.com.zone :查配置文件是否有语法错误

zone magedu.com/IN: loaded serial 2013040101

OK     :没有语法错误

[root@ localhost ~ named]# named-checkzone "58.16.172.in-addr.arpa" /var/named/172.16.58.zone  :查配置文件是否有语法错误

zone 58.16.172.in-addr.arpa/IN: loaded serial 2013040101

OK      :没有语法错误

[root@ localhost ~ named]# service named restart

Stopping named:                                           [  OK  ]

Starting named:                                            [  OK  ]

七、关闭selinux

默认是开启的,我们这里将它关闭,临时性的关闭/开启setenforce 0|1),0为关闭 ,1为 开启。如果想永久性的关闭。永久性的关闭我们要在配置文件中进行,/etc/selinux里面的config中配置。【提示:永久性的开启或关闭只能开机后生效,当时立即生效】

[root@localhost ~]# getenforce

Enforcing

[root@localhost ~]# setenforce 0

[root@localhost ~]# getenforce

Permissive 

八、查看DNS是否启动

[root@localhost ~]# netstat -tunlp

 
  
  1. Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name    
  2. tcp        0      0 172.16.58.1:53              0.0.0.0:*                   LISTEN      4563/named           
  3. tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      4563/named   
  4. tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      4563/named   
  5. udp        0      0 172.16.58.1:53              0.0.0.0:*                               4563/named           
  6. udp        0      0 127.0.0.1:53                0.0.0.0:*                               4563/named    
  7.        

 

九、设置named开机自动运行

我们使用chkconfig –list named查看named下次看机是否直接运行,如果让named重启后自动开启,我们用chkconfig named on

[root@localhost ~]# chkconfig --list named

named          0:off1:off2:off3:off4:off5:off6:off

[root@localhost ~]# chkconfig named on

[root@localhost ~]# chkconfig --list named

named          0:off1:off2:on 3:on 4:on 5:on 6:off

十、修改DNSIP地址指向

我们来测试一下能到户联网上解析IP地址,能不能解析自己的主机名,我们编辑一下自己的DNSIP地址指向,我们将IP写成我们自己的IP地址。不改成自己的IP地址也没关系,我们这里用dig –t明确使用哪个服务器来解析。格式:dig –t RT NAME。【提示:我们这里的两个www作用是负载均衡的】,我们也可以用同样的方法查查ftp.magedu.com     它的正式名称是www.magedu.com ,其他的也都可以查到的例如:NSMXSOA等。

[root@localhost ~ named]#vim /etc/resolv.conf

nameserver 172.16.58.1

search localdomain 

[root@ localhost ~ named]# dig -t A www.magedu.com

在这里我们也可以使用简单的方法查,这里是使用host –t A www.magedu.com,两个答案的位置是不是颠倒了一下,这就是负载均衡的效果。我们使用host 命令也可以查NSMXSOA记录的结果,在SOA中,它自动把我们的时间换成秒钟了。

[root@ localhost ~ named]# host -t A www.magedu.com

www.magedu.com has address 172.16.58.3

www.magedu.com has address 172.16.58.1

[root@ localhost ~ named]# host -t A www.magedu.com

www.magedu.com has address 172.16.58.1

www.magedu.com has address 172.16.58.3

[root@ localhost ~ named]# host -t NS magedu.com

magedu.com name server nsl.magedu.com.

[root@ localhost ~ named]# host -t MX magedu.com

magedu.com mail is handled by 10 mail.magedu.com.

[root@ localhost ~ named]# host -t SOA magedu.com

magedu.com has SOA record nsl.magedu.com. admin.magedu.com. 2013040101 3600 300 172800 21600

十一、在交互模式下解析

Nslookup 交互模式Windows也支持这个这个模式,我们用Windows来查。我们这里使用别的服务器,让nslookups使用特殊的服务器进行解析,明确说明我要使用172.16.58.1来查询。我们使用q=类型,来设定查询类型,例如:q=A,就是设定查询A类型的。我们也可以用dig –x IP 根据IP查找FQDN了。