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)
上一篇 2017-05-31 20:24
下一篇 2017-05-31 20:26

相关推荐

  • shell脚本编程

    shell俗称壳(用来区别于核),提供使用者使用界面(命令解析器),它接受用户命令,然后调用相应的应用程序。 同时它还是一种程序设计语言,作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设计好的一连串的命令。作为程序涉及语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。 一、shell脚本基础概念 …

    Linux干货 2016-08-16
  • 计算机的组成及其功能

    计算机的组成及其功能 计算机由五部分组成 运算器 实现算术运算和逻辑运算(和控制器组成CPU) 控制器 控制总线的使用权限,完成寻址和控制对内存当中的访问权限是做读访问还是写访问 存储器 内存,RAM(Random Access Memory) 输入(Input) 下指令,提供数据 输出(Output) 输出数据加工的结果

    2018-02-22
  • 10个有用的Linux命令面试问题及答案

    1. 如何暂停一个正在运行的进程,把其放在后台(不运行)? 答案:为了停止正在运行的进程,让其在后台运行,我们可以使用组合键 Ctrl+Z。 2. 什么是安装Linux所需的最小分区数量,以及如何查看系统启动信息? 答案:单独一个/root分区足以执行所有的系统任务,但是强烈建议安装Linux时,需要至少三个分区:/root,/boot,/swap。一个ID…

    2017-09-05
  • Linux系统网络属性管理

        每台计算机主机连入internet都必须给主机设定以个合法的IP地址。这些IP参数大概包括IP地址、子网掩码、网关、路由、DNS等。在Linux中,大多数命令配置网络配置都是临时生效,想要网络服务永久有效就必须写入配置文件中,所以有时候更改配置重启主机是为了让内核重读配置文件到内核中,因为配置文件属于用户空间的文件。大多数网络配置…

    Linux干货 2016-09-18
  • Linux的发展史

    引言: 开源是什么?什么是Unix 、Linux ?这两种操作系统又有什么关联?    大家当前在用最常见的电脑系统是眼前的Windows ,但为何我们要花学习Linux 的发展史? 通过下面的介绍,我们能大致了解互联网发展的一些问题,以及Linux和Unix的基本概念、历史、发展情况。 一、操作系统介绍 内核(kernel)负责控制硬…

    Linux干货 2016-10-19
  • 【招聘福利】三生石/郑州/6-10K

    三生石科技 岗位职责: 1、熟悉Linux系统环境/内核参数/系统调用接口等,对系统、网络和应用的原理等有较深刻的理解; 2、熟悉Linux操作系统的管理部署、配置和调优; 3、熟悉服务器架构部署、负载均衡、CDN等; 4、了解mysql数据库的基本管理技能,有Apache/Tomcat/MySQL等服务的优化配置经验; 5、了解常用系统自动化监控软件的使用…

    Linux干货 2015-11-10