DNS从浅到深

1.  DNS基础知识

   1.  DNS全称:Domain Name System

   2.  DNS的作用:

      A记录

      CNAME记录

      MX记录

      PTR反向解析

2.  DNS解析流程原理

   1.  DNS本身是一个倒树结构.

      它的顶点是根,全球有13台根服务器。

      顶级域:com,cn

      一级域:sohu.com

      二级域:tiyu.souhu.com

      具体某台主机:www.tiyu.sohu.com

      

3.  DNS查询类型

    1.  递归(对于DNS客户端)

    2.  迭代(对于DNS服务器)

4.  DNS的资源记录

    1.  A:  FQDN---->IPv4  允许一个域名解析到多个IP上,采用轮询的方式,解析域名。

    2.  AAAA:  FQDN---->IPv6  

    3.  PTR:  IP---->FQDN

    4.  SOA:  start of Authority  起始授权记录,一个区域解析库文件只能有一个SOA

    5.  NS:  Name Service:  域名服务记录,可以有多个,其中一个为主

    6.  CNAME:  别名

    7.  MX:  邮件交换记录  多个MX,优先级0-99,数值越小,优先级越高

5.  DNS资源记录的定义格式

    1.  SOA

        name  [TTL]  IN  RR_TYPE  value

        name:  当前区域的名字

          例如:  magedu.com.

               2.3.4.In-addr.arpa.

        value:  有多部分组成

          1.  当前区域名字

          2.  当前区域管理员邮箱地址,但是不能使用@符号,一般使用.来代替

          3.  主从服务协调属性的定义,以及否定答案的TTL

        例子:

          magedu.com.  86400  IN  SOA  magedu.com.  admin.magedu.com.  {

            20170108;  serial

            2H;  refresh

            10M;  retry

            1W;  expire

            1D;  negative  answer  ttl  否定答案的TTL

            }

        注意:  SOA必须在第一条

    2.  NS

        name  [TTL]  IN  RR_TYPE  value

        name:  当前区域的区域名称

        value:  当前区域的主DNS服务器的名字,例如:ns1.magedu.com.

        例如:

          magedu.com.  86400  IN  NS  ns1.magedu.com.

          magedu.com.  86400  IN  NS  ns2.magedu.com.

    3.  MX

        name    IN  RR_TYPE  value

        name:  当前区域的区域名称

        value:  当前区域某个邮件交换服务器的主机名

        例如:

          magedu.com.  IN  MX  10  mx1.magedu.com.

          magedu.com.  IN  MX  20  mx2.magedu.com.

    4.  A

        name:  某个FQDN

        value:  IPv4

        例如:

          www.magedu.com.  IN  A  1.1.1.1

    5.  AAAA

        name:  某个FQDN

        value:  IPv4

    6.  PTR

        name:  IP地址,IP反过来写

        value:  FQDN

        例如:

          4.3.2.1-in-addr.arpa.  IN  PTR  www.magedu.com.

    7.  CNAME

        name:  FQDN的别名

        value:  FQDN的正式名字

        例如:

          web.magedu.com.  IN  CNAME  www.magedu.com.

    注意:

        1.  TTL可以从全局继承

        2.  @表示当前区域的名称

        3.  相邻的两条记录name相同,后面的一条可以省略name

        4.  对于正向区域来说,各mx,NS等类型为FQDN,此时FQDN应该有一个A记录

6.  安装配置bind9

    1.  安装

        yum install bind -y

    2.  配置文件

        /etc/named.conf  主配置文件

        /etc/named.iscdlv.key

        /etc/named.rfc1912.zones

        /etc/named.root.key

    3.  解析库区域文件

        /var/named/ZONE_NAME.zone

    4.  主配置文件格式 

options {
        listen-on port 53 { 192.168.1.68; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;

        notify yes;
        allow-transfer {192.168.1.130; };

        dnssec-enable no;
        dnssec-validation no;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};
ll
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

    5.  检查配置文件语法

        named-checkconf

    6.  检查区域文件语法

        named-checkzone 1.168.192.in-addr.arpa 192.168.1.arpa    区域名称   区域文件名称

7.  DNS客户端命令

    1.  dig

        安装:  yum install bind-utils -y

        dig [-t RR_TYPE]  name  [@server]   [query options]

        例子:

          dig -t A www.baidu.com

          dig -x 119.75.222.17

        模拟完整区域传送

          dig -t axfr domain [@server]

    2.  host

        host -t A www.baidu.com dns_server_IP

        host -t PTR 119.57.222.17

    3.  nslookup

    4.  rndc

        rndc status  查看状态

        rndc stats  查看状态

        rndc flush  刷新

        rndc reload  重新加载配置文件

        使用tcp 953,默认监听127.0.0.1地址

8.  配置一个正向解析区域

    1.  定义区域(/etc/named.rfc1912.zones)

zone "zhen.net" IN {
        type master;
        file "zhen.net.zone";
        allow-update { none; };
        notify yes;
        allow-transfer { 192.168.1.130; };
        also-notify { 192.168.1.130; };

};

    2.  建立区域数据库文件(/var/named目录下)

$TTL 3H
@       IN SOA  @ rname.invalid. (
                                2015092506      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      ns1.zhen.net.
ns1     A       192.168.1.68
@       NS      ns2.zhen.net.
ns2     A       192.168.1.130

    3.  让服务器重载配置文件和区域数据文件

        rndc reload

9.  配置一个反向解析区域

    1.  定义区域(/etc/named.rfc1912.zones)

zone "1.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.1.arpa";
        allow-update { none; };

};  

    2.  定义区域解析库文件(/var/named目录下)

$TTL 3H
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      ns1.zhen.net.
68      PTR     ns1.zhen.net.
@       NS      ns2.zhen.net.
130     PTR     ns2.zhen.net.
30      PTR     zpapi.zhen.net.
8       PTR     file.zhen.net.       

    3.  让服务器重载配置文件和区域数据文件

        rndc reload

10.  检查当前DNS服务器的状态

    rndc status

11.  添加一个新的区域

    1.  在主DNS服务器

        在/etc/named.rfc1912.zones中,添加以下内容:

zone "yoboshop.net" IN {
        type master;
        file "yoboshop.net.zone";
        allow-update { none; };
        notify yes;
        allow-transfer { 192.168.1.130; };
        also-notify { 192.168.1.130; };

};

        在/var/named,创建一个名为yoboshop.net.zone的区域文件。

$TTL 3h
@      IN     SOA     ns1.yoboshop.net.         admin@yoboshop.net. (  
                                                  7
                                                  3h
                                                  1h
                                                  1w
                                                  1h )
@      IN     NS      ns1.yoboshop.net.
@      IN     NS      ns2.yoboshop.net.
ns1    IN     A       192.168.1.68
ns2    IN     A       192.168.1.130
erp    IN     A       192.168.1.38

        重启named服务,/etc/init.d/named restart

    2.  在从服务器中

        在/etc/named.rfc1912.zones中,添加以下内容:

zone "yoboshop.net" IN {
        type slave;
        file "slaves/yoboshop.net.zone";
        masters {192.168.1.68; };
        allow-update { none; };
};

        重启/etc/init.d/named restart,不然会有报错:  client 192.168.1.68#35482: received notify for zone 'yoboshop.net': not authoritative

        分析日志:/var/named/data/named.run

12.  配置DNS转发

    1.  区域转发

        当contoso.com域存在一个blog.contoso.com的子域,controso.com域中的客户如果想访问ark.blog.contoso.com时,他首先会请求本区域的DNS服务器,由于本区域的DNS服务器有对blog.contoso.com子域的授权记录,所以他会直接找到子域的DNS服务器从而获得ark.blog.contoso.com的IP地址;而子域中的客户如果要访问父域中的www.contoso.com时,同样是先请求本区域的DNS服务器,但是子域中没有父域的DNS服务器记录,所以子域DNS服务器会向过根发起请求,并通过一级级的迭代查询最终获得www.contoso.com的IP地址。

        

        这样对服务器带来不必要的消耗,我们子域希望在解析父域时可以使用父域上的DNS服务器而不是直接去找根。

        1.首先要将需要将contoso.com域和blog.contoso.com域的DNS都配置为缓存DNS服务器,需要注意的是:dnssec是一种安全的DNS传输机制,他通过彼此间的密钥来防止DNS被污染,这里需要改为no,即使注销掉他默认值也为yes。

wKiom1kR1HWhnzlLAABnNVEuT3M487.png

        2.父域DNS服务器只需要创建自己的zone,并且在区域解析数据库中指明子域的DNS服务器(即授权)即可。

wKioL1kR1HaztxwUAAA-GONFwnM409.png

          3.因为子域的DNS服务器在父域中有指向,所以父域可以解析到子域的ark.blog.contoso.com地址(此时子域的DNS服务器必须能够正常提供服务,否则无法解析,在/var/log/message记录中提示无法与子域DNS服务器通信)。

wKiom1kR1HbDvn9UAAClcGXWA1g321.png

          5.在子域DNS服务器配置文件/etc/named.rfc912.zones中不仅要创建自己的zone,还要创建父域的zone,转发方式可以为first或only(first表示先转发,转发不成功再递归;only表示只转发),此处以only为例,并指明转发到的DNS服务器地址。

wKioL1kR1HeTaHPoAAAlPakqJ_U684.png

          6.在子域DNS服务器主配置文件/etc/named.conf的options全局配置段中,将所有地址请求都转发到互联网上的DNS服务器,由于在子域中明确定义了contoso.com和blog.contoso.com,所以局部转发的优先级高于全局转发。

wKiom1kR1HfRPkFxAABvj1VscxU797.png

        7.使用子域的DNS服务器解析www.contoso.com可以看到它是通过转发到父域DNS服务器完成的地址解析。

wKioL1kR1HjhsgpkAACcXjVuRr8924.png

    2.  全局转发

options {
        listen-on port 53 { 192.168.1.68; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;
        forwarders { 202.106.0.20; 114.114.114.114; 8.8.8.8; };
        notify yes;
        allow-transfer {192.168.1.130; };

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

13.  智能DNS

14.  红帽系统与centos做父域与子域

      1.  需要在父域的区域文件中,建立对应子域的NS记录。          

dev             NS      ns2.dev.zp.com.
ns2.dev.zp.com.         A       172.168.1.231

      2.  在子域服务器上,安装bind,并修改辅助配置文件

zone "dev.zp.com." IN {
      type master;
      file "dev.zp.com.zone";
      allow-update { none; };
};

      3.  在子域服务器上,修改区域配置文件dev.zp.com.zone

$TTL 600
@       IN      SOA     ns2.dev.zp.com.   dnsadmin.dev.zp.com. (
        20200726
        1H
        10M
        3D
        1D )
        IN      NS      ns2.dev.zp.com.
ns2     IN      A       172.168.1.231

      4.  在父域上,解析子域的ns记录报错

          dig -t NS dev.zp.com @172.168.1.222

          正常情况,配置好子域的区域文件,父域解析子域是没有问题的。但是因为我的父域使用的红帽系统,子域使用的是centos,父域解析子域总是报错,后来的解决方法就是,在父域的辅助配置文件,添加了一个转发区域,内容如下:          

zone "dev.zp.com" IN {
        type forward;
        forward only;
        forwarders { 172.168.1.231; };
}; 

      5.  在子域上,解析父域的ns记录报错

          dig -t NS ns1.zp.com @172.168.1.231

          需要在子域的辅助配置文件上,添加内容:          

zone "zp.com" IN {
      type forward;
      forward only;
      forwarders { 172.168.1.222;};
};  
posted @ 2018-04-08 21:16  奋斗史  阅读(555)  评论(0)    收藏  举报