DNS and Bind

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS and Bind 相关的知识,希望对你有一定的参考价值。


概述:

    本篇为DNS服务器内容的第二部分主要介绍了从DNS服务器的配置,子域授权,转发服务器等相关内容

========================================================================

主从DNS服务器

注意:从服务器是区域级别的概念

1)配置一个从区域步骤:

On Slave(在从服务器上)

  1)定义区域

        定义一个从区域:

           ·zone "ZONE_NAME" IN {

                   type slave;

                   file "slave/ZONE_NAME.zone"; 放在slave目录下

                   masters {MASTER_IP;};

                   }; 

          ·配置文件语法检查:named-checkconf

 2)重载配置

      rndc reload

      systemctl reload named.service

示例:

  vim /etc/named.rfc1912.zones  # 编辑从服务器的配置文件,添加区域
  zone "magedu.com" IN {
          type slave;
          file "slave/magedu.com.zone"; # 放在slave目录下
          masters { 192.168.16.104;}; # 一定要指向主服务器的IP
 }; 
 # 注意:这里不需要配置从服务器的解析数据库文件,接下来只需要在主服务器上添加从服务器的NS记录和对应的A记录即可



On Master(在主服务器上

    1)确保区域数据文件中为每个从服务器配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此A后面的地址为真正的从服务器的IP地址。

    2)解析库文件语法检查

    named-checkzone ZONE_NAM ZONE_FILE

    3)重载配置

示例:

  vim /var/named/magedu.com.zone # 编辑主服务器的数据库文件
  ns2   IN   A   192.168.16.105  # 添加从DNS服务器对应的IP地址
  # 注意:修改完数据库文件之后,序列号一定要加1,这样从服务器才能检查到

  4)可以手动进项测试

   # dig -t axfr magedu.com @192.168.16.104(主服务器地址,表示主服务器到从服务器的全量传送)

注意:

  • 从服务器应该为一台独立的名称服务器(安装bind程序,编辑配置文件为缓存名称服务器,然后检查语法,启动服务器)

  • 主服务器的区域解析库文件中必须有一条NS记录指向从服务器

  • 从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中

  • 主服务器得允许从服务器作区域传送

  • 主从服务器时间应该同步,可通过ntp进行;

  • bind程序的版本应该保持一致;否则,应该从高,主低。

  • 主名称服务器数据库修改完之后一定要使相应的序列号加1,这样从服务器才可以检测到并及时更新,并且重载


 时间同步;

   任何在分布式环境中,让多台服务器基于某一种特定应用同时协调的内容、进程或服务,都应该做时间同步。

      ntpdate命令,时间服务器如下:

          time.nist.gov

          time.nuri.net
          0.asia.pool.ntp.org
          1.asia.pool.ntp.org
          2.asia.pool.ntp.org
          3.asia.pool.ntp.org

[[email protected] ~]# ntpdate time.nuri.net
 6 Oct 17:04:01 ntpdate[2651]: adjust time server 211.115.194.21 offset 0.002132 sec
 [[email protected] ~]# ntpdate 1.asia.pool.ntp.org
 6 Oct 17:10:54 ntpdate[1479]: adjust time server 202.65.114.202 offset -0.167026 sec

子域授权

 注意:

   1)我们注册了二级域名之后,域名服务商会提供给我们DNS服务器(群租),我们只需在其二级域下添加相应的主机记录(如web服务器的别名www,对应的ip地址)即可完成解析,但如果公司的部门很庞大,为了方便管理,需要单独对一个部门添加一个域名,这时,就需要在其二级域下添加一个三级域(如:ops.magedu.com.),而添加的三级域必须要经过上一级授权才可以。

  2)ops.magedu.com.是一个三级域,www.ops.magedu.com.是三级域中的web服务器的别名;而 magedu.com 是一个二级域,www.magedu.com是一个二级域中web服务器的别名;

注意一定不要搞混淆了,虽然别名相同但域的级别不同。

  3)每一个域名都必须要有与之对应的名称服务器才可以解析。

1)子域:

  • 子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权

  • 类似根域授权tld:

               .com.      IN     NS     ns1.com.

               .com.      IN     NS     ns2.com.

               ns1.com.  IN      A     2.2.2.1

               ns2.com.  IN      A    2.2.2.2

  • magedu.com. 在.com的名称服务器上,解析库中添加资源记录:

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

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

             magedu.com.      IN    NS     ns3.magedu.com.

             ns1.magedu.com. IN    A      3.3.3.1

             ns2.magedu.com. IN    A      3.3.3.2

             ns3.magedu.com. IN    A      3.3.3.3

  • glue record:粘合记录,父域授权子域的记录


2)互联网域名:

  • 域名注册:

        代理商:万网, 新网;godaddy

  • 注册完成以后,想自己用专用服务来解析

        管理后台:把NS记录指向的服务器名称,和A记录指向的服务器地址


 阿里云DNS

技术分享

技术分享

  

     这个域名是在阿里云注册的.com域名,这个管理界面就是向.com域名服务器授权来查询的。这是在wen界面进行的子域授权管理,及资源记录管理,那在DNS的配置文件中也很容易去配置实现子域授权,如下:

3)正向解析区域授权子域的方法:

★原理:

     在本域名服务器上的正向解析库文件当中定义子域对应的DNS服务器的主机名和A记录即可。

方法:

     ops.magedu.com.      IN   NS   ns1.ops.magedu.com. (三级域的DNS服务器名)

     ops.magedu.com.      IN   NS   ns2.ops.magedu.com.

     ns1.ops.magedu.com. IN   A    IP.AD.DR.ES (服务器对应的ip地址)

     ns2.ops.magedu.com. IN   A    IP.AD.DR.ES


具体步骤如下:

  1)首先要在父域(二级域)的主DNS服务器上授权    

  # 编辑父域的解析数据库文件
    vim /var/named/magedu.com.zone
  #添加授权子域的NS和A记录
    ops.magedu.com.      IN   NS   ns1.ops.magedu.com.
    ns1.ops.           IN   A    192.168.1.108

   注意:

      每次修改解析数据库文件之后都要使序列号加1,这样从服务器才能够检测到序列号不一致,并及时更新从DNS服务器

      修改完之后保存退出并重载(# rndc reload)


 2)接下来配置子域服务器,其配置过程和之前的任何一个DNS服务器是一样的(安装bind程序,配置配置文件,定义手动添加区域解析库文件)如下:

  •  首先安装bind程序;

         # yum install bind -y

  • 编辑配置文件/etc/named.conf,以缓存名称服务器的方式启动起来;

        ①全局配置段: options { any; };

        ②关闭dnssec

       ③关闭仅允许本地查询  //allow-query { localhost; };

        语法检查:named-checkconf [/etc/named.conf]

        启动服务,并查看状态 :systemctl start|status named

        ⑥检查53号端口是否启动:netstat -tunlp

  • 配置其成为ops子域的主DNS域名服务器

        ①编辑 /etc/named.rfc1912.zones ,新增加一个区域


# vim /etc/named.rfc1912.zones ,在最后添加自己定义的区域
 zone "ops.magedu.com" IN {
         type master;   # 指定zone的类型
         file "ops.magedu.com.zone";  # 该zone的名称
 };

       ②建立授权子域的区域解析库文件


  # vim /var/named/ops.magedu.com.zone  建立定义区域的数据库文件
  1 $TTL 3600  
  2 $ORIGIN ops.magedu.com.  #
  3 @      IN      SOA     ns1.ops.magedu.com.  dnsadim.ops.magedu.com.(
  4                    2017100501
  5                    1H
  6                    10M
  7                    3D
  8                    1D )
  9        IN      NS      ns1
 10 ns1    IN      A       192.168.16.108
 11 www    IN      A       192.168.16.108
  • 权限及属主修改

         # chgrup named /var/named/ops.magedu.com.zone

         # chmod o=  /var/named/ops.magedu.com.zone

  • 主配置文件语法检查,解析库文件语法检查

         # named-checkconf 

         # named-checkzone  ops.magedu.com  /var/named/ops.magedu.com.zone

  • 重新加载区域

         # rndc status|reload;

  • 测试能否解析


转发服务器

注意:被转发的服务器必须要能够为请求者做递归,否则转发请求不予进行;


区域转发:仅转发对特定区域的解析请求,比全局转发优先级高;

  • 格式:

       zone "ZONE_NAME" IN {

            type forward;

            forward {first|only};       转发方式

            forwarders { SERVER_IP;};  定义转发给的服务器ip

       };

     first:首先转发;转发器不响应时,自行去迭代查询;

     only:只转发

  •  注意:

         如果不定义区域转发的话,子域要查找上一级就会先去找根再一步步查找,如果定义了区域转发(被转发的服务器为上一级的),子域就可以直接查找上一级而不通过查找根(比喻:家丑不可外扬)。


全局转发: 针对凡本地没有通过zone定义的区域查询请求,全转发给指定的可以访问互联网的服务器;

      Options {

           .....

           forward first|only;

           fowarders{ SERVER_IP;};

           .....

        };

    先去找 zone中定义的,如果没有就全局转发(比如:子域首先定义了区域转发,这样仅能查询自己的上一级,但之外的比如www.baidu.com是查询不了的;但是自己的父域是可以访问互联网的,这样就可以定义所有自己访问不了的统统转发给父域)



示例:

以子域授权为例,定义区域转发,子域查找上一级

 vim /etc/named.rfc1912.zones  # 编辑配置文件,新增加一个区域
 zone "magedu.com" IN {
            type forward;
            forward  only;     # 只是内部使用,不需要迭代
            forwarders { 192.168.16.108; }; # 定义父域DNS服务器的ip,如果有从服务器也写上
       };

 定义全局转发:

 vim /etc/named.conf  # 编辑named.conf文件,在options全局配置段中添加
options {
	listen-on port 53 { any; };
	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";
	forward only  
	forwarders { 192.168.1.108; }; # 表示只要是自己不负责的统统转发给192.168.1.108
	//allow-query     { localhost; };

bind中安全的相关配置

1)bind中的acl访问控制列表

acl: 

    把一个或多个地址归并为一个集合,随后通过此名称即可对此集全内的所有主机实现统一调用;

    格式:

        acl acl_name{

            ip;

            net/prelen;

            ……

        };

  示例:

      acl mynet{

         172.16.0.0/16;

         127.0.0.0/8;

       };


bind有四个内置的acl:

  • none: 没有一个主机

  • any: 任意主机

  • localhost: 本机

  • localnet: 本机的IP同掩码运算后得到的网络地址


注意:只能先定义,后使用;因此一般定义在配置文件中,处于options的前面

2)控制访问指令

访问控制的指令

  • allow-query {}:允许查询的主机;白名单;默认是所有主机,如果有的话只有定义在里面的才可以查询

  • allow-transfer {}:允许向那些主机做区域传送;默认为向所有主机,应该配置为仅允许从服务器;

  • allow-recursion {}: 允许那些主机向当前DNS服务器发起递归查询请求;

  • allow-update {}: DDNS,允许动态更新区域数据库文件中的内容


bind view

  • view:视图,一个bind服务器可定义多个view,每个view中可定义一个或多个zone,

每个view用来匹配一组客户端;

  • 多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件

  • 格式:

        view VIEW_NAME {

             zone

             zone

             zone

        };

  示例:

     

  view internal {
             match-client { 172.16.0.0/8; };
             zone "magedu.com" IN {
                  type master;
                  file "magedu.com/internal";
              };
        };
       
   view external {
              match-client { any; };
             zone "magedu.com" IN {
                 type master;
                 file "magedu.com/external";
              };
         };


  • 注意:

      (1) 一旦启用了view,所有的zone都只能定义在view中

      (2) 仅在允许递归请求的客户端所在view中定义根区域

      (3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表

  • CDN: Content Delivery Network

  • 智能DNS:

        dnspod

        dns.la



后续还有一些内容:编译安装bind,压力测试,DNS排错这里先不做整理,后续用刀再做整理。
















以上是关于DNS and Bind 的主要内容,如果未能解决你的问题,请参考以下文章

DNS and BIND

DNS and BIND 笔记总结

DNS and BIND 实验

DNS and BIND

DNS原理与BIND基础

linux ubuntu下如何安装bind