浅谈DNS基本原理以及实现方法(二)

         DNS作为互联网服务的一个基础型服务,了解和掌握DNS服务的原理和配置将是每一个运维人员必备的技能,这就如同闯荡江湖的侠客不但要有的招式,还要懂的运用这些招式的心法一样,接下来我将从DNS的正反向解析、主从同步、子域授权以及Bind view这四个方面来揭开它神秘的面纱。


正反向解析:

 

         首先,任何一台服务器要想提供服务必须要有对应的服务应用程序,安装bind

yum install -y bind bind--libs bind-utils

       安装之后我们有必要认识一下bind安装之后的文件,这样有助于我们管理和配置这台服务器

       1)服务脚本:/etc/rc.d/init.d/named

       2)主配置文件:/etc/name.con

                                 /etc/named.rfc1912.zones

                                 /etc/rndc.hey

       3)解析库文件:/var/named/*.ZONE

       配置一台DNS服务器,就是通过修改配置文件以及定义我们需要的解析库来实现的,这里我先定义主服务器实现正反向解析

                 主DNS服务器:ns1.zhang.com      192.168.45.144

                 从DNS服务器:ns2.zhang.com      192.168.45.140

        定义主配置文件:/etc/named.conf

options {
        listen-on port 53 { 192.168.45.144; 127.0.0.1; };  ##定义监听端口以及监听地址
        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     { any; };
        recursion yes;

//      dnssec-enable yes;                                 ##以下几行是DNS的安全,通常情况下关闭此功能
//      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";
                severity dynamic;
        };
};

zone "." IN {                                                ##定义根区域
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";                          ##定义包含的解析区域文件
include "/etc/named.root.key";

        定义解析区域:/etc/named.rfc1912.zones

zone "zhang.com" IN {
        type master;
        file "zhang.com.zone";
        allow-update { none; };
};
zone "45.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.45.zone";
};

        创建区域解析库文件:zhang.com.zone

$TTL 86400
$ORIGIN zhang.com.
@       IN      SOA     ns1.zhang.com.  admin.zhang.com (        ##定义SOA记录        
                        201512151943                             ##序列号
                        1H                                       ##刷新时间 
                        5M                                       ##重试时间 
                        7D                                       ##过期时长     
                        1D )                                     ##否定答案的TTL值
        IN      NS      ns1                                      ##NS记录
        IN      NS      ns2
        IN      MX 10   mx1                                      ##MX记录以及优先级
        IN      MX 20   mx2
ns1     IN      A       192.168.45.144                           ##A记录
ns2     IN      A       192.168.45.140
mx1     IN      A       192.168.45.142
mx2     IN      A       192.168.45.143
www     IN      A       192.168.45.141
pop     IN      CNAME   www                                      ##别名记录
smtp    IN      CNAME   www
ftp     IN      CNAME   www
zhang.com.      IN      A       192.168.45.144
*       IN      A       192.168.45.141

       正向解析测试命令:

 dig -t A zhang.com @192.168.45.144

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A zhang.com @192.168.45.144
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54496
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;zhang.com.   IN A

;; ANSWER SECTION:
zhang.com.  86400 IN A 192.168.45.144

;; AUTHORITY SECTION:
zhang.com.  86400 IN NS ns1.zhang.com.
zhang.com.  86400 IN NS ns2.zhang.com.

;; ADDITIONAL SECTION:
ns1.zhang.com.  86400 IN A 192.168.45.144
ns2.zhang.com.  86400 IN A 192.168.45.140

        反向解析测试命令:

dig -x 192.168.45.141 @192.168.45.144

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -x 192.168.45.141 @192.168.45.144
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56229
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;141.45.168.192.in-addr.arpa. IN PTR

;; ANSWER SECTION:
141.45.168.192.in-addr.arpa. 86400 IN PTR www.zhang.com.

;; AUTHORITY SECTION:
45.168.192.in-addr.arpa. 86400 IN NS ns1.zhang.com.
45.168.192.in-addr.arpa. 86400 IN NS ns2.zhang.com.

;; ADDITIONAL SECTION:
ns1.zhang.com.  86400 IN A 192.168.45.144
ns2.zhang.com.  86400 IN A 192.168.45.140

        测试命令dig总结:

        dig [-t type] name [@SERVER] [query options]

        dig用于测试dns系统,因此,不会查询hosts文件进行解析;

                查询选项:
               +[no]trace:跟踪解析过程
               +[no]recurse:进行递归解析

        测试反向解析:
               dig -x IP @SERVER

主从复制:

    

       要实现主从同步,必须满足以下要求:

          1、从服务器应该为一台独立的名称服务器;
          2、主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;
          3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中;
          4、主服务器必须允许从服务器作区域传送;可使用dig -t axfr  ZONE_NAME @SERVER_NAME测试主服务器是否可以做区域传送
          5、主从服务器时间应该同步,可通过ntp进行;
          6、bind程序的版本应该保持一致;否则,应该从服务器高,主服务器低;

       定义主配置文件:/etc/named.conf

options {
        listen-on port 53 { 192.168.45.140; 127.0.0.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     { any; };
        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";
                severity dynamic;
        };
};
zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

      定义解析区域:/etc/named.rfc1912.zones

zone "zhang.com" IN {
        type slave;
        masters { 192.168.45.144; };
        file "slaves/zhang.com.zone";
};

      此时我们的从服务器就只需执行:

rndc reload     ##重载主配置文件和区域解析库文件

     从服务器就能从主服务器同步解析库文件;

     执行测试命令:

dig -t A zhang.com @192.168.45.140

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A zhang.com @192.168.45.140
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7672
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;zhang.com.   IN A

;; ANSWER SECTION:
zhang.com.  86400 IN A 192.168.45.144

;; AUTHORITY SECTION:
zhang.com.  86400 IN NS ns2.zhang.com.
zhang.com.  86400 IN NS ns1.zhang.com.

;; ADDITIONAL SECTION:
ns1.zhang.com.  86400 IN A 192.168.45.144
ns2.zhang.com.  86400 IN A 192.168.45.140

子域授权:

       每个域的名称服务器,都是通过上级名称服务器在解析库中进行授权,类似根域授权tld一样,那如何定义一个子域那?

       首先定义主服务器解析库文件:/var/named/zhang.com.zone

$TTL 86400
$ORIGIN zhang.com.
@       IN      SOA     ns1.zhang.com.  admin.zhang.com (
                        201512151943
                        1H
                        5M
                        7D
                        1D )
        IN      NS      ns1
        IN      NS      ns2
        IN      MX 10   mx1
        IN      MX 20   mx2
ns1     IN      A       192.168.45.144
ns2     IN      A       192.168.45.140
mx1     IN      A       192.168.45.142
mx2     IN      A       192.168.45.143
www     IN      A       192.168.45.141
pop     IN      CNAME   www
smtp    IN      CNAME   www
ftp     IN      CNAME   www
zhang.com.      IN      A       192.168.45.144
*       IN      A       192.168.45.141

ops     IN      NS      ns1.ops
ops     IN      NS      ns2.ops
ns1.ops IN      A       192.168.45.140
ns1.ops IN      A       192.168.45.142

         然后编辑子域服务器解析区域:/etc/named.rfc1912.zones

zone "ops.zhang.com" IN {
        type master;
        file "ops.zhang.com.zone";

};

         同时一定别忘记创建解析库文件:/var/named/ops.zhang.com.zone

$TTL 1D
$ORIGIN   ops.zhang.com.
@         IN            SOA     ns1.ops.zhang.com.      admin.ops.zhang.com. (
                                201515160000
                                1H
                                10M
                                3D
                                1D )
          IN            NS      ns1
          IN            NS      ns2
ns1       IN            A       192.168.45.144
ns2       IN            A       192.168.45.141
www       IN            A       192.168.45.141
www       IN            A       192.168.45.141

        同步主配置文件以及解析库文件:rndc reload

        执行测试命令:

 dig -t A www.ops.zhang.com @192.168.45.140

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A www.ops.zhang.com @192.168.45.140
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11650
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.ops.zhang.com.  IN A

;; ANSWER SECTION:
www.ops.zhang.com. 86400 IN A 192.168.45.141

;; AUTHORITY SECTION:
ops.zhang.com.  86400 IN NS ns1.ops.zhang.com.
ops.zhang.com.  86400 IN NS ns2.ops.zhang.com.

;; ADDITIONAL SECTION:
ns1.ops.zhang.com. 86400 IN A 192.168.45.144
ns2.ops.zhang.com. 86400 IN A 192.168.45.141

bind view:

     一个bind服务器可定义多个view,而这个view就相当于bind的一个子容器,这个子容器能够提供比服务器自身更灵活更小一部分配置的功能,每个view中可定义一个或多个zone;每个view用一来匹配一组客户端;多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件;

        view定义的方法:

        view  VIEW_NAME  {

                       match-clients {};

         };

         注意:(1) 一旦启用了view,所有的zone都只能定义在view中;
               (2) 仅有必要在匹配到允许递归请求的客户所在view中定义根区域;
               (3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表;

    首先定义主配置文件/etc/named.conf;为了方便定义解析区域,我将本地地址定义到localnet这个acl中,同时由于一旦启用view功能,所有的zone都只能定义到view中,所以我将这里定义的根区域注释掉,而是定义到/etc/named.rfc1912.zone中;

options {
        listen-on port 53 { 192.168.45.144; 127.0.0.1; };
        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     { any; };
        recursion yes;
acl localnet {
        192.168.45.0/24;
        127.0.0.0/8;
};


};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

//zone "." IN {
//      type hint;
//      file "named.ca";
//};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";


    其次在/etc/named.rfc1912.zone中定义我们的view

view internal {
        match-clients { localnet; };
        allow-recursion { localnet; };

zone "." IN {
        type hint;
        file "named.ca";
};

zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};
zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
};
zone "zhang.com" IN {
        type master;
        file "zhang.com.zone";
        allow-update { none; };
};
zone "45.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.45.zone";
};

};

view external {
        match-clients { any; };
        zone "zhang.com" IN {
                type master;
                file "zhang.com.external";
                allow-update { none; };
        };
};


    最后创建我们定义的解析区域文件zhang.com.external

$TTL 86400
$ORIGIN zhang.com.
@       IN      SOA     ns1.zhang.com.  admin.zhang.com (
                        201512151943
                        1H
                        5M
                        7D
                        1D )
        IN      NS      ns1
        IN      NS      ns2
        IN      MX 10   mx1
        IN      MX 20   mx2
ns1     IN      A       192.168.45.144
ns2     IN      A       192.168.45.140
www     IN      A       2.2.2.1
*       IN      A       2.2.2.1


    重启服务后,我们就可以通过本机以及通过非本机网络使用dig命令发现,同样解析一个域名在不同的网络中解析,得到的解析地址也不一样


       以上就是bind服务器的四个基本应用,理解和使用这个网络基础服务对我们网络运维工作中有很多的好处,欢迎有兴趣的朋友一起讨论DNS服务器的其他一下应用。

   

原创文章,作者:zhang,如若转载,请注明出处:http://www.178linux.com/10102

(0)
zhangzhang
上一篇 2015-12-19 10:46
下一篇 2015-12-19 19:18

相关推荐

  • 简单的bash脚本查看任意网段的在线主机

    一前言         最近看到许多同志在写ping某个地址段的bash脚本,我也心血来潮来了一发。  当然本人新手,大神勿喷。 二准备工作           linux系统的机…

    2017-03-02
  • N25第一周作业

    1、描述计算机的组成及其功能。 硬件部分: 软件(系统)组成部分 功能模块划分: 进程管理:系统资源的分配单位(线程是CPU分配单位) 存储管理:内存分配,存储保护,虚拟存储 设备管理:管理外设接口 文件管理:保存程序和数据等软件信息 程序接口:提供指令或函数的调用方式,使程序能够调用系统的资源 用户界面:为用户提供操作环境    &nb…

    Linux干货 2016-12-12
  • 日志分析工具Awstats实战之Apache篇-多站点日志分析

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1318052 前面两篇都在讲述如何去部署nginx下的awstats日志分析工具,现在终于轮到apache。作为老牌的网页服务器,awstats对apache…

    Linux干货 2016-08-15
  • 第九周加密及DNS

    1、简述常见加密算法及常见加密算法原理,最好使用图例解说
    2、搭建apache或者nginx并使用自签证书实现https访问,自签名证书的域名自拟
    3、简述DNS服务器原理,并搭建主-辅服务器
    4、搭建并实现智能DNS

    Linux干货 2018-01-29
  • MAN手册各章节功能介绍及快捷键键位整理

    Linux系统中man命令是用于查询命令使用手册的,使用格式 man + 命令。 当使用man命令之后,系统就会在指定的路径中查询命令的使用手册。其中制定路径为$PATH变量指定的路径,或者/etc/man.config文件中MANPATH中指定的路径  其中/etc/man.config中有如下内容: MANPATH /usr/man …

    Linux干货 2016-10-17
  • Mariadb数据库备份恢复系列(二):xtrabackup物理备份工具之完全备份

    实验二:利用xtrabackup+二进制日志实现完全备份和恢复数据库 1、安装xtrabackup软件包 2、验证数据的存储引擎类型 3、查看数据初始状态 4、利用innobackupex进行完全备份 5、进行apply-log操作 6、查看备份出来的文件的信息 7、模拟在完全备份后,对数进行修改,以测试通过二进制日志还原完全备份后尚未来得及备份的变化的数据…

    Linux干货 2016-11-24

评论列表(1条)

  • stanley
    stanley 2015-12-19 19:18

    清晰详细,坚持加油