DNS详解

概述

    互联网访问绝大多数都是基于域名的访问,互联网访问的基础是基于IP来实现的,因此,需要有一种将域名解析成IP的机制,让用户在利用域名访问时,自动将域名转换成为对应的IP,这就是DNS的功能,本章将介绍一些DNS相关的内容,具体分为:

    1、DNS的基础概念

    2、配置DNS作为缓存DNS服务器

    3、DNS的正向解析区域

    4、DNS的反向解析区域

    5、主从DNS实现

    6、子域授权

    7、区域转发

    8、DNS安全相关的配置(ACL及安全配置项)

    9、智能DNS(DNS的view)

第一章    DNS的基础概念

    1、DNS:Domain Name Service,基于C/S模式的域名解析服务,应用层协议

        监听在53/udp,53/tcp端口

        TCP用来区域传送

        UDP用来解析

    2、域名分类

        根域 .

        TLD(top level domain顶级域):

            组织域:.com、.net、.org、.gov、.mil

            国家域:.iq、.tw、.hk、.jp、.cn……

        二级域:就是在顶级域上个人或组织申请的名称

        所谓注册域名实际是在某个顶级域内注册的某个二级域

        如:nwc.com.

        然后在申请到的域内的建自己的各个子域名

        www.nwc.com.

        test.nwc.com.

        ftp.nwc.com.

        ….

    3、DNS的查找过程:

        递归查询:

            客户端向自己所指定的DNS服务器请求的过程,是递归的,也就是说客户端向服务器请求时,服务器返回的必须是一个明确的结果,要么找到,要么找不到

        迭代查询:

            是指当客户端请求到达直接指定的DNS服务器后,如果该服务器上没有缓存相关的条目,则需要向根域请求,根域返回给DNS服务器一个顶级域的地址,然后DNS服务器又根据返回的顶级域地址去找,顶级域又返回一个二级域的地址,而后,DNS服务器又向二级域去请求,追踪返回出一个明确的解析结果给DNS服务器,这个DNS一级一级去查找的过程就是迭代查询

    4、DNS的名称解析方式:

        名称 –> IP  正向解析

            正向解析时,给的地址是,如:www.nwc.com.

        IP –> 名称  反向解析

            反向解析时,给的地址是,如:4.3.2.1.in-addr.arpa.

            解析的实际地址是1.2.3.4

        注意:正向解析和反向解析的名称空间,不是同一个空间,也就是不是同一颗树形结构;因此也不是同一个解析库

    5、DNS服务器的类型:

        负责解析至少一个域的服务器

            主名称服务器:新增的解析条目只能通过主服务器

            辅助名称服务器:可以接受解析请求并响应,但新增的解析条目只能在主服务器上新增。主服务器故障后,从服务器也不向外提供解析服务了

        不负责域解析的服务器:缓存名称服务器

    6、DNS解析的答案类型:

        肯定答案:有解析出来的结果

        否定答案:不存在查询的键,因此,不存在与其查询的键对应的值

        对于肯定答案和否定答案都可以进行缓存,也都可以指定缓存时长

        权威答案:由直接负责的DNS服务器给出的答案,也就是给出的结果是自己负责解析域时,给出的答案

        非权威答案:给出的答案是缓存中的缓存下来的条目,此时因为缓存还在有效期,而后端真实的结果可能已经改变,但是由于有缓存,则依然用缓存响应请求,此时返回的就是非权威答案

    7、DNS一次完整的查询请求所经过的流程:

        Client一旦希望以主机名与对方主机通信,此时就需要名称解析,其会先查本地的hosts文件

        如果host文件中没有对应的名称和地址的对应关系,则客户端会查DNS服务的本地缓存

        如果本地DNS服务的缓存没有命中,则客户端会向客户端所指向的DNS服务器(可能是缓存DNS服务器,也可能是负责具体解析的某DNS主名称服务器)发送查询请求,此时的请求是递归请求(recursion请求)

        DNS服务器收到请求后,

            如果客户端请求的就是自己负责的域,则直接查询数据库,并返回答案

            如果客户端请求的不是自己负责解析的域,则先找服务器自己的缓存,如果缓存没命中,则基于迭代的方式先找根域,然后再找顶级域,然后找二级域,一步一步完成查询请求,并最终返回答案给客户端

    8、主-辅DNS服务器:

        主DNS服务器:维护所负责解析的域的数据库的那台服务器;读写操作均可进行

        从DNS服务器:从主DNS服务器那里,或其他的从DNS服务器那里同步或复制一份解析库,但是只能进行读操作

        复制或同步操作的实施方式:

            序列号:serial

                也就是解析数据库的版本号,一旦主服务器的数据库内容发生改变时,其版本号递增。从服务器会每隔一段时间,就向主服务器请求其版本号,如果发现版本号与其不匹配,则执行同步

            刷新时间间隔:refresh

                从服务器每隔多久到主服务器或其他从服务器上检查序列号,用于判断更新的状况

            重试时间间隔:retry

                当从服务器尝试与主服务器进行通信,获取其序列号时,发现无法联系上主服务器,则进行重试,两次重试之间的时间间隔

                故重试时间间隔应该小于刷新时间间隔,而且要远小于刷新时间间隔

            过期时长:expire

                从服务器始终联系不上主服务器时,多久之后,放弃从主服务器同步数据;从服务器也就停止提供服务

            否定答案的缓存时长:

                当结果是明确的无法解析到时,此类否定答案缓存多长时间

            主服务器"通知"从服务器随时更新数据

    9、区域(zone)和域(domain):区域是物理概念,域是逻辑概念

        比如:nwc.com.这个域

        FQDN–>IP:

            正向解析库和正向解析的功能,就是一个正向解析区域

        IP–>FQDN:

            反向解析库和反向解析的功能,就是一个反向解析区域

        一般而言,一个域分为正向解析区域和反向解析区域,但是单纯的域却不一定比区域大,因为父域的区域,可能就比子域的域要大

     

    10、区域传送:

        全量传送:axfr,传送整个数据库;一般在从服务器第一次向主服务器同步数据时

        增量传送:lxfr,进传送变化的数据

    11、区域数据库文件:主要由资源记录(RR,resource record)组成

        常见资源记录类型:A、AAAA、PTR、SOA、NS、CNAME、MX

        SOA:start of authority,起始授权记录,一个区域解析库有且只能有一个SOA记录,且必须放在所有资源记录的第一条

        NS:name service,域名服务记录,一个区域解析库可以有多个NS记录,一个NS记录表示一台DNS服务器,其中一个为主的,其余的为辅的

        A:address,地址记录,也就是从FQDN–>IPv4

        AAAA:address,地址记录,从FQDN–>IPv6

        CNAME:别名记录

        PTR:pointer,主要用于实现IP–>FQDN

        MX:mail exchanger,邮件交换器,用于标明域内邮件服务器的地址的记录,MX记录可以有多个,其MX记录有优先级的概念

            优先级 0-99,数字越小,优先级越高

    12、资源记录的定义格式:

        语法:NAME [TTL] IN RR_TYPE  VALUE

        SOA记录:

            NAME:当前区域的名字,例如:nwc.com.  或者如果是反向区域,则 1.168.192.in-addr.arpa.

            VALUE:有多部分组成

                <1>当前区域的区域名称(也可以使用主DNS服务器名称);

                <2>当前区域的管理员的邮箱地址,但地址中不能使用@符号,一般用点号.来替代;

                <3>主从服务的协调属性的定义以及否定答案的缓存时长,整个内容要用()括号括起来,每行内容之后可以用;分号表示后面的都是注释信息

            完整的SOA记录定义示例:

                nwc.com. 86400  IN SOA  nwc.com.  admin.nwc.com  (

                    2016091801   //代表序列号,不能超过10位

                    2H           //代表从服务器向主服务器同步数据的刷新时间间隔,此处表示2小时

                    10M          //表示联系不上主服务器时,从服务器再次联系主服务器时的间隔时间,10分钟

                    1W           //表示过期时间,也就是服务器始终联系不上主服务器时的最长等待时间,也就是此时间一过,就判定主服务器故障,然后从服务器也停止服务,1周

                    1D           //表示否定答案的缓存时长,1天

                    )

        NS记录:可有多个NS记录,一个NS记录对应一个DNS服务器,每个NS记录应该有一个对应的A记录

            NAME:当前区域的区域名称

            VALUE:当前区域的某DNS服务器的名字,例如ns1.nwc.com

            例如:

                nwc.com.  86400  IN  NS  ns1.nwc.com.

                nwc.com.  86400  IN  NS  ns2.nwc.com.

        MX记录:MX记录可以有多个,一个MX记录对应一个邮件服务器,每个记录的VALUE之前应该有一个数字,用于表示其优先级,数字越小,优先级越高。每个MX记录应该有一个对应的A记录

            NAME:当前区域的区域名称

            VALUE:当前区域某邮件服务器的主机名

            例如:

                nwc.com.  IN  MX  5  mail1.nwc.com.

                nwc.com.  IN  MX  20  mail2.nwc.com.

        A记录:FQDN–>IPv4

            NAME:某FQDN,如:web.nwc.com.

            VALUE:某IPv4地址

            例如:

                web.nwc.com.  IN  A  1.1.1.1

                web.nwc.com.  IN  A  1.1.1.2

                bbs.nwc.com.  IN  A  1.1.1.2

            一个主机名额可以有多个IP,一个IP也可以有多个主机名          

                *.nwc.com.  IN  A   10.1.32.1

                表示将前面没有单独定义的都解析到10.1.32.1

                nwc.com.  IN   A    10.1.32.1

                表示当用户访问域名前不带任何字符时,也即是直接访问nwc.com.时解析到的地址是10.1.32.1

                $GENERATE 1-254  server$   IN   A   1.1.1.$

                    表示将server1.nwc.com.  解析的地址为1.1.1.1

                    server2.nwc.com. 解析的地址为1.1.1.2

                    server3.nwc.com.  解析为1.1.1.3

                    ….

                    server254.nwc.com.  解析为1.1.1.254

                同理:

                $GENERATE 5-20  test$   IN   A   1.1.1.2$

                    表示将test5.nwc.com.  解析的地址为1.1.1.25

                    test6.nwc.com. 解析的地址为1.1.1.26

                    test7.nwc.com.  解析为1.1.1.27

                    ….

                    test20.nwc.com.  解析为1.1.1.220

        

        AAAA记录FQDN–>IPv6地址,定义方式与A记录类似

        PTR记录:反向解析记录

            NAME:IP地址,有特定格式,IP反过来写,而且要加特定后缀,如:192.168.1.2的记录应该写成2.1.168.192.in-addr.arpa。

            VALUE:为FQDN

            例如:

                2.1.168.192.in-addr.arpa.  IN PTR  bbs.nwc.com.

        CNAME记录:别名记录

            NAME:FQDN格式的别名;

            VALUE:FQDN格式的正式名称

            例如:

                web.nwc.com.  IN CNAME www.nwc.com.

                表示web.nwc.com.是www.nwc.com.的别名

        注意:

            <1>TTL值可以从全局继承,不用每个记录都单独定义

            <2>@可以用来表示当前的区域的名字

            <3>相邻的两条记录,其NAME相同时,后面那条记录的NAME可以省略

            <4>任何MX、NS等类型的记录的value为一个FQDN,此FQDN应该有一个A记录

    13、测试DNS的工具:dig、host、nslookup

        dig工具:用于测试DNS系统,因此其不会查询hosts文件

            dig -t RR_TYPE NAME @SERVER [QUERY_OPTIONS]

            表示测试哪种资源记录类型,NAME表示需要测试的地址或反向测试时的IP,@SERVER表示通过那个DNS服务器进行解析

            常见查询选项:

                +[no]trace 跟踪或不跟踪解析过程

                +[no]recurse 进行递归解析 

                如果不写@SERVER,则表示通过本机测试

            如:

                dig -t A www.baidu.com 

                dig -t A www.nwc.com @10.1.32.11

            反向解析:dig -x IP

                如:dig -x 119.75.222.17

                有正向解析不一定有反向解析的记录

            dig命令模拟完全区域传送:

                dig -t axfr DOMAIN [@SERVER]

        host工具:

            host -t A www.baidu.com 

                表示解析www.baidu.com这个域名的A记录,也就是其对应的IP

            host -t NS baidu.com

                表示解析baidu.com的NS记录,也就是看baidu.com这个域内,有哪些DNS服务器

            host -t MX baidu.com

                表示解析baidu.com的MX记录,也就是看baidu.com这个域内,有哪些邮件服务器

            host -t PTR 119.75.222.17

                表示解析 119.75.222.17这个IP对应的域名是什么

        注意,以上使用方式中,可以在命令后面加上SERVER_IP表示利用指定的DNS服务器进行测试,而不是使用本机测试

        nslookup工具:

            nslookup [-OPTIONS] [NAME] [SERVER]

            有两种工作模式,一种是交互式模式,一种是命令行模式,命令行模式与上述的工具类似,交互式则直接在命令行中输入nslookup然后回车即可

            交互式模式下的命令:

                server IP  表示以指定的IP作为DNS服务器进行查询

                set q=RR_TYPE  表示要查询的资源记录类型

                NAME  表示查询的名称(各种资源记录类型对应的NAME是不一样的)

    14、rndc的使用

        rndc是DNS远程管理的工具,默认只监听在本地的127.0.0.1的953端口,只能在本机使用,如果要远程主机上管理,需要在/etc/named.conf配置文件中修改相关的配置选项,不过为了安全考虑,不建议用rndc命令在远程主机上管理,在本地管理即可

        rndc status  可显示DNS服务器的状态信息

        rndc stats   可显示DNS的统计数据

        rndc stop    可停止DNS服务

        rndc flush   表示清空DNS服务器的DNS缓存条目

        rndc reload  表示重新装载DNS服务的配置文件和区域数据库文件

第二章    配置DNS作为缓存DNS服务器

    1、BIND的安装包:

        BIND是dns协议的一种实现

        BIND的程序运行时的进程名为named

    2、BIND的程序包:bind

        bind  提供DNS服务器端程序,和解析库文件,以及几个常用的测试程序

        bind-libs 被bind的主程序和bind-utils包中的程序共同用到的库文件

        bind-utils  bind客户端程序集,提供了如dig、host、nslookup等工具

        bind-chroot  可选装的程序包,让bind程序能运行在一个子shell中,万一bind程序被劫持,不会影响外面的shell的程序

    3、bind安装完成后,生成了许多文件,其中:

        /etc/named.conf  是其主配置文件,其内部用include指令包含进来了很多其他的文件,如

                /etc/named.rfc1912.zones  区域定义文件

                /etc/named.iscdlv.key

                /etc/named.root.key

        /var/named/  是区域解析库文件的存放位置,也就是named的工作目录,该目录下文件名一般为ZONE_NAME.zone

        /usr/sbin/rndc 是DNS的远程控制工具程序,其工作在tcp/953端口,默认只监听在127.0.0.1的地址,因此仅允许本地使用

        注意:

            <1>1台DNS服务器可同时为多个区域提供解析

            <2>在/etc/named/目录下,必须要有根域的解析库文件,在centos上一般为name.ca

            <3>在/etc/named/目录下,还应该有两个区域解析库文件:localhost和127.0.0.1的正向和反向解析的解析库文件,正向为named.localhost、反向为named.loopback文件

        bind程序安装完成后,默认即可作为缓存名称服务器使用,可以让其他客户端将DNS指向该主机,作为其DNS服务器,当该DNS服务器中没有相应的缓存,或不是自己负责解析的区域后,也能够向根域发起迭代的查询请求,从而能够返回给客户端答案

        如果安装完成bind后,如果没有专门负责解析的区域,将配置文件中的监听地址由120.0.0.1改为可与外部通信的地址,关闭dnssec功能,然后直接启动服务即可

    4、主配置文件格式:

        全局配置段:

            options {

                …

            }

        日志配置段:

            logging {

                …

            }

        区域配置段:定义由本机负责解析的区域,或转发的区域

            zone {

                …

            }

            可单独定义在/etc/named.rfc1912.zones文件中

        注意:

            每个配置语句必须以分号;结尾,否则为语法错误

            注释的风格为C语言风格,//表示注释单行,/*  */表示注释多行

    5、修改相关配置

        修改全局配置段中的监听地址为可与外部通信的地址:

            listen-on port 53;表示监听本机所有地址的53端口

            listen-on port 53 { 10.1.32.11; }; 表示监听本机10.1.32.11这个IP的53端口,多个IP用分号间隔,{}两段有空格

        学习时,建议关闭dnssec功能:

            dnssec-enable no;

            dnssec-validation no;

            dnssec-lookaside no;

        关闭仅允许本地查询:

            注释掉该行,// allow-query { localhost; };

    6、检查配置文件语法错误

        named-checkconf  /etc/name.conf

    7、启动服务

        centos6 : service named start

        centos7 : systemctl start named.service 

第三章    DNS的正向解析区域

    1、定义区域

        在主配置文件中或主配置文件的辅助配置文件中实现;

        在配置文件中,利用:

            zone "ZONE_NAME" IN { 定义区域名称,就是域名

                type master|slave|hint|forward;

                    指明区域的类型是主|从|根|转发

                file "ZONE_NAME.zone";

                    指明区域数据文件,如果不指名文件的目录,则默认会到/var/named/目录下去找

            };

            注意:区域名字即为域名

        一般不在主配置文件中编辑,而是到其include进来的专门定义区域文件/etc/named.rfc1912.zones中定义

             vim /etc/named.rfc1912.zones

             zone "nwc.com." IN {

             type master;

             file "nwc.com.zone";

             };

             区域名最后那个.可以不用加

    2、建立区域数据文件(主要记录为A记录或AAAA记录)

        在区域数据库存放的位置/var/named/目录下建立区域数据文件

        一般数据文件其权限为640,属主为root,属组为named

        如:vim /etc/named/nwc.com.zone

            $TTL 3600

            $ORIGIN nwc.com.   表示当域名没写完整时,自动补上的部分的内容

            @   IN  SOA  nwc.com.   dnsadmin.nwc.com  (

                2016091801

                1H

                10M

                3D

                1D

                )

                //SOA记录中的NAME可以写成域名,也可以写成该区域内的主DNS服务器的主机名,如此处的"nwc.com."可以用"ns1.nwc.com.替代"

            IN  NS  ns1  

               //前面没写@,是因为两个相邻的记录NAME一样,则后面不用写,后面写ns1是因为利用$ORIGIN定义了之后,会自动补上nwc.com.

            IN  MX  10  mail1

               //表示定义了一个mail1.nwc.com.的邮件服务器,其优先级为10

            IN  MX  20  mail2

                //又定义了一个mail2.nwc.com.的邮件服务器,其优先级为20

        ns1   IN  A   10.1.32.11

                //ns1.nwc.com.的IP地址为10.1.32.11

        mail1   IN  A   10.1.32.33

                //mail1.nwc.com.的IP地址为10.1.32.1

        mail2   IN  A   10.1.32.55

                //mail2.nwc.com.的IP地址为10.1.32.55

        www   IN   A   10.1.32.1

                //www.nwc.com.的IP地址为10.1.32.1

        www   IN   A   10.1.32.2

                //www.nwc.com.的IP地址为10.1.32.2

        web   IN   CNAME   www

                //web.nwc.com.是www.nwc.com.的别名

        bbs  IN  A  10.1.32.1

                //bbs.nwc.com.的IP为10.1.32.1

        修改区域数据文件的属主为root,属组为named,并修改其权限为640

    3、检查配置文件语法和区域数据文件语法

        named-checkconf /etc/named.conf

        named-checkzone  nwc.com.  /var/named/nwc.com.zone

        指明区域名称,和区域数据文件的位置

    4、让服务器重载配置文件和区域数据文件即可

        用rndc reload命令即可实现

        如果是centos7,也可以用:

            systemctl reload named.service

    5、用rndc status查看DNS服务器的状态,然后利用相关DNS测试工具进行测试dig、host、nslookup

第四章    DNS的反向解析区域

    1、定义区域

        在主配置文件中或主配置文件的辅助配置文件中实现;

        在配置文件中,利用:

        zone "ZONE_NAME" IN { 定义区域名称,就是域名

            type master|slave|hint|forward;

                指明区域的类型是主|从|根|转发

            file "ZONE_NAME.zone";

                指明区域数据文件,如果不指名文件的目录,则默认会到/var/named/目录下去找

        };

        注意:反向区域的名字的格式为:

                网段地址反写.in-addr.arpa.

                如本例为:32.1.10.arpa.

        一般不在主配置文件中编辑,而是到其include进来的专门定义区域文件/etc/named.rfc1912.zones中定义

            vim /etc/named.rfc1912.zones

            zone "32.1.10.arpa." IN {

                type master;

                file "32.1.10.zone";

            };

            区域名最后那个.可以不用加

    2、定义区域解析库文件:(反向解析库的主要记录为PTR记录)

        在区域数据库存放的位置/var/named/目录下建立区域数据文件

        一般数据文件其权限为640,属主为root,属组为named

        vim /var/named/32.1.10.zone

            $TTL 3600

            $ORIGIN 32.1.10.in-addr.arpa.

            @    IN    SOA    ns1.nwc.com.  dnsadmin.nwc.com  (

                2016091801 

                1H

                10M

                3D

                12H

                )

                IN    NS   ns1.nwc.com.

                     //域内的NS记录,表示DNS服务器为ns1.nwc.com.

            11   IN    PTR  ns1.nwc.com.

                    //ns1.nwc.com.的IP为10.1.32.11

            1    IN    PTR  www.nwc.com.

            2    IN    PTR  www.nwc.com.

            1    IN    PTR  bbs.nwc.com.

        注意:

            反显区域数据文件中补充的是32.1.10.in-addr.arpa.,故其中的域名就不能与正向解析数据文件中写成www,bbs之类的,因为自动补充的不是域名,是网络地址反写的区域名

            反向区域文件中不需要MX记录的反向解析,也就是不需要对邮箱服务器进行反向解析

            不需要为正向解析区域的别名记录定义反向解析

            反向解析也可以有别名记录,只是别名记录的意义是ip到ip,相当于两个IP地址之间的别名

        修改该反向解析区域文件的属主为root,属组为named,权限为640

    3、检查配置文件语法和区域数据文件语法

        named-checkconf /etc/named.conf

        named-checkzone  32.1.10.in-addr.arpa  /var/named/32.1.10.zone

        指明区域名称,和区域数据文件的位置

    4、让服务器重载配置文件和区域数据文件即可

        用rndc reload命令即可实现

        如果是centos7,也可以用:

            systemctl reload named.service

    5、用rndc status查看DNS服务器的状态,然后利用相关DNS测试工具进行测试dig、host、nslookup

第五章    主从DNS

    1、从服务器是区域级别的概念;

        如,上述实验中,我们将ns1.nwc.com这台服务器,配置成了nwc.com.这个正向区域解析的主DNS服务器,同时也配置成了32.1.10.in-addr.arpa这个反向解析区域的主DNS服务器,但是我们可以在另外一台服务器上,假设为ns2.nwc.com这台服务器上,只配置其作为正向区域nwc.com.的从DNS服务器,或者只配置其作为反向区域32.1.10.in-addr.arpa的从DNS服务器,这样相当于ns2.nwc.com服务器只作为正向的从服务器,或者反向的从服务器

        当然,我们也可以将ns2.nwc.com这台服务器即作为正向区域nwc.com.的从DNS服务器,也作为反向区域32.1.10.in-addr.arpa的从DNS服务器

也可以将ns1.nwc.com这台服务器做为正向区域的主DNS服务器,但是作为反向区域的从DNS服务器,而ns2.nwc.com这台服务器作为反向区域的主DNS服务器,正向区域的从DNS服务器

        注意:在主从同步时,区域数据文件的复制可以级联复制

            也就是说可以ns1.nwc.com这个服务器作为主服务器,ns2到ns1这台服务器上进行复制区域数据文件,作为ns1的从服务器,而ns3可以在ns2上同步数据文件,ns3作为ns2的从服务器,这样一级一级的级联

    2、环境及准备工作

        环境:

            利用上述实验中的ns1.nwc.com作为主DNS服务器,其地址为10.1.32.11,添加一台ns2.nwc.com作为其从DNS服务器,其地址为10.1.32.22

        准备工作:

            在ns2上安装bind,然后修改其监听的地址为10.1.32.22

            关掉dnssec的相关功能

            关闭仅允许本地查询:注释掉该行,// allow-query { localhost; };

    3、在从服务器上定义一个区域,其区域类型为slave

        在/etc/named.rfc1912.zones中定义:

            zone "ZONE_NAME" IN {

                type slave;

                file "slaves/ZONE_NAME.zone";

                masters {MASTER_IP;}

            };

            区域数据文件不用手动建立,因为从服务器会自动的从主服务器去同步数据文件

        注意:此处file 指定区域文件的路径要放在/var/named/目录下的slaves目录下的原因是:因为named进程是以named这个用户的身份运行,而named用户针对/var/named/这个目录的权限为r-x,也就是没有写权限,因此当从服务器从主服务器那边同步过来的数据文件,要写入该目录时,是无法完成的。但是在/var/named/这个目录下,专门建了一个目录为slaves,而named用户对这个目录是有写权限的,故区域数据文件放在该目录下,则可以完成同步的操作

        例如:

            vim /etc/named.rfc1912.zones

            zone "nwc.com."  IN {

                type slave ;

                file "slaves/nwc.com.slave.zone" ;

                masters { 10.1.32.11 ; };

            };

    4、在从服务器上,检测配置文件语法检查:named-checkconfig

    5、在从服务器上,启动服务service named start或重载配置

        用rndc reload命令即可实现

        如果是centos7,也可以用:

            systemctl reload named.service

    6、在主服务器上,确保区域数据文件中为每一个从服务器配置了NS记录,且有对应的A记录

        如,在本例中,我们需要在主服务器的区域数据文件/etc/named/nwc.com.zone中加上一个NS记录和对应的A记录:

        @    IN    NS    ns2.nwc.com.

        ns2.nwc.com.   IN   A   10.1.32.22

        注意:在配置了主从的结构中,从服务器已经启动,当我们手动修改了主服务器的区域配置文件后,要将其序列号人为的加1,否则从服务器无法通过判断主服务器的序列号来进行同步

    7、如何让一部分客户端用主DNS服务器解析请求,一部分客户端利用从DNS服务器解析请求

        在不同的客户端上匹配不同的DNS服务器,一部分执行主DNS服务器地址,一部分指向从DNS服务器

    8、如果想让ns2作为ns1上的反向解析区域的从服务器,步骤根上述类似,现在从服务器上定义一个区域,指明区域类型为slave,指明区域文件路径,指明master为哪个服务器

        然后在主服务器上的反向区域的区域数据文件中增加一个NS记录,指向到ns2上,添加对应的PTR记录

        <1>在从服务器上,添加区域:

            vim /etc/named.rfc1912.zones 

            zone "32.1.10.in-addr.arpa" IN {

                type slave ;

                file "slaves/32.1.10.zone"

                masters { 10.1.32.11 ; };

            };

        <2>在主服务器上的反向解析的区域数据文件中增加NS记录和PTR记录

            vim /var/named/32.1.10.zone

            增加:

                @   IN   NS   ns2.nwc.com.

                22  IN   PTR   ns2.nwc.com.

            注意修改其序列号+1

            检查主服务器配置文件,区域配置文件语法:

                named-checkconf /etc/named.conf

                named-checkzone  32.1.10.in-addr.arpa  /var/named/32.1.10.zone

                指明区域名称,和区域数据文件的位置

            重载配置文件:

                rndc reload

        <3>检查从服务器匹配文件语法:named-checkconf

        <4>重载从服务器配置文件:rndc reload

        <5>在从服务器上利用dig、host、nslookup进行测试

    9、如果从服务器的区域数据文件没有从主服务器上正常同步过来,则可以利用dig -t axfr nwc.com. @10.1.32.11测试区域传送,表示从主服务器10.1.32.11上完全传送 nwc.com.这个区域数据文件到本机

    10、注意:主从服务器的时间要同步,ntpdate命令

第六章    子域授权

    假设,在我们之前的nwc.com.这个域中,我们希望建一个子域,子域的域名为:ops.nwc.com.,该子域自己内部有自己的DNS服务器,而针对nwc.com.这个父域有我们之前建的两个DNS服务器,也就是上述实验中建的一主一从DNS服务器

    如果在父域的DNS服务器上实现,将对子域的解析,都交给子域自己去实现,而不是直接利用父域上添加相应的资源记录来实现。

    环境:

        在之前实验的基础上,添加对子域的授权,假设子域为 ops.nwc.com.  子域内的DNS服务器为ns1.ops.nwc.com这台服务器,服务器地址为10.1.32.111,子域的ns1的从DNS服务器ns2.ops.nwc.com,其地址为:10.1.32.222

    1、在父域的主DNS服务器上,编辑其区域数据文件,添加对子域的授权NS记录和A记录:

        vim /var/named/nwc.com.zone

        加入:

        ops.nwc.com.   IN   NS   ns1.ops.nwc.com.

        ops.nwc.com.   IN   NS   ns2.ops.nwc.com.

        ns1.ops.nwc.com.  IN  A   10.1.32.111

        ns2.ops.nwc.com.  IN  A   10.1.32.222

        注意:父域的DNS服务器由于有从服务器,且从服务器已经在工作,故修改完配置文件后,要将其序列号+1

        检查配置文件和区域数据文件的语法:

            named-checkconfig

            named-checkzone nwc.com. /var/named/nwc.com

        重载配置文件:rndc reload

        在各个顶级域如.com域内,实际上也是用类似的方法授权子域的

    2、在子域的主DNS服务器ns1.ops.nwc.com这台服务器上配置:

        <1>安装bind程序,修改监听的地址为10.1.32.111,关闭dnssec功能

            关闭仅允许本地查询:注释掉该行,// allow-query { localhost; };

        <2>添加区域的定义:

            vim /etc/named.rfc1912.zones

            加上:

            zone "ops.nwc.com" IN {

                type master ;

                file "ops.nwc.com";

            };

        <3>添加区域数据文件:

            vim /var/named/ops.nwc.com.zone

            $TTL  3600

            $ORIGIN  ops.nwc.com.

            @    IN   SOA   ns1.ops.nwc.com.  dnsadmin.ops.nwc.com.  (

                2016091801

                1H

                10M

                1D

                2H

                ) 

                IN  NS   ns1

                IN  NS   ns2

                IN  MX  10 mail1

            ns1   IN   A   10.1.32.111

            ns2   IN   A   10.1.32.222

            www   IN   A   10.1.32.100

            web   IN   CNAME  www

            mail1  IN   A   10.1.32.100

            mail2  IN   A   10.1.32.200

            修改区域文件的属主为root,属组为named,权限为640

        <4>检查配置文件和区域数据文件语法:

            named-checkconfig

            named-checkzone  ops.nwc.com  /var/named/ops.nwc.com.zone

        <5>启动服务,或重载配置文件rndc reload

    3、定义子域的从DNS服务器

        在子域的从DNS服务器上:

        <1>安装bind程序,修改监听的地址为10.1.32.111,关闭dnssec功能

            关闭仅允许本地查询:注释掉该行,// allow-query { localhost; };

        <2>添加区域的定义:

            vim /etc/named.rfc1912.zones

            加上:

            zone "ops.nwc.com" IN {

                type slave ;

                file "slaves/ops.nwc.com"

                master { 10.1.32.111 ; };

            };

        <3>检查配置文件语法:

            named-checkconfig

        <4>启动服务,或重载配置文件rndc reload

第七章    区域转发

    在正常情况下,子域是无法直接找到父域内的解析的,因为当子域内的客户端向子域内的DNS服务器,请求解析某地址时,如果该地址不是子域DNS服务器自己负责解析的区域,则子域的DNS服务器会去找根域,然后根域告诉其找顶级域,顶级域告诉其找二级域,这样进行迭代查询。

    但是在本实验中,子域内的主机如果要找的是父域的DNS负责解析的地址,则按照上述的工作模式还是要先去找根域,然后一级一级找到父域,然后解析,这样不符合实际需求,此时就需要用到定义转发的概念了

    定义转发有两种:

        <1>区域转发:表示仅将某特定区域的解析请求进行转发

        <2>全局转发:表示只要不是本DNS服务器直接负责解析的区域,都进行转发。相当于针对本地没有通过zone定义的区域查询请求,一律转发到某目标服务器

        注意:被转发的服务器,必须允许为当前定义转发的服务器对其做递归查询,默认情况下,是允许给任何人递归的

    1、如何定义某区域转发:

        要在区域定义文件中/etc/named.rfc1912.zones中定义一个区域:区域类型为forward

        zone "ZONE_NAME" IN  {

            type  forward ;

            forward  first|only ;

            forwarders  { SERVER_IP ; };

        };

        区域类型为forward

        forward  定义转发的类型,有first和only两种

            first:首先转发,表示当本DNS服务器解析不了时,就转发给目标服务器进行解析,当目标服务器由于不在线或其他原因,不响应时,则当前DNS服务器就自己去找根域,然后一步一步迭代查询

            only:只转发,表示当本地DNS服务器解析不了时,不管转发的目标服务器有没有响应,都转发,没响应就一直等着

        forwarders  定义转发给谁,转发的目标服务器的IP(注意:转发的目标服务器必须要允许本服务器对其发起递归查询请求,默认都是允许的)

        如,在上述实验中,希望子域在解析请求时,先去找父域(父域的主DNS服务器IP为10.1.32.11,父域的从DNS服务器IP为10.1.32.22),如果父域没响应时,则子域自己去找根域,然后迭代查询,则可以如下定义:

            在子域的主DNS服务器ns1.ops.nwc.com服务器上进行:

            vim /etc/named.rfc1912.zones 

            加入:

            zone "nwc.com" IN  {

                type forward ;

                forward first ;

                forwarders { 10.1.32.11 ; 10.1.32.22 ; };

            };

            在实验环境中,可以将forward类型为only,因为没有外网环境,无法找到根域

            因为父域有主从两个DNS服务器,两个DNS服务器都能解析请求,故此处可以定义转发的目标服务器为两个

        配置完成后检查配置文件语法:

            named-checkconfig

        重载配置文件:rndc reload

    2、如何定义全局转发

        假设我们在子域上定义,凡是不是子域DNS服务器直接负责解析的,就都转到父域的DNS服务器上

        如果定义全局转发,就不需要定义区域的方式进行配置,而是要在主配置文件中的全局配置段options中定义

        在子域的ns1.ops.nwc.com这台服务器上:

            vim /etc/named.conf

            在options段中加入:

            forward only|first ; 

                 //根据需要选择是first还是only

            forwarders { 10.1.32.11; 10.1.32.22; };

                 //选择转发的目标服务器地址

        这样定义之后,表示只要不是自己负责的区域,则都转交给10.1.32.11或10.1.32.22的DNS服务器(注意:前提是目标服务器要允许本机对其发起DNS的递归查询请求,默认是允许的)

        配置完成后检查配置文件语法:

            named-checkconfig

        重载配置文件:rndc reload

第八章    DNS安全相关的配置

    1、acl : 

        访问控制列表,可以把一个或多个地址归并为一个命名的集合,随后,通过此名称即可对此集合内的所有主机实现统一调用;

        定义方式:

            acl ACL_NAME {

                IP ;

                NET_ADDR/MASK ;

            };

        如:

            acl mynet {

                10.1.32.0/24;

                127.0.0.0/8;

            };

        注意:

            定义acl的语句,要放在bind主配置文件/etc/named.conf文件最前面,不能放在某个具体配置段中间

            acl只能先定义,后使用

        bind有4个内置的acl:

            none  表示没有一个主机

            any   表示所有任意的主机

            local  表示本机上的所有IP地址

            loaclnet  表示本机IP所在的网络的网络内的所有主机

    2、可以调用acl的访问控制指令

        <1>allow-query { };  

            表示允许查询的主机,也就是只允许哪些主机对本机的DNS发起查询请求,括号内填入acl名称,如果不指定该指令,则默认允许所有的主机进行查询

            此指令可以加在options中,表示对全局生效,也可以加在某个zone的定义中,表示仅对该区域生效

        <2>allow-transfer {};

            表示允许向哪些主机做区域传送,默认为向所有主机;为了加强安全性,应该配置为仅允许向自己服务器的从服务器做区域传送

            此指令可以加在options中,表示对全局生效,也可以加在某个zone的定义中,表示仅对该区域生效

            如:

                vim /etc/named.conf

                加入:

                acl slaves {

                    10.1.32.22;

                    127.0.0.1;

                };

            定义一个acl叫slaves,其内部的主机为10.1.32.22

            然后在options中加入:

                allow-transfer { slaves; };

                表示所有的区域数据,仅允许对10.1.32.22这个主机进行区域传送

            如果将allow-transfer定义在某个具体的zone中,则可以实现该区域的数据仅向指定的主机传送

        <3>allow-recursion {};

            表示允许哪些主机向当前DNS服务器发起递归查询请求,也就是要求本DNS如果没有解析的内容,本DNS就要一级一级的向根域,顶级域迭代查询的

            如:实现本DNS服务器允许本地的主机对其发起递归查询请求

                配置acl,定义本地网络:

                vim /etc/named.conf

                加入:

                acl mynet {

                    10.1.32.0/24;

                    127.0.0.0/8;

                };

                在options配置段中加入:

                allow-recursion { mynet ; };

            注意:配置文件中默认有一项 recursion  yes;表示允许所有的递归请求,如果要实现只对本地的请求进行递归,则需要将该项注释掉

        <4>allow-update {};

            表示允许动态更新区域数据库文件中的内容(也就是区域的具体各个资源记录的内容);一般情况下,除非使用了DDNS,否则需要定义为allow-update { none; };

第九章    智能DNS(view)

    1、bind view  bind视图,也就是智能解析

        bind视图的意义是:假设一个主机www.nwc.com这台服务器上有两个IP,一个是内网IP,一个是外网IP,或者一个是联通服务器的IP,一个是电信服务器的IP;那么,我们可以在DNS服务器上定义,当来自内网用户的访问,都解析到内网的IP上,通过外网用户的访问,都解析到外网的IP上。或者来自联通的用户访问,都解析到联通的IP上,来自电信的用户,都解析到电信的IP上,这样就可以实现来自对同一个域名的请求,根据需要,可以解析到不同的IP上

        定义视图:

            view VIEW_NAME {

                ZONE1;

                ZONE2;

            };

    2、示例

        假设nwc.com.域内有一个主机为www.nwc.com,其有两个IP地址,一个面向外网,172.16.32.1,一个面向内网,10.1.32.1

        实现将来自10.1.32.0/24这个网络的主机访问www.nwc.com时,解析到10.1.32.1上

        实现将来自172.16.32.0/24这个完了的主机访问www.nwc.com时,解析到172.1.32.1上

        DNS服务器为ns1.nwc.com,IP为10.1.32.11

        <1>在DNS服务器上定义区域(要将区域定义在view中)

            vim /etc/named.rfc1912.zones

            加入:

            view inside {

                match-client {

                    10.1.32.0/24;

                };

                    //表示匹配请求的来源的IP地址,可以是acl定义的地址

                zone "nwc.com" IN {

                    type master;

                    file "nwc.com.inside.zone"

                };

            };

            view outside {

                match-client {

                    172.16.32.0/24;

                };

                    //表示匹配的来源的IP地址,可以是acl定义的地址

                zone "nwc.com" IN {

                    type master;

                    file "nwc.com.outside.zone"

                };

            };

        <2>配置区域数据文件,将不同的请求解析到不同的IP上

            vim /var/named/nwc.com.inside.zone

            $TTL 3600

            $ORIGIN  nwc.com.

            @    IN    SOA    ns1.nwc.com.   dnsadmin.nwc.com. (

                2016091801

                1H

                10M

                1D

                1D

                )

                IN    NS    ns1

            ns1   IN   A    10.1.32.11

            www   IN   A    10.1.32.1

            vim /var/named/nwc.com.outside.zone

            $TTL 3600

            $ORIGIN  nwc.com.

            @    IN    SOA    ns1.nwc.com.   dnsadmin.nwc.com. (

                2016091801

                1H

                10M

                1D

                1D

                )

                IN    NS    ns1

            ns1   IN   A    172.16.32.11

            www   IN   A    172.16.32.1

        view的实现过程实际就是将区域定义在view内部,然后view匹配不同的请求来源地址,然后指向不同的区域数据文件,各个区域数据文件中解析的内容不一样来实现

原创文章,作者:M20-1倪文超,如若转载,请注明出处:http://www.178linux.com/49376

(1)
M20-1倪文超M20-1倪文超
上一篇 2016-10-08
下一篇 2016-10-08

相关推荐

  • 马哥教育网络班22期+第4周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。   cp -r /etc/skel /home/tuser1    chmod -R go=— /home/tuser1 2、编辑/etc/group文件,添加组hadoo…

    Linux干货 2016-09-19
  • vim编辑器

    导读:      本章将主要介绍Linux中的一种常用文本编辑器vim,具体内容如下:       □使用vi和vim的三种主要模式       移动光标,进入插入模式       改变、删除、复制文本     &n…

    Linux干货 2016-08-15
  • vim编辑器的常见使用

    1、vim介绍 Vim是从 vi 发展出来的一个文本编辑器,处理文本文件功能强大。 三种主要模式: Vim打开文件,默认命令(Normal)模式,可以移动光标,剪切和粘贴。 按键i 进入插入(Insert)模式,用户可以编辑文本。 扩展(Extended)命令模式(或末行模式)用户:wq可保存退出,或者:q!强制退出。 Exc按键可退出当前模式。 2、文本操…

    Linux干货 2017-07-30
  • shell编程循环语法作业

    判断/var/目录下所有文件的类型 [root@www sh.log]# cat typefile.sh  #!/bin/bash #author:DYW #显示目录下文件类型 if [ $# -lt 1 ];then echo "Please&nb…

    Linux干货 2016-08-21
  • Iptables基础

       Firewall:防火墙,工作于主机或网络的边缘处,对于进出本主机或网络的报文根据事先定义好的检查规则左匹配检测,对于能够被规则所匹配到的报文进行相应的处理的组件。   防火墙可分为:硬件防火墙,在硬件级别实现部分功能的防火墙;软件防火墙,应用软件处理逻辑运行于通用硬件平台之上的防火墙;主机防火墙,服务范围为当前主机;网络…

    2017-06-19
  • 描述器

    Edit 描述器 |[Descriptors] 描述器的表现 用到3个魔术方法:__get__()、__set__()、__delete__() 方法用法: object.__get__(self,instance,owner) object.__set__(self,instance,value) object.__delete__(self,instan…

    Linux干货 2017-11-29