一.DNS的简单介绍:

1.DNS系统的作用
正向解析:根据主机名称(域名)查找对应的IP地址
反向解析:根据IP地址查找对应的主机域名
DNS系统的分布式数据结构

RHEL DNS _RHEL DNS

在DNS中域名空间采用分层机构,包括根域(由internet名字注册授权机构管理)、顶级域(由internet名字授权机构管理,有三种类型:1.组织域2.国家域或地区域3.反向域)、二级域(注册到个人、组织或公司的名称)和主机名,域名空间的层次结构类似一棵倒置的树,其中根作为最高级别,树枝处于下一级别,树叶则处于最低级别。一个区域就是DNS域名空间的一部分,维护着该区域的数据库记录,在域名层次结构中每一层称作一个域,每个域用“.”号分开,域又可以进一步分成子域,每个域都有一个域名,最底层是主机。

2.DNS查询方式:
递归查询
 大多数客户机向DNS服务器解析域名的方式
迭代查询
 

 大多数DNS服务器向其他DNS服务器解析域名的方式

3DNS服务器的类型:

(1).缓存域名服务器
也称为 唯高速缓存服务器
通过向其他域名服务器查询获得域名->IP地址记录
将域名查询结果缓存到本地,提高重复查询时的速度
(2).主域名服务器
特定DNS区域的官方服务器,具有唯一性
负责维护该区域内所有域名->IP地址的映射记录
(3).从域名服务器
也称为 辅助域名服务器
其维护的 域名->IP地址记录 来源于主域名服务器
 

二搭建DNS域名服务器:

安装的DNS软件包(版本可以自己选择,我这里就以这些版本为例):

bind-9.3.3-7.el5.i386.rpm                                         //主要程序及相关文件
bind-utils-9.3.3-7.el5.i386.rpm                                 //DNS的测试工具,如nslookup、dig。。
bind-chroot-9.3.3-7.el5.i386.rpm                           //伪装的根目录以增强安全性
 

caching-nameserver-9.3.3-7.el5.i386.rpm         //配置文件

要求一:构建缓存域名服务器:

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

[root@localhost etc]# ls
 

localtime          named.caching-nameserver.conf              named.rfc1912.zones              rndc.key

(1)修改全局配置文件

[root@localhost etc]# mv named.caching-nameserver.conf named.conf

[root@localhost etc]# vim named.conf

options {                                                                                     //全局选项
        listen-on port 53 { 192.168.0.60; };                           //设置named监听的端口号、ip地址
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";                     //设置区域文件的默认缓存位置             
        dump-file       "/var/named/data/cache_dump.db";              //设置域名缓存数据库文件的位置
        statistics-file "/var/named/data/named_stats.txt";                   //设置状态统计文件位置
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        query-source    port 53;        
        query-source-v6 port 53;
 

        allow-query     { 192.168.0.0/24; };                        //允许DNS查询的客户端地址

        recursion  yes;                                              //是否允许为客户端进行递归查询

                                          //有时候为了提高解析效率也可以不向根域查询而在此处直接设置转发                                                                                           例如:forwarders{ 8.8.8.8;},把尾行include "/etc/named.rfc1912.zones";这行注释掉,直接启动服务就可                                     以,当客户端查询时就不在向根查询而是向8.8.8.8查询了!!

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
view localhost_resolver {
        match-clients      { any; };
        match-destinations { any; };
        recursion yes;
        include "/etc/named.rfc1912.zones";                           //区域配置选项文件,接下来我们就该修改这个文件了
};
 

(2)修改区域配置文件

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

zone "." IN {                             //设置根区域

        type hint;                       //设置区域类型,hint表示是根域、master表示主域、slave表示是从域
        file "named.ca";             //设置对应的根域地址数据库文件
 

};

(3)重新启动服务:service named restart

(4)验证域名缓存服务器

C:\Documents and Settings\Administrator>nslookup

> www.baidu.com
Server:  UnKnown
Address:  192.168.0.60

Non-authoritative answer:
Name:    www.a.shifen.com
Addresses:  119.75.218.45, 119.75.217.56
 

Aliases:  www.baidu.com

缓存域名服务器就成功了!!!

要求二:构建主从服务器:

案例:

主域名服务器位于internet中,ip地址为192.168.0.60,主机名为ns1.jgd.com

从域名服务器ip地址为192.168.0.61,主机名为ns2.jgd.com

所负责dns域为:jgd.com

为以下服务器提供正向解析:

网站服务器”www.jgd.com“,ip地址为”192.168.0.1“

邮件服务器”mail.jgd.com“,ip地址为”192.168.0.1“

在线培训服务器”study.jgd.com“,ip地址为”192.168.0.2“

主域名服务器”ns1.jgd.com“,ip地址为”192.168.0.60“

从域名服务器”ns2.jgd.com“,ip地址为”192.168.0.61“

为上述服务器提供反向解析,为”jgd.com“提供泛域名解析,对应的ip地址为”192.168.0.1“

步骤1:建立主域名服务器

(1)将主、从DNS的服务器的地址映射写到”/etc/hosts“中,同时在”/etc/resolv.conf“中指定DNS服务器的地址

[root@localhost etc]# vim /etc/hosts

192.168.0.60    ns1.jgd.com  ns1
192.168.0.61    ns2.jgd.com  ns2
 

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

search jgd.com
nameserver 192.168.0.60
 

nameserver 192.168.0.61

(2)修改全局配置文件:

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

[root@localhost etc]# ls
 

localtime          named.caching-nameserver.conf              named.rfc1912.zones              rndc.key

[root@localhost etc]# mv named.caching-nameserver.conf named.conf

[root@localhost etc]# vim named.conf

options {                                                                               
        listen-on port 53 { 192.168.0.60; };                           //设置named监听的端口号、ip地址
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";                     //设置区域文件的默认缓存位置             
        dump-file       "/var/named/data/cache_dump.db";              //设置域名缓存数据库文件的位置
        statistics-file "/var/named/data/named_stats.txt";                   //设置状态统计文件位置
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        query-source    port 53;        
        query-source-v6 port 53;
 

        allow-query     { 192.168.0.0/24; };                        //允许DNS查询的客户端地址

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
view localhost_resolver {
        match-clients      { any; };
        match-destinations { any; };
        recursion yes;
        include "/etc/named.rfc1912.zones";                           //区域配置选项文件,接下来我们就该修改这个文件了
 

};

(3)修改区域配置文件”named.rfc1912.zones“

vim named.rfc1912.zones

zone "jgd.com" IN {
        type master;
        file "jgd.com.zone";
        allow-transfer{ 192.168.0.61; };               //允许从域名服务器来次下载数据
        allow-update { none; };
};

zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.0.arpa";
        allow-transfer{ 192.168.0.61;};          //允许从域名服务器来此下载数据
        allow-update { none; };                    //设置不允许客户端自动更新
};
 

(4)修改区域数据库配置文件:

[root@localhost ~]# cd /var/named/chroot/var/named/
[root@localhost named]# ls
data              localhost.zone   named.ca         named.local  slaves
 

localdomain.zone       named.broadcast         named.ip6.local  named.zero

[root@localhost named]# cp -p localhost.zone jgd.com.zone
 

[root@localhost named]# vim jgd.com.zone          //正向区域数据库文件

$TTL    86400                 //设置有效地址解析记录的默认缓存时间
@               IN SOA  jgd.com.       admin.jgd.com. (
                                        42              ; serial (d. adams)              //更新序列号,用于标记地址数据库的变化,可以是10位以内的整数
                                        3H              ; refresh                //刷新时间,从域名服务器更新该地址数据库文件的时间间隔
                                        15M             ; retry                 //重试延时,从域名服务器跟新地址数据库失败以后等待多长时间再次重试
                                        1W              ; expiry               //失效时间,超过该时间无法更新的地址数据库,则不在重试
                                        1D )            ; minimum         //设置无效地址解析记录(该数据库中不存在的地址)的默认缓存时间

                IN NS           ns1.jgd.com.
                IN NS           ns2.jgd.com.
               IN MX 10         mail.jgd.com.          //MX记录用于设置当前域中邮件服务器的邮件地址,10表示优先级,数字越小优先级越大
ns1             IN A            192.168.0.60
ns2             IN A            192.168.0.61
mail            IN A            192.168.0.1
www             IN A            192.168.0.1
study           IN A            192.168.0.2
*               IN A            192.168.0.1

 

!!注意:在区域数据库文件中,凡是不以”.“结尾的主机地址,系统在查找地址记录时都会自动将当前的域名作为后缀。例如当前的DNS域名为”jgd.com“,则在文件中的主机地址”www“相当于”www.jgd.com“,如果需要完整的FQDN地址,记得在尾部加上”.“。

[root@localhost named]# cp -p jgd.com.zone 192.168.0.arpa

[root@localhost named]# vim 192.168.0.arpa        //修改反向数据库配置文件

$TTL    86400
@               IN SOA  jgd.com.       admin.jgd.com. (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

                IN NS           ns1.jgd.com.
                IN NS           ns2.jgd.com.
60              IN PTR          ns1.jgd.com.
61              IN PTR          ns2.jgd.com.
1               IN PTR          www.jgd.com.
2               IN PTR          study.jgd.com.
 

(5)检查下配置文件:

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

[root@localhost named]# named-checkconf ../../etc/named.rfc1912.zones         //没有任何提示,完全OK!

(6)重新启动服务

[root@localhost named]# service named restart
 

(7)在另为一台机子上测试主域名服务器(如果不能解析检查下防火墙和selinux)

[root@ns2 ~]# nslookup
> www.jgd.com
Server:         192.168.0.60
Address:        192.168.0.60#53

Name:   www.jgd.com
Address: 192.168.0.1
> mail.jgd.com
Server:         192.168.0.60
Address:        192.168.0.60#53

Name:   mail.jgd.com
Address: 192.168.0.1                     //正向解析没问题
> 192.168.0.60
Server:         192.168.0.60
Address:        192.168.0.60#53

60.0.168.192.in-addr.arpa       name = ns1.jgd.com.                    //反向解析没问题
主域名服务器完全ok!

步骤2:去192.168.0.61上建立从域名服务器:

(1)将主、从DNS的服务器的地址映射写到”/etc/hosts“中,同时在”/etc/resolv.conf“中指定DNS服务器的地址

[root@localhost etc]# vim /etc/hosts

192.168.0.60    ns1.jgd.com  ns1
192.168.0.61    ns2.jgd.com  ns2
 

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

search jgd.com
nameserver 192.168.0.60
 

nameserver 192.168.0.61

(2)装bind那几个软件包

(3)修改全局配置文件

[root@ns2 ~]# cd /var/named/chroot/etc/
[root@ns2 etc]# ls
localtime  named.caching-nameserver.conf  named.rfc1912.zones  rndc.key
[root@ns2 etc]# mv named.caching-nameserver.conf named.conf
[root@ns2 etc]# vim named.conf
options {
        listen-on port 53 { 192.168.0.61; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        query-source    port 53;       
        query-source-v6 port 53;
        allow-query     { 192.168.0.0/24; };
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
view localhost_resolver {
        match-clients      { any; };
        match-destinations { any; };
        recursion yes;
        include "/etc/named.rfc1912.zones";
};
 

(4)修改区域配置文件

[root@ns2 etc]# vim named.rfc1912.zones
zone "jgd.com" IN {
        type slave;
        masters { 192.168.0.60; };
        file "slaves/jgd.com.zone";
        allow-update { none; };
};

zone "0.168.192.in-addr.arpa" IN {
        type slave;
        masters { 192.168.0.60; };
        file "slaves/192.168.0.arpa";
        allow-update { none; };
};
 

(5)重新启动服务:[root@ns2 etc]# service named restart

[root@ns2 named]# cd ../../var/named/slaves/ && ls       //到slaves下面查看区域数据库配置文件是否已经下载过来

192.168.0.arpa  jgd.com.zone
 

(6)测试从域名服务器:

C:\Documents and Settings\Administrator>nslookup
Default Server:  ns2.jgd.com
Address:  192.168.0.61
> www.jgd.com
Server:  ns2.jgd.com
Address:  192.168.0.61
Name:    www.jgd.com
Address:  192.168.0.1
> mail.jgd.com
Server:  ns2.jgd.com
Address:  192.168.0.61

Name:    mail.jgd.com
Address:  192.168.0.1                       //正向解析没问题

> 192.168.0.1                                  
Server:  ns2.jgd.com
Address:  192.168.0.61

Name:    www.jgd.com
Address:  192.168.0.1                              //反向解析没问题
 

OK!主从域名服务器就到此完成了!!