DNS正反向解析、主从同步、子域受权及视图

关键词: 正向解析 反向解析 主从复制 自域受权 视图
1、DNS基本原理web

1.1 什么是DNS?BIND又是什么?
DNS:Domain Name Service,它是一个基于应用层的协议,是C/S构架的,监听在 53/udp和 53/tcp。
BIND: Berkerley Internet Name Domain, 它是DNS域名解析的一种实现方式。数据库

1.2 DNS发展
早期的域名解析方式:

可是随着互联网的普及,全世界的电脑太多了,要解析就很不容易,因此如今的互联网是分层树状结构的去解析,结构图以下
vim

2、DNS基本概念centos

2.1 DNS服务器的类型有哪些?
    有主DNS服务器、辅助DNS服务器、缓存DNS服务器、转发器

2.2 解析类型有哪些?
    有正向区域解析和反向区域解析,正向解析为name --> IP, 反向解析为IP--> Name

2.3 主DNS服务器和从DNS服务器有什么区别?
    主DNS服务器:维护所负责解析的域内解析库服务器;解析库由管理员维护
    从DNS服务器:从主DNS服务器或其余的从DNS服务器那里复制(区域传递)一份解析库

2.4 区域传送有哪些?
    全量传送:传送整个解析库
    增量传送:传送解析库变化的那部份内容

2.5 DNS查询类型有哪些?
    递归查询: 一次请求就获得正确答案
    迭代查询: 一次请求获得一个答案,而后根据答案再去发送请求,通过屡次请求后获得正确答案的过程 

2.5 一次完整的查询请求通过的流程
    client --> hosts文件 --> dns service
         (local cache --> dns server)(recursion递归) --> server cache --> iteration(迭代)
    
2.6 bind是什么?
    bind是dns协议的一种实现

2.7 bind如何进行解析?
     bind解析是经过区域解析库来实现

2.8 区域解析库是什么?
     区域解析库表现形式是由众多RR(Resource Record )组成,RR在配置文件中进行定义
 
2.9 资源记录
    2.9.1 资源记录类型有哪些?
       记录类型有: A、AAAA、PTR、SOA、NS、CNAME、MX

    2.9.2 资源记录各种型含义?
       SOA: Start Of Authority, 起始受权记录:一个区域解析库有且仅能有一个SOA记录,并且必须为解析库的第一条记录。
       A: internet Address, 做用就是提供正向解析: FQDN --> IP
       AAAA: ipv6地址正向解析: FQDN --> IPv6
       PTR:  PoinTeR, 反向解析:Ip --> FQDN
       NS: Name Server,  标明当前区域的DNS服务器
       CNAME: Canonical Name, 别名记录
       MX:Mail eXchanger, 邮件服务器

     2.9.3 资源记录定义的格式及定义示例    
            语法: name [TTL] IN rr_type value
            注意: a. TLL可从全局继承
                      b. @可用于引用当前区域的名字

        SOA:    
               name: 当前区域的名字,如“baidu.com.”
               value: 有多部分组成
                        1. 当前区域的主DNS服务器的FQDN,也可使用当前区域的名字
                        2. 当前区域管理员的游戏地址,地址中不能使用@符号,通常用.替换,如 alen.chengkaihua.com
                        3. (主从服务协调属性的定义以及否认的答案的统一TTL值)
            例如:
                  alen.com.        IN        SOA      ns1.alen.com. nsadmin.alen.com. (
                                2015042201     ; 序列号
                                2H                  ;刷新时间
                                10M                 ;重试时间
                                1W                   ; 过时时间
                                1D                    ;否认答案的TTL值

                   )
            
            NS:
                 name: 当前区域的名字
                 value: 当前区域的某DNS服务器的名字
                   注意: 一个区域能够有多个NS记录
                 例如:
                        alen.com.        IN        NS        ns1.alen.com.
                        alen.com.        IN        NS        ns2.alen.com.
                    注意:1.相邻的两个资源记录的name相同时,后续的可省略
                             2. 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
                
            MX:
                   name: 当前区域的名字
                   value: 当前区域的某邮件服务器的主机名
                        一个区域内,MX记录可有多个;但每一个记录的value以前应该有一个数字(0-99),表示此服务器的优先级,数字越小优先级越高。
                例如:
                         alen.com.    IN        MX    10         mx1.alen.com.
                         alen.com.    IN        MX    20         mx2.alen.com
                        注意: 对MX记录而言,每个MX记录后面的服务器名字,都应该在后续有一个A记录
            A:
                name: 某主机的FQDN
                value: 主机名对应主机的IP地址
                    例如:
                          ns1.alen.com.        IN    A    1.1.1.1
                          ns2.alen.com.        IN    A    1.1.1.2
                          MX1.alen.com.        IN    A    1.1.1.3
                          MX2.alen.com.        IN    A    1.1.1.4
                   注意:
                        *.alen.com.         IN        A        1.1.1.5
                       避免用户写错答案时给错误答案,可经过泛域名解析进行解析至某特定地址

            AAAA:
                    name: FQDN
                    value: IPv6
            
             PTR:
                    name: IP,有特定格式,IP地址反过来写,1.1.1.2要写成2.1.1.1.in-addr.arpa.
            
                    value: FQDN
                    例如:    
                        4.3.2.1.in-addr.arpa.        IN    PTR    www.alen.com.

             CNAME:
                    name:  别名的FQDN
                    value:   正式名字的FQDN
                    例如:
                            web.alen.com.    IN    CNAME    www.alen.com.

3、前期准备缓存

3.1 实验目标

以域名alen.com.为例,配置一台主DNS服务器一台从服务器:
192.168.1.102 主DNS服务器
192.168.1.103 从DNS服务器
实现正反向解析、主从同步功能安全

3.2 安装包及配置文件
        查看bind服务相关包,安装所须要的包便可:
              # yum list bind* 
        安装bind服务及其依赖包,主要安装这三个包: bind、bind-libs、bind-utils
              # yum install bind bind-libs bind-utils
        bind相关配置文件:
                服务脚本:/etc/rc.d/init.d/named
                主配置文件: /etc/named.conf, /etc/named.rfc1912.zones
                解析库文件:/var/named/ZONE_NAME.ZONE(须要本身定义)
                日志文件: /var/log/messages

4、首先搭建一台主DNS服务器服务器

4.1 主DNS实现正向解析和反向解析
    4.1.1 配置缓存名称服务器
            4.1.1.1 监听外部地址便可
            4.1.1.2 dnssec: 建议测试时关闭dnssec
                cp /etc/named.conf{,.bak}
                vim /etc/named.conf
                    options {
                //      listen-on port 53 { 192.168.1.102; 127.0.0.1; };    //能够设置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";
                //      allow-query     { any; };        //能够设置为any也能够直接注释掉
                         recursion yes;
                //关闭dnssec
                //      dnssec-enable yes;    
                //      dnssec-validation yes;
                /* Path to ISC DLV key */
                //      bindkeys-file "/etc/named.iscdlv.key";
                //      managed-keys-directory "/var/named/dynamic";
            };

    4.1.2 在缓存dns服务器的基础上,配置主DNS服务器
            cp /etc/named.rfc1912.zones{,.bak}
            vim /etc/named.rfc1912.zones
    
        4.1.2.1 在最后一行添加正向解析区域和反向解析区域:
                 zone "alen.com" IN {
                    type master;    // 正向区域类型
                    file "alen.com.zone";    //相对于/var/named而言,输入区域相对路径
                 };
            
                zone "1.168.192.in-addr.arpa" IN {    //反向解析区域
                    type master;            
                    file "192.168.1.zone";
                 };
            定义区域正向解析库文件
                在/var/named建立 alen.com.zone正向解析库文件并配置
                    $TTL 86400
                    $ORIGIN alen.com.
                    @       IN      SOA     ns1.alen.com.   admin.alen.com. (
                                                  2010010101      ;序列号
                                                  1H              ;刷新时间
                                                  5M              ;重试时间
                                                  7D              ;七天过时
                                                  1D )            ;否认答案的统一TTL值
                                IN      NS         ns1
                                IN      NS         ns2
                                IN      MX 10    mx1
                                IN      MX 20    mx2
                     ns1       IN      A        192.168.1.102
                     ns2       IN      A       192.168.1.103
                     mx1       IN      A       192.168.1.104
                     mx2      IN      A       192.168.1.105
                     www     IN      A       192.168.1.102
                     www     IN      A       192.168.1.103
                     ftp        IN      CNAME   www
                     alen.com.    IN    A    192.168.1.102
                     *           IN    A        192.168.1.102    ;泛域名解析
            定义区域反向解析库文件
                在/var/named目录下建立 192.168.1.zone反向解析库文件并配置    
                    $TTL    1D
                    $ORIGIN    1.168.192.in-addr.arpa.
                    @       IN      SOA     ns1.alen.com.   admin.alen.com. (
                            2015041101      ;序列号
                            2H              ;刷新时间
                            5M              ;重试时间
                            1W              ;过时时间一周
                            1D )            ;否认答案的统一TTL值
                            IN      NS      ns1.alen.com.
                            IN      NS      ns2.alen.com.
                    102     IN      PTR     ns1.alen.com.
                    103     IN      PTR     ns2.alen.com.
                    102     IN      PTR     www.alen.com.
                    103     IN      PTR     www.alen.com.
                    104     IN      PTR     mx1.alen.com.
                    105     IN      PTR     mx2.alen.com.

5、测试网络

5.1 测试工具介绍
    5.1.1 dig的使用
           dig [-t type] name [@SERVER] [query options]
                用于测试DNS系统,不会查询hosts文件进行解析
                   好比: dig -t A ns1.alen.com    @192.168.1.102
                
                查询选项:
                       +[no]trace: 跟踪解析过程
                       +[no]recurse: 递归解析

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

                模拟区域传送:
                        dig -t axfr ZONE_NAME @SERVER

     5.1.2 host命令
            host  [-t type] name [SERVER]
                好比: host -t A ns1.alen.com 192.168.1.102

     5.1.3 nslookup命令
            nsloopup [-option] [name | - ] [server]
                    交互式模式:
                        server IP: 指明使用哪一个DNS server 进行查询
                        set q=RR_TYPE: 指明查询的资源记录类型
                        NAME: 要查询的名称
                好比: nsloopup 
                           > server 192.168.1.102 
                           > set q=A
                           > ns1.alen.come

5.2 测试
       修改 alen.com.zone和192.168.1.zone文件属组
              # chown   :named    alen.com.zone
              # chown    :named    1.168.192.zone
       修改 alen.com.zone和192.168.1.zone权限
             # chmod 640 alen.com.zone
             # chmod 640 192.168.1.zone
       检查区域配置文件有无错误:
              # named-checkconf    //检查主配置文件 
              # named-checkzone "alen.com"    alen.com.zone
              # named-checkzone    "1.168.192.in-addr.arpa" 192.168.1.zone
       重启named服务
              # service named restart
       测试资源记录
            #   dig -t    NS    alen.com    @192.168.1.102
            #   dig -t     A    ns1.alen.com    @192.168.1.102
            #   dig -t     A    www.alen.com    @192.168.1.102
            #   dig -t    A     pop.alen.com    @192.168.1.102
            #   dig -t A      alen.com        @192.168.1.102
            # host -t A  ns2.alen.com    192.168.1.102
            测试反向解析:
               # dig -x  192.168.1.102 @192.168.1.102  
    至此,一台主DNS服务器就配置好了,且支持正反向解析功能。

6、主从复制架构

上面咱们配置了一台主DNS服务器,下面把192.168.1.103这台电脑做为辅助DNS服务器,来实现两台电脑的主从架构
从服务器上进行配置:
1. 先模拟传送测试是否能够正常传送
         # dig -t axfr alen.com    @192.168.1.102

2.若是能够正常传送,再进行配置从服务器
    # yum install bind    //centos6默认安装了libs和utils包,因此只须要安装bind包就能够
3. 从服务只须要配置区域,不须要配置资源记录
    vim /etc/named.conf
    配置缓存服务器,和上面同样
     options {
            listen-on port 53 { 192.168.1.103; 127.0.0.1; };    //监听对外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";
            allow-query     { any; };
            recursion yes;
   //      dnssec-enable yes;
   //      dnssec-validation yes;
    /* Path to ISC DLV key */
    //      bindkeys-file "/etc/named.iscdlv.key";
    //      managed-keys-directory "/var/named/dynamic";
     };

    vim /etc/named.rfc1912.zones
        zone "alen.com" IN {
            type slave;
                masters { 192.168.1.102; };
                file "slaves/alen.com.zone";
            };

        zone "1.168.192.in-addr.arpa" IN {
                type slave;
                masters { 192.168.1.102; };
                file "slaves/192.168.1.zone";
            };
    
        配置完后检查语法错误
            # named-checkconf
        重载服务
            # rndc reload
        查看日志
            # tail /var/log/messages
        传送成功后在/var/named目录下会自动建立一个192.168.1.zone文件和alen.com.zone文件
    
    rndc工具总结
        rndc COMMAND
            reload: 重载主配置文件和区域解析库文件
            reload zone: 重载区域解析库文件
            retransfer zone: 手动启动区域传送过程,而无论序列号是否增长
            notify zone:从新对区域传送发通知
            reconfig:重载主配置文件
            querylog:开启或关闭查询日志,注意只在定位错误的时候开启
            trace:递增debug使用的级别,生产环境中切莫开启,很影响性能
            trace LEVEL:指定使用的级别

7、子域受权tcp

1.1 自域受权架构

1.2 为什么要转发?
从上面的架构图中能够看到:客户端 --> ns1
客户端请求解析的主机在alen域内的ns1主机, 客户端给父域ops发送请求,可是ops是找不到alen域内的ns1的,它只会从根域进行迭代去找,因此这种状况就要考虑转发。从而让客户端能够直接向alen域发送请求找到ns1主机。

1.3 如何定义转发服务器:
    7.3.1 所有转发: 凡是对非本机全部负责解析的区域的请求,都转发给指定服务器
            options {
                    forward { first|only }
                    forwarders
             }
    1.3.2 区域转发:仅抓发对特定区域的请求至某服务器
            zone "ZONE_NAME" IN {
                            type forward;
                            forward { first|only };
                            forwarders
            }
    要点: first:   先转发,没有获得响应结果就本身去寻找根域
              only: 转发后没有响应结果就放弃继续寻找根域

1.4 定义子域并实现转发功能实例
    1.4.1 定义子域
            在父域(192.168.1.102)中:
                        vim /var/named/alen.com.zone
                            ops         IN    NS    ns1.ops
                            ns1.ops    IN    A    192.168.1.103

            在子域(192.168.1.103)中:
                    添加子域:
                        vim /etc/named.rfc1912.zones
                        zone "ops.alen.com"    IN {
                                type master;
                                file "ops.alen.com.zone";
                        };
                    添加子域的资源记录
                        vim /var/named/ops.alen.com.zone
                        $TTL 1d
                        $ORIGIN ops.alen.com.
                                @       IN      SOA     ns1.ops.alen.com.       admin.ops.alen.com. (
                                                    2015041001
                                                        1H
                                                        10M
                                                        3D
                                                        1D )
                                           IN      NS      ns1
                                  ns1     IN      A       192.168.1.103
                                www     IN      A       192.168.1.103
                                   *       IN      A       192.168.1.103

    1.4.2 实现转发
            1. 所有转发
                    在 父域192.168.1.102上实现
                        vim /etc/named.conf
                        在options中添加两行:
                                forward first;
                                forwarders { 192.168.1.1; };
              测试:
                    # dig -t A www.baidu.com @192.168.1.102
                      注意:
                             关掉dnssec验证机制
                                 dnssec-enable no;
                                 dnssec-validation no
                             /*include "/etc/named.root.key";       
                            此配置保存根域名服务器的私钥文件,根域名解析服务器为了防止DNS劫持,采用一种DNSSEC安全扩展技术,采用证书认证机制保证数据安全。
                            若是注释此配置则DNS服务器与根域名服务器之间传递解析不须要通过认证。
                            若是开启此配置若是根的私钥不匹配则没法正常解析,因此有时候咱们配置缓存转发服务器的时候能够选择注释此项。
           2 区域转发
                    在子域 192.168.1.103上实现
                           vim /etc/named.rfc1912.zones
                            在最后一行添加:
                                    zone "alen.com" IN {
                                        type forward;
                                        forward only;
                                        forwarders { 192.168.1.102; };    //子域指向父域
                                    };
                            关掉dnssec验证机制
                                 dnssec-enable no;
                                 dnssec-validation no
    
    1.5 bind中安全相关的配置
            acl: 把一个或多个ip地址归并为一个集合,并经过一个统一的名称进行调用
                示例:   
                          acl mynet {
                                192.168.1.102;
                                192.168.1.103;
                                192.168.1.0/24;
                            }
    1.5.1 bind中四个内置的acl
               none: 没有一个主机
                any: 任意主机
                local: 本机
                localnet: 本机的IP同掩码运算后获得的网络地址  
    1.5.2 访问控制的命令
            allow-query {} : 容许查询的主机,白名单,注意:定义在zone中只控制一个zone,定义在options中控制全部的zone
            allow-transfer {}: 容许区域传送的主机: 白名单
            allow-recursion {}: 容许递归的主机
            allow-update {}: 容许更新区域数据库的内容
                        
    1.5.3  实例:
         1.5.3.1 192.168.1.102:
                vim /etc/named.conf
                        添加acl
                            acl slaves {    //定义访问控制列表slaves
                                192.168.1.103;
                                192.168.1.102;
                                1127.0.0.1;
                            }
                在/etc/named.rfc1912.zones中:
                 zone "alen.com" IN {
                        type master;
                        file "alen.com.zone";
                        allow-query { 127.0.0.1;  };    //只容许本机查询
                 };
                        # dig -t A www.alen.com    @127.0.0.1    // 其余任何ip都不能进行查询 
    
             1.5.3.2
                   添加:
                    allow-transfer { slaves; };  
                        # dig -t axfr alen.com @192.168.1.103    //只容许本机及子域传送 
              
               1.5.3 
                    全局配置中:
                    vim /etc/named.conf
                            注释 recursion {};
                        添加咱们本身定义的容许递归的主机
                                allow-recursion { 192.168.1.102; 127.0.0.1; };    //只容许本机进行递归
                
                1.5.3.4 为了安全,通常allow-update都设为none
                        vim /etc/named.rfc1912.zones
                               zone "alen.com" IN {
                                        type master;
                                        file "alen.com.zone";
                               //      allow-query { 127.0.0.1;  };    //只容许本机查询
                                        allow-update { none; };    // 不容许任何主机更新
                                 };

2、视图

2.1 view是什么?
    view是bind配置逻辑上的一个容器

2.2 为何要使用视图?
    不一样网络(好比联通和电信),或者不一样区域(客户的来源距离),为了更好的客户体验,因此根据不一样客户来源进行不一样的zone配置,进而获得不一样的请求结果。简单点说,为了实现不一样客户请求获得不一样的结果,因此用到view这个功能。
    
2.3 view的特色
            一个bind服务器可定义多个view,每一个view中可定义一个或多个zone;
    每一个view用来匹配一组客户端
    多个view内可能须要对同一个区域进行解析,但使用不一样的区域解析库文件

2.4 view的示例
        view VIEW_NAME {
        match-clients { };        //匹配不一样的客户来源                     
                    zone;
    }
            注意:
        1. 一旦启用了view,全部的zone都只能定义在view中
        2. 仅有必要在匹配到容许递归请求的客户所在view中定义根区域
        3.客户端请求到达时,是自上而下检查每一个view所服务的客户端列表

2.5 如何实现view的不一样客户来源
     使用acl来实现:
          好比:acl  inet {
                        192.168.0.0/24;
                        127.0.0.1/8;
                    };

至此,DNS基本知识点介绍这些。DNS的经常使用架构不仅仅是一个主一个从,还有其余架构方式,应该在实际应用中视状况选择。

相关文章
相关标签/搜索