linux学习35-DNS服务和BIND

本文详细介绍了DNS服务和BIND,包括DNS的基本概念、域名级别、寻址原理、资源记录类型及其作用,如SOA、NS、MX、CNAME等。此外,还讲解了DNS服务器的类型,如主DNS、从DNS、缓存DNS。文中进一步阐述了BIND作为DNS管理工具的使用,如何搭建主DNS服务器,以及主从服务器的实现。最后,讨论了DNS的测试命令、反向查找区域的建立、动态更新、子域搭建、转发服务器配置和智能DNS的概念。
摘要由CSDN通过智能技术生成

DNS服务和BIND

1. DNS服务

DNS(Domain Name Service) 应用层协议,基于C/S,服务器端口号为(53/udp向服务器查询时候用到, 主从复制时候用到53/tcp和53/udp)

1.1 DNS概述

  • DNS软件

    1. BIND:Bekerley Internat Name Domain
      官方地址:ISC (www.isc.org),目前最新版本为9.11,centos7.5使用的为9.9版本,市场占有率高
    2. unbound:递归缓存DNS解析服务器,宣传为更加安全的DNS服务器,红帽各版本有集成,目前使用率没有BIND高
      官方地址:http://unbound.net/
  • 名字解析服务的实现方法

    1. DNS服务:分布式服务,只负责解析,不负责连通
    2. 本地名称解析配置文件:/etc/hosts,优先级高于DNS,用于特定环境,例如集群。也叫分散式的名字解析服务
      例如:在文件中定义 www.magedu.com对应ip为8.8.8.8
      [root@localhost  ~]$vim /etc/hosts
      127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
      ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
      8.8.8.8  www.magedu.com     <==定义域名和IP地址行
      [root@localhost  ~]$ping www.magedu.com
      PING www.magedu.com (8.8.8.8) 56(84) bytes of data.     <==将地址翻译成8.8.8.8
      64 bytes from www.magedu.com (8.8.8.8): icmp_seq=1 ttl=53 time=67.9 ms
      
      修改名字解析服务优先级,不建议修改
      /etc/nsswitch.conf
      [root@localhost  ~]$vim /etc/nsswitch.conf
      #hosts:     db files nisplus nis dns
      hosts:      files dns myhostname     <==将files 与dns换位置,files代表的就是hosts文件
      
    3. NIS服务(Network Information Service),一个集中的管理思想,此服务维护了一个数据库,存放着IP地址与名字的对应关系,用户访问NIS服务,NIS查询数据库返回相应结果
  • DNS服务器的类型

    1. 主DNS服务器
      管理和维护所负责解析的域内解析库的服务器
    2. 从DNS服务器
      只负责同步数据,不提供修改功能,为备用服务器
      同步方法有两类
      1. 拉同步:从服务器主动向主服务器拉取数据,拉取的触发条件为同步时间
      2. 推同步:主服务器将数据推送给从服务器,触发条件为解析库发生变化
    3. 缓存DNS服务器(转发器)

1.2 域名级别及寻址原理

  • 以我们常见的网站格式为例,先来解释一下各部分名称

    1. www.magedu.com:全称域名( FQDN)
    2. magedu.com:域名
    3. www:主机名或者别名
  • 而域名等级划分时,全称域名的写法为www.magedu.com.<==多了个点,倒过来排序

    1. 最右边的点[.]:表示根域

    2. com:表示顶级域或者一级域(TLD)

      1. 国家顶级域名(nTLDs):中国cn、美国是us、日本是jp等
      2. 国际顶级域名(iTDs):括com net gov org edu mil int tech 等
    3. magedu:表示二级域(SLD)

    4. 还可以有三级域名,例如www.bj.magedu.com,最多127级域名

    5. www:表示主机名

1.3 DNS解析

Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根–> 顶级域名DNS–>二级域名DNS…

  • DNS寻址原理

    1. 在根域上有一个DNS服务器,它的数据库存放了下级域DNS服务的IP地址和DNS服务器的名称
    2. 而每个一级域名也有自己的DNS服务器,存放的是其下级域的IP地址和DNS服务器的对应关系
    3. 二级域也维护了各自的DNS服务器,只维护了自己的二级域名,例如magedu.com,只维护以此结尾的名称与IP地址
    4. 每个DNS服务器在安装时已经内置了根服务器的地址
      5.客户访问网站时,首先通过hosts文件解析
    5. 如果hosts文件没有解析,则查本机DNS缓存,linux中默认没有缓存。在windows中可在命令栏输入ipconfig/displaydns查询,清缓存ipconfig/flushdns,
    6. 本机缓存没有,则将请求发送给本地DNS服务器,本地DNS服务器查询缓存中是否有目标地址,如果没有就找到根,请求目标网站的ip
    7. 根服务器返回一级域名地址,也就是.com域服务器
    8. 本地服务器再去找一级域名服务器,一级域服务器返回二级域也就是163.com的地址
    9. 本地服务器找到二级域服务器,得到IP地址,将地址写入缓存,并回传给客户,客户再通过http协议(底层为tcp协议),经过握手后访问网站
      在这里插入图片描述
  • DNS查询类型:

    1. 递归查询
      DNS域名服务器代替提出请求的客户机进行域名查询,返回最终的结果交给了客户
    2. 迭代查询
      其他服务器返回一个最佳的查询点提示或主机地址,若此最佳的查询点中包含需要查询的主机地址,则返回主机地址信息;若此时服务器不能够直接查询到主机地址,则是按照提示的指引依次查询,直到服务器给出的提示中包含所需要查询的主机地址为止,例如根服务器返回给本地服务一级服务器地址,就是迭代查询
  • 解析类型:
    正反向解析是两个不同的名称空间,是两棵不同的解析树

    1. 正向解析FQDN --> IP :将名字解析为IP
    2. 反向解析 IP --> FQDN: 将IP解析为名字
      1. 反向解析用到根域下一个特殊的名为ARPA域,叫反向解析域
      2. 反向解析域下面有一个in-addr,再往下为IP地址
      3. 以172.20.0.100为例,查询路线为访问根–>arpa域–>in-addr–>172–>20–>0–>100
  • 解析答案:

    1. 肯定答案
      1. 权威答案:标记为aa
      2. 非权威答案
    2. 否定答案:请求的条目不存在等原因导致无法返回结果

1.4 资源记录

  • 区域解析库:
    如下例中建立的数据库magedu.com.zone,负责解析magedu.com这个区域,所以称为区域解析库,里面有很多的记录组合而成,每条记录叫做资源记录(RR)

  • 资源记录:Resource Record, RR
    区域解析库里面由很多记录组合而成,每条记录叫做资源记录

  • 资源记录类型

    1. SOA(Start Of Authority)
      起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于整个解析库的第一条记录,记录了这个域的相关信息
    2. A (internet Address)
      将名字域IP地址做一个对应关系,FQDN --> IP IPv4地址
      示例
      www.magedu.com  86400  IN   A   101.200.188.230
      生成1-254范围内的HOST记录,也就是HOST1.moli.com    A    1.2.3.1  ...   HOST100.moli.com    A    1.2.3.100
      $GENERATE 1-254 HOST$ A 1.2.3.$
      即使用户输入不加www.,也可以解析的写法
      @   86400  IN  A   192.168.169.128     
      moli.com. IN A 192.168.169.128     效果与上相同
      避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
      *.moli.com.  IN  A  192.168.169.128
      
    3. AAAA
      同A,对应的为IPv6地址
      www.magedu.com  86400  IN   AAAA   IPv6
      
    4. PTR (PoinTeR)
      将IP地址反向解析为名字,IP --> FQDN
    5. NS (Name Server)
      专用于标明当前区域的DNS服务器,当前域有多少DNS服务器,名字是什么,例如备用DNS服务地址
    6. CNAME (Canonical Name)
      别名记录,例如web-nginx01.magedu.com可以将别名设置为www.magedu.com
    7. MX(Mail eXchanger)
      邮件交换器,设定区域中担任邮件伺服器的主机,所有要送往那部机器的mail 都要经过mail exchanger 转送。 而数字则是该主机邮件传递时的优先次序,此值越低表示有越高的邮件处理优先权。
    8. TXT:
      对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,如:SPF(反垃圾邮件)记录,https验证等
      将来搭建加密http服务时,就要像DNS服务商申请一个DNS的TXT记录,服务商给你一个很长的字符串,贴到DNS服务器的配置中就可以了
      示例:_dnsauth IN TXT 2012011200000051qgs69bwoh4h6nht4n1h0lr038x
  • 资源记录定义的格式
    不论哪种记录都包含五项元素

    1. 语法:name [TTL] IN rr_type value
    2. 特点:
      1. @代表当前区域的域名,可以用来引用当前域名,例如@ IN SOA
      2. 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
      3. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
    3. 释义:
    元素 含义
    name 指示拥有资源记录的 DNS 域名,该名称与资源记录所在的控制台树节点的名称相同
    TTL 缓存的时间,生命期,以秒为单位,可定义为类似变量$TTL 86400,那么以下各条相同时间的资源记录就可以省略
    IN 代表Internet,保留下来不动就可以
    rr_type 资源记录类型,例如SOA,表示起始授权记录
    value 记录特定数据,描述资源的信息
1.4.1 SOA记录内容
  • 元素说明
    1. name:
      当前区域的名字,例如“magedu.com.” com后的点必须写,不然系统会自动将域名再补一次,变成"magedu.com.magedu.com."
    2. value:
      有多部分组成,从第3条到第7条使用小括号括起来
      1. 主DNS的名称
        名称可以自定义,例如ns.magedu.com
      2. DNS服务器的管理员邮箱
        因为@在资源记录中有特殊含义,这里用点来代替,例如nsadmin.magedu.com
      3. 序列号:2015042201
        主服务器负责修改查询,从服务器只负责同步数据,主从服务器同步是基于解析库的版本号,比对版本号得知主从服务器解析库版本是否相同,版本号为整数,此记录在主服务器上是由管理员手工指定的,主服务器解析库变化时,其序列递增,主服务器解析库发生变化时,会主动通知从服务器
      4. 刷新时间
        从服务器从主服务器请求同步解析的时间间隔,默认以秒为单位,支持1h、1d表示,例如:2H
      5. 重试时间
        从服务器请求同步失败时,再次尝试时间间隔,应该比同步间隔小 ,例如10m
      6. 过期时间
        从服务器联系不到主服务器时,多久后停止服务,例如1W
      7. 否定答案的TTL值
        不存在的记录缓存时长, 将不正确的域名缓存起来,直接返回结果给用户,不需要查询
  • 示例
    $TTL 86400     <==定义整个记录的TTL时间为86400	
    |magedu.com. | IN | SOA | ns.magedu.com. | nsadmin.magedu.com.| (
    |     name   | IN |TYPE|     value 1     |       value 2      |
    2015042201 ;serial          <==value 3
    2H         ;refresh         <==value 4           
    10M        ;retry           <==value 5
    1W         ;expire          <==value 6
    1D )       ;minimum         <==value 7
    
1.4.2 NS记录
  • 元素说明
    1. name: 当前区域的名字
    2. value: 当前区域的某DNS服务器的名字,例如ns1.magedu.com.
  • 注意
    1. 一个区域可以有多个NS记录
    2. 相邻的两个资源记录的name相同时,后续的可省略
    3. 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
  • 示例,本区域的两台主备DNS服务器
    |   name    | TTL | IN |  TYPE |      value     |     
    |magedu.com.|86400| IN |   NS  | ns1.magedu.com.|       
    magedu.com.  86400  IN     NS    ns2.magedu.com.
    
    由于涉及到字符串,就必须要有对应的A记录去解析为IP,所以在A记录里要有对应NS地址的记录
    ns1.magedu.com.    86400  IN   A   192.168.169.5
    ns2.magedu.com.    86400  IN   A   192.168.169.6
    
1.4.3 MX记录

一个区域内MX记录可有多个

  • 各元素说明
    1. name: 当前区域的名字
    2. value: 当前区域的某邮件服务器(smtp服务器)的主机名,由2部分组成
      1. 服务器的优先级,由数字(0-99)表示,表示此;数字越小优先级越高
      2. 服务器名
  • 例如
    magedu.com.  86400 IN  MX  10  mail.magedu.com.
    86400  IN  MX  20  mail2.magedu.com.       <==name相同,下面的记录可以忽略此元素
    
    涉及到名字,需要在A记录中增加对应解析项
    mail   86400  IN   A   3.3.3.3     <==mail为简写,其后没有加[ . ],会自动补上域名
    
1.4.4 PTR记录
  • 元素说明
    1. name:
      IP,有特定格式,把IP地址反过来写(例如1.2.3.4,要写作4.3.2.1);
      然后加特定后缀:in-addr.arpa.
      所以完整写法为:4.3.2.1.in-addr.arpa.
    2. value: FQDN
  • 示例
    4.3.2.1.in-addr.arpa. 86400  IN  PTR   www.magedu.com.
    如1.2.3为网络地址,可简写成:
    4 86400  IN  PTR  www.magedu.com.
    
    注意:网络地址及后缀可省略;主机地址依然需要反着写
1.4.5 CNAME(别名记录)
  • 元素说明
    1. name: 别名的FQDN
    2. value: 真正名字的FQDN
  • 例如:web-nginx01.magedu.com的别名记录,
    www.magedu.com   86400  IN   CNAME   web-nginx01.magedu.com
    
    涉及到名字,也需要在A记录中增加对应的解析记录
     web-nginx01.magedu.com   86400  IN   A   101.200.188.230
    

2. DNS管理工具BIND

  • DNS服务器配置文件注意项

    1. 一台物理服务器可同时为多个区域提供解析
    2. 必须要有根区域文件;named.ca
    3. 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库
  • BIND安装:centos镜像文件中资源

    [root@localhost  ~]$ yum install bind
    
  • 包文件介绍

    1. 服务名称
      /usr/lib/systemd/system/named.service
    2. 主配置文件,/etc/named.conf
      任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上
      `全局配置`:定义一些功能,比如指定监听端口,从服务器,转发服务类型等
      options {
                                  
      //      listen-on port 53 {
              127.0.0.1; };
      `日志子系统配置`
      logging {
             
      channel default_debug {
             
            file "data/named.run";
             severity dynamic;
      	    };
      };
      `区域定义`:本机能够为哪些zone进行解析,就要定义哪些zone
      zone "." IN {
                             <==" . "代表根域
      	type hint;
      	file "named.ca";         <==负责维护域的数据库,也就是/var/named/named.ca
      };
      
    3. 主程序
      /usr/sbin/named
    4. DNS子配置文件,存放解析信息,例如负责解析的域
      /etc/named.rfc1912.zones
    5. 区域解析数据库,也就是IP地址与域名的对应关系
      /var/named
    6. 配置文件类似于key验证,自编译软件时候,启用rndc命令需要用到
      /etc/rndc.key
  • rndc命令(remote name domain controller)
    默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程
    提供辅助性的管理功能,端口为953/tcp

    1. 格式
      rndc COMMAND
    2. 选项:
    选项 作用
    reload 重载主配置文件和区域解析库文件
    reload zonename 重载区域解析库文件
    retransfer zonename 手动启动区域传送,而不管序列号是否增加
    notify zonename 重新对区域传送发通知
    reconfig 重载主配置文件
    querylog 开启或关闭查询日志文件/var/log/message
    trace 递增debug一个级别
    trace LEVEL 指定使用的级别
    notrace 将调试级别设置为 0
    flush 清空DNS服务器的所有缓存记录
  • 修改DNS服务端口设置,允许其对外服务

    1. 启动dns服务后,绑定的为本地网卡,如果要对外服务,修改配置文件
      udp   UNCONN     0      0        127.0.0.1:53         *:* 
      tcp   LISTEN     0      10       127.0.0.1:53         *:*                  
      tcp   LISTEN     0      5        192.168.122.1:53     *:* 
      
      修改内容为listen-on port 53
      [root@localhost  ~]$vim /etc/named.conf 
      options {
             
          listen-on port 53 {
              127.0.0.1; };      <==修改这里,如果要绑在其他ip上,可以写在后面
          listen-on port 53 {
              127.0.0.1;172.20.50.203;192.168.169.131; };  修改后效果,末尾的;必须写
      
    2. 重新加载服务,查看效果
      [root@localhost  ~]$systemctl reload named
      [root@localhost  ~]$ss -ntul
      tcp   LISTEN     0      10    192.168.169.131:53         *:*                  
      tcp   LISTEN     0      10    172.20.50.203:53           *:*                  
      tcp   LISTEN     0      10    127.0.0.1:53               *:* 
      
    3. 绑定固定的IP地址,一旦Ip地址变更,可能会发生故障,所以建议写灵活,利用DNS自带的关键字localhost,在DNS中意思为本地所有的IP
      [root@localhost  ~]$vim /etc/named.conf 
      	 listen-on port 53 {
              localhost; };  修改后效果,末尾的;必须写
      

3. 搭建一个域的主DNS

  • 在配置文件中定义区域的格式

    zone "ZONE_NAME" IN {
                         <==定义DNS服务器的管理域
    type {
         master|slave|hint|forward};    <==此DNS服务器的类型master()、slave()、hint(root缓冲区域)、forward(代理查询)
    file "ZONE_NAME.zone";               <==此DNS服务器的域数据库文件,名字自定义
    };
    
  • 主配置文件语法检查:
    named-checkconf

  • 解析库文件语法检查:

    |named-checkzone| "magedu.com" |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值