DNS

DNS

DNS解析

  • DNS名称解析方式:
    名称 –> IP:正向解析
    IP –> 名称:反向解析
    注意:二者的名称空间,非为同一个空间,即非为同一棵树;因此,也不是同一个解析库;

  • DNS查询类型:
    递归查询:一般是客户机和服务器之间的查询;即只发送一个请求,其他的工作交由上层服务器去解决;
    迭代查询:一般是服务器和服务器之间的凡是,即最起初的DNS服务器,由上而下依次从根发送请求,直到查找到目标主机;

    • 一次完整的查询请求经过的流程:
      Client –> hosts文件 –> DNS Local Cache –> DNS Server (recursion) –>
      自己负责解析的域:直接查询数据库并返回答案;
      不是自己负责解析域:Server Cache –> iteration(迭代)
    • 解析答案:

      • 肯定答案:当请求时正好有结果,然后回应,正向应答;
        否定答案:不存在查询的主机,因此,不存在与其查询主机对应的值;
        权威答案:由直接负责的DNS服务器返回的答案;
        非权威答案:DNS服务器中的信息时之前缓存下来的;

DNS服务器

  • 负责解析至少一个域:

    • 主名称服务器;
      辅助名称服务器;
  • 不负责解析:

    • 缓存名称服务器;
  • 主-辅DNS服务器:

    • 主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行;

    • 从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库;但只能进行读操作;

      • “复制”操作的实施方式:

        • 序列号:serial, 也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
        • 刷新时间间隔:refresh, 从服务器每多久到主服务器检查序列号更新状况;
        • 重试时间间隔:retry, 从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
          重试时间间隔不能小于刷新时间间隔;
        • 过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
          过期时长一般设定比较长,方便管理员进行维修后使得从服务器找到主服务器,而不至于关闭DNS服务
        • 否定答案的缓存时长:
      • 主服务器”通知“从服务器随时更新数据;

      • 区域传送:

        • 全量传送:axfr, 传送整个数据库;
          增量传送:ixfr, 仅传送变量的数据;

资源记录

  • DNS数据库:解析过程中的域名的解析记录;

    • FQDN –> IP
      正向解析库;正向区域
    • IP –> FQDN
      反向解析库;反向区域
  • 区域(zone)和域(domain)
    区域是物理概念;域是逻辑概念;

    • 每个域名所对应的解析记录称为zone(区域)
    • FQDN:完整主机名,由主机名和域名构成;
  • 资源记录:Resource Record, 简称RR;
    记录有类型:A, AAAA, PTR, SOA, NS, CNAME, MX
    语法: name [TTL] IN RR_TYPE value

    • 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    ;序列号
                                2H            ;刷新时间
                                10M           ; 重试时间
                                1W            ; 过期时间
                                1D )          ; 否定答案的TTL值,     
        除第一个序列号外,其他四个的单位默认为秒,也可指定单位:D(天)、M(分钟)、H(小时)、W(周)。
    • 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:
      name: 当前区域的区域名称
      value:当前区域某邮件交换器的主机名;
      注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;

      magedu.com.         IN     MX     10      mx1.magedu.com.
      magedu.com.         IN     MX     20      mx2.magedu.com.
    • A:
      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:
      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.magedu.com.
    • CNAME:
      name:FQDN格式的别名;
      value:FQDN格式的正式名字;

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

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

DNS协议的实现:

DNS协议 –> BIND, PowerDNS(轻量级)

  • bind程序环境:
    主程序:/usr/sbin/named
    Unit File:/usr/lib/systemd/system/named.service
    配置文件:/etc/named.conf
    区域解析库文件:/var/named

  • 关闭dnssec功能:
    /etc/named.conf

    dnssec-enable no;
      dnssec-validation no;
  • 解析一个区域:

    • 定义:/etc/named.rfc1912.conf

      zone “ilinux.io" IN {
            type master;
            file "ZONE_FILE";
      }
    • 定义解析库文件:/var/named/ZONE_FILE

      $TTL 600
      ilinux.io.      IN      SOA     ilinux.io.      nsadmin.ilinux.io. (
                            2017052301
                            1H
                            5M
                            1W
                            6H )
                            IN      NS      dns1.ilinux.io.
                            IN      NS      dns2.ilinux.io.
      dns1.ilinux.io. IN      A       172.16.0.67
      dns2.ilinux.io. IN      A       172.16.0.68
      www.ilinux.io.  IN      A       172.16.0.1
      web             IN      CNAME   www

Bind

BIND: Berkeley Internet Name Domain

  • dns: 一个协议
    bind: dns协议的一种实现
    named:bind程序的运行的进程名

程序包:

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

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

    • CentOS 6: service named start
      CentOS 7: systemctl start named.service

bind:

  • 主配置文件:/etc/named.conf
    包含在内的其它文件;
    /etc/named.iscdlv.key
    /etc/named.rfc1912.zones
    /etc/named.root.key

    默认指向的DNS服务器:/etc/resolv.conf

  • 解析库文件:
    每一个域文件都放在/var/named/目录下;
    一般名字为:ZONE_NAME.zone

  • 注意:

    1. 一台DNS服务器可同时为多个区域提供解析;
    2. 必须要有根区域解析库文件: named.ca;
    3. 还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库;

      • 正向:named.localhost
        反向:named.loopback
    4. rndc:remote name domain contoller
      953/tcp,但默认监听于127.0.0.1地址,因此仅允许本地使用;
  • 主配置文件格式:/etc/named.conf

    • 全局配置段:
      options { … }

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

        listen-on port 53 { 172.16.100.67; };
        //listen-on-v6 port 53 { ::1; };
      • 学习时,建议关闭dnssec

        dnssec-enable no;
          dnssec-validation no;
          dnssec-lookaside no;
      • 关闭仅允许本地查询:

        allow-query { any; };
        或
        //allow-query  { localhost; };

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

    • 日志配置段:
      logging { … }
    • 区域定义段:
      zone { … }

      zone "ZONE_NAME" IN {
          type master|slave|hint|forward;
          file "ZONE_NAME.zone";
          allow-update { none; };
      };
      
      type:该zone的类型,主要类型有:针对根的hint;主DNS的master;从DNS的slave和专门用于转发的域类型forward;除了根以外默认为master;
      file:该zone的文件名称;
      ZONE_NAME:表示要解析的域名;正解时就为域名的本身;反解时有固定的格式:IP 网段倒着写.ip-addr.arpa;
      • 那些由本机负责解析的区域,或转发的区域;
    • 检查配置文件语法错误:
      ~]# named-checkconf [检查:/etc/named.conf]

测试工具

dig, host, nslookup,rndc
安装dig、nslookup,yum install bind-utils –

  • dig命令:
    dig [-t RR_TYPE] name [@SERVER] [query options]

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

    • 查询选项:
      +[no]trace:跟踪解析过程;
      +[no]recurse:进行递归解析;

    • 反向解析测试
      dig -x IP

    • 模拟完全区域传送:
      dig -t axfr DOMAIN [@server]

  • host命令:
    host [-t RR_TYPE] name SERVER_IP

  • nslookup命令:
    nslookup [-options] [name] [server]

    • 交互式模式:

      nslookup>
      server  IP:以指定的IP为DNS服务器进行查询;
      set  q=RR_TYPE:要查询的资源记录类型;
      name:要查询的名称;
  • rndc命令:named服务控制命令

    • rndc status
      rndc flush
      rndc reload:让服务器重载配置文件和区域数据文件

    • 问题示例:

      出现报错:
          ~]# rndc reload
          rndc: neither /etc/rndc.conf nor /etc/rndc.key was found
      
        分析:可能是配置文件和软件的版本不匹配
        解决:删除旧的配置文件,重新安装bind
              rm -rf /etc/named*
              rm -rf /var/naemd/*

配置解析一个正向区域:

以magedu.com域为例:

  1. 设置主配置文件(/etc/named.conf)中的全局定义;

  2. 定义区域
    在主配置文件中(/etc/named.conf)或主配置文件辅助配置文件(/etc/named.rfc1912.conf)中实现;

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

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

  3. 建立区域数据文件(主要记录为A或AAAA记录)
    在/var/named目录下建立区域数据文件;

    • 文件为:/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
  4. 让服务器重载配置文件和区域数据文件

    ~]# rndc  reload 或
     ~]# systemctl  reload  named.service

配置解析一个反向区域

  1. 定义区域
    在主配置文件(/etc/named.conf)或主配置文件辅助配置文件中(/etc/named.rfc1912.zones)实现;

    zone  "ZONE_NAME"  IN  {
             type  master|slave|hint|forward;
             file  "ZONE_NAME.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.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
  3. 让服务器重载配置文件和区域数据文件

    ~]# rndc  reload 或
     ~]# systemctl  reload  named.service

主从服务器:注意:从服务器是区域级别的概念;

配置一个从区域:

  • On Slave

    1. 定义区域

      定义一个从区域;
      
      zone "ZONE_NAME"  IN {
             type  slave;
             file  "slaves/ZONE_NAME.zone";
             masters  { MASTER_IP; };
      };
    2. 配置文件语法检查:named-checkconf

    3. 重载配置

      rndc  reload
      systemctl  reload  named.service
  • On Master

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

      ...
             IN      NS      ns1.linux.io.
             IN      NS      ns2.linux.io.
      ns1     IN      A       192.168.209.134    master
      ns2     IN      A       192.168.209.135    slave
      ...
  • 测试

    • 注意:使用从服务器进行解析;
  • 当主服务器发生改变时,改变序列号比之前的大–> rndc reload –> tail /var/log/messages,消息显示从服务器到主服务器中更新数据;

子域授权

  • 在父域服务器中的操作:

    1. 在父域服务器/var/named/ZONE_NAME.zone添加配置:

      示例:在父域/var/named/iounix.com.zone
      
               2017052702          ;修改为:2017052703   序列号增大
       ops     IN      NS      ns1.ops.iounix.com.
       ns1.ops IN      A       192.168.209.138
      
       正向解析区域授权子域的方法:xxx.ZONE_NAME   IN    NS
       ...
       ops.magedu.com.         IN     NS      ns1.ops.magedu.com.
       ops.magedu.com.         IN     NS      ns2.ops.magedu.com.
      
       ns1.ops.magedu.com.     IN     A     IP.AD.DR.ESS
       ns2.ops.magedu.com.     IN     A     IP.AD.DR.ESS
       ...

转发

  • 定义转发:
    注意:被转发的服务器必须允许为当前服务器做递归;

    1. 区域转发:仅为需要转发的服务器,转发对某特定区域的解析请求;

      需要转发的服务器中;如果是子域,可实现对父域中的zone解析;
      
      zone  "ZONE_NAME"  IN {
             type  forward;
             forward  first|only;
             forwarders  { SERVER_IP; };
      };

      first:首先转发;转发器不响应时,自行去迭代查询;
      only:只转发;

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

      在需要转发的服务器中设置
      
      options {
             ... ...
             forward  first|only;
             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";
              };
      };

原创文章,作者:s,如若转载,请注明出处:http://www.178linux.com/77273

(0)
ss
上一篇 2017-05-31
下一篇 2017-05-31

相关推荐

  • 二叉树的应用详解 – 数据结构

    概述: 平衡树——特点:所有结点左右子树深度差≤1 排序树——特点:所有结点“左小右大字典树——由字符串构成的二叉排序树判定树——特点:分支查找树(例如12个球如何只称3次便分出轻重)带权树——特点:路径带权值(例如长度) 最优树——是带权路径长度最短的树,又称 Huffman树,用途之一是通信中的压缩编码。 1. 二叉排序树(二叉查找树 Bina…

    Linux干货 2015-04-07
  • sed 相关概念总结

    文件查看命令:cat, tac,rev cat [OPTION]… [FILE]… -E: 显示行结束符$ -n: 对显示出的每一行进行编号 -A:显示所有控制符 -b:非空行编号 -s:压缩连续的空行成一行 [root@CentOS7 ~]# cat yyy [root@CentOS7 ~]# cat -A yyy $ tac: 把…

    Linux干货 2016-08-12
  • 正则表达式字符集

    POSIX Description ASCII Unicode Shorthand Java [:alnum:] Alphanumeric characters [a–zA–Z0–9] [\p{L}\p{Nl}  \p{Nd}] \p{Alnum} [:alpha:] Alphabetic characters …

    Linux干货 2017-07-07
  • 第二周练习作业

    第二周作业 1、2、4、5 题博客中已经总结 3、请使用命令行展开功能来完成以下练习: (1)、创建/tmp目录下的:ac, ad, bc, bd (2)、创建/tmp/mylinux目录下的: mylinux/     ├── bin     ├── boo…

    Linux干货 2016-11-06
  • python基础 习题总结

    pyenv 编程题目总结(99乘法表 打印菱形与闪电 斐波那契数列 素数 猴子吃桃) 原反补码与异或运算 list列表

    Linux干货 2018-03-25
  • Linux用户及文件权限管理

    Linux,用户,用户组,文件,权限

    Linux干货 2017-10-29