dns的另外一种实现方式:dnsmasq较为简单请自行理解

一.主从架构
二.子域授权
三.转发区域
四.bind中的安全相关配置
五.bind view视图


一.主从架构
从s拥有和主s一样的解析库
    注意:从服务器是区域级别的概念,从s是一个或多个区域的从s
    
    一个区域可以为正向和反向分别配置不同的从s
    AB可以互为主从:
        一个是正向的主,反向的从
        一个是反向的从,正向的主
        AB负责一个区域
    负载均衡:怎样实现都能提供解析
        方法:一半配置ns为A,另一半配置为B
        方法二:在父域中定义该域的两个NS //这样有人请求的时候,就会有两个NS轮流响应
    
配置实现:
    Slave:
        1.定义区域
            zone “zone——name“ IN {
                type slave;
                file "slaves/zone_name.zone";    //只有slaves目录中named组具有写权限
                masters { MASTERIP; };
            };
            named-checkconf
        2.重载配置
            rndc reload
            systemctl reload rndc
    Master:
        1.确保区域数据文件中为每个服务配置NS记录    
            
实现 1.:
    192.168.4.109:slave 正向
    192.168.4.100:master 正向
    
    Slave: //配置成为正向的从s

        yum install bind -y
        vim /etc/named.conf    
            listen-on port 53 { 192.168.4.109; };
            关闭dnssec功能
        vim /etc/named.rfc1912.zones
            zone "mt.com" IN {
                    type slave;
                    file "slaves/mt.com.zone";
                    masters { 192.168.4.100; };
            };
        named-checkconf
    service named start
    master:
        vim mt.com.zone //添加两条记录,已经启动的话,需要修改序列号
                    IN      NS      ns2
            ns2     IN      A       192.168.4.109
        named-checkzone "mt.com" mt.com.zone

    slave:
        rndc reload //重载配置
        systemctl status named.service //查看状态信息
        dig -t A www.mt.com @192.168.4.109
        cat /var/named/slaves/mt.com.zone //在CnetOS7上是二进制格式,在6上是文本格式可以直接查看
    测试:在主s上添加一条记录,并修改serial
        systemctl status named
            sending notifies (serial 2017030102)
            
            
//第一次传送成功,后期增量传送未实现    
        原因:192.168.6.109的主机的ip地址是dhcp获取的,受dhcp的影响,导致默认dns不是主DNS
    zone mt.com/IN: refused notify from non-master: 192.168.4.113#37131
    
    效果:master上修改序列号+rndc reload,systemctl named status //查看结果
        
        实验2:
            192.168.4.109:slave  反向
            192.168.4.100:master 反向
        slave:
            vim /etc/named.rfc1912.zones
                zone "4.168.192.in-addr.arpa" IN {
                        type slave;
                        file "slaves/192.168.4.zone";
                        masters { 192.168.4.100; };
                };
             named-checkconf
        master:
            vim 192.168.4.zone
                        IN      NS      ns2.mt.com.
                109     IN      PTR     ns2.mt.com.
            named-checkzone 4.168.192.in-addr.arpa 192.168.4.zone
            rndc reload
        slave:
            rndc reload
        master:添加一个记录,修改serial
            systemctl status named

    On master:
        1.确保区域数据文件为每个从服务器配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此后面的地址为真正的IP地址
    手动区域传送    
        dig -t axfr 4.168.192.in-addr.arpa
失败总结:        
    1.注意:时间要同步
        ntpdate命令:像同一台服务器同步时间
    2.在从s上
        cat /etc/named.rfc1912.zones
            zone "mt.com" IN {
                type slave;
                file "slaves/mt.com.zone";
                masters { 192.168.4.100; };
                allow-notify { 192.168.4.0/24; };  //允许这个网段内的主机发送来的通知
            };        
        
        开始的时候修改为:allow-notify { 192.168.4.100; }; //只修改为单个ip,是不可以的
        因为:master有多个ip:192.168.4.100,192.168.4.113,192.168.4.112等
            而默认使用的发送接口,很有可能不是192.168.4.100
        
二.子域授权
    正向解析的区域授权子域的方法

        ops.mt.com.        IN    NS    ns1.ops.mt.com.
        ops.mt.com.        IN    NS    ns2.ops.mt.com.
        ns1.ops.mt.com.    IN    A   192.168.4.11
        ns2.ops.mt.com.    IN    A   192.168.4.12

    //DNS一般会建立主从,主要是为了应付突发情况
    
    实现:
        192.168.4.110 :为父域
        192.168.4.100:为子域
    1.192.168.4.100
        vim mt.com.zone
            ops     IN      NS      ns1.ops
            ns1.ops IN      A       192.168.4.110
        rndc reload
    2.192.168.4.110
vim named.conf
    listen-on port 53 { 192.168.4.110; };
    allow-query     { 192.168.4.0/24; }; //允许本地查询
    dnssec 关闭
sytemctl restart named    
netstat -tunlp |grep named
vim named.rfc1912.zones
    zone "ops.mt.com" IN {
            type master;
            file "ops.mt.com.zone";
    };
named-checkconf
==================================================

vim ops.mt.com.zone
    $TTL 2500
    $ORIGIN ops.mt.com.
    @       IN      SOA     ns1.ops.mt.com. admin.ops.mt.com. (     
                            2018010101
                            1H
                            10M
                            1D
                            2H )
            IN      NS      ns1
    ns1      IN      A       192.168.4.110
    www     IN      A       192.168.4.109

        
chmod o= ops.com.zone
chgrp named ops.com.zone
rndc reload

    3.测试
dig -t A www.ops.mt.com @192.168.4.109
dig -t NS ops.mt.com

三.转发区域 //不查找根的折中方案,直接告诉你,mt.com区域的NS是谁
    定义转发
        注意:被转发的服务器必须允许为当前服务做递归
        1.区域转发;仅转发对某特定区域的解析请求
            zone "ZONE_NAME" IN {
                type forward;
                forward {first|only};
                forwarders {SERVER_IP};
            };
            
            first:首先转发;转发器不在时,自行去迭代查询
            only:只转发
        
        2.全局转发 //本地没有定义的区域zone的查询请求,统统转给某转发器
            named.conf
                options {
                    foward only;
                    forwarders { 192.168.4.100; };
                    ...
                }
            只要不是自己负责的区域,就转发
                先查找zone,如果没有定义,就直接转发
                
    
四.bind中的安全相关配置
    acl:访问控制列表;把一个或多个地址归并为一个命名的集合,随后通过此名称即可对此集合内的所有主机实现统一调用;
    
    acl acl_name {
        ip;
        net/prelen;
    };
    
    示例:
        acl mynet {
            192.168.4.0/24;
            127.0.0.0/8;
        };
        
        bind的四个内置acl
            none:没有一个主机
            any:任意主机
            local:本机
            localnet:本机所在的IP所属的网络;
    访问控制指令:
        allow-query {}; 允许查询的主机,白名单
        allow-transfer {};允许向哪些主机做区域传送;默认向所有主机,master应该指定为从s,从s应该指定为none//因为从s不需要传送给别人
                    ;允许我向谁传送
        //以上连个可以加载zone{单个区域}或者options{全局}中都可以
        allow-recursion {};允许哪些主机向当前DNS服务器发起递归请求的
        recursion yes ; 允许所有主机递归
                注意:只有允许递归的才允许转发,否则你转发过去,人家不给你转发,没吊用
        allow-update{ none; } ;DDNS,允许动态更新区域数据库文件中的内容
                建议关闭,会更改记录
        notify yes //允许所有人给我发送通知
        allow-notify { 192.168.4.0/24; }; //记得通知我
        
        
示例1:禁止区域传送
    1.master:192.168.4.100

        vim /etc/named.conf
            acl mynet {
                    192.168.4.100;
                    192.168.4.111;
            }       
        vim named.rfc1912.zone
            zone "mt.com" IN {
                    type master;
                    allow-transfer { mynet; };
                    file "mt.com.zone";
            };

        named-checkconf
        rndc reload
    2.slave:192.168.4.109
        dig -t axfr mt.com @192.168.4.100
        
五.bind view 视图
    Router:eth0:外网--eth1:内网
    对内部一个服务器的解析,内网的解析为内网地址,外网的需要解析为外网的ip
    //brain-split :同一个主机名对内网和外网解析成不同的ip地址
    

    view VIEW_NAME {
        zone 
        zone
        zone
    }
    
    view internal IN {
        match-clients { 192.168.1.0/24; };
        zone "mt.com" IN {
            type master; 
            file "mt.com/internal";
        };
    };
    view external IN {
        match-clients { any; };
        zone "mt.com" IN {
            type master;
            file "mt.com/external";
        };
    };