BIND高级应用

来源:互联网 发布:安卓效率软件 编辑:程序博客网 时间:2024/06/17 16:24

上一篇我们介绍了BIND的客户端(dig,host,nslookup),BIND的正向反向解析,主辅DNS服务器配置及其传送,以及rndc的简单介绍。这一篇来介绍bind的高级应用: 子域授权,转发域,ACL,视图(view)

实验环境:3台CentOS 7.4 x64虚拟机(selinux和firewall已关闭)
说明:只作正向解析

  Domain Name: example.com.          10.0.0.0/24  主DNS服务器: mster.example.com.     10.0.0.10  辅DNS服务器: slave.example.com.     10.0.0.11  WEB服务器: www.example.com.         10.0.0.10,10.0.0.11  FTP服务器: ftp.example.com.   CNAME   www.example.com  MX服务器: mx.example.com.          10.0.0.10  #############################规划子域#######################################  子域:ops.example.com.  子域DNS:ns1.ops.example.com.    10.0.0.12  WEB服务器:www.ops.example.com.    10.0.0.12  POP3服务器:pop3.ops.example.com.    CNAME    www.ops.example.com.

BIND子域授权

1.DNS服务器的主辅配置(只做正向解析)

DNS服务器的主辅配置上一篇已做介绍,这里不再说明。详情请参考BIND的安装与配置
主DNS配置好后,example.com区域文件如下所示

这里写图片描述
辅助DNS服务器的区域文件是从主DNS服务器复制过去的,因此辅助DNS服务器的区域文件与主DNS服务器是一样的

[root@slave ~]# ll /var/named/slaves/example.com.zone -rw-r--r-- 1 named named 592 Dec 12 19:18 /var/named/slaves/example.com.zone

2.划分子域

根据规划,划分的子域为ops.example.com. ,在10.0.0.12这台主机上,配置子域的区域解析文件

(1)配置子域区域的数据信息

[root@ops ~]# vim /etc/named.rfc1912.zoneszone "ops.example.com" IN {        type master;        file "ops.example.com.zone";        allow-update { none; };};

(2)创建子域区域数据文件

[root@ops ~]# vim /var/named/ops.example.com.zone$TTL 86400@      IN    SOA      ns1.ops.example.com. admin.ops.example.com. (                                2017121201                                1D                                1H                                1W                                3H )       IN    NS       ns1ns1    IN    A        10.0.0.12www    IN    A        10.0.0.12pop3   IN    CNAME    www

(3)更改子域区域解析库文件的权限为640,属主为root,属组为named

[root@ops ~]# chmod 640 /var/named/ops.example.com.zone [root@ops ~]# chown :named /var/named/ops.example.com.zone 

(4)检测子域配置文件及子域区域文件是否存在语法错误(语法检查没问题了别急着启动或重载named服务,需要先到父域DNS上完成授权)

[root@ops ~]# named-checkconf [root@ops ~]# named-checkzone "ops.example.com" /var/named/ops.example.com.zone zone ops.example.com/IN: loaded serial 2017121201OK

3.完成授权

(1)在主DNS服务器(10.0.0.10)上完成子域授权,添加子域相应的NS和A记录

[root@master ~]# vim /var/named/example.com.zone 

这里写图片描述

(2)检查区域文件是否有语法错误并重新加载主DNS的区域文件

[root@master ~]# named-checkzone "example.com" /var/named/example.com.zone zone example.com/IN: ops.example.com/NS 'ns1.ops.example.com' (out of zone) has no addresses records (A or AAAA)zone example.com/IN: loaded serial 2017121202OK[root@master ~]# rndc reloadserver reload successful

这里会报一个区域外的NS没有A或者AAAA的错误,并无影响

(3)子域DNS服务器启动或者重载named服务

[root@ops ~]# rndc reloadserver reload successful

4.验证

这里写图片描述

这里写图片描述

可以看出父域可以解析子域,那么子域能否解析父域呢?答案是不能,如下图

这里写图片描述

结论:授权是自上而下的,父域知道子域的位置,而子域并不知道父域的位置
子域要如何知道父域所在位置?通过转发

DNS转发

1.转发的过程:

  (1)当本地DNS服务器(也是转发器)收到客户端查询时,它会尝试使用本地的缓存或区域解析该查询  (2)如果不能使用本地数据解析查询,此时它作为客户端,会将查询转发给外网DNS服务器,并等待其应答  (3)外网DNS服务器接收到的查询请求是递归查询,此时,它自己需要向外层层迭代找到最终答案返回给转发器(此时转发器作为DNS客户端)  (4)转发器将外网DNS返回的查询结果送到客户端(非权威答案),完成解析过程

注: 接受转发的服务器需要能够为请求者做递归,即在接受转发的服务器的named的主配置文件(/etc/named.conf)中的 “recursion”选项必须为 “yes”

2.转发的类型

转发分全局转发和区域转发两种,它们的定义如下

(1)全局转发在主配置文件/etc/named.conf的Options选项中添加如下内容Options {            forward { first|only };    <==first表示优先转发,如果没查询到结果,那么它自己还会根据根提示向外迭代查询 ;only表示仅转发            fowwarders { IP; };    <==指明转发器的ip  };(2)区域转发在区域配置文件/etc/named.rfc1912.zones中添加如下内容zone "ZONE_NAME" IN {                type forward;    <==区域类型为转发                forward { first|only };                forwarders { IP; }            }

下面演示定义区域转发,使其子域能解析父域

(1)确保主DNS服务器开启了允许递归

[root@master ~]# vim /etc/named.confrecursion yes;

(2)编辑子域DNS服务器的区域配置文件,添加如下内容

[root@ops ~]# vim /etc/named.rfc1912.zoneszone "example.com" IN {        type forward;        forward only;        forwarders { 10.0.0.10; };};

(3)子域DNS服务器重载配置文件并刷新DNS缓存

[root@ops ~]# rndc reloadserver reload successful[root@ops ~]# rndc flush

(4)测试
这里写图片描述

注意:无论是配置子域授权还是转发,请务必关闭dnssec,即主配置文件中(/etc/named.conf)的选项“dnssec-enable”“dnssec-validation ”均为“no

ACL功能

使用acl能够配置bind中的相关安全设置,acl就是把一个或多个地址归并为一个集合,并通过一个统一的名称调用,其格式为:

acl “ACL_NAME { address_match_element; …};

bind定义了四个内置的acl

  none: 没有一个主机  any: 任意主机  local: 本机  localnet: 本机的IP同掩码运算后得到的网络地址

常用的控制指令有以下4个

  allow-query {}: 允许查询的主机(白名单)  allow-transfer {}:允许区域传送的主机(白名单)  allow-recursion {}: 允许递归的主机  allow-update {}: 允许更新区域数据库中的内容

注意:只能先定义,后使用。因此,其一般定义在配置文件中options的上面

下面演示在子域DNS上配置ACL,只允许本机地址127.0.0.1查询ops.example.com

(1)定义acl

[root@ops ~]# vim /etc/named.confacl allow_query_net { 127.0.0.1; };

(2)修改区域配置文件/etc/named.rfc1912.zone,应用acl

这里写图片描述
(3)重载配置文件

[root@ops ~]# rndc reloadserver reload successful

(4)验证

这里写图片描述
这里写图片描述

视图(view)

view将请求者根据其来源进行分类,分类后实现使用不同的区域解析库来解析对某区域主机的请求。一个bind服务器可定义多个view,每个view中可定义一个或多个zone。通过view语句可以完成DNS的智能解析功能,其语法如下

view "VIEW_NAME"  {      match-clients { address_match_list };      match-destinations { address_match_list };      match-recursive-only yes|no;     view_option;...      zone_statement;...  };

下面来演示view的应用

在10.0.0.10-10.0.0.12(NAT模式)这3台主机上都添加一块网卡 ,对应增加的地址为172.16.0.10-172.16.0.12(仅主机模式),NAT模式是将物理地址转化为10.0.0.1访问DNS,仅主机模式时将物理机的地址转化为172.16.0.1访问DNS

(1)在10.0.0.10主机上配置acl和view

编辑/etc/named.conf文件,清空其原有内容,加入如下内容

[root@master ~]# vim /etc/named.confoptions {    directory "/var/named";};acl internal {     172.16.0.0/24;};acl external {    10.0.0.0/24;};view internal {    match-clients { internal; };    recursion yes;    zone "example.com" IN {        type master;        file "internal.example.com.zone";    };}; view external {    match-clients { external; };    recursion yes;    zone "example.com" IN {        type master;        file "external.example.com.zone";    };}; 

(2)创建internal和external访问example.com的正向区域解析文件

[root@master ~]# vim /var/named/internal.example.com.zone 

这里写图片描述

[root@master ~]# vim /var/named/external.example.com.zone

这里写图片描述

(3)修改这两个文件权限为640,属主为root,属组为named

[root@master ~]# chmod 640 /var/named/{internal,external}.example.com.zone[root@master ~]# chown :named /var/named/{internal,external}.example.com.zone

(4)检查主配置文件以及两个区域配置文件是否有语法错误

[root@master ~]# named-checkconf [root@master ~]# named-checkzone "internal.example.com" /var/named/internal.example.com.zone zone internal.example.com/IN: loaded serial 2017121203OK[root@master ~]# named-checkzone "external.example.com" /var/named/external.example.com.zone zone external.example.com/IN: loaded serial 2017121203OK

(5)重现加载named配置文件并打开查询日志

[root@master ~]# rndc reloadserver reload successful[root@master ~]# rndc querylog 

查看查询日志是否打开

[root@master ~]# rndc status

这里写图片描述

(6)验证

在win7物理机上测试

这里写图片描述

查看日志

[root@master ~]# tail /var/log/messages

这里写图片描述
这里写图片描述

这样一个简单的view实现智能DNS就建立起来了

原创粉丝点击