zoukankan      html  css  js  c++  java
  • 【Linux】【Services】【DNS】bind基础

    1. 概念

    1.1. DNS: Domain Name Service, 应用层协议,占用53/udp, 53/tcp

    1.2. tld(顶级域):Top Level Domain

      组织域:.com, .net, .org, .gov, .edu, .mil

      国家域:.iq, .tw, .hk, .jp, .cn, ...

    1.3. DNS查询类型包括递归查询和迭代查询

    1.4. DNS名称解析方式:正向解析(名称-->IP),反向解析(IP-->名称)

    1.5. DNS服务器类型:负责解析至少一个域(主名称服务器,辅助名称服务器),不负责解析(缓存名称服务器)

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

    1.6. 区域传送:全量传送:axfr, 传送整个数据库;增量传送:ixfr, 仅传送变量的数据;

    1.7. 区域(zone)和域(domain):比如abc.com是域,在这个域下面包括正向解析和反向解析,每个解析库都有很多的区域。

    1.8. BIND:Berkeley Internet Name Domain,  现在在ISC.org下维护,bind是dns协议的一种实现,named是bind程序的运行的进程名

    2. 区域文件详解:

    2.1 配置文件注解

    magedu.com. 	86400 	IN 		SOA 	magedu.com. 	admin.magedu.com.  (
    2017010801	; serial # 序列号:也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
    2H 			; refresh # 刷新时间间隔:从服务器每多久到主服务器检查序列号更新状况;
    10M 		; retry # 重试时间间隔:从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
    1W			; expire # 过期时长:从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
    1D			; negative answer ttl # 否定答案的缓存时长:
    )
    

      

    2.2. 资源记录详解:Resource Record, 简称rr;

    资源记录的定义格式:name  [TTL]  IN  RR_TYPE  value 

    SOA:Start Of Authority,起始授权记录; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
      name: 当前区域的名字;例如”mageud.com.”,或者“2.3.4.in-addr.arpa.”;
      value:有多部分组成
        (1) 当前区域的区域名称(也可以使用主DNS服务器名称);
        (2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
        (3) (主从服务协调属性的定义以及否定答案的TTL)

    例如

    magedu.com. 	86400 	IN 		SOA 	magedu.com. 	admin.magedu.com.  (
    	2017010801	; serial 
    	2H 		; refresh
    	10M 		; retry
    	1W		; expire
    	1D		; negative answer ttl 
    )
    

      

    NS:Name Service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的;
      name: 当前区域的区域名称
      value:当前区域的某DNS服务器的名字,例如ns.magedu.com.;
      注意:一个区域可以有多个ns记录;

    例如:

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

      

    MX:Mail eXchanger,邮件交换器;
      name: 当前区域的区域名称
      value:当前区域某邮件交换器的主机名;

      优先级:0-99,数字越小优先级越高;
      注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;

    例如:

    magedu.com. 		IN 	MX 	10  	mx1.magedu.com.
    magedu.com. 		IN 	MX 	20  	mx2.magedu.com.
    

      

    A:Address, 地址记录,FQDN --> IPv4;
      name:某FQDN,例如www.magedu.com.
      value:某IPv4地址;

    例如:

    www.magedu.com.		IN 	A	1.1.1.1
    www.magedu.com.		IN 	A	1.1.1.2
    bbs.magedu.com.			IN 	A	1.1.1.1
    

      

    AAAA:地址记录, FQDN --> IPv6;
      name:FQDN
      value: IPv6

    PTR:Pointer,IP --> FQDN
      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.magedu.com.
    

      

    CNAME:Canonical Name,别名记录;
      name:FQDN格式的别名;
      value:FQDN格式的正式名字;

    例如:

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

      

    注意

      (1) TTL可以从全局继承;
      (2) @表示当前区域的名称;
      (3) 相邻的两条记录其name相同时,后面的可省略;
      (4) 对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录;

    3. BIND的安装和配置:(使用yum即可)

    3.1 BIND程序包及操作系统版本:

    OS:Red Hat Enterprise Linux Server release 7.2 (Maipo)

    Kernel:3.10.0-327.el7.x86_64

    bind-libs.9.9.4-29.el7:被bind和bind-utils包中的程序共同用到的库文件;
    bind-utils.9.9.4-29.el7:bind客户端程序集,例如dig, host, nslookup等;
    bind.9.9.4-29.el7:提供的dns server程序、以及几个常用的测试程序;
    bind-chroot.9.9.4-29.el7:选装,让named运行于jail模式下;

    3.2 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

      (4)bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务;

        CentOS 6: service  named  start

        CentOS 7: systemctl  start  named.service

    3.3. BIND主配置文件格式:

      全局配置段:options { ... }

      日志配置段:logging { ... }

      区域配置段:zone { ... } 那些由本机负责解析的区域,或转发的区域;

      注意:每个配置语句必须以分号结尾;

    3.4. 缓存名称服务器的配置:

      监听能与外部主机通信的地址;

        listen-on port 53 { 172.16.100.67; };

      学习时,建议关闭dnssec

        dnssec-enable no;

        dnssec-validation no;

        dnssec-lookaside no;

      关闭仅允许本地查询:

        //allow-query  { localhost; };

    3.5. 配置解析一个正向区域:

    3.5.1. 定义区域:在主配置文件中或主配置文件辅助配置文件中实现;

    zone  "ZONE_NAME"  IN  {
    	type  {master|slave|hint|forward};
    	file  "ZONE_NAME.zone"; 
    	};
    

      注意:区域名字即为域名;

    3.5.2.  建立区域数据文件:在/var/named目录下建立区域数据文件;

    # cat /var/named/magedu.com.zone
    $TTL 3600 $ORIGIN magedu.com. @ IN SOA ns1.magedu.com. dnsadmin.magedu.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
    # chgrp  named  /var/named/magedu.com.zone
    # chmod  o=  /var/named/magedu.com.zone
    # named-checkzone  ZONE_NAME   ZONE_FILE
    # named-checkconf 
    # rndc  reload

      

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

    3.6.1. 定义区域:在主配置文件中或主配置文件辅助配置文件中实现;

    zone  "ZONE_NAME"  IN  {
    	type  {master|slave|hint|forward};
    	file  "ZONE_NAME.zone"; 
    	};	
    

      注意:反向区域的名字,反写的网段地址.in-addr.arpa(100.16.172.in-addr.arpa)

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

    cat 100.16.172.in-addr.arpa
    $TTL 3600
    $ORIGIN 100.16.172.in-addr.arpa.
    @       IN      SOA     ns1.magedu.com.  nsadmin.magedu.com. (
    	2017010801
    	1H
    	10M
    	3D
    	12H )
    		IN      NS      ns1.magedu.com.
    67      IN      PTR     ns1.magedu.com.
    68      IN      PTR     mx1.magedu.com.
    69      IN      PTR     mx2.magedu.com.
    70      IN      PTR     bbs.magedu.com.
    71      IN      PTR     bbs.magedu.com.
    67      IN      PTR     www.magedu.com.
    
    # chgrp  named  /var/named/172.16.100.zone
    # chmod  o=  /var/named/172.16.100.zone
    # named-checkzone  ZONE_NAME   ZONE_FILE
    # named-checkconf
    # rndc  reload
    

      

    3.7. 主从服务器(Master/Slave):

    On Master:

    1)确保区域数据中间中为每个从服务器配置NS记录

    2)在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录

    3)此A后面的地址为真正的从服务器的IP地址

    On Slave:

    1)定义区域

    // zone for cn.infra
    // 养成写注释的好习惯
    
    zone "cn.infra" IN {
            type slave; //没啥好说的,类型为master,forward或者slave
            file "slaves/cn.infra";  //同步主服务器配置的配置文件存放在本地的某个位置
            //主服务的信息
            masters {
                    10.29.248.11; //第一个master,可以写点服务器的信息
                    10.29.248.12; //第二个master
            };
            //允许同步文件的slave服务器
            allow-transfer {
                    10.25.2.1;      //SLAVE DNS IN WUHAN
                    10.24.195.1;    //SLAVE DNS IN TIANJIN
                    10.26.2.30;    //windows server
                    10.26.2.28;    //windows server
            };
            //如果有变动需要通知的服务器
            also-notify {
                    10.25.2.1;      //SLAVE DNS IN WUHAN
                    10.24.195.1;    //SLAVE DNS IN TIANJIN
            };
    };
    

      

    2)named-checkconf

    rndc reload或者systemctl  reload  named.service

    3)注意时间要同步

    3.8. 子域授权:

    在父域上配置:

    ops.magedu.com. 		IN 	NS  	ns1.ops.magedu.com. //NS记录
    ops.magedu.com. 		IN 	NS  	ns2.ops.magedu.com. //NS记录
    ns1.ops.magedu.com. 	IN 	A 	IP.AD.DR.ESS //被授权的子域的A记录
    ns2.ops.magedu.com. 	IN 	A 	IP.AD.DR.ESS //被授权的子域的A记录
    

      

    在子域上配置:

    1)子域的服务器必须允许父域服务器做递归

    2)定义区域转发:仅转发对某特定区域的解析请求;

    zone  "ZONE_NAME"  IN {
        type  forward;
        forward  {first|only}; //first:首先转发;转发器不响应时,自行去迭代查询;only:只转发;
        forwarders  { SERVER_IP; };
    };
    

      

    3)定义全局转发:针对凡本地没有通过zone定义的区域查询请求,通通转给某转发器;

    options {
        ... ...
        forward  {only|first};
        forwarders  { SERVER_IP; };
        .. ...
    };
    

      

    3.9. 安全相关的配置:

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

    //mynet是acl的集合的名字
    acl  mynet {
        172.16.0.0/16;
        127.0.0.0/8;
    };
    

      

    内置的acl:

    none:没有一个主机;
    any:任意主机;
    local:本机;
    localnet:本机所在的IP所属的网络;

    访问控制指令:
    allow-query {}; 允许查询的主机;白名单;
    allow-transfer {}; 允许向哪些主机做区域传送;默认为向所有主机;应该配置仅允许从服务器;
    allow-recursion {}; 允许哪此主机向当前DNS服务器发起递归查询请求;
    allow-update {}; DDNS,允许动态更新区域数据库文件中内容;

    3.10. 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";
    				};
    			};
    			
    

      

    4.常用命令:

    4.1. named-chceckconf [/etc/named.conf] 检查配置文件语法错误

    4.2. dig:

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

        用于测试dns系统,因此其不会查询hosts文件;

        查询选项:

          +[no]trace:跟踪解析过程;

          +[no]recurse:进行递归解析;

        注意:反向解析测试

          dig  -x  IP

        模拟完全区域传送:

          dig  -t  axfr  DOMAIN  [@server]

    4.3. host命令:

      host  [-t  RR_TYPE]  name  SERVER_IP

    4.4. nslookup命令:交互式模式

      nslookup  [-options]  [name]  [server]

      nslookup>

        server  IP:以指定的IP为DNS服务器进行查询;

        set  q=RR_TYPE:要查询的资源记录类型;

        name:要查询的名称;

    4.5. rndc命令:named服务控制命令

      rndc  status

      rndc  flush

  • 相关阅读:
    git配置公钥,私钥
    vscode之vue文件代码格式化代码无效解决办法
    [python 并行3]进程
    [spring 并行6]分布式
    [spring 并行5]GPU
    [python 并行2]线程
    [spring 并行4]异步
    [python 并行1]简介
    [flask] flask api + vue 跨域问题
    [spring学习4] MVC
  • 原文地址:https://www.cnblogs.com/demonzk/p/6494968.html
Copyright © 2011-2022 走看看