DNS and Bind详解

本文详细介绍了DNS域名系统的工作原理,包括递归查询与迭代查询的区别,以及DNS服务器的主从配置。DNS是将域名与IP地址映射的分布式数据库,分为正向和反向解析。主DNS服务器与从DNS服务器的角色和数据同步机制通过区域传送实现,包括全量和增量传送。此外,还讨论了如何配置主从DNS服务器以及DNS的子域授权。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DNS 域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。

是一个域名服务,应用层协议。


原理篇


DNS组成

    根域(.)

        顶级域(.com, .net, .org, .gov, .edu, .mil,.ac)

            二级域(baidu.com,google.com ... ...)



dns查询

    迭代查询

    递归查询

如下图,从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间的交互查询就是迭代查询。

    wKioL1cJ1tDQCWVNAAFHtqj57Go601.jpg



总结:

1.递归查询:
一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机;
2.迭代查询(反复查询):
一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求;


所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询)”
也就是递归就是交给下一个服务器解决(下一个就相当于客户了,所以他也可以选择去递归,或者迭代)(迭代就是返回给当前的,当前自己再去处理)
  递归即递给服务器,所有操作都有服务器来完成。


举例:比如学生问老师一个问题,王老师告诉他答案这之间的叫递归查询。这期间也许王老师也不会,这时王老师问张老师,这之间的查询叫迭代查询!


DNS解析

正向解析区域和反向解析区域

    正向解析是将域名映射为IP地址

        www.baidu.com  --> 202.108.22.5

    反向解析是将IP地址映射为域名

        202.108.22.5  --> www.baidu.com

注意:二者的名称空间,非为同一个空间,即非为同一棵树;因此,也不是同一个解析库;

    

       

主-从DNS服务器

    主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行;
     从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库;但只能进行读操作;

“复制”操作的实施方式:
     序列号:serial, 也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
     刷新时间间隔:refresh, 从服务器每多久到主服务器检查序列号更新状况;
     重试时间间隔:retry, 从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
     过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
     否定答案的缓存时长:
                    
    主服务器”通知“从服务器随时更新数据;
                
区域传送:
     全量传送:axfr, 传送整个数据库;
     增量传送:ixfr, 仅传送变量的数据;
                   


区域(zone)和域(domain)
   baidu.com域:
    FQDN --> IP
      正向解析库;区域
    IP --> FQDN
      反向解析库;区域
                    
区域数据库文件
    资源记录:Resource Record, 简称rr;
    记录有类型:A, AAAA, PTR, SOA, NS, CNAME, MX
                
    SOA:Start Of Authority,起始授权记录; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
    NS:Name Service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的;
    A: Address, 地址记录,FQDN --> IPv4;
    AAAA:地址记录, FQDN --> IPv6;
    CNAME:Canonical Name,别名记录;
    PTR:Pointer,IP --> FQDN
    MX:Mail eXchanger,邮件交换器;
    优先级:0-99,数字越小优先级越高;
                
资源记录的定义格式
     语法:name [TTL] IN RR_TYPE value


SOA:
  name: 当前区域的名字;例如”mageud.com.”,或者“2.3.4.in-addr.arpa.”;
  value:有多部分组成
     (1) 当前区域的区域名称(也可以使用主DNS服务器名称);
     (2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
     (3) (主从服务协调属性的定义以及否定答案的TTL)
                        
 例如:
  baidu.com.  86400   IN    SOA   baidu.com.  admin.magedu.com.  (
           2017010801    ; serial
           2H         ; refresh
           10M         ; retry
           1W         ; expire
           1D         ; negative answer ttl
           )    
 

                      
NS:
   name: 当前区域的区域名称
   value:当前区域的某DNS服务器的名字,例如ns.magedu.com.;
   注意:一个区域可以有多个ns记录;
                    
例如:
   baidu.com.     86400     IN     NS      ns1.baidu.com.
   baidu.com.     86400     IN     NS      ns2.baidu.com.
                    


MX:
   name: 当前区域的区域名称
   value:当前区域某邮件交换器的主机名;
   注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;
                    
例如:
    baidu.com.  IN   MX   10   mx1.baidu.com.
    baidu.com.  IN   MX   20   mx2.baidu.com.
                    
A:
   name:某FQDN,例如www.baidu.com.
   value:某IPv4地址;
                
  例如:
    www.baidu.com.        IN     A    1.1.1.1
    www.baidu.com.        IN     A    1.1.1.2
    bbs.baidu.com.        IN     A    1.1.1.1
        
AAAA:
    name:FQDN
    value: IPv6
            
PTR:
   name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.;
   value:FQND
                
   例如:
    4.3.2.1.in-addr.arpa.  IN  PTR  www.baidu.com.
                    
CNAME:
   name:FQDN格式的别名;
   value:FQDN格式的正式名字;
                
  例如:
    web.baidu.com.   IN  CNAME  www.baidu.com.
                             
  注意:
    (1) TTL可以从全局继承;
    (2) @表示当前区域的名称;
    (3) 相邻的两条记录其name相同时,后面的可省略;
    (4) 对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录;


实战篇

首先安装bind程序包

bind:
    主配置文件:/etc/named.conf
    或包含进来其它文件;
       /etc/named.iscdlv.key
       /etc/named.rfc1912.zones
       /etc/named.root.key
   解析库文件:
      /var/named/目录下;
    一般名字为:ZONE_NAME.zone
                    
   注意:(1) 一台DNS服务器可同时为多个区域提供解析;
      (2) 必须要有根区域解析库文件: named.ca;
      (3) 还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库;
         正向:named.localhost
         反向:named.loopback
                            
rndc:remote name domain contoller(远程域名控制)
    953/tcp,但默认监听于127.0.0.1地址,因此仅允许本地使用;
                
bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务;
     CentOS 6.x: service named start
     CentOS 7.x: systemctl start named.service
                
主配置文件格式:
    全局配置段:
       options { ... }
    日志配置段:
       logging { ... }
    区域配置段:
       zone { ... }
       那些由本机负责解析的区域,或转发的区域;
                        
     注意:每个配置语句必须以分号结尾;
                        
缓存名称服务器的配置:
    监听能与外部主机通信的地址;                    
       listen-on port 53;
       listen-on port 53 { 172.16.100.67; };
                        
     学习时,建议关闭dnssec
        dnssec-enable no;
        dnssec-validation no;
        dnssec-lookaside no;    
                        
     关闭仅允许本地查询:
        //allow-query  { localhost; };
            
检查配置文件语法错误:
       named-checkconf   [/etc/named.conf]
                    
测试工具:
     dig, host, nslookup等


配置解析一个正向区域

    步骤:

        1、定义区域(在/etc/named.conf或/etc/named.rfc1912.zones)

        2、定义数据文件(/var/named/xxx.zone)

            权限及属组修改

                修改该文件的权限为640,属主属组为root:named     
              检查语法错误
                 # named-checkzone  ZONE_NAME   ZONE_FILE
                 # named-checkconf

        3、重载配置文件

详细

1、定义区域

    zone  "baidu.com"  IN  {
         type master;
         file "baidu.com.zone";
         };                 
        注意:区域名字即为域名;

2、定义数据文件(编辑一个名为baidu.com.zone的文件与第一步的file所指的相同)

    文件为:/var/named/baidu.com.zone
    $TTL 3600
 

baidu.com.   IN   SOA  ns1.baidu.com. dnsadmin.baidu.com. (
          2017010801
          1H
          10M
          3D
          1D )
      IN      NS      ns1
      IN      MX   10  mx1
      IN      MX   20  mx2
      ns1     IN      A     172.16.100.67
      mx1     IN      A     172.16.100.68
      mx2     IN      A     172.16.100.69
      www     IN      A     172.16.100.67
      web     IN      CNAME   www
      bbs     IN      A     172.16.100.70
      bbs     IN      A     172.16.100.71  

权限及属组修改

   修改该文件的权限为640,属主属组为root:named     
检查语法错误
    # named-checkconf

3、重载配置文件

    rndc reload


配置反向区域

    步骤:

    1、定义区域(在/etc/named.conf或/etc/named.rfc1912.zones)

    2、定义区域解析库文件(/var/named/xxx.zone)

    3、重载配置文件

1、定义区域

    zone  "100.16.172.in-addr.arpa"  IN  {
          type  master;
          file  "172.16.100.zone";
         };    
                        
       注意:反向区域的名字
       反写的网段地址.in-addr.arpa
       如:100.16.172.in-addr.arpa

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

        示例,区域名称为100.16.172.in-addr.arpa;
                    
   $TTL 3600
   $ORIGIN 100.16.172.in-addr.arpa.

 @   IN  SOA  ns1.baidu.com.  nsadmin.baidu.com. (
           2017010801
           1H
           10M
           3D
           12H )
         IN      NS      ns1.baidu.com.
 67      IN      PTR     ns1.baidu.com.
 68      IN      PTR     mx1.baidu.com.
 69      IN      PTR     mx2.baidu.com.
 70      IN      PTR     bbs.baidu.com.
 71      IN      PTR     bbs.baidu.com.
 67      IN      PTR     www.baidu.com.   

别忘了修改权限和属主属组

检查语法错误

    named-checkconf

3、重载配置文件

   rndc reload


配置主从DNS服务器

    步骤:

   1、定义一个从区域(/var/named/slaves)

   2、重载配置


1、定义区域(从区域)

    zone "ZONE_NAME"  IN {
        type  slave;
        file  "slaves/ZONE_NAME.zone";
        masters  { MASTER_IP; };
        }                   
  配置文件语法检查:named-checkconf
                        
(2) 重载配置
     rndc  reload


注意:(1) 确保区域数据文件中为每个从服务配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此A后面的地址为真正的从服务器的IP地址;
                
    注意:时间要同步;
     ntpdate命令;


DNS子域授权

子域授权就相当于是划片管理,是由上至下的授权。由根开始"."。
例如:.com .net 就是由根授权名称空间,其实就是由.决定要划分什么的名称空间,由它委派子名称空间。

例:若有个baidu.com.的域名,自己想再分多点子域名,如zhangsan.baidu.com. 就需要子域授权 。这就和51cto的博客一样,我的博客地址为http://zhaoyongtao.blog.51cto.com/  这就是在blog.51cto.com.下的一个子域。

DNS中最重要的就是NS记录,其中每个NS里面的负责人就是SOA,在父域上定义一条NS记录和一条A记录就可以完成子域授权了

   

正向解析区域授权子域(/var/named/baidu.com.zone):
    zhangsan.baidu.com.  IN  NS  ns1.zhangsan.baidu.com.
   s1. zhangsan.baidu.com. IN  A   IP.AD.DR.ESS(子域服务器ip)

         

   lisi.baidu.com.      IN  NS  ns1.lisi.baidu.com.           

   ns1.lisi.baidu.com.   IN   A   IP.AD.DR.ESS
     

    此子域就相当于一个域了,可以再给此子域添加正向解析记录。


定义转发
  注意:被转发的服务器必须允许为当前服务做递归;
            
(1) 区域转发:仅转发对某特定区域的解析请求;
       zone  "ZONE_NAME"  IN {
        type  forward;
        forward  {first|only};
        forwarders  { SERVER_IP; };
        };
                
        first:首先转发;转发器不响应时,自行去迭代查询;
        only:只转发;
                
(2) 全局转发:针对凡本地没有通过zone定义的区域查询请求,通通转给某转发器;
        options {
            ... ...
            forward  {only|first};
            forwarders  { SERVER_IP; };
            .. ...
           };


bind中的安全相关的配置:
  acl:访问控制列表;把一个或多个地址归并一个命名的集合,随后通过此名称即可对此集全内的所有主机实现统一调用;
        
     acl  acl_name  {
         ip;
         net/prelen;
        };
                
    示例:
      acl  mynet {
            172.16.0.0/16;
            127.0.0.0/8;
          };
                
bind有四个内置的acl
     none:没有一个主机;
     any:任意主机;
     local:本机;
     localnet:本机所在的IP所属的网络;
                
访问控制指令:
     allow-query  {};  允许查询的主机;白名单;
     allow-transfer {};  允许向哪些主机做区域传送;默认为向所有主机;应该配置仅允许从服务器;
     allow-recursion {}; 允许哪此主机向当前DNS服务器发起递归查询请求;
     allow-update {}; DDNS,允许动态更新区域数据库文件中内容;
            
bind view:
    视图:
     view  VIEW_NAME {
          zone
          zone
          zone
        }
            
            
      view internal  {
          match-clients { 172.16.0.0/8; };
          zone "magedu.com"  IN {
          type master;
          file  "magedu.com/internal";
           };
         };
            
       view external {
          match-clients { any; };
           zone "magecdu.com" IN {
           type master;
           file magedu.com/external";
             };
          };
           

本文出自 “我的学习笔记” 博客,请务必保留此出处http://zhaoyongtao.blog.51cto.com/10955972/1762956

Pro DNS and BIND guides you through the challenging array of features surrounding DNS, with a special focus on BIND, the worlds most popular DNS implementation. This book unravels the mysteries of DNS, offering insight into origins, evolution, and key concepts like domain names and zone files. This book focuses on running DNS systems based on BIND 9.3.0the first stable release that includes support for the latest DNSSEC (DNSSEC.bis) standards and a major functional upgrade from previous BIND 9 releases. If you administer a DNS system or are thinking about running one, or if you need to upgrade to support IPv6 DNS, need to secure a DNS for zone transfer, dynamic update, or other reasons, or if you need to implement DNSSEC, or simply want to understand the DNS system, then this book provides you with a single point of reference. Pro DNS and BIND starts with simple concepts, then moves on to full security-aware DNSSEC configurations. Various features, parameters, and resource records are described and, in the majority of cases, illustrated with one or more examples. The book contains a complete reference to zone files, Resource Records, and BINDs configuration file parameters. You can treat the book as as a simple paint-by-numbers guide to everything from a simple caching DNS, to the most complex secure DNS (DNSSEC) implementation. Background information is still included for when you need to know what to do and why you have to do it, and so that you can modify processes to meet your unique needs.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值