CentOS6.6DNS服务器的搭建

 

Linux下的DNS的软件包为bind,有如下几个软件包:

         bind           #DNS服务的主程序

         bind-utils # 工具,包含dignslookup等网络诊断工具。

         bind-chroot      # 修改named root目录,这样named被***后,***也被限制在指定的目录下,不能切换到/,避免造成更大的破坏。【下面的演示中,为了简单起见就没安装该组件】

 

# 安装bind软件包

yuminstall bind bind-utils -y

 

# 查看bind bind-utils生成哪些文件(仅列出部分文件)

[root@Master ~]# rpm -ql bind  

/etc/named

/etc/named.conf                                  #主配置文件

/etc/named.rfc1912.zones               #事先定义好的区域文件

/etc/named.root.key                          # 实现事物签名的秘钥文件

/var/named                                           # 默认DNS解析记录的数据文件

/var/named/slaves                              # DNS的配置文件目录

[root@Master ~]# rpm -ql bind-utils

/usr/bin/dig      # 域信息搜索器

/usr/bin/host

/usr/bin/nslookup

 

说明dig(DNS lookup utility)域信息搜索器命令。

dig的常用命令格式:

         dig –t 资源记录类型名称@server-ip

         dig –x IP @DNS_IP      反向解析

         dig –t axfr zone            验证完全区域传送

         dig –t ixfr zone     验证增量区域传输(通常需要指定序列号)

 

named-checkconf工具

格式:named-checkconf [主配置文件]

         例如:named-checkconf /var/named/named.conf

 

named-checkzone工具

格式:named-checkzone <域名> <区域数据文件>

         例如:named-checkzone /var/named/student.com


实验一:本地搭建DNS服务器,实现指定域名的解析

Linux下搭建DNS 服务器_第1张图片


vi/etc/named,conf 内容如下:

options {
         listen-onport 53 { 192.168.2.7; };             # 在本机192.168.2.7的53端口监听
//      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";
         allow-query     { 192.168.2.0/24; };
         #any表示允许所有,这样会导致网络结构泄露。一般不建议这样设置
         #192.168.2.0/24表示网段,192.168.2.112表示指定IP
         recursion yes;                    #是否允许为客户机进行递归查询
 
         dnssec-enable yes;
         dnssec-validation yes;
         dnssec-lookaside auto;
 
         /* Path to ISC DLV key*/
         bindkeys-file"/etc/named.iscdlv.key";
 
         managed-keys-directory"/var/named/dynamic";
};
 
logging {
        channel default_debug{
                file"data/named.run";
                severitydynamic;
        };
};
 
zone "." IN {
         type hint;
         file"named.ca";
};
 
zone "stu13.com." IN {                    #区域名称为stu13.com,后面的配置中就是用@代替这个区域的
         typemaster;
         file"stu13.com.zone";
};
 
zone "2.168.192.in-addr.arpa" IN {
         typemaster;
         file"2.168.192.arpa";
};
 
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";


# 编写名称解析数据文件

cd/var/named/

touch  stu13.com.zone 2.168.192.arpa

chownroot:named /var/named/2.168.192.arpa

chownroot:named /var/named/stu13.com.zone

chmod644 /var/named/2.168.192.arpa

chmod644 /var/named/stu13.com.zone

注意:

         必须要修改解析库文件的属组为named


vistu13.com.zone ,正向解析的文件内容如下:

$TTL 1D
@ IN SOA stu13.com. admin.stu13.com. (
                                     2015092010
                                     1M
                                     5M
                                     1H
                                     1D)
 
                   IN NS                  ns1.stu13.com.
                   IN MX  10       mail
ns1            IN A                    192.168.2.7
mail          IN A                    192.168.2.7
www         IN A                    192.168.2.7
www         IN A                    192.168.2.9
ftp             IN CNAME        192.168.2.8
www0      IN CNAME        www
www1      IN CNAME        www

# 说明:上面的www 2A记录,DNS解析到192.168.2.7192.168.2.9,可以达到负载均衡的效果。

 

正向解析的文件格式如下:

$TTL 1D    ;定义TTL为1天

; 必须首先定义一个SOA记录,@代表相应的区域,每个区域数据文件只能有一个SOA。SOA后面跟的是这个区域的授权主机名称,和管理者的邮箱。

@ IN  SOA  demo.com. Admin.demo.com. (  # 注意区域地址、管理员邮箱地址 的 点号不能忘掉

               20150914027  ; 序列号,该序号不更新的话,任何所做的更改都不会同步到其他DNS服务器上【不超过10位】

                1M  ; 定义辅助DNS每隔多久检查一次主DNS服务器的版本号

               5M  ; 同步失败后,再次重试需要的间隔时间

               1H  ; 过期时间(超过该时间主DNS还没有响应,辅助DNS也停止工作)

              1D) ; 否定答案的缓存时长

说明: M分钟、H小时、D天、W周。默认是秒


vi2.168.192.in-addr.arpa,反向解析的文件内容如下:

$TTL 1D
@     IN     SOA           stu13.com.       admin.stu13.com. (
                                     2015032312
                                     1M
                                     5M
                                     1H
                                     1D)
 
         IN     NS           ns1.stu13.com.
7       IN     PTR           www.stu13.com.
9       IN     PTR           www.stu13.com.
7       IN     PTR           www0.stu13.com.
8       IN     PTR           ftp.stu13.com.
7       IN     PTR           mail.stu13.com.
7       IN     PTR           www1.stu13.com.


说明

反向区域文件基本结构和正向区域数据文件基本完全相同,只不过这里多出了一个PTR选项。

PTR用来定义一个反向记录,也就是通过IP可以查到对应的域名信息。最后几行的第一列表示是主机的IP地址,只不过省略了网络地址部分,系统会自动补全,如13对应的是192.168.2.13

 

service named start        #启动dns服务器

 

# dig命令进行访问测试

1.正向解析:

dig -t a www1.stu13.com @192.168.2.7

Linux下搭建DNS 服务器_第2张图片


dig -t a ftp.stu13.com @192.168.2.7

Linux下搭建DNS 服务器_第3张图片


2.反向解析

DNS服务器本机上测试

Linux下搭建DNS 服务器_第4张图片


Linux下搭建DNS 服务器_第5张图片


windows7 上测试:

Linux下搭建DNS 服务器_第6张图片

Linux下搭建DNS 服务器_第7张图片




实验二:构建主从DNS服务器,实现指定域名的解析

Linux下搭建DNS 服务器_第8张图片


在实验1的基础上,

修改Master服务器的/etc/named.conf文件,

options {
         listen-onport 53 { 192.168.2.7; };
         directory          "/var/named";
         dump-file         "/var/named/data/cache_dump.db";
         allow-query     { 192.168.2.0/24; };
         recursion yes;          
 
........
 
zone "." IN {
         type hint;
         file"named.ca";
};
 
zone "stu13.com" IN {
         typemaster;
         allow-transfer{ 192.168.2.12;};
         file"stu13.com.zone";
};
 
zone "2.168.192.in-addr.arpa" IN {
         typemaster;
         allow-transfer{ 192.168.2.12;};
         file"2.168.192.arpa";
};
 
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

 

vi /var/named/stu13.com.zone内容如下:

$TTL 1D
@  IN  SOA  stu13.com.  admin.stu13.com.  (
                                     2015092010
                                     1M
                                     5M
                                     1H
                                     1D)
 
          IN   NS                ns1.stu13.com.
          IN   NS                ns2.stu13.com.     ;Slave也要在这里配置个NS记录
          IN   MX  10            mail
ns1       IN    A                192.168.2.7
ns2       IN    A                192.168.2.12        ; Slave也要在这里配个A记录
mail      IN    A                192.168.2.7
www       IN    A                192.168.2.7
www       IN    A                192.168.2.9
ftp       IN CNAME               192.168.2.8
www0      IN CNAME               www
www1      IN CNAME               www

 

 

编辑/var/named/2.168.192.arpa ,内容如下:

$TTL 1D
@   IN  SOA    stu13.com.  admin.stu13.com.  (
                2015032315
                1M
                5M
                1H
                1D )
 
    IN  NS     ns1.stu13.com.
    IN  NS     ns2.stu13.com.
7   IN  PTR    www.stu13.com.
7   IN  PTR    ns1.stu13.com.                                                           
12  IN  PTR    ns2.stu13.com.
9   IN  PTR    www.stu13.com.
7   IN  PTR    www0.stu13.com.
7   IN  PTR    www1.stu13.com.
8   IN  PTR    ftp.stu13.com.
7   IN  PTR    mail.stu13.com.


# 配置SlaveDNS服务器

vi/etc/named.conf

options {
         listen-onport 53 { 192.168.2.12; };          # 本机地址
         directory          "/var/named";
         dump-file         "/var/named/data/cache_dump.db";
         allow-query     { 192.168.2.0/24; };
         recursion yes;
 
         dnssec-enable yes;
         dnssec-validation yes;
         dnssec-lookaside auto;
 
         /* Path to ISC DLV key*/
         bindkeys-file"/etc/named.iscdlv.key";
 
         managed-keys-directory"/var/named/dynamic";
};
 
logging {
        channel default_debug{
                file"data/named.run";
                severitydynamic;
        };
};
 
zone "." IN {
         type hint;
         file"named.ca";
};
 
zone "stu13.com." IN {
         typeslave;
         masters{ 192.168.2.7; };
         file"slaves/stu13.com.zone";
};
 
zone "2.168.192.in-addr.arpa" IN {
         typeslave;
         masters{ 192.168.2.7; };
         file"slaves/2.168.192.arpa";
};
 
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";


servicenamed restart     # 重启named服务即可

ls/var/named/slaves       # 查看目录下是否同步到了dns数据库文件,正常同步后,目录下应该有类似下图的2个文件生成。

wKiom1YCCfeQ6zI6AABaaoAUsk4613.jpg


# 如果无法正常工作,请tail查看日志  tail -n 50 /var/log/messages | grep named


补充:

         SlaveDNS服务首次启动,可以先执行一次dig axfrstu13.com @192.168.2.7,完全区域传输一下解析文件。


# 然后slave上执行dig命令测试

Linux下搭建DNS 服务器_第9张图片


# 修改主配置,查看从能同步

修改下Master的解析库文件(修改主的解析条目的时候,必须一并将serial改大些,否则Slave检测到serial数值未变大,不会更新

然后再在Slave上执行rndc reload,发现Slave的解析库文件内容也同步了,说明主从同步实验成功。

 

# 还可以将Master的服务暂时停掉,测试slave能否工作:

dig -t a www1.stu13.com @192.168.2.12

如下图,dig命令仍然返回结果,说明我们的slave在工作中:

Linux下搭建DNS 服务器_第10张图片



实验三:缓存DNS服务器的搭建

 

缓存服务器的构建,比较简单,就是在最原始的配置文件中修改:

listen-onport 53 { ***.***.***.***; };

allow-query   { ** };

然后在options {};容器里面加入forwarders { IP(这是主域名服务器的ip地址);};

例如:

options {
         listen-on port 53 {***.***.***.***; };
         directory          "/var/named";
         dump-file         "/var/named/data/cache_dump.db";
         allow-query     { **; };
         recursion yes;
         forwarders{192.168.2.7;192.168.2.12; };                #格式: forwarders{ IP(这是主域名服务器的ip地址);};
         ....下面都是最原始的文件named.conf ......
}

 

然后执行service named start即可。

 




实验四:单台DNS构建分离解析

# 配置过程中主从+分离解析一直出现问题。因此这里先以单台DNS构建分离解析。

Client_1192.168.2.10/24

Client_2192.168.2.11/24

DNS_Server192.168.2.7/24


具体操作如下:

vi /etc/named.conf 编辑内容如下:

options {
         listen-on port 53 {192.168.2.7; };
         directory          "/var/named";
         dump-file         "/var/named/data/cache_dump.db";
         allow-query     { 192.168.2.0/24; };
         recursion yes;
 
         dnssec-enable yes;
         dnssec-validation yes;
         dnssec-lookaside auto;
 
         /* Path to ISC DLV key*/
         bindkeys-file"/etc/named.iscdlv.key";
 
         managed-keys-directory"/var/named/dynamic";
};
 
logging {
        channel default_debug{
                file"data/named.run";
                severitydynamic;
        };
};
 
view "local" {
match-clients {192.168.2.10; };                 # 客户端地址是192.168.2.10的匹配local规则
 
zone "." IN {
         type hint;
         file "named.ca";
};
zone "stu13.com." IN {
         type master;
         file"stu13.com.zone.local";
};
zone "2.168.192.in-addr.arpa" IN {
         type master;
         file"2.168.192.arpa.local";
};
 
};
 
view "others" {
match-clients { any; };                                  # 客户端地址非192.168.2.10的匹配others规则
 
zone "." IN {
         type hint;
         file"named.ca";
};
zone "stu13.com." IN {
         type master;
         file"stu13.com.zone.others";
};
zone "2.168.192.in-addr.arpa" IN {
zone "2.168.192.in-addr.arpa" IN {
         type master;
         file"2.168.192.arpa.others";
};
};
 
# include "/etc/named.rfc1912.zones";           # 注释掉这一行
include "/etc/named.root.key";


# 配置区域解析文件

cd/var/named/

# 简单起见,我先只配置了最基本的www解析

# 配置匹配local的解析文件:

vistu13.com.zone.local

$TTL 86400
@ IN SOA stu13.com. admin.stu13.com. (
                                     2015092019
                                     1M
                                     5M
                                     1H
                                     1D)
 
                     IN    NS                       ns1.stu13.com.
ns1                  IN     A                       192.168.2.7
www                  IN     A                       192.168.2.9

 

vi2.168.192.arpa.local

$TTL 1D
@     IN     SOA           stu13.com.       admin.stu13.com. (
                                     2015032315
                                     1M
                                     5M
                                     1H
                                     1D)
 
         IN     NS           ns1.stu13.com.
7       IN     PTR           ns1.stu13.com.
9       IN     PTR           www.stu13.com.

 

 

# 配置匹配others的解析文件:

vistu13.com.zone.others

$TTL 86400
@ IN SOA stu13.com. admin.stu13.com. (
                                     2015092019
                                     1M
                                     5M
                                     1H
                                     1D)
 
             IN      NS                       ns1.stu13.com.
ns1          IN      A                        192.168.2.7
www          IN      A                        192.168.2.3

 

vi2.168.192.arpa.others

$TTL 1D
@     IN     SOA           stu13.com.       admin.stu13.com. (
                                     2015032315
                                     1M
                                     5M
                                     1H
                                     1D)
 
         IN     NS              ns1.stu13.com.
7       IN     PTR              ns1.stu13.com.
3       IN     PTR              www.stu13.com.

 

chownroot:named 2.168.192.arpa* stu13.com.zone*          #修改数据文件的属组

 

named-checkconf    # 检查下语法

rndcreload       # 重启named服务


# 在不同的客户端进行访问测试

Client1Client2上执行dig -t A www.stu13.com @192.168.2.7

结果如下图,可以看到不同IP访问相同的域名,会自动转到不同的IP上。

Linux下搭建DNS 服务器_第11张图片

Linux下搭建DNS 服务器_第12张图片