首页 > 代码库 > DNS2之bind安装、主从配置同步、子域创建、view配置

DNS2之bind安装、主从配置同步、子域创建、view配置

主DNS配置从服务器:

    我们知道,DNS服务器在网络服务中可能出现故障当机等状况,会导致DNS服务瘫痪,显然在实际的网络应用中我们不希望出现这种状况,所有我们就要配置从服务器来在主DNS服务器出现故障时代替他来工作,然而作为价格昂贵的服务器本身你又不希望出现这种极大的浪费,所有从服务器在实际工作中是和主服务器共同分担DNS解析任务的,这样既解决了服务器故障导致的问题,还可以缓解DNS服务器的压力。

    那么要配置一个从服务器我们又该怎么做呢?

前提:我们要为本地配置一个从服务器aolens2。从服务器的IP 172.16.249.125

    所以aolens2中也需要安装bind,zone,但无需解析库,可以直接去主服务器去同步。

1)首先,我们需要在主服务器配置文件中(/etc/named.conf)配置一个从服务器的定义

    先去域名注册商(.com)哪里添加一个NS记录,指向从服务器节点。并添加到父域 的解析库中。

    还需要在本地回应上级的NS记录,保持一致。主服务器中配置/var/named/aolens.com.zone文件。是主服务器的配置文件。

    为什么要添加多个NS呢?那是应为主服务器发生变化时只通知NS定义的节点。要使从服务器得到同步就需要添加NS记录。

clipboard

改变以后,版本号需要改变。。。

    zone "ZONE_NAME" IN{

        type slave;

        file "slaves/ZONE_NAME.zone";

        master{  172.16.249.138;  };

}

2)为从服务器提供解析库

    从服务器的解析库不是自己定义的,而是主服务器定义,自己去从主服务器上同步过来,不能手动修改和创建。

而Linux又有一种特性:只有管理员才能使用小于1024的端口。

所有 named的启动方式:是由root启动,启动完成后切换为以named系统用户的身份运行。

然而我们可以看到,/var/named/目录的权限在named用户下是没有写权限的,而为了安全我们又不能为named目录添加写权限,那怎么办呢?

实际上,从服务器从主服务器上同步数据时不是直接放到/var/named/目录下的,而是放在/var/named/slaves/目录下。可以看到slaves是具有写权限的哦!

clipboard[1]

3)DNS从服务器在去主服务器同步数据时,我们首先要保证时间同步

    所有我们首先要有一个时间服务器,最好将时间服务器直接指向网络上的时间服务器,以确保时间的准确。

    我们实验的环境中时间服务器放在172.16.0.1上,我们便去同步一下本机的时间。

    ntpdate  172.16.0.1

    或者crontab服务,每隔3分种同步一次。

    */3 * * * * /usr/sbin/ntpdate 172.16.0.1 &> /dev/null

clipboard[2]

    其二:要保证二者的版本号相同或者从服务器的版本号比主服务器的版本号高,以便兼容主服务器的功能。

4)为从服务器安装bind

    编辑从服务器的主配置文件/etc/named.conf

clipboard[3]

named-checkconf检测是否有错误!

启动服务!

service named start   第一次启动会创建/etc/rndc.key文件。如果卡拿了需要获取熵池中的随机说或者指定/dev/urandom

clipboard[4]

rndc.key文件也可以自己手动生成:rndc-confgen

自己生成还需要修改权限为640,属组为named

clipboard[5]

ss -tunl 查看是否监听在53号端口。

clipboard[6]

同时确保防火墙是关闭的,应为防火墙默认是拒绝53号端口的

iptables -L查看防火墙规则

iptables -L 清除防火墙规则

service iptables  stop停止防火墙。

clipboard[7]

到此时,从服务器的环境配置就ok了。

5)配置从服务器的区域了

    打开从服务器的主配置文件/etc/named..rfc1912.zones

clipboard[8]

named-checkconf检测有无错误;

确保有/var/named/slaves/目录。

前边我们已经启动了,现在用rndc reload加载就可以了。

clipboard[9]

启动成功后我们就会发现,/var/named/slaves/目录下就会有我们主服务器的解析库文件,aolens.com.zone

clipboard[10]

dig -t A www.aolens.com @127.0.0.1    测试一下

clipboard[11]

OK!

如果修改主服务器的配置,需要先配置主服务器,修改序列号,rndc reload 加载。

从服务器就可以获取到了。

6)添加反解zone。

clipboard[12]

配置文件1.16.192.zone也修改为。

版本号修改:

clipboard[13]

service named restart  重启named服务

从服务器上就可以反解出主服务器的名字了。

clipboard[14]

查询正向NS记录

dig -t NS aolens.com @172.16.249.138

clipboard[15]

反向查询NS记录。

dig -t NS 249.16.172.in-addr.arpa @172.16.249.138

clipboard[16]

dig -t AXFR aolens.com @172.16.249.138     :获取所有节点

clipboard[17]

7)如果单单这样就可以获取服务器数据那就太危险了,别人可以通过模拟从服务器IP的方式获取主服务器的数据。所以我们要控制主服务器,让他只能同步给从服务器,而从服务器给谁都不同步。这样就相对安全了很多。

    在bind中有内置的acl(访问控制列表)

    none:表示死所有都不同步

    any:表示所有都同步

    localhost:只给本机同步

    localnet:给同步给同网络

    allow-update:允许更新

allow-transfer { ip; ip; ip; ... };         none|any|localhost|localnet     都是allow-transfer的参数

    我们该从服务器的配置文件vim /etc/named.rfc1912.zone中添加allow-transfer { none; };表示不允许任何人同步

clipboard[18]

结果:rndc reload  加载后在主从服务器上都是无法同步的。

clipboard[19]

而主服务器则需要让从服务器同步:

配置文件vim /etc/named.rfc1912.zone

clipboard[20]

主服务器同步自己

clipboard[21]

从服务器同步主服务器:

clipboard[22]

即使这样IP以明文的方式传输还是很危险,所以,实际应用中是以加密IP 的方式发送密钥去请求,而接受服务器也是接受密钥来解析的。

所以我们建设的区域一般是不允许任何人更新的。需要在我们自己创建的zone中加上allow-update { none; };

/etc/named.rfc1912.zones

clipboard[23]

DNS的权限控制就这样配置了,

8)我们前边用了那么多rndc命令,那我们来了解一下rndc命令。

    rndc reload:装在配置文件

    rndc reload zone [class [view]] :装在一个区域。

    rndc retransfer zone [class [view]]:让主服务器重新给从服务器发送数据的,执行端在从服务器

    rndc flush :清空缓存。

    rndc status:显示配置详细信息

9)DNS子域创建授权

    我们基于aolens.com.创建它的子域op.aolnes.com.

    而子域下存在www.op.aolens.com.主机

    创建子域dev.aolens.com.   主机为www.dev.aolens.com.

向子域授权:只需要在父域的区域解析库中添加“胶水记录”,glub record

胶水记录:就是在父域的解析库中加上

子域名称     IN    NS    子域的名称服务器

                ops.aolens.com.    IN    NS     ns.ops.aolens.com.

                ns.ops.aolens.com.    IN    A    172.16.18.18

                dev.aolens.com.    IN    NS    ns.dev.aolens.com.

                ns.dev.aolens.com.    IN    A    172.16.18.19

我们现在父域中建立子域NS配置:假如我们就只有一条

                ops.aolens.com.    IN    NS     ns.ops.aolens.com.

                ns.ops.aolens.com.    IN    A    172.16.249.125

clipboard[24]

named-checkconf 检测

rndc reload 加载

dig -t NS ops.aolens.com @172.16.249.138我们会发现无法响应,那是因为我们还没有在将子域建立起来。所以无法响应父域请求。

10)下面我们就来创建子域。

    步奏呢也是先安装bind

    修改/etc/named.conf文件。将无用的注释掉。

    service named start   启动,并生成rndc.key文件。

    启动起来后去编辑/etc/named.rfc1912.zones

    添加子域空间配置。

clipboard[25]

    而ops.aolens.com.zone文件需要我们自己去建立

    vim /var/named/ops.aolens.zone

clipboard[26]

在子域上测试。    dig -t A www.ops.aolens.com @172.16.249.125

clipboard[27]

我们的测试主机是没有在网上注册的,所以子域去根解析出来的不是本服务器。那么我们能不能告诉子域,遇到这个服务器后直接去父域请求,由父域给解析。

所以子域就作为转发器来工作。

clipboard[28]

11)转发器转发非本机负责的区域的请求至指定的DNS服务器。

    配置/etc/named.conf

    添加options {

            ...

            forward {only|first};      only表示告诉没答案就相信, first没答案自己去找。

            forwarders { IP; };

            }

    递归白名单:

    allow-recursion {}; :允许谁来我这递归。一般必须包含主机IP

    recursion yes:表示允许任何人递归。

    编辑子域的/etc/named.conf   在options中添加

clipboard[29]

在子域dig -t A www.aolens.com @172.16.249.138

clipboard[30]

然而你本地可以解析一个外部域名,而你的子域的主机不一定也可以解析,那么作为服务器的作用就是帮助本地主机解析外部主机域名,所以我们的服务器配置中forwarders中应该指向一个可以联接外部网络的IP,将主机的请求转发出去。

clipboard[31]

12)bind 的acl访问控制列表。

    bind内置的acl:nona ,any , localhost, localnet.

    acl的自定义:

                    acl acl_NAME {

                        IP;

                        IP;

                        }

    例如:acl localnetwork {

            172.16.0.0/16;

            192.16.0.0/24;                   

             }

    任何调用的localnetwork的都是定义的主机。而acl需要先定义才能使用,所以要放在/etc/named.conf文件的最上方。

13)bind view 视图:

    功能:由于主机解析查询时会轮询使用解析到的服务器,而bindview则根据客户端的来源不同,将同一个名称解析至不同的值,不做轮询。

    鉴于我国的各地既有联通网络,又有电信网络,而联通电信之间的连接靠的是北京机房的中转,那么可以想象,如果你处在电信网络下,向联通服务器发起请求的速度会有多慢。为了解决这种状况,边出现了bind view 这种功能,让联通用户至访问联通服务器,电信只访问电信。这样速度就会快很多了。

    格式:view VIEW_NAME {

                    match-clients { 客户端地址,如果客户端很多,则用cal定义 ; };   ------》说明本view对应那些客户端的

                    zone " " IN {

                                  };

                };

    不同的zone可以定义多个view来定义不同网络,

    match-clients {any;};

    下面我们来配置view

    首先将/etc/named.conf中的

  zone "." {

            type hint;

            file "named.ca";

    };

    这四行剪贴到/etc/named.rfc1912.zones中,

    将里面所有的zone都括起来,下边我用zones.*来代表文件里边所有的zone配置数据。

     view ints {

        match-clients { 172.16.0.0/16; 127.0.0.1; };

  zone "." {

            type hint;

            file "named.ca";

            };

        zone.*

        };       --------------->里边是配置了的zone

    view outs {

        match-clients { any; };

        zone "aolens.com" IN {

            type master;

            file "aolens.com.outs";

        };

        };---------------------->代表除了上边配置的,其他的都是在这个zone中。

    named-checkconf检测是否有错误

    cd到/var/named/下创建aolens.com.outs

clipboard[32]

    该其属组为named,权限为640

    然后找一个IP地址段不为定义段的主机,我们实验用

clipboard[33]

    dig -t A www.aolens.com @172.16.249.138    可以看到,解析出来的地址为11.11.11.11

clipboard[34]

使用view注意事项:

    1、通常只为内网客户端提供递归功能,提供根区域等;

    2、通过只为外网客户端提供本机所负责的区域的解析;


end