DNS域名系统

 DNS的相关概念:

    DNS域名称空间:它指定用于组织名称的域的层次结构;

    资源记录(RR):它将DNS域名映射到特定类型的资源信息,以供在名称空间中注册或解析名称时使用;在Linux系统中通常叫“名称解析库(文本文件,位于/var/named/下)”中的每一行称作一个资源记录。

    DNS服务器:它存储和应答资源记录的名称空间

    DNS客户端(解析程序):它查询从服务器来的搜索及将名称解析为查询中指定的资源记录类型

 DNS系统的作用

根据域名服务器所起的作用,可以把域名服务器划分为以下四种不同的类型:

    (1)根域名服务器:是最高层次的域名服务器,也是最重要的域名服务器;

    (2)顶级域名服务器:这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名;

    (3)权限域名服务器:负责一个区的域名服务器;

    (4)本地域名服务器:它虽然不属于域名服务器层次结构,但它对域名系统非常重要;当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。由它来完成查询,然后回复给主机

    wKioL1X42jXgT8aPAADghb7Tj0E224.jpg

   正向解析:根据主机名称(域名)查询对应的IP地址;IP-->FQDN

   反向解析:根据IP地址查询对应的主机域名;FQDN-->IP

 DNS系统的分布式数据结构

    wKiom1X402LyAcN9AAEWoBsm-kI266.jpg

 DNS的查询方式:DNS的查询都是交给本地域名服务器,如果找到直接返回,没有就开始去根那询问,然后一级一级往下进行询问,直到找到,或者报错,然后返回给主机。

    递归查询:如果主机所询问的IP地址,本地域名服务器不知道,那么本地域名服务器就以DNS客户端的身份,向根域名服务器去询问,然后根域名服务器没有也会这样查询,最后返回一个结果

    迭代查询:当根域名服务器收到本地域名服务器发出报文时,如果它有就直接告诉你,没有就会告诉你,你下一次找谁,然后一直这样直到找到,然后结果返回给主机。

下图是两种查询方式的步骤图:

wKioL1X430qgelNXAAKWoon2pI8312.jpg


要想构建一个域名服务器,需要有BIND域名服务基础,即BIND的安装与服务管理;使用BIND构建域名服务器,可以构建主域名服务器,从域名服务器以及缓冲域名服务器


 BIND(Berkeley Internet Name Daemon)

    伯克利Internet域名服务 

    官方站点:https://www.isc.org/

 相关软件包

    bind-9.8.2-0.30.rc1.el6

    bind-utils-9.8.2-0.30.rc1.el6.x86_64

    bind-chroot-9.3.3-7.el6

 BIND服务器端程序

    主要执行程序:/usr/sbin/named

    服务脚本:/etc/init.d/named

    默认监听端口:53

    主配置文件:/etc/named.conf

    保存DNS解析记录的数据文件位于:/var/named/

   主域名服务器(权威)

    特定DNS区域的官方服务器,具有唯一性

    负责维护该区域内所有域名->IP地址的映射记录

    对区域的所有更新都通过此服务器进行;

   从域名服务器

    也称为 辅助域名服务器

    其维护的 域名->IP地址记录来源于主域名服务器

    只从同一个区域的主服务器或其它从服务器同步区域数据文件;

   缓存域名服务器(非权威)

    也称为 唯高速缓存服务器

    通过向其他域名服务器查询获得域名->IP地址记录

    将域名查询结果缓存到本地,提高重复查询时的速度

  DNS服务器的主从如何协调?

    区域数据文件有版本号(序列号): serial

    刷新时间(检查周期):refreshv重试时间(重试周期): retry

    过期时间(失效时长): expire 

    否定应答的TTL值;

  协调过程:从服务器在间隔达到refresh指定的时长后发起同步请求至主服务器;主服务器响应serial,从服务器与本地的serial进行比较;如果主服务器serial大于本地,意味主服务器区域数据文件更新了,因此请求同步;

资源记录(RR)

 资源记录的编辑:

  资源记录类型:

    SOA:起始授权记录;一个区域文件有且只能有一个SOA记录;SOA还必须是第一条资源记录

    NS:名称服务器

    MX:邮件交换器

    A:IPv4

    AAAA:IPv6

    PTR:指针,IP-->FQDN,反解的标识

    CNAME:正式名称

   资源记录的定义格式:语法:name [ttl]  IN  RR_type  value


首先安装bind

配置文件在/etc/named.conf

日志文件在/var/named/data/named.log

rr资源记录文件在/var/named目录下的文件


下面看一下示例:

  说明:主服务器IP为172.16.33.11,从服务器IP为172.16.33.20

主服务器配置:

[root@localhost ~]# vim /etc/named.conf

首先如下图注释这些行:

wKioL1YCJ8rCsDMVAAI80rWCD78317.jpg

[root@localhost ~]# vim /etc/named.rfc1912.zones

在全文末尾编辑并添加 图2 ①②字段:

wKioL1YCOmOCnjLIAADuAyrTZxc887.jpg

图2说明:①主服务器正解zone文件

         ②主服务器反解zone文件

根据配置文件所指向的目录创建chaochao3目录权限如下:(该目录下所有文件都配置该权限)

wKiom1YCK__TJ8y4AACf4100Hrw307.jpg

[root@localhost ~]# vim /var/named/chaochao3/chaochao3.com.zone

编辑添加如下字段并保存(篮框内容请忽略)

wKiom1YCO-eg_DonAAENsxL0qb8893.jpg

[root@localhost ~]# vim /var/named/chaochao3/33.16.172.arpa 

wKioL1YCPRTCO159AAEcMRhg9Zk175.jpg

重启服务或重读配置:

    [root@localhost ~]# service named restart  (重启服务)

    [root@localhost ~]# service named reload   (重读配置)

wKiom1YCPeSQqP62AAJ5-2Bmz24927.jpg

wKioL1YCQF-wluGjAALyyQoNWoY931.jpg

以上是主服务器正反解析的配置,再看从服务器:

 主从复制:

    1、应该为一台独立的名称服务器;

    2、主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;

    3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置/var/named/slaves/目录中;

    4、主服务器得允许从服务器作区域传送;

    5、主从服务器时间应该同步,可通过ntp进行;

    6、bind程序的版本应该保持一致;否则,应该从高,主低;

  [root@localhost ~]# vim /etc/named.conf   注释部分内容如下图:

  wKiom1YCV_Oxqc0bAAIDt5383RI659.jpg

  [root@localhost ~]# vim /etc/named.rfc1912.zones 在尾部添加如下内容

  wKiom1YCXAuQqXUhAADQqs0XMpg012.jpg

  [root@localhost ~]# dig axfr chaochao3.com @172.16.33.11  同步记录

  wKiom1YCXdXC9plqAAFKSpJXXc0028.jpg

  同样:[root@localhost ~]# cat /var/named/slaves/33.16.172.arpa 也可以得到类似结果,除了格式略显奇怪,内容与原主服务器配置相同,这是从服务器直接同步过来的,但要做到时时同步还需为主服务器添加一个通知机制:

  首先在主服务器上配置named.rfc1912.zones文件,添加图2 ③字段(172.16.33.20为从服务器IP):

  wKioL1YCOmOCnjLIAADuAyrTZxc887.jpg

  wKiom1YCYDCB9C9CAAEVkFTpjIU050.jpg

  此时若修改主服务器上的zone文件则从服务器会自动更新:

  wKioL1YCYi-S4UxLAAFFIGtA_VE379.jpg

  主服务器执行[root@localhost ~]# service named reload

  wKiom1YCYi6zRunGAAFUSZD5OA0043.jpg

下面看一下子域:

子域授权:就是让一个大的区域划分成多个子区域,然后让每个子区域对其负责的区域进行授权

一般子域授权都是正向解析

首先到定义子区域,然后定义转发服务器

被转发的转发服务器需要能够为请求者做递归,否则,转发请求不予进行

转发有两种方式:

  a、全部转发:凡是对非本机所负责解析的区域的请求,统统转发给指定的服务器

    语法格式:

     Options{

      forward {first|only}(first表示先转发指定的区域服务器,如果没结果再去找根;only是只转发给指定的区域服务器,有没有结果,都不会去找根)

      fowwarders

     }

    b、区域转发:仅转发对特定的区域的请求到某服务器

       语法格式: 

        zone "ZONE_NAME" IN{

            type forward;

            forward {first|only}

            forwarders

            }

    wKiom1YCbY7hOw32AAEvMXnhK-o962.jpg

    wKiom1YCfs7BuC0HAAMP5D-G_Uc642.jpg

先在子域服务器(172.16.33.20)上配置:

[root@localhost ~]# vim /etc/named.rfc1912.zones添加下图蓝框字段: 

  wKiom1YCZJagYLBbAAD61zORjfE083.jpg   接下来,

  wKioL1YCZUfi28BqAAEkB4rcVk0513.jpg

  wKioL1YCZk2xNCIWAAJTogwp9Ck407.jpg

  wKiom1YCZqejkdgPAAKZV6aFB-M375.jpg

  在主服务器编辑图4 ①字段:

  wKioL1YCOdSghQPoAAIO6EI9imU843.jpg

  wKioL1YCZ6SDB-9dAAKhR40EaBc815.jpg

视图:

一个bind服务器可定义多个view,每个view中可定义一个或多个zone;

每个view用一来匹配一组客户端;

多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件;

  注意:

    (1) 一旦启用了view,所有的zone都只能定义在view中;

    (2) 仅有必要在匹配到允许递归请求的客户所在view中定义根区域;

    (3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表;

示例:

BIND服务器IP为172.16.249.115

[root@localhost ~]# vim /etc/named.conf  注释如下内容:

wKioL1YCdEfjsd38AAFmb9nQxnI933.jpg

wKioL1YCdGLg1q33AABXziah154186.jpg

假定:

    某WEB服务器存在两个IP,公网IP为172.16.33.20,私网IP为172.16.33.21

    现有两台主机,公网主机IP为172.16.33.10,私网主机IP为172.16.33.15,且私网主机和WEB服务器处于同一私网

[root@localhost ~]# vim /etc/named.rfc1912.zones    编辑如下内容:

wKioL1YCerLzgHLYAAOH6bKBnuc962.jpg

wKioL1YCdlfwm7BmAAD1ZXWpfIE605.jpg

wKiom1YCdo3zubnDAAEByxpPgns744.jpg

[root@localhost ~]# ifconfig eth0 172.16.33.10

wKiom1YCd_eyu9LUAAIsS5X4xaQ198.jpg

[root@localhost ~]# ifconfig eth0 172.16.33.15

wKiom1YCeHOR3AUCAAIoCXPhU9c172.jpg