• Linux学习 71 DNS服务实现-基于Linux平台bind安装和配置


    一、回顾

      1、资源记录类型:SOA,NS,MX,A,AAAA,PTR,CNAME

      2、区域传送:完全区域传送和增量区域传送

      3、资源记录定义的格式

        name  [ttl]  IN  RR_TYPE  value

      4、SOA:

        序列号,刷新时长,重试时长,过期时长,否定答案的TTL

          M,H,D,W

      5、课外练习,注册一个域名,修改其域名解析服务器为dnspod.cn,dns.la

    二、DNS and Bind

      1、BIND的安装配置

        BIND:Berkeley Internet Name Domain,ISC.org

        a、dns:协议

        b、bind:dns协议的一种实现,其程序运行起来后其程序名叫named,即名称服务

        c、named:bind程序的运行的进程名

      2、BIND的程序包

        a、我们的镜像中就有

    [root@wohaoshuai1 ~]# yum info bind
    已加载插件:fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
    可安装的软件包
    名称    :bind
    架构    :x86_64
    时期       :32
    版本    :9.9.4
    发布    :61.el7
    大小    :1.8 M
    源    :base-local
    简介    : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
    网址    :http://www.isc.org/products/BIND/
    协议    : ISC
    描述    : BIND (Berkeley Internet Name Domain) is an implementation of the DNS
             : (Domain Name System) protocols. BIND includes a DNS server (named),
             : which resolves host names to IP addresses; a resolver library
             : (routines for applications to use when interfacing with DNS); and
             : tools for verifying that the DNS server is operating properly.

        b、相应的包

          (1)、bind-libs:被bind和bind-utils包中的程序共同用到的库文件,默认会安装

          (2)、bind-utils:bind客户端程序集,例如 dig,host,nslookup等,默认会安装

          (3)、bind:提供dns server程序,以及几个常用的测试程序

          (4)、bind-chroot:选装,让named运行于jail模式下,即沙箱下

    三、BIND

      1、bind安装

        a、安装

    [root@www /]# yum install -y bind

        b、查看配置文件

    [root@www /]# rpm -ql bind
    /etc/logrotate.d/named
    /etc/named
    /etc/named.conf
    /etc/named.iscdlv.key
    /etc/named.rfc1912.zones
    /etc/named.root.key
    /etc/rndc.conf
    /etc/rndc.key
    /etc/rwtab.d/named
    /etc/sysconfig/named
    /run/named
    ....
    /usr/sbin/named
    /usr/sbin/named-checkconf #检查配置文件是否有错误
    /usr/sbin/named-checkzone #检查区域数据库是否有错误
    /usr/sbin/named-compilezone #手动编译区域文件为二进制格式的程序
    /usr/sbin/named-journalprint
    ....

        c、配置文件介绍

          (1)、主配置文件:/etc/named.conf,可用include指令包含进其他文件,比如

              /etc/named.iscdlv.key,/etc/named.rfc1912.zones,/etc/named.root.key

    [root@www /]# tail -3 /etc/named.conf
    include "/etc/named.rfc1912.zones";
    include "/etc/named.root.key";

          (2)、解析库文件:/var/named/目录下

            1)、一般名字为:ZONE_NAME.zone

            2)、注意:

              i、一台DNS服务器可同时为多个区域提供解析 

              ii、必须要有根区域解析库文件:named.ca

              iii、还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库

                正向:named.localhost

                反向:named.loopback

    [root@www /]# ll /var/named/
    总用量 16
    drwxrwx--- 2 named named    6 8月   4 2017 data
    drwxrwx--- 2 named named    6 8月   4 2017 dynamic
    -rw-r----- 1 root  named 2281 5月  22 2017 named.ca
    -rw-r----- 1 root  named  152 12月 15 2009 named.empty
    -rw-r----- 1 root  named  152 6月  21 2007 named.localhost
    -rw-r----- 1 root  named  168 12月 15 2009 named.loopback
    drwxrwx--- 2 named named    6 8月   4 2017 slaves
    [root@www /]# cat /var/named/named.localhost 
    $TTL 1D
    @    IN SOA    @ rname.invalid. (
                        0    ; serial
                        1D    ; refresh
                        1H    ; retry
                        1W    ; expire
                        3H )    ; minimum
        NS    @
        A    127.0.0.1
        AAAA    ::1
    [root@www /]# cat /var/named/named.loopback 
    $TTL 1D
    @    IN SOA    @ rname.invalid. (
                        0    ; serial
                        1D    ; refresh
                        1H    ; retry
                        1W    ; expire
                        3H )    ; minimum
        NS    @
        A    127.0.0.1
        AAAA    ::1
        PTR    localhost.

          (3)、rndc(remote name domain contoller):bind的辅助类文件rndc,即名称服务器的控制工具,他是名称服务器的一个远程控制工具,他可以控制一个name server的很多操作方式,比如,更新缓存,清空缓存,停止服务等。他默认工作在TCP的953端口,默认只能通过127.0.0.1进行操作,即默认监听于127.0.0.1地址。

    [root@www /]# rpm -ql bind|grep rndc
    /etc/rndc.conf
    /etc/rndc.key
    /usr/lib/systemd/system/named-setup-rndc.service
    /usr/libexec/generate-rndc-key.sh
    /usr/sbin/rndc
    /usr/sbin/rndc-confgen
    /usr/share/doc/bind-9.9.4/man.rndc-confgen.html
    /usr/share/doc/bind-9.9.4/man.rndc.conf.html
    /usr/share/doc/bind-9.9.4/man.rndc.html
    /usr/share/man/man5/rndc.conf.5.gz
    /usr/share/man/man8/rndc-confgen.8.gz
    /usr/share/man/man8/rndc.8.gz

      2、bind启动

        a、bind程序安装完之后,默认即可作为缓存名称服务器使用,这个缓存名称服务器他所能提供给我们的功能就是可以让其它客户机把dns服务器指向这台主机,从而能够他不负责区域解析时能帮我们在互联网上找根,等等迭代以后找到所有可解析地址,前提是他要能访问互联网才行。如果没有专门负责解析的区域,直接可启动服务。

        b、服务启动

          (1)、CentOS6:service named start

          (2)、CentOS7:systemctl start named

    [root@www /]# rpm -ql bind |grep named.service
    /usr/lib/systemd/system/named.service

          (3)、我们来看/etc/named.conf这个主配置文件格式

            1)、全局配置段:

              options{...} 

            2)、日志配置段:

              logging{...}

            3)、区域配置段:

              zone{...}

                那些由本机负责解析的区域,或转发的区域

            4)、注意,每个配置语句必须以分号结尾,否则为语法错误。并且花括号前后必须有空格,否则有语法错误

            5)、缓存名称服务器的配置:

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

                listen-on port 53 { 192.168.10.13; };

              ii、学习时,建议关闭dnssec

                dnssec-enable no;

                dnssec-validation no;

                dnssec-lookaside no;

              iii、关闭仅允许本地查询:

                //allow-query { localhost; }

    [root@www /]# cat /etc/named.conf|grep -vE "^$|^//"
    options {
        listen-on port 53 { 192.168.10.13; }; 
        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     { localhost; };
        /* 
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable 
           recursion. 
         - If your recursive DNS server has a public IP address, you MUST enable access 
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification 
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface 
        */
        recursion yes;
        dnssec-enable no;
        dnssec-validation no;
        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
    };
    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";

          (4)、我们来检查配置文件的语法错误

            named-checkconf  [/etc/named.conf]

    [root@www /]# named-checkconf 
    [root@www /]# named-checkconf -h
    usage: named-checkconf [-h] [-j] [-p] [-v] [-z] [-t directory] [named.conf]
    [root@www /]# named-checkconf /etc/named.conf 

          (5)、我们来启动服务并检查状态

    [root@www /]# systemctl start named
    [root@www /]# systemctl status named
    ● named.service - Berkeley Internet Name Domain (DNS)
       Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
       Active: active (running) since 六 2020-05-09 10:01:56 CST; 5s ago
      Process: 2189 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
      Process: 2186 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (cod
    e=exited, status=0/SUCCESS) Main PID: 2191 (named)
       Memory: 11.8M
       CGroup: /system.slice/named.service
               └─2191 /usr/sbin/named -u named -c /etc/named.conf
    
    5月 09 10:01:56 www.wohaoshuai.com named[2191]: command channel listening on ::1#953
    5月 09 10:01:56 www.wohaoshuai.com named[2191]: managed-keys-zone: loaded serial 0
    5月 09 10:01:56 www.wohaoshuai.com named[2191]: zone 0.in-addr.arpa/IN: loaded serial 0
    5月 09 10:01:56 www.wohaoshuai.com named[2191]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
    5月 09 10:01:56 www.wohaoshuai.com named[2191]: zone localhost.localdomain/IN: loaded serial 0
    5月 09 10:01:56 www.wohaoshuai.com named[2191]: zone localhost/IN: loaded serial 0
    5月 09 10:01:56 www.wohaoshuai.com named[2191]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
    5月 09 10:01:56 www.wohaoshuai.com named[2191]: all zones loaded
    5月 09 10:01:56 www.wohaoshuai.com named[2191]: running
    5月 09 10:01:56 www.wohaoshuai.com systemd[1]: Started Berkeley Internet Name Domain (DNS).

          (6)、我们来查看端口

    [root@www /]# netstat -tunlp|grep named
    tcp        0      0 192.168.10.13:53        0.0.0.0:*               LISTEN      2191/named          
    tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      2191/named          
    tcp6       0      0 ::1:953                 :::*                    LISTEN      2191/named          
    udp        0      0 192.168.10.13:53        0.0.0.0:*                           2191/named

      3、测试工具

        a、dig命令

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

            -t RR_TYPE表示指明资源记录的类型,name表示我把哪一个名字解析为哪一个资源记录对应的值,@SERVER表示通过哪一个服务器来解析,如果我们加了@SERVER的话那么对于默认情况下/etc/resolv.conf这个文件的定义的nameserver来说就没有意义了,这表示我们用指定的服务器来做测试。[query options]表示指定的查询选项

          (1)、用于测试dns系统,因此其不会查询hosts文件

          (2)、查询选项

            1)、+[no]trace:跟踪解析过程,加no表示不跟踪,不加表示跟踪

            2)、+[no]recurse:进行递归解析,加no表示不进行递归解析,不加表示进行递归解析

          (3)、实例

            1)、测百度

    [root@node2 /]# dig -t A www.baidu.com
    
    ; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> -t A www.baidu.com
    ;; global options: +cmd #全局属性
    ;; Got answer: #表示已经获得答案了
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13374
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 #标志位,qr表示查询请求,ra表示查询答案
    
    ;; OPT PSEUDOSECTION: #表示假选项段,没什么意义
    ; EDNS: version: 0, flags:; udp: 512
    ;; QUESTION SECTION: #查询的问题,问题是你要去查询www.baidu.com的A记录
    ;www.baidu.com.            IN    A
    
    ;; ANSWER SECTION: # #答案段,表示服务器端显示的答案
    www.baidu.com.        205    IN    CNAME    www.a.shifen.com. #表示www.baidu.com没有A记录,他只有一个CNAME记录,为www.a.shifen.com.
    www.a.shifen.com.    241    IN    A    36.152.44.95 #这个www.a.shifen.com.有一个地址是36.152.44.95
    www.a.shifen.com.    241    IN    A    36.152.44.96 #这个www.a.shifen.com.还有一个地址是36.152.44.96
    
    ;;AUTHORITY SECTION: #权威段,表示谁来负责解析的,为了足够可靠,对方提供了多台dns服务器来负责a.shifen.com.这个域
    a.shifen.com.  1063  IN NS ns1.a.shifen.com. #表示a.shifen.com.这个域是由ns1.a.shifen.com.这个dns服务器来负责的
    a.shifen.com.  1063  IN NS ns2.a.shifen.com. #表示a.shifen.com.这个域是由ns2.a.shifen.com.这个dns服务器来负责的
    a.shifen.com.  1063  IN NS ns3.a.shifen.com. #表示a.shifen.com.这个域是由ns3.a.shifen.com.这个dns服务器来负责

    ;;ADDITIONAL SECTION: #相当于把我们负责a.shifen.com.域的服务器解析为了ip地址
    ns1.a.shifen.com.  1063  IN  A  115.239.210.176
    ns2.a.shifen.com.  1063  IN  A  119.75.222.17
    ns3.a.shifen.com.  1063  IN  A  61.135.165.224
     
    ;; Query time: 79 msec #查询执行时长
    ;; SERVER:
    114.114.114.114#53(114.114.114.114) #由哪个服务器负责解析的,
    ;; WHEN: Sat May
    09 18:24:29 CST 2020
    ;; MSG SIZE rcvd:
    101

            2)、我们现在来测百度并且添加跟踪过程

    [root@node2 /]# dig +trace -t A www.baidu.com 
    
    ; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> +trace -t A www.baidu.com
    ;; global options: +cmd #他先找根节点服务器,我们可以看到全球一共有十三个根节点服务器
    .            2379    IN    NS    k.root-servers.net.
    .            2379    IN    NS    c.root-servers.net.
    .            2379    IN    NS    f.root-servers.net.
    .            2379    IN    NS    e.root-servers.net.
    .            2379    IN    NS    j.root-servers.net.
    .            2379    IN    NS    m.root-servers.net.
    .            2379    IN    NS    h.root-servers.net.
    .            2379    IN    NS    a.root-servers.net.
    .            2379    IN    NS    d.root-servers.net.
    .            2379    IN    NS    b.root-servers.net.
    .            2379    IN    NS    i.root-servers.net.
    .            2379    IN    NS    g.root-servers.net.
    .            2379    IN    NS    l.root-servers.net.
    ;; Received 239 bytes from 114.114.114.114#53(114.114.114.114) in 1044 ms
     #返回给他说找com.,我们可以看到com.也有很多服务器
    com.            172800    IN    NS    l.gtld-servers.net.
    com.            172800    IN    NS    b.gtld-servers.net.
    com.            172800    IN    NS    c.gtld-servers.net.
    com.            172800    IN    NS    d.gtld-servers.net.
    com.            172800    IN    NS    e.gtld-servers.net.
    com.            172800    IN    NS    f.gtld-servers.net.
    com.            172800    IN    NS    g.gtld-servers.net.
    com.            172800    IN    NS    a.gtld-servers.net.
    com.            172800    IN    NS    h.gtld-servers.net.
    com.            172800    IN    NS    i.gtld-servers.net.
    com.            172800    IN    NS    j.gtld-servers.net.
    com.            172800    IN    NS    k.gtld-servers.net.
    com.            172800    IN    NS    m.gtld-servers.net.
    com.            86400    IN    DS    30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
    com.            86400    IN    RRSIG    DS 8 1 86400 20200521170000 20200508160000 48903 . BemkQJ+5wV2uHyc1V/SzRxJKt9GfVupkuDq2TqFY9Kt0tsvaKC6OZp+Y WZuBPZ+qHOU59o3APTBgtBbpDwTH+bXXY
    rqU3RNutirrwA/Z9RW+J3Bx W771zw5at79UWcZBkq2LxAYW2e3ZVukbQtylm5Wa5TeaBKsfr471dtEP hStNZ1vFrJ7VRt/txo399pn5HIslwuXDDc7LI65Dc8mFxHzjv8f/COQX mOPLESd5QVVd9oatek2lC43ArqI8x6aohLLyXdcSCdm0mVWmaC+4lpzl 3NGwP7GOmRVnuGjFxTZFDPTILYHNTziDPDriEYrNWwGxrHteAA+QB9i4 MdP/kA==;; Received 1173 bytes from 192.203.230.10#53(e.root-servers.net) in 1130 ms
    #com.然后委托给baidu.com.
    baidu.com.        172800    IN    NS    ns2.baidu.com.
    baidu.com.        172800    IN    NS    ns3.baidu.com.
    baidu.com.        172800    IN    NS    ns4.baidu.com.
    baidu.com.        172800    IN    NS    ns1.baidu.com.
    baidu.com.        172800    IN    NS    ns7.baidu.com.
    CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
    CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20200513044951 20200506033951 39844 com. DQ9LaY7nv4abiSkEn0gpiP0cQ8J7yqT4l29DPEUyTure4dT/cQOGGhB4 YaB6r/2IAy0Q32WN2JIPrB
    QZWYFans5vdqZKOE0bT5WIOCK3TFqfmpKy wcaRIcAqloo2ucXB5WSk30r4+ep3DgkfgQyAmgDfJWM0jMEMPxRYhm3l DBVkbvRe4un6nc1i07mz7d1i25O8nmx24r929EcMKPlF4w==HPVU6NQB275TGI2CDHPDMVDOJC9LNG86.com. 86400 IN NSEC3 1 1 0 - HPVVN3Q5E5GOQP2QFE2LEM4SVB9C0SJ6 NS DS RRSIG
    HPVU6NQB275TGI2CDHPDMVDOJC9LNG86.com. 86400 IN RRSIG NSEC3 8 2 86400 20200514062456 20200507051456 39844 com. jbb8tPp0OWtos9OmH2L4oZme09k8lzfJbCXuPIQWt+YdcO30AKZEBHeB 3iifrujOibMr6Fon32Srtb
    u4pDgZdVH8mM88RaUpUy15QmBMg5+wUcXB uAx4QXI7XPiaKC6LCEltp813cEo2e/sxI5aK3HtI3ZQGfU+r8CSEGvuU ghdXd0h19TZP5oJWgVobn5O2POHbjz/RSynqNRbjo62m5A==;; Received 761 bytes from 192.43.172.30#53(i.gtld-servers.net) in 709 ms
    #baidu.com.就找到我们想要的www.baidu.com
    www.baidu.com.        1200    IN    CNAME    www.a.shifen.com.
    a.shifen.com.        1200    IN    NS    ns5.a.shifen.com.
    a.shifen.com.        1200    IN    NS    ns3.a.shifen.com.
    a.shifen.com.        1200    IN    NS    ns2.a.shifen.com.
    a.shifen.com.        1200    IN    NS    ns1.a.shifen.com.
    a.shifen.com.        1200    IN    NS    ns4.a.shifen.com.
    ;; Received 239 bytes from 14.215.178.80#53(ns4.baidu.com) in 92 ms

          (4)、反向解析我们是通过 dig -x IP来解析的

          (5)、他还可以模拟完全区域传送

              dig -t axfr DOMAIN [@server]

        b、host命令

          host [-t RR_TYPE] name SERVER_IP

          (1)、解析:host -t A www.baidu.com

    [root@www /]# host -t A www.baidu.com
    www.baidu.com is an alias for www.a.shifen.com.
    www.a.shifen.com has address 36.152.44.95
    www.a.shifen.com has address 36.152.44.96

          (2)、查看负责域的服务器

    [root@www /]# host -t NS www.baidu.com

          (3)、查看邮件交换器

    [root@www /]# host -t MX baidu.com
    baidu.com mail is handled by 15 mx.n.shifen.com.
    baidu.com mail is handled by 20 mx1.baidu.com.
    baidu.com mail is handled by 20 mx50.baidu.com.
    baidu.com mail is handled by 10 mx.maillb.baidu.com.
    baidu.com mail is handled by 20 jpmx.baidu.com.

          (4)、反向解析和dig一样

        c、nslookup命令:

          nslookup  [-options] [name] [server]

          (1)、交互式模式

             nslookup>

              server IP:以指定的IP为DNS服务器进行查询,如果不指的话就是本机/etc/resolv.conf下的dns服务器

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

              name:要查询的名称

    [root@www /]# nslookup 
    > server 192.168.10.13
    Default server: 192.168.10.13
    Address: 192.168.10.13#53
    > set q=A
    > www.sohu.com
    Server:        192.168.10.13
    Address:    192.168.10.13#53
    
    Non-authoritative answer:
    www.sohu.com    canonical name = gs.a.sohu.com.
    gs.a.sohu.com    canonical name = fshyd.a.sohu.com.
    Name:    fshyd.a.sohu.com
    Address: 120.204.199.149

        d、rndc

          (1)、rndc status命令

    [root@www /]# rndc status
    version: 9.9.4-RedHat-9.9.4-50.el7 <id:8f9657aa> #dns版本号
    CPUs found: 2 #cpu颗数
    worker threads: 2 #工作线程
    UDP listeners per interface: 2
    number of zones: 101
    debug level: 0
    xfers running: 0 #有没有进行过xfers
    xfers deferred: 0
    soa queries in progress: 0 #正在进行soa查询的个数
    query logging is OFF #查询日志功能为关闭
    recursive clients: 0/0/1000 #递归查询客户端一共有1000个现在有0个
    tcp clients: 0/100 #tcp客户端最多有100个现在有0个
    server is up and running

          (2)、rndc stop:我们如果使用rndc stop那么就会关闭dns服务

          (3)、rndc  flush:清空dns服务器缓存,用的很多

          (4)、rndc reload:重新加载配置文件,不用重启服务

    四、配置解析一个正向区域

      1、定义区域

        a、在主配置文件中或主配置文件辅助配置文件中实现

          (1)、格式

            zone "ZONE_NAME" IN {

              type {master|slave|hint|forward}; #域类型,master为主服务器,slave为从服务器,hint为根服务器,forward为转发服务器,如果我们负责解析一个域而且此前没有其他任何服务器我们就应该是主服务器

              file "ZONE_NAME.zone"; #指明文件在什么地方,如果此处我们使用相对路径那么文件就在我们的/var/named目录下          };

            注意:区域名字即为域名

          (2)我们来编辑/etc/named.conf,我们可以看到倒数第二行中有内容为

              include "/etc/named.rfc1912.zones",这表示是遵循rfc1912规范的各区域的专门定义文件。所以我们在这个文件中添加就可以。

    [root@www /]# cat /etc/named.rfc1912.zones
    // named.rfc1912.zones:
    //
    // Provided by Red Hat caching-nameserver package 
    //
    // ISC BIND named zone configuration for zones recommended by
    // RFC 1912 section 4.1 : localhost TLDs and address zones
    // and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
    // (c)2007 R W Franks
    // 
    // See /usr/share/doc/bind*/sample/ for example named configuration files.
    //
    
    zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
    };
    
    zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
    };
    
    zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
    };
    
    zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
    };
    
    zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
    };
    
    zone "wohaoshuai.com" IN {
        type master;
        file "wohaoshuai.com.zone";
    };

      2、建立区域数据文件(主要记录为A或AAAA记录)

        a、现在我们来添加我们上述zone中写的wohaoshuai.com.zone这个区域数据库文件,因为是相对路径,因此我们需要在/var/named目录下来添加

          (1)、第一段的SOA如下

              $TTL 3600
              @   IN       SOA     wohaoshuai.com. dnsadmin.wohaoshuai.com.  (

                 2020050901 
                1H 
                10M 
                3D 
                1D 
                )

              相应解释:

                 $TTL  3600:这是全局配置TTL,定义为一个小时,也就是3600秒,下面的资源记录都会继承这个默认的TTL

                @:区域名称,可以用@替代,后面的TTL可以不用写,直接在上面的TTL中继承

                wohaoshuai.com:区域名字,也可以用@,这儿直接写的区域名字,或者写成当前区域的主DNS服务器的名字也行,比如ns1.wohaoshuai.com.

                dnsadmin.wohaoshuai.com.:管理员邮箱地址

                 2020050901 :序列号
                1H :刷新时间
                10M :重试时间
                3D :过期时间
                1D :否定回答的TTL值

          (2)、第二段的NS如下

                IN  NS  ns1:这是我们的NS记录,可以发现我们第一字段没写名字,表示和上面的SOA一样,上面SOA中的@表示当前域的域名。后面的这个ns1表示是ns1.wohaoshuai.com.,如果要写全一定要加上后面这个点号,那么我们如果只写ns1的话别人怎么知道你要补什么呢?其实他会自动在ns1后面将我们/etc/named.rfc1912.zones文件中所写的zone中的wohaoshuai.com给你补上,虽然zone中没有这个点,但是他也会自动帮你补上。当然为了确保万无一失我们可以在我们/var/named/wohaoshuai.com.zone中加上$ORIGIN wohaoshuai.com.,表示没写全的都给你自动补一个wohaoshuai.com.,即所有的相对性的名称他就自动给你补上这个后缀了。

          (3)、第三段的NS和第二段的NS一样,表示此域中第二个域名服务器为ns2.wohaoshuai.com

          (4)、第四段的MX如下:

                  IN    MX    10    mx1  :其中的10为优先级

    [root@www /]# cat /var/named/wohaoshuai.com.zone
    $TTL 3600 
    $ORIGIN    wohaoshuai.com.
    @    IN    SOA    wohaoshuai.com.        dnsadmin.wohaoshuai.com. (
        2020050901 
        1H 
        10M 
        3D 
        1D 
    )
        IN    NS    ns1 
        IN    NS    ns2
        IN    MX    10    mx1    
        IN    MX    20    mx2
    ns1    IN    A        192.168.10.20    
    ns2    IN    A        192.168.10.30    
    mx1    IN    A        192.168.10.40
    mx2    IN    A        192.168.10.50
    www    IN    A        192.168.10.60
    web    IN    CNAME        www
    bbs    IN    A        172.16.100.70
    bbs    IN    A        172.16.100.71

        b、接下来我们来做语法检查

          (1)、检查主配置文件是否有语法错误

    [root@www /]# named-checkconf 
    [root@www /]# 

          (2)、检查区域文件是否有语法错误

    [root@www /]# named-checkzone wohaoshuai.com /var/named/wohaoshuai.com.zone 
    zone wohaoshuai.com/IN: loaded serial 2020050901
    OK

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

        a、我们首先来看我们的状态

    [root@www /]# rndc status
    version: 9.9.4-RedHat-9.9.4-50.el7 <id:8f9657aa>
    CPUs found: 2
    worker threads: 2
    UDP listeners per interface: 2
    number of zones: 101 
    debug level: 0
    xfers running: 0
    xfers deferred: 0
    soa queries in progress: 0
    query logging is OFF
    recursive clients: 0/0/1000
    tcp clients: 0/100
    server is up and running

        b、我们reload后再查看状态

    [root@www /]# rndc reload
    server reload successful
    [root@www /]# rndc status
    version: 9.9.4-RedHat-9.9.4-50.el7 <id:8f9657aa>
    CPUs found: 2
    worker threads: 2
    UDP listeners per interface: 2
    number of zones: 102 #可以看到我们的zone已经装载进来了
    debug level: 0
    xfers running: 0
    xfers deferred: 0
    soa queries in progress: 0
    query logging is OFF
    recursive clients: 0/0/1000
    tcp clients: 0/100
    server is up and running

        c、我们现在来开始测试

    [root@www /]# dig -t A www.wohaoshuai.com @192.168.10.13
    
    ; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> -t A www.wohaoshuai.com @192.168.10.13
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20992
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;www.wohaoshuai.com.        IN    A
    
    ;; ANSWER SECTION:
    www.wohaoshuai.com.    3600    IN    A    192.168.10.60
    
    ;; AUTHORITY SECTION:
    wohaoshuai.com.        3600    IN    NS    ns2.wohaoshuai.com.
    wohaoshuai.com.        3600    IN    NS    ns1.wohaoshuai.com.
    
    ;; ADDITIONAL SECTION:
    ns1.wohaoshuai.com.    3600    IN    A    192.168.10.20
    ns2.wohaoshuai.com.    3600    IN    A    192.168.10.30
    
    ;; Query time: 0 msec
    ;; SERVER: 192.168.10.13#53(192.168.10.13)
    ;; WHEN: 六 5月 09 14:06:19 CST 2020
    ;; MSG SIZE  rcvd: 131

          可以看到可以解析成功了

       4、修改/var/named/wohaoshuai.com.zone文件属性

        a、修改其属组为named

    [root@www /]# ll /var/named/wohaoshuai.com.zone
    -rw-r--r-- 1 root named 365 5月   9 12:43 /var/named/wohaoshuai.com.zone

        b、让其它用户没有任何权限

    [root@www /]# chmod o= /var/named/wohaoshuai.com.zone 
    [root@www /]# ll /var/named/wohaoshuai.com.zone
    -rw-r----- 1 root named 365 5月   9 12:43 /var/named/wohaoshuai.com.zone

        c、再重新加载配置文件即可

    [root@www /]# rndc reload
    server reload successful

           使用systemctl reload named.server也可以

    五、配置解析一个反向区域

      1、定义区域

        a、在主配置文件中或主配置文件辅助配置文件中实现;

            zone "ZONE_NAME" IN {

              type {master|slave|hint|forward}; #域类型,master为主服务器,slave为从服务器,hint为根服务器,forward为转发服务器,如果我们负责解析一个域而且此前没有其他任何服务器我们就应该是主服务器

              file "ZONE_NAME.zone"; #指明文件在什么地方,如果此处我们使用相对路径那么文件就在我们的/var/named目录下          };

        b、注意:反向区域的名字

          反写的网段地址.in-addr.arpa

            10.168.192.in-addr.arpa

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

        a、如下

    [root@www /]# cat /etc/named.rfc1912.zones 
    // named.rfc1912.zones:
    //
    // Provided by Red Hat caching-nameserver package 
    //
    // ISC BIND named zone configuration for zones recommended by
    // RFC 1912 section 4.1 : localhost TLDs and address zones
    // and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
    // (c)2007 R W Franks
    // 
    // See /usr/share/doc/bind*/sample/ for example named configuration files.
    //
    
    zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
    };
    
    zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
    };
    
    zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
    };
    
    zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
    };
    
    zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
    };
    
    zone "wohaoshuai.com" IN {
        type master;
        file "wohaoshuai.com.zone";
    };
    
    zone "10.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.100.zone";
    };

      3、定义区域数据库文件

    [root@www /]# cat /var/named/192.168.100.zone
    $TTL 3600
    $ORIGIN 10.168.192.in-addr.arpa.
    @    IN    SOA    ns1.wohaoshuai.com.    nsadmin.wohaoshuai.com.    (
        2020050901
        1H
        10M
        3D
        12H
    )
        IN    NS    ns1.wohaoshuai.com.
    20    IN    PTR    ns1.wohaoshuai.com.
    40    IN    PTR    mx1.wohaoshuai.com.
    70    IN    PTR    bbs.wohaoshuai.com.
    71    IN    PTR    bbs.wohaoshuai.com.
    60    IN    PTR    www.wohaoshuai.com.

      4、修改区域数据库文件相应权限

        a、修改属组

    [root@www /]# chgrp named /var/named/192.168.100.zone 
    [root@www /]# ll /var/named/192.168.100.zone
    -rw-r--r-- 1 root named 307 5月   9 14:43 /var/named/192.168.100.zone

        b、修改权限为其他人没有任何权限

    [root@www /]# chmod o= /var/named/192.168.100.zone
    [root@www /]# ll /var/named/192.168.100.zone
    -rw-r----- 1 root named 307 5月   9 14:43 /var/named/192.168.100.zone

      5、重载配置文件

        a、检查语法

    [root@www /]# named-checkconf 
    [root@www /]#

        b、检查zone文件

    [root@www /]# named-checkzone 10.168.192.in-addr.arpa /var/named/192.168.100.zone 
    zone 10.168.192.in-addr.arpa/IN: loaded serial 2020050901
    OK

        c、重载配置文件

    [root@www /]# rndc reload
    server reload successful

      6、测试

    [root@www /]# dig -x 192.168.10.70 @192.168.10.13
    
    ; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> -x 192.168.10.70 @192.168.10.13
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 771
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;70.10.168.192.in-addr.arpa.    IN    PTR
    
    ;; ANSWER SECTION:
    70.10.168.192.in-addr.arpa. 3600 IN    PTR    bbs.wohaoshuai.com.
    
    ;; AUTHORITY SECTION:
    10.168.192.in-addr.arpa. 3600    IN    NS    ns1.wohaoshuai.com.
    
    ;; ADDITIONAL SECTION:
    ns1.wohaoshuai.com.    3600    IN    A    192.168.10.20
    
    ;; Query time: 0 msec
    ;; SERVER: 192.168.10.13#53(192.168.10.13)
    ;; WHEN: 六 5月 09 14:52:53 CST 2020
    ;; MSG SIZE  rcvd: 121

        可以看到测试成功

  • 相关阅读:
    ubuntu 软件管理
    java split方法
    linux tcpdump抓包
    linux 文件压缩与解压
    AngularJs出现错误Error: [ng:areq]
    php 跨域设置
    npm 安装完bower 后,提示'bower' 不是内部或外部命令
    less--Module build failed: TypeError: loaderContext.getResolve is not a function
    npm init npm ERR! code EINVALIDTAGNAME
    yarn报错:Found incompatible module
  • 原文地址:https://www.cnblogs.com/Presley-lpc/p/12853578.html
Copyright © 2020-2023  润新知