一、子域授权

1.1 自域授权架构

 DNS服务及其实现bind(二)之子域授权和视图 随笔

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
1.2 为何要转发?
从上面的架构图中可以看到:客户端 --> ns1
客户端请求解析的主机在alen域内的ns1主机, 客户端给父域ops发送请求,但是ops是找不到alen域内的ns1的,它只会从根域进行迭代去找,所以这种情况就要考虑转发。从而让客户端可以直接向alen域发送请求找到ns1主机。

1.3 如何定义转发服务器:
    1.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.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;
                    };
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄