centos7安装域名解析服务 BIND

  1. BIND(Berkeley Internet Name Domain) 是一个域名解析工具

  2. 安装,bind 是服务 ,bind-utils 是一些工具命令

     yum -y  install bind bind-utils
    
  3. 查看版本(据说bind9之前 bug都很多)

    named -v
    

    image-20230331094933931

  4. 修改配置文件 vi /etc/named.conf

    主要是修改
    listen-on port 53 { any; };

    allow-query { any; };

    
    options {
            listen-on port 53 { any; }; 						#这里改成any,ipv4监听的地址
            listen-on-v6 port 53 { ::1; }; 						#ipv6 的监听的地址
            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";	#记录内存使用情况
            recursing-file  "/var/named/data/named.recursing";
            secroots-file   "/var/named/data/named.secroots";
            allow-query     { any; }; 							 #这里改成any,或者设置成内网地址												
    
            /*
             - 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 yes;			#如果不能解析公网域名,把这两个改成no
            dnssec-validation yes;		#如果不能解析公网域名,把这两个改成no
    
            /* Path to ISC DLV key */
            bindkeys-file "/etc/named.root.key";		#ISC DLV KEY 的路径
    
            managed-keys-directory "/var/named/dynamic";  #管理密钥路径
    
            pid-file "/run/named/named.pid";			#进程ID文件
            session-keyfile "/run/named/session.key";	#回话密钥文件
    };
    
    logging {
            channel default_debug {
                    file "data/named.run";     #日志文件,在/var/named下面
                    severity dynamic;
            };
    };
    
    zone "." IN {
            type hint;
            file "named.ca";
    };
    
    #写在 /etc/named.rfc1912.zones里面的配置也可以写在这里
    
    
    include "/etc/named.rfc1912.zones";   #这个文件是一个子配置文件,一般在这里面写映射配置
    include "/etc/named.root.key";
    
  5. 修改次要配置文件 vi /etc/named.rfc1912.zones

    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; };
    };
    
    
    #增加一个lomi.com域名的解析,具体解析规则在/var/named/lomi.com.zone里
    zone "lomi.com" IN {
        type master;
        file "lomi.com.zone";
        allow-update { none; };
    };
    
    #增加一个192.168.100的反向域名的解析,具体解析规则在/var/named/192.168.100.zone里
    zone "100.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.100.zone";
        allow-update { none; };
    };
    
    
  6. 定义 lomi.com.zone文件(正向解析)

    • cd /var/named/

    • cp -a named.localhost lomi.com.zone

    • vi lomi.com.zone

      $TTL 1D
      @       IN SOA  dns1.lomi.com. admin.lomi.com.  (
                                              0       ; serial
                                              1D      ; refresh
                                              1H      ; retry
                                              1W      ; expire
                                              3H )    ; minimum
      
      @       IN      NS      dns1               #直接访问lomi.com 从定向到dns1.lomi.com
      dns1    IN      A       192.168.100.66     #dns1.lomi.com
      dev200  IN      A       192.168.100.200	   #dev200.lomi.com
      dev67   IN      A       192.168.100.67	   #dev67.lomi.com
      www     IN      CNAME   dns1			   #www.lomi.com 重定向到 dns.lomi.com
      
  7. 定义反向解析文件

    • cd /var/named/

    • cp -a named.localhost 192.168.100.zone

    • vi 192.168.100.zone # 需要注意的是 ;是注释符号

      $TTL 1D
      @       IN      SOA     dns1.lomi.com. admin.lomi.com.  ( 
                                              0       ; serial    ; 号后面是都无效,和注释差不多
                                              1D      ; refresh
                                              1H      ; retry
                                              1W      ; expire
                                              3H )    ; minimum
      
                      NS      dns1.lomi.com.
      66      IN      PTR     dns1.lomi.com.
      200     IN      PTR     dev200.lomi.com.
      67      IN      PTR     dev67.lomi.com.    #注意末尾有点,表示绝对域名
      
  8. 重新加载

    • rndc reload
    • 或者 systemctl restart named
  9. 在另外的电脑上修改DNS位 上面配置的dns服务器的ip

    • 如果是window 里面的虚拟机修改对应的虚拟机的网卡

    • 如果是别的centos 虚拟机 vi /etc/resolv.conf

      nameserver 192.168.100.66  #前面自定义的DNS服务器的名字
      

      image-20230331163613414

  10. 测试效果

    • window
      image-20230331163854818
    • centos
      image-20230331164004091
  11. 这时候 dns的机子平 dev200.lomi.com是 不能找到,应为虽然它自己是一个DNS服务器,但是它自己的DSN指向的别的位置,同样修改vi /etc/resolv.conf 把DNS指向自己就行了

    image-20230331165214754

  12. 这时候默认也是可以访问外网域名的,有些时候我们需要只解析内网域名

  13. 反查域名 nslookup 192.168.100.200

    image-20230331170318326

  14. DNS 记录类型

    • A 记录是指定域名对应的IP地址(ipv4)
    • AAAA IPv6的 id地址,128位,是ipv4的4倍
    • MX 记录是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器.
    • CNAME 后面一般都是一个 智能DNS,这里会识别用户IP,后面有 CDN网络的支持,实现资源的就近访问
    • PTR 反向记录
    • TXT 指某个主机名或域名的说明
    • NS 记录是指定由哪个DNS服务器解析你的域名。
    • SOA DNS中的主节点
  15. 记录循环写法

    $GENERATE 1-100 ns1$ IN A $GENERATE 1-100 192.168.100.$
    
  16. 根域名服务器位置,/var/named/named.ca,里面放着全球13个根DNS(IPv4的13个,IPV6的更多)

  17. 修改配置以后可以检查语法,然后再重新load

    • named-checkconf named.conf或者named.rfc1912.zones #检查配置文件格式
    • named-checkzone 域名 域名数据文件.zone #检查域名数据文件格式
  18. 地址限制可以 any 表示不限制,或者具体的ip,或者是 192.168.100.0/24 这种网段格式

  19. 记录格式

     name TTL IN RR_type  value
    
  20. 普通记录格式

    name TTL IN RR_type  value  #IN 是 internet的意思,RR_type是记录类型
    
  21. SOA 记录格式

    本域名 IN SOA 主NS 管理员邮箱 (序列号 从NS拉取时间 拉取重试时间 从节点拉取失败过期时间 空映射缓存时间) # 邮箱的@写成.
    
  22. 记录 下一行和上一行内容一样的,可以省略
    下面的记录第一行name除了第一行都省略了,也就是都是@,都是当前本域,IN SOA 没写的也是一样

    @       IN SOA  @ rname.invalid. (
                                            0       ; serial
                                            1D      ; refresh
                                            1H      ; retry
                                            1W      ; expire
                                            3H )    ; minimum
            NS      @
            A       127.0.0.1  
            AAAA    ::1
    
  23. @代表的当前管理的域名,也就是上文中的lomi.com

    • @ 后面的 A记录表示本域名的ip。
    • @后面的 NS,表示 name server 的地址。value 的值必定对应着一条A记录(AAAA也算)
    • @后面的 SOA,便是 name server 中的 master。value的值必定对应着一条NS 记录。
  24. 可以用 name 位置可以用 * 来表示范域,也就是任意域名(建议写到最后一条),效果是只要域名写对了,子域名乱写也有一个默认地址

    *        A       192.1668.100.77  #如果输入没有配置的子域名就会定向到这个IP  
    
  25. 正向解析格式:zone 域名 IN

    #增加一个lomi.com域名的解析,具体解析规则在/var/named/lomi.com.zone里
    zone "lomia.com" IN {
        type master;
        file "lomi.com.zone";
        allow-update { none; };
    };
    
  26. 反向解析式格式: zone ip网段倒写+.in-addr.arpa IN

    #增加一个lomi.com域名的解析,具体解析规则在/var/named/192.168.100.zone里
    zone "100.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.100.zone";
        allow-update { none; };
    };
    
  27. ARPA 所谓“阿帕”(ARPA),是美国高级研究计划署(AdvancedResearchProjectAgency)的简称

  28. PTR(Pointer Record)

  29. RFC(Request For Comments)是由互联网工程任务组(IETF)发布的一系列备忘录。文件收集了有关互联网相关信息

  30. TTL 可以省略,省略的时候使用文件第一行定义的默认值

    $TTL 1D            #默认过期时间 1D
    @       IN SOA  admin.lomi.com. root.lomi.com. (0 1D 1H 1W 3H)
    @       IN      NS      dns1
    dns1    IN      A       192.168.100.66
    dev200  IN      A       192.168.100.200
    dev67   IN      A       192.168.100.67
    www     IN      CNAME   dns1
    
  31. 主从DNS的配置

    • BIND的主从同步是 推拉结合的,拉取依赖设置的时间参数,从节点重启也会拉取信息。推送在主服务器改动的时候(需要 序列号增加并且设置了从服务器)。

    • 可以通过 dnssec-enable、dnssec-validation 设置 表示是否启用DNS加密,加密以后从拿到的文件不是明文

    • 可以通过 allow-transfer 限制从节点的IP,不是这个节点的IP不能同步数据

    • 从服务器的配置,从服务器不用写 具体的 zone 数据文件,但是要在 name.conf 或者 zones文件中协商 域名解析的定义

      #增加一个lomi.com域名的解析,具体解析规则在/var/named/lomi.com.zone里
      zone "lomia.com" IN {
          type slave;            										#这里是 slave
          file "lomi.com.zone";										#这个文件不用定义,会从主取
          masters { 192.168.100.66; };								#这里是主服务器的地址
      };
      
      #增加一个lomi.com域名的解析,具体解析规则在/var/named/192.168.100.zone里
      zone "100.168.192.in-addr.arpa" IN {
          type slave;				 									#这里是 slave
          file "192.168.100.zone";									#这个文件不用定义,会从主取
          masters { 192.168.100.66; };								#这里是主服务器的地址
      };
      
    • 从服务器来取时间是通过 主服务器的 SOA 配置 后面的 参数来确定的
      SOAP记录例子: @ IN SOA admin.lomi.com. root.lomi.com. (0 1D 1H 1W 3H)

      • 第一个参数是序列化,每次修改需要增加(增加了从才会拉取)
      • 第二个参数是拉取时间间隔
      • 第三是拉取失败,重试间隔
      • 第四个是来如果获取不到主的新配置,从节点最多可以多外提供服务多久
      • 第五个参数 空映射缓存时间
    • 主服务配置

      • 主服务器需要通过NS来指定从服务的地址,主服务器zone配置文件修改会推送给NS指定的 name server

        $TTL 1D            #默认过期时间 1D
        @       IN SOA  ns1.lomi.com. zyk.lomi.com. (0 1D 1H 1W 3H)
        @       IN      NS      dns1
        @       IN      NS      dns2                #这里是从NS
        dns1    IN      A       192.168.100.66
        dns2    IN      A       192.168.100.88		#这里是从NS的IP地址
        dev200  IN      A       192.168.100.200
        dev67   IN      A       192.168.100.67
        www     IN      CNAME   dns1
        
    • 主服务器通过 /etc/named.conf 里面的 来控制,允许那些ip可以从自己这里同步数据,默认没有限制

      allow-transfer      { any; };   #any 表示不限制,可以指定位固定网段  192.168.100.0/24
      
  32. 添加子域和配置转发,全球的DNS树就是由DNS父子域构成的,根节点是.,后面的子域是 com,org,等等,然后下面再有下级子域

    • 父域知道它下面的所有子域,子域不知道父域的地址,但是他们都知道根域的地址

    • 子域 配置在 指定域名的 记录文件中 比如lomi.com的记录文件中

      beijing       IN      NS      dns1.beijing                #这里是子域
      beijing       IN      NS      dns2.beijing                #这里是子域
      dns1.beijing       IN      A      192.168.100.188         #这里是子域
      dns2.beijing       IN      A      192.168.100.199		  #这里是子域
      
    • 配置转发 /etc/named.conf

      全局,转发
      Options {
                       forward {first|only}
                       fowwarders {ip;}
               }
      
      #指定域下转发
      zone "ZONE_NAME" IN {
                          type forward;
                          forward {first|only}
                          forwarders {ip;}
                      }
      
    • only,转发服务器没有就返回失败

    • first,第一次去转发服务器查询,如果没有就去根查询

  33. 子域和主从节点配置上的区别

    • 主从上面是一样的配置,从节点的数据来自主节点,目的是作为子主节点的备份

    • 子域是主域的一个叶子节点,主域知道有哪些子域,并且在自己处理不了的时候会把请求转发给子域

    • 从节点的 name 是本域写作@

      @       IN      NS      dns2                #这里是从NS
      
    • 子域的name是子域名,自己处理不了如果子域可以处理会交个子域,如果自己和子域都没法处理会交给根域( /var/named/named.ca 里面记录了13个根域 )。

      beijing       IN      NS      dns1.beijing                #这里是子域
      beijing       IN      NS      dns2.beijing                #这里是子域
      dns1.beijing       IN      A      192.168.100.188         #这里是子域
      dns2.beijing       IN      A      192.168.100.199		  #这里是子域
      
  34. BIND 还能通过 ACL 和 view 来实现智能DNS的效果,能通过ip来决定分配指定域名访问的IP(一般写在/etc/named.rfc1912.zones里面或者 /etc/named.conf里面 )

    #定义 acl 对应的IP
    acl chengdu { 
    	192.168.0.0/24;  #客户ip地址段
    }; 
    
    view chengduView {                       
            match-clients { chengdu; }; # 匹配规则,指定acl
            #对来自 chengdu 的ip,对 lomi.com 域名的解析方式
            zone "lomi.com" IN {    
                    type master;
                    file "sunlinux.com.chengdu.zone";
            };
    };
    
  35. 可以通过 dig,host ,nslookup等命令检查域名解析情况

posted on 2023-03-31 22:45  zhangyukun  阅读(17)  评论(0编辑  收藏  举报

导航