美文网首页dns相关
Linux之DNS服务Bind

Linux之DNS服务Bind

作者: 魏镇坪 | 来源:发表于2016-03-07 14:25 被阅读2205次
    什么是DNS及功能:

    DNS(Domain name server),是将IP地址转换为域名地址。当在互联网访问外部服务器时,其主机都是以IP地址及端口标识(被称之为一个套接字文件),当主机A需要与主机B通信时,A必须知道其B的IP地址,但IP地址不能方便人们的记忆,故使用其计算机名进行标识。早期的互联网通信下,服务器的计算机名与其IP地址对应关系,被记录在了hosts文件中,这也正是早期的域名解析模型。但随着互联网的服务器增加,单依靠hosts的记录所有的计算机名映射,会导致查询速度非常慢、计算机名的变更更新速度慢。其DNS可以解决由hosts文件来解释域名映射的诸多问题。

    IP与计算机名底层转换机制
    • IP--->hostname : 依赖于getipbyhostname()库调用来实现
    • hostname-->IP : 依赖于gethostnamebyip()库调用来实现
    客户端请求域名解析查询机制:
    • 1、首先查询本地hosts文件中的记录,如果有,返回计算机名,否则;
    • 2、查询/etc/resolv.conf文件中的DNS服务器,如果有,返回所记录的信息给客户端, 否则;(此过程为递归查询机制
    • 3、由本地DNS服务器完成查询请求,并返回其最终结果值给客户端(此过程为迭代查询机制)
    DNS服务端查询原理
    • 正向解析: hostname ---> IP
      • 访问示例:
      • A客户端请求www.zhenping.me --> 由DNS服务器完成(1、查询本地缓存记录,如果有直接返回,2、向root"."发起查询查询,查询.me的NS记录返回其.me的NS服务器))--->再向.me的NS服务器查询"zhenping"域的NS服务器,并返回其结果值---->根据zhenping的NS服务器记录地址,---> NS服务器查询其所对应的www主机所对应的IP地址,并返回给服务器。
      • 正向解析的层级如下:
        • .
        • com
        • zhenping
        • www
    • 反向解析: IP ---> hostname
      • 访问示例:
      • A客户端请求反向记录1.2.3.4 ---> 由DNS发起请求查询"."域,由"."返回其ip-addr.arpa的NS记录,--> 服务器查询ip-addr.arpa的NS服务器,由NS服务器返回"1"区域的NS服务器地址,并将结果返回到服务器--->服务器查询"1"区域中的记录,由"1"区域返回"2"区域中的NS记录--->服务器向"2"区域查询"3"区域,由2区域返回3区域中的NS记录--->服务器再让3区域中的NS记录,3区域查询并返回4的主机所对应的主机地址。
      • 反向解析的层级如下:
        • .
        • ip-addr.arpa
        • 1
        • 2
        • 3
        • 4 (其是一个主机)
    正向解析的区域及资源记录组成分解(各对应的二级域) :
    • . : 资源记录配置如下:

        com IN NS ns
        ns  IN  A   1.1.1.1
        me  IN  NS  ns
        ns  IN  A   2.2.2.2
            注意:有多个顶级域(TLD)时,应该解析多个顶级域的NS记录
      
    • .me :中的资源记录配置如下:

        zhenping IN NS ns
        ns IN   A   3.3.3.3
        
            注意:诸多的域名区域,都应该有一个所对应的NS记录
      
    • zhenping : 中的资源记录配置如下:

        cw IN NS  ns
        ns  IN A    4.4.4.4
      
    • cw.zhenping : 中的资源记录配置如下:

            IN  NS  ns
        ns  IN  A   5.5.5.5 
      

    注意: 其反向区域也应为此类区域及资源记录组成格式。所有的区域定义在/etc/named.conf文件中。资源记录可以为系统中的任何一个文件来记录,但需要在区域文件中指明

    DNS服务器的类型:
    • 负责解析至少一个域
      • 主名称服务器
      • 辅助名称服务器(当主DNS服务器停止工作后,辅助的DNS服务器也瘵停止解析)
    • 不负责域解析
      • 缓存名称服务器
    DNS的解析返回结果分类:
    • 权威回答
      • DNS服务器自己直接负责的域返回的答案
    • 非权威回答
      • DNS服务器未负责的域,由缓存或者查询到的记录返回的答案
    DNS服务器返回结果答案类别:
    • 有查询结果(肯定答案)
    • 不存在查询结果(否定答案)
    主从DNS服务器的数据复制选项
    • serial : 序列号,即主DNS数据库的版本号,主服务器数据库内容发生变化时,其版本号需要递增,从服务器会对比与主服务器的数据库版本号,一样的版本号就不需要更新,否则需要更新
    • refresh : 从服务器每多久到主服务器检查序列号的变化
    • retry : 从服务器到服务器请求同步解析库失败时,再次发起解析请求的时间间隔,这个时间需短时刷新时间
    • expire : 从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据,超过此时间后,从服务器也将停止解析
    • negative answer : 否定答案的缓存时长

    注意:以上选项时间单位都支持W,D,H,M,这参数定义在资源记录的文件中,位置为SOA的后面,以()包含,其括号前后都有空格

    主从DNS之间的区域传送机制:
    • axfr : 全量传送,一般为从服务器第一次读取,将会传送整个数据库
    • ixf : 仅传送变化的数据
    资源记录组成部分,简称rr:

    资源记录的定义格式: name [ttl] IN RR_TYPE vlue

    • SOA : start of authority,起始授权记录,一个区域解析库只有一个SOA记录,而且必须放在所有记录的最前面

        @ IN SOA @ admin.zhenping.me. 
        
            注意:第一个@:表示区域名称,即zhenping.me.
                  第二个@: NS服务器的名称,也可以写为ns1.zhenping.me.
      
    • NS : name server,域名服务记录,一个区域解析可以有多个NS记录,其中一个为主的

        IN NS ns1
            或者
         IN NS  ns.zhenping.me.
         
         注意:NS的name可以省略,可以从/etc/named.conf文中zone的名称继承
      
    • A : address, 地址记录,从FQDN--->IPV4的记录

        www IN  A   1.1.1.1
      
    • AAAA : 地址记录,从FQDN--->IPV6的记录

    • CNAME : Canonical name,别名记录

        www1 IN CNAME www
      
    • PTR : Pointer, IP--->FQDN的记录

        4   IN PTR  www.zhenping.me.
      
    • MX : mail exchange,邮件交换器,其有优先级,一般是0到99,数值越小优先级越高

    注意:
    • 1、TTL值可以从全局承
    • 2、@表示当前区域的名称
    • 3、相信的两条记录其name相同时, 下条的name记录可以省略
    • 4、对于正向区域,各MX,NS的类型的记录的value为FQDN,此FQDN应该有一个A记录,NS类型的name可以省略

    BIND服务

    简介

    BIND(berkeley internet name domain ),由berkeley大学开发,现由ISC组织维护,其是DNS协议的实现解决软件,服务端的运行进程为named

    BIND程序包说明
    • bind : 提供的DNS Server主软件程序包
    • bind-libs : 被bind和bind-utils包中的程序共同用到的文件
    • bind-utils : bind客户端程序集,包含了如dig,host,nslookup等工具
    • bind-chroot : 选装,让named运行于一个jail(沙箱)模式下
    BIND的工作端口
    • 53/UPD
    • 53/TCP (其主要工作在UDP端口,如果传送的数据太大导致失败,其会以TCP模式尝试重传)
    • 953/TCP : rndc的连接端口
    BIND的配置文件及工作目录
    • /etc/named.conf : named主配置文件,定义各种运行参数
    • /etc/named.rfc1912.zones : 定义各区域的配置文件
    • /var/named/ : 资源记录文档的存放位置
    • /var/named/slaves : 从服务器的资源配置文件存放路径
    named.conf配置参数说明:
    • options { };: 框定全局配置参数
    • directory: 定义named的工作目录
    • allow-recursion yes | allow-recursion { 172.16.0.0/16; };: 前者表示允许所有客户端进行递归 ,后者表示允许指定范围的主机递归 ,其可以定义在区域中,默认为recurssion yes
    • allow-query { localhost; | 172.16.0.0/16; }; : 前者表示允许本地可查询负责域的记录,后者表示指定范围的主机可以执行查询操作,其不可以定义在区域中
    • allow-transfer { 10.189.9.203; | none; }; : 前者表示允许10.189.9.203这台主机做区域传送,其可以定义在区域中,一般只定义从服务器可以传送。不允许传送的区域,是不能使用"dig -t axfr | ixfr weizhenping.me @NS_IP" 的方式来查询 。
    • notify yes : 表示启用通知功能,配置变化通知从服务器
    • masters { 10.189.9.202; };:指定主服务器是谁,其定义在区域中,用于从服务器指定主DNS服务器
    • listen-on port 53 { 172.16.36.70; }; : 定义监听端口和地址
    • forward { first | only } : 配置转发服务器,可以定义在区域中。其forward一般在NS为缓存服务器时使用
    • forwards { server_ip; }; : 定义转发服务器的地址,一般配合forward来使用
      • first表示:首先转发,转发不成功时,自行迭代查询

      • only表示:只转发

          zone "mageedua.com" IN {
              type forward;
              forward first;
              forwarders { 10.189.9.202; };
          };
          
          注意:其也可以配置对区域进行转发,除此区域的请求,都不会进行转发操作
        
    • allow update {} : DDNS,是否允许进程动态更新区域数据库文件中的内容,正常应该为none
    • // : 表示注释一行
    • /* */ : 表示注释多行的内容
    配置主从DNS服务器
    • 1、修改/etc/named.conf文件中的内容:

        listen-on port 53 { 172.16.36.70; }; #定义监听端口及IP地址
        directory   "/var/named";   #工作目录
        allow-query     { 172.16.36.0/16; }; #允许此网段进行查询请求
        allow-recursion { 172.16.0.0/16; }; #允许指定网段的主机进行递归查询
        dnssec-enable no;   #关闭dnssec功能选项
        dnssec-validation no;   #关闭dnssec功能选项
        dnssec-lookaside no;    #关闭dnssec功能选项
      
    • 2、定义区域,定义到/etc/named.rfc1912.zones文件中,其也可以定义在/etc/named.conf文件中,named.conf文件包含了named.rfc19212.zones文件

        ######定义正向区域
        zone "weizhenping.me" IN {   #域为weizhenping.me
            type master;   #定义为这台为主NS服务器
            file "weizhenping.me.zone";  #资源记录文件存放位置
        };          
        
        zone "36.16.172.ip-addr.arpa" IN {  #反向域为36.16.172.ip-addr.arpa 
            type master;    #定义为反向域
            file "36.16.172.ip-addr.arpa";  #资源记录文件存放位置
        };
      
    • 3、定义正向资源记录文件/var/named/weizhenping.me.zone

        $TTL 86400
        $ORIGIN weizhenping.me.
        @   IN      SOA     ns1.weizhenping.me.     admin.weizhenping.me. (
                    2016011006 ;serial   #序列号,最长10位
                    1D         ;refresh
                    30M        ;retry
                    2D         ;expire
                    1D  )      ;negative answer ttl
                IN  NS  ns1     #主DNS记录
                IN  NS  ns2     #从DNS记录,都需要在下面添加所对应的A记录
                IN  MX  10  mail
        ns1     IN  A   172.16.36.70
        ns2     IN  A   172.16.36.71
        mail    IN  A   172.16.36.60
        www     IN  A   172.16.30.60
        wap     IN  CNAME   www
        qq      IN  A   172.16.36.72
      
        $TTL 86400 这是一个全局变量,此值都继承到下面的各资源记录中,故在整个配置文件中,可以不再标记TTL值
        $ORIGIN weizhenping.me. 这也是一个全局变量,此值也可以继承到下面中的,如果不定义,其ns1的地址应该正确填写为ns1.weizhenping.me.  ,mail也应该正常填写为mail.weizhenping.me.
      
    • 4、定义从服务器的配置

      • a、配置主配置文件/etc/named.conf文件

          listen-on port 53 { 172.16.36.71; }; #定义监听端口及IP地址
          directory   "/var/named";   #工作目录
          allow-query     { 172.16.36.0/16; }; #允许此网段进行查询请求
          allow-recursion { 172.16.0.0/16; }; #允许指定网段的主机进行递归查询
          dnssec-enable no;   #关闭dnssec功能选项
          dnssec-validation no;   #关闭dnssec功能选项
          dnssec-lookaside no;    #关闭dnssec功能选项
        
      • b、配置区域文件

          zone "weizhenping.me" IN {   #定义域名称
          type slave;     #定义NS级别
          file "slaves/weizhenping.me.zone"; #定义资源记录文件存放路径
          masters { 172.16.36.70; };  #定义主服务器的IP地址
          };
        
          zone "36.16.172.ip-addr.arpa" IN {
          type slave;
          file "slaves/36.16.172.ip-addr.arpa";
          masters { 172.16.36.70; };
          };
        
    • 5、检查named主配置文件及区域配置文件的语法:

      • 检查named.conf的语法格式:
        • named-checkconf
      • 检查区域配置文件的语法格式:
        • named-checkzone "weizhenping.me" /var/named/weizhenping.me.zone
    • 6、重启主DNS服务器

        rndc reload 
            或者
        systemctl restart named
      
    注意:
    1、前期为了不影响服务器之间的通信,建议关闭防火墙功能
    2、需要在主NS服务器上,定义从NS的记录及NS所对应的A记录
    3、在从NS定义区域类型时,需要定义为slave,并定义masters为主NS的地址
    4、在Centos 7平台可以使用systemctl status named,查看其运行状态,如果有错误,可以查看日志
    5、配置主从DNS服务器,需要保证服务器之间的时间一致,可以使用ntpdate命令同步时间。
    
    定义二级域
    • 1、在主域名服务器中定义二级域的名称:

        $TTL 86400
        $ORIGIN weizhenping.me.
        @   IN      SOA     ns1.weizhenping.me.     admin.weizhenping.me. (
                    2016011007 ;serial
                    1H         ;refresh
                    30M        ;retry
                    1W         ;expire
                    1D  )      ;negative answer ttl
                IN  NS  ns1
                IN  NS  ns2
                IN  MX  10  mail
        ns1     IN  A   172.16.36.70
        ns2     IN  A   172.16.36.71
        mail    IN  A   172.16.36.60
        www     IN  A   172.16.30.60
        wap     IN  CNAME   www
        cw      IN  NS  ns1 .cw         #定义二级域为cw.weizhenping.me
        ns1.cw     IN  A   172.16.36.72 #并定义二级域的NS服务器地址
        qq      IN  A   172.16.36.72
        dd      IN  A   172.16.36.73
      
    • 2、在二级域的主NS服务器中配置:

            listen-on port 53 { 172.16.36.72; }; #定义监听端口及IP地址
            directory   "/var/named";   #工作目录
            allow-query     { 172.16.36.0/16; }; #允许此网段进行查询请求
            allow-recursion { 172.16.0.0/16; }; #允许指定网段的主机进行递归查询
            dnssec-enable no;   #关闭dnssec功能选项
            dnssec-validation no;   #关闭dnssec功能选项
            dnssec-lookaside no;    #关闭dnssec功能选项
      
    • 3、在二级域中添加区域配置文件:

        zone "cw.weizhenping.me" IN {     #定义域名称为cw.weizhenping.me.
        type master;                    #服务器类型为主NS
        file "cw.weizhenping.zone";     #资源配置文件位置
        };
      
    • 4、在二级域的主NS服务器中定义资源记录:

        $TTL 86400
        $ORIGIN cw.weizhenping.me.
        @       IN      SOA     ns1.cw.weizhenping.me.      admin.cw.weizhenping.me.    (
                201601001
                1D
                30M
                1D
                1D )
                IN      NS      ns1
        ns1     IN      A       172.16.36.72
        www     IN      A       172.16.36.72
        qq      IN      A       172.16.36.72
      
    • 5、检查二级域的配置是否成功:

        1、在主域的主NS服务器中,使用 dig -t A www.cw.weizhenping.me ,如果能解析到,说明配置OK。
      

    ACL及视图的使用:

    1、ACL的定义格式:
    acl acl_name {
        ip;
    };
    
    #####示例:
    acl innet {
        10.189.9.0/24;
        127.0.0.1/8;
        192.168.0.0/24;
    };
    
    options {
        directory "/var/named";
        allow-recursion { innet; };
    };
    
    2、视图的定义格式:
      view VIEW_NAME {
    
      };
    
    ACL及视图的配合使用,可实现智能DNS的实现:
    root@localhost named]# cat /etc/named.conf
        acl telecom {
            10.189.9.0/24;    
        }; 
                    #此ACL定义了电信IP的列表
        acl unicom {
            10.189.8.0/24;
        };
                    #此ACL定义了联通IP的列表
        options {
            directory "/var/named";
            allow-recursion {   localnet; };   #定义了允许递归请求的主机为NS所在网络的所有主机
            allow-query { any; };
        };
    
        view  telecom {
            match-clients { telecom; };
            zone "mageedua.com" IN {
                type master;
                file "telecom.mageedua.com.zone";
            };
        };
    
        view unicom {
            match-clients { unicom; };
            zone "mageedua.com" IN {
                type master;
                file "unicom.mageedua.com.zone";
            };
        };
         #在named.conf配置文件中,配置view功能,并在视图区域定义match-clients 参数,让match-clients引用acl列表,acl可以为电信IP列表,或者联通IP列表。最后在view视图中定义需要智能DNS的区域。一般情况,可以将区域划分三类: 1、内网视图  2、电信视图 3、联通视图
         [root@localhost named]# cat telecom.mageedua.com.zone
        $TTL 86400
        @   IN  SOA ns1.mageedua.com.   admin.mageedua.com. (
                2015061101
                1D
                1H
                7D
                1D )
            IN  NS  ns1
            IN  MX  10    mail
        ns1 IN  A   10.189.9.110
        mail    IN  A   10.189.9.111
        www IN  A   10.189.9.112   #电信www服务器为112的地址
        [root@localhost named]# cat unicom.mageedua.com.zone
        $TTL 86400
        @   IN  SOA ns1.mageedua.com.   admin.mageedua.com. (
                2015061101
                1D
                1H
                7D
                1D )
            IN  NS  ns1
            IN  MX  10    mail
        ns1 IN  A   10.189.9.110
        mail    IN  A   10.189.9.111
        www IN  A   10.189.9.113  #联通www服务器为113的地址
        [root@localhost slaves]# dig -t A www.mageedua.com @10.189.9.110   #电信用户查询结果
    
        ; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7_0.1 <<>> -t A www.mageedua.com @10.189.9.110
        ;; global options: +cmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58349
        ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
        ;; WARNING: recursion requested but not available
    
        ;; OPT PSEUDOSECTION:
        ; EDNS: version: 0, flags:; udp: 4096
        ;; QUESTION SECTION:
        ;www.mageedua.com.      IN  A
    
        ;; ANSWER SECTION:
        www.mageedua.com.   86400   IN  A   10.189.9.112
    
        ;; AUTHORITY SECTION:
        mageedua.com.       86400   IN  NS  ns1.mageedua.com.
    
        ;; ADDITIONAL SECTION:
        ns1.mageedua.com.   86400   IN  A   10.189.9.110
    
        ;; Query time: 1 msec
        ;; SERVER: 10.189.9.110#53(10.189.9.110)
        ;; WHEN: 四 6月 11 10:26:21 CST 2015
        ;; MSG SIZE  rcvd: 95
    
    named的内置ACL:
    • none : 没有一个主机
    • any : 任意
    • local : 本机
    • localnet : 本机IP所属的网络

    rndc工具

    其是named内置提供的远程管理dns的工具,要以实现DNS的监控,启动或停止等操作。其默认工作在953端口。

    rndc的配置
        [root@Centos6 named]# rndc-confgen  >> /etc/rndc.conf   #使用rndc-confgen生成key文件
        [root@Centos6 named]# vim /etc/rndc.conf #默认在安装bind服务时,会产生/etc/rndc.key,需删除
        # Start of rndc.conf
        key "rndc-key" {
                algorithm hmac-md5;
                secret "vAv9U7k+jaHYI0gwdru1dA==";
        };
    
        options {
                default-key "rndc-key";
                default-server 127.0.0.1;
                default-port 953;
        };
        # End of rndc.conf
    
        # Use with the following in named.conf, adjusting the allow list as needed:
        # key "rndc-key" {
        #       algorithm hmac-md5;
        #       secret "vAv9U7k+jaHYI0gwdru1dA==";
        # };
        #
        # controls {
        #       inet 127.0.0.1 port 953   #如果需要外部主机远程监控,需要将127的地址更改为外部IP
        #               allow { 127.0.0.1; } keys { "rndc-key"; };   #允许控制的主机IP地址 
        # };
        # End of named.conf
        #将添加注释的行添加到/etc/named.conf文件中,并去掉注释
        [root@Centos6 named]# cat /etc/named.conf
        key "rndc-key" {
           algorithm hmac-md5;
           secret "vAv9U7k+jaHYI0gwdru1dA==";
        };
        controls {
           inet 10.189.9.202 port 953
               allow { 10.189.9.202; } keys { "rndc-key"; };
        };
        [root@Centos6 named]# rndc -c /etc/rndc.conf flush
        [root@Centos6 named]# rndc -c /etc/rndc.conf notify "mageedua.com"
        zone notify queued
        [root@Centos6 named]# rndc -c /etc/rndc.conf stop
        [root@Centos6 named]# rndc -c /etc/rndc.conf status
        #rndc命令,可以使用rndc -h查看相关选项
    
    rndc的指令选项:
    • rndc status : 查看DNS的工作状态
    • rndc stats : 查看dns的状态统计信息
    • rndc stop : 停止DNS服务
    • rndc flush :清空服务器缓存
    • rndc reload : 重置加载配置文件

    DNS测试工具:

    dig 命令
    • 使用格式:dig [-t RR_TYPE] name [@server] [query options]
      • OPTIONS:
        • -t : 指定资源记录类型,一般为A记录,或者NS记录。

        • +[no]trace : DNS解析路由跟踪

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

        • -x : 反向解析

            dig +trace -t NS weizhenping.me @172.16.36.70
          
    host 命令
    • 使用格式:host [-t RR_type] name SERVER_IP
      • 示例:

          host [-t RR_type] name SERVER_IP
        
    nslookup
    • 交互式命令,设置参数如下:
      • server 202.96.209.133 #设置默认的解析DNS服务器
      • set type=mx : 设置解析的资源记录类型
    国内著名的智能DNS提供商:
    • dnspod
    • dns.la

    相关文章

      网友评论

        本文标题:Linux之DNS服务Bind

        本文链接:https://www.haomeiwen.com/subject/mwnakttx.html