构建主/从DNS服务器


问题


公司注册了DNS区域pengpeng.com,准备使用两台RHEL5服务器构建主、从域名系统,其中任何一台都能够解析pengpeng.com域内的主机地址。


1、主DNS服务器:G5.pengpeng.com ,192.168.8.5


2、从DNS服务器:G6.pengpeng.com ,192.168.8.6


3、负责解析以下站点:


网站:www.pengpeng.com  192.168.8.100


邮件: mail.pengpeng.com  192.168.8.25


FTP : 是www的别名


4、为*.pengpeng.com提供泛域名解析:192.168.8.100


方案


使用2台RHEL5虚拟机,其中一台作为主DNS服务器(192.168.8.5)、另外一台作为从DNS服务器(192.168.8.6),两台RHEL5虚拟机及Windows真机都可作为DNS客户机执行测试,如图所示。


     192.168.8.5                      DNS Slave 192.168.8.6

----DNS Master (vmnet1) --------------(vmnet1)                      

                                      Win7 Client 192.168.8.110 



实验一、 构建主DNS服务器

  

 1、认识Linux中的bind域名服务软件包


BIND不是唯一能够提供域名服务的DNS服务程序,却是应用最为广泛的,BIND可以运行在大多数UNIX/Linux主机中。其官方站点位于https://www.isc.org/.


1)安装bind相关的软件包


RHEL5系统盘自带了BIND服务的安装软件,主要包括以下软件包:


bind-9.3.6-20.P1.el5_8.5.x86_64.rpm

bind-chroot-9.3.6-20.P1.el5_8.5.x86_64.rpm

bind-libs-9.3.6-20.P1.el5_8.5.x86_64.rpm

bind-utils-9.3.6-20.P1.el5_8.5.x86_64.rpm

caching-nameserver-9.3.6-20.P1.el5_8.5.x86_64.rpm


其中,各软件包的主要作用如下所述。


bind ,提供域名服务的主要程序及相关文件。


bind-chroot ,为域名提供一个伪装的根目录(将/var/named/chroot/文件夹作为BIND的根目录),以提高安全性。


bind-utils,提供对DNS服务器的测试工具程序(如host、nslookup)。


bind-libs,提供bind、bind-utils需要使用的库函数。


caching-nameserver,提供构建缓存DNS服务器的基本配置文件,这些文件在构建主、从DNS服务器时也可以用作参考。



若这些软件包没有安装,可以使用YUM方式执行安装:


[root@localhost ~]# rpm -q bind bind-chroot

package bind is not installed

package bind-chroot is not installed

[root@localhost ~]# 



[root@localhost ~]# yum -y install bind bind-chroot

Loaded plugins: product-id, security, subscription-manager

This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.

Setting up Install Process

Resolving Dependencies

--> Running transaction check

---> Package bind.x86_64 30:9.3.6-20.P1.el5_8.5 set to be updated

---> Package bind-chroot.x86_64 30:9.3.6-20.P1.el5_8.5 set to be updated

--> Finished Dependency Resolution


Dependencies Resolved


================================================================================

 Package         Arch       Version                       Repository       Size

================================================================================

Installing:

 bind            x86_64     30:9.3.6-20.P1.el5_8.5        rhel-Server     989 k

 bind-chroot     x86_64     30:9.3.6-20.P1.el5_8.5        rhel-Server      47 k


Transaction Summary

================================================================================

Install       2 Package(s)

Upgrade       0 Package(s)


Total download size: 1.0 M

Downloading Packages:

--------------------------------------------------------------------------------

Total                                           844 MB/s | 1.0 MB     00:00     

Running rpm_check_debug

Running Transaction Test

Finished Transaction Test

Transaction Test Succeeded

Running Transaction

  Installing     : bind                                                     1/2 

  Installing     : bind-chroot                                              2/2 


Installed:

  bind.x86_64 30:9.3.6-20.P1.el5_8.5  bind-chroot.x86_64 30:9.3.6-20.P1.el5_8.5 


Complete!


安装caching-nameserver


[root@localhost ~]# cd /misc/cd/Server/

[root@localhost Server]# rpm -q caching-nameserver

package caching-nameserver is not installed

[root@localhost Server]# rpm -ivh caching-nameserver-9.3.6-20.P1.el5_8.5.x86_64.rpm 

Preparing...                ########################################### [100%]

   1:caching-nameserver     ########################################### [100%]



了解bind软件包的作用:


[root@localhost ~]# rpm -qi bind

Name        : bind                         Relocations: (not relocatable)

Version     : 9.3.6                             Vendor: Red Hat, Inc.

Release     : 20.P1.el5_8.5                 Build Date: 2012年10月10日 星期三 15时38分15秒

Install Date: 2014年09月05日 星期五 14时09分34秒      Build Host: x86-023.build.eng.bos.redhat.com

Group       : System Environment/Daemons    Source RPM: bind-9.3.6-20.P1.el5_8.5.src.rpm

Size        : 2266181                          License: BSD-like

Signature   : DSA/SHA1, 2012年10月12日 星期五 20时08分36秒, Key ID 5326810137017186

Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>

URL         : http://www.isc.org/products/BIND/

Summary     : Berkeley 互联网域名(BIND)DNS(域名系统)服务器。

Description :

BIND (伯克利互联网域名) 是 DNS(域名系统)协议的一种实现。

BIND 包括一个 DNS 服务器(named),它把主机名解析为 IP 地址;

一个解析器库(在与 DNS 通讯时应用程序所使用的例程);以及检

验 DNS 服务器是否被正确操作的工具。

[root@localhost ~]# 


2)了解bind、bind-chroot的配置路径


查看bind包的配置相关文件:



[root@localhost ~]# rpm -qc bind

/etc/dbus-1/system.d/named.conf

/etc/logrotate.d/named

/etc/named.conf                    //域名服务主配置文件

/etc/rc.d/init.d/named

/etc/rndc.conf

/etc/rndc.key

/etc/sysconfig/named               //服务程序named的选项配置文件    

/usr/share/dbus-1/services/named.service

[root@localhost ~]# 


查看真正的配置根目录定义:


[root@localhost ~]# grep "^ROOTDIR" /etc/sysconfig/named

ROOTDIR=/var/named/chroot

[root@localhost ~]# 



从上述定义可看出,服务程序named的主配置文件最好存放到/var/named/chroot/etc/目录下,文件名为named.conf:


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

ls: /etc/named.conf: 没有那个文件或目录    //默认无此文件


[root@localhost ~]# ls /var/named/chroot/etc/named.conf  //默认也无此文件

ls: /var/named/chroot/etc/named.conf: 没有那个文件或目录

[root@localhost ~]# 



3)了解bind的服务器程序


服务器主程序:


[root@localhost ~]# which named

/usr/sbin/named


系统服务控制脚本:


[root@localhost ~]# head /etc/init.d/named

#!/bin/bash

#

# named           This shell script takes care of starting and stopping

#                 named (BIND DNS server).

#

# chkconfig: - 13 87

# description: named (BIND) is a Domain Name Server (DNS) \

# that is used to resolve host names to IP addresses.

# probe: true


[root@localhost ~]# 



将named服务的自启状态设为启用:


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

named           0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭    //默认关闭

[root@localhost ~]# chkconfig named on                                    //开启

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

named           0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭    //确认设置结果

[root@localhost ~]# 




2、搭建主DNS服务器(192.168.8.5)


1)构建主配置文件named.conf


[root@localhost ~]# cd /var/named/chroot/etc/

[root@localhost etc]# ls

localtime                      named.conf           rndc.key

named.caching-nameserver.conf  named.rfc1912.zones

[root@localhost etc]# vim named.conf

options {

        listen-on port 53 { 192.168.8.5; };   //监听地址和端口

..

       directory       "/var/named";   //地址文件的默认位置


...

         allow-query     { any; };       //允许所有客户机查询

        allow-query-cache { any; };

...   

     match-clients      { any; };

        match-destinations { any; };

...



[root@localhost etc]# vim named.rfc1912.zones  


zone "pengpeng.com" IN {                 //定义正向区域

      type master;                       //区域类型

      file "pengpeng.com.zone";          //区域数据文件

};

zone "8.168.192.in-addr.arpa" IN {       //定义反向区域

      type master;

      file "pengpeng.com.arpa";

};


检查named.conf 语法是否有错


[root@localhost etc]# named-checkconf named.conf

[root@localhost etc]# 

无反馈,则通过


3、修改数据库文件


[root@localhost named]# vim pengpeng.com.zone


$TTL    86400                //有效记录的生存周期

@       IN      SOA     pengpeng.com. admin.pengpeng.com.  (

                                      2014090501 ; Serial   //更新序号

                                      28800      ; Refresh  //刷新时间

                                      14400      ; Retry    //重试间隔

                                      3600000    ; Expire   //失效时间

                                      86400 )    ; Minimum  //无效记录的生存周期

           IN      NS      dns1.pengpeng.com.

dns1       IN      A       192.168.8.5

www        IN      A       192.168.8.100          //www.pengpeng.com 指向192.168.8.100

mail       IN      A       192.168.8.25

ftp        IN     CNAME    www                    //ftp为www别名



[root@localhost named]# vim pengpeng.com.arpa


$TTL    86400

@       IN      SOA     pengpeng.com. pengpeng.com.  (

                                      2014090501 ; Serial

                                      28800      ; Refresh

                                      14400      ; Retry

                                      3600000    ; Expire

                                      86400 )    ; Minimum

        IN      NS      dns1.pengpeng.com.

5       IN      PTR     dns1.pengpeng.com

100     IN      PTR     www.pengpeng.com

25      IN      PTR     mail.pengpeng.com




检查区域文件地址语法


[root@localhost named]# named-checkzone pengpeng.com pengpeng.com.zone

zone pengpeng.com/IN: loaded serial 2014090501

OK

[root@localhost named]# named-checkzone pengpeng.com pengpeng.com.arpa

zone pengpeng.com/IN: loaded serial 2014090501

OK

[root@localhost named]# 

没问题



4、启动服务


[root@localhost ~]# service named restart

停止 named:                                               [确定]

启动 named:                                               [确定]


[root@localhost ~]# chkconfig named on          //确保开机启动服务


5、测试



把DNS指向服务器


[root@localhost ~]# nslookup 192.168.8.5

Server:         192.168.8.5

Address:        192.168.8.5#53


5.8.168.192.in-addr.arpa        name = dns1.pengpeng.com.8.168.192.in-addr.arpa.


[root@localhost ~]# nslookup www.pengpeng.com

Server:         192.168.8.5

Address:        192.168.8.5#53


Name:   www.pengpeng.com

Address: 192.168.8.100


[root@localhost ~]# nslookup mail.pengpeng.com

Server:         192.168.8.5

Address:        192.168.8.5#53


Name:   mail.pengpeng.com

Address: 192.168.8.25


[root@localhost ~]# nslookup ftp.pengpeng.com

Server:         192.168.8.5

Address:        192.168.8.5#53


ftp.pengpeng.com        canonical name = www.pengpeng.com.

Name:   www.pengpeng.com

Address: 192.168.8.100


实验二、DNS高级应用


实现DNS负载均衡,当用户访问www.pengpeng.com的时候,2/3用户访问8.100,1/3用户访问8.101 

确保用户访问pengpeng.com的时候仍然可以访问www.pengpeng.com的网站

实现用户在访问的时候只要域名正确就可以访问www.pengpeng.com的网站




[root@G5 ~]# cd /var/named/chroot/var/named/

[root@G5 named]# vim pengpeng.com.zone


$TTL    86400

@       IN      SOA     pengpeng.com. admin.pengpeng.com.  (

                                      2014090501 ; Serial

                                      28800      ; Refresh

                                      14400      ; Retry

                                      3600000    ; Expire

                                      86400 )    ; Minimum

           IN      NS      dns1.pengpeng.com.

dns1       IN      A       192.168.8.5

www        IN      A       192.168.8.100                //  2/3是100   1/3是101

www        IN      A       192.168.8.100

www        IN      A       192.168.8.101

pengpeng.com. IN   A       192.168.8.101

mail       IN      A       192.168.8.25

ftp        IN     CNAME    www

$GENERATE  20-50  station$  IN  A  192.168.8.$

*          IN      A       192.168.8.101               //泛域名语句


[root@G5 named]# service named restart

停止 named:                                               [确定]

启动 named:                                               [确定]



测试结果


 当ping www.pengpeng.com时 有时会解析成100、有时是101,实现负载均衡


[root@G6 ~]# ping www.pengpeng.com

PING www.pengpeng.com (192.168.8.101) 56(84) bytes of data.

64 bytes from 192.168.8.101: icmp_seq=1 ttl=64 time=1.28 ms

64 bytes from 192.168.8.101: icmp_seq=2 ttl=64 time=0.300 ms

64 bytes from 192.168.8.101: icmp_seq=3 ttl=64 time=0.231 ms

64 bytes from 192.168.8.101: icmp_seq=4 ttl=64 time=0.269 ms


--- www.pengpeng.com ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 2999ms

rtt min/avg/max/mdev = 0.231/0.520/1.281/0.440 ms

[root@G6 ~]# ping www.pengpeng.com

PING www.pengpeng.com (192.168.8.100) 56(84) bytes of data.

64 bytes from www.pengpeng.com.8.168.192.in-addr.arpa (192.168.8.100): icmp_seq=1 ttl=64 time=0.258 ms

64 bytes from www.pengpeng.com.8.168.192.in-addr.arpa (192.168.8.100): icmp_seq=2 ttl=64 time=0.267 ms

64 bytes from www.pengpeng.com.8.168.192.in-addr.arpa (192.168.8.100): icmp_seq=3 ttl=64 time=0.418 ms


--- www.pengpeng.com ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2001ms



泛域名的实现 ,如图:

访问pengpeng.com  *.pengpeng.com  均可访问www.pengpeng.com

wKiom1QJh5SDppcrAAKsQyWFRwc409.jpg

两者都可ping通;只要域名输入正确,前边输什么都可以访问

wKiom1QJh-OBTXn5AAEdfTm1-jE966.jpg

wKiom1QJh_7TgtDxAAFmU7IVNHM161.jpgwKioL1QJiDCSDIRtAAFXFTnk9eY268.jpg



实验三:搭建从DNS服务器

        给上面的主DNS搭建一个辅助DNS


1、安装软件包


[root@G6 ~]# rpm -q bind bind-chroot caching-nameserver        //查看软件安装情况

package bind is not installed

package bind-chroot is not installed

package caching-nameserver is not installed


[root@G6 ~]# yum -y install bind bind-chroot caching-nameserver  //利用YUM安装


[root@G6 ~]# rpm -q bind bind-chroot caching-nameserver    //查看已安装

bind-9.3.6-20.P1.el5_8.5

bind-chroot-9.3.6-20.P1.el5_8.5

caching-nameserver-9.3.6-20.P1.el5_8.5

[root@G6 ~]# 


2、修改主从DNS的主配置文件


[root@G6 ~]# cd /var/named/chroot/etc/

[root@G6 etc]# cp -p named.caching-nameserver.conf named.conf

[root@G6 etc]# vim named.conf 

...

              listen-on port 53 { 192.168.8.101; };

...

                allow-query     { any; };

                allow-query-cache { any; };

...

                  match-clients      { any; };

                  match-destinations { any; };


[root@G6 etc]# vim named.rfc1912.zones 


zone "pengpeng.com" IN {

        type slave;

        file  "slaves/pengpeng.com.zone";

        masters {192.168.8.5;};

};

zone "8.168.192.in-addr.arpa" IN {

        type slave;

        file "slaves/pengpeng.com.arpa";

        masters {192.168.8.5;};

};


[root@G6 etc]# named-checkconf named.conf

[root@G6 etc]# 


3、修改主DNS的主配置文件,添加授权信息


[root@G5 ~]# cd /var/named/chroot/etc/

[root@G5 etc]# vim named.conf 

...

   allow-transfer {192.168.8.6;};                // 添加授权信息

...



[root@G5 etc]# cd /var/named/chroot/var/named/

[root@G5 named]# vim pengpeng.com.zone


$TTL    86400

@       IN      SOA     pengpeng.com. admin.pengpeng.com.  (

                                      2014090502 ; Serial          //序列号加1

                                      28800      ; Refresh

                                      14400      ; Retry

                                      3600000    ; Expire

                                      86400 )    ; Minimum

           IN      NS      dns1.pengpeng.com.

           IN      NS      dns2.pengpeng.com.              //添加从DNS服务器

           IN      A       192.168.8.101

dns1       IN      A       192.168.8.5

dns2       IN      A       192.168.8.101                  //为DNS正向解析

;www        IN      A       192.168.8.100

;www        IN      A       192.168.8.100

www        IN      A       192.168.8.101

pengpeng.com. IN   A       192.168.8.101

mail       IN      A       192.168.8.25

ftp        IN     CNAME    www

$GENERATE  20-50  station$  IN  A  192.168.8.$

*          IN      A       192.168.8.101


[root@G5 named]# vim pengpeng.com.arpa


$TTL    86400

@       IN      SOA     pengpeng.com. pengpeng.com.  (

                                      2014090502 ; Serial     //序列号加1

                                      28800      ; Refresh

                                      14400      ; Retry

                                      3600000    ; Expire

                                      86400 )    ; Minimum

        IN      NS      dns1.pengpeng.com.

        IN      NS      dns2.pengpeng.com                   //添加从DNS服务器

5       IN      PTR     dns1.pengpeng.com

101     IN      PTR     dns2.pengpeng.com            //为DNS反向解析

100     IN      PTR     www.pengpeng.com

25      IN      PTR     mail.pengpeng.com


[root@G5 etc]# service named restart

停止 named:                                               [确定]

启动 named:                                               [确定]

[root@G5 etc]# 


4、启动从DNS服务器 并验证


[root@G6 etc]# service named restart

停止 named:                                               [确定]

启动 named:                                               [确定]

[root@G6 etc]# chkconfig named on

[root@G6 etc]# ls /var/named/chroot/var/named/slaves/        //列出正反向解析文件

pengpeng.com.arpa  pengpeng.com.zone

[root@G6 etc]#