DNS

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,使用yum install bind 安装即可(如有问题,可以查看本人前面的文章)


DNS正向解析

首先安装bind

配置文件在/etc/named.conf

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

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

  

以CentOS6为例主机的IP地址为172.16.249.100


1、构建一个主域名服务器,然后做DNS正向解析和反向解析

   首先修改配置文件/etc/named.conf

如下图:

wKiom1X45rixznWMAAH2z6yNqIg398.jpg

wKioL1X46O6xLIwPAAGRfO0Rc8U349.jpg

然后在/var/named/下创建jjj目录,然后在里面创建名为jjj.zone和jjj.in.zone的文本文件(这两个文件的名称与你在配置文件写入的名称一致)

 注意:其属组必须为named,如果不是需要使用chown 命令进行修改(chown root:named *)

wKiom1X458nxuGjmAADiHh7dUGg753.jpg

然后在文件jjj.zone中写入如下内容:

wKiom1X46BTwisaPAADixFdUA9c453.jpg

在jjj.in.zone中写入

wKiom1X46ICiSMV9AACTUyzo5QA170.jpg


然后启动服务,进行测试(使用dig命令进行测试)

正向解析

wKiom1X46dTTPjITAAK8zCzUcPw630.jpg

反向解析

wKioL1X47AqwEpoSAAKi5ja3d98749.jpg


2、构建主、从域名服务器,另一台虚拟机的地址为172.16.249.129

主域名服务器的配置文件修改为下图所示:

wKiom1X47CfSIVbGAAEdqIwKjcI953.jpg

然后从域名服务器的配置如下:

wKioL1X5DZfRG8bIAAIJuoBOQ0A686.jpg

wKioL1X5DZeB43YAAAEmzG6lHHg166.jpg

然后主域名服务器(172.16.249.100)的/va/named/jjj/jjj.zone内添加

wKioL1X5DwrDCcOcAAF-BrYL3t4010.jpg

重启主域名服务器,或者重新读取让刚设置的内容生效,(rndc reload)

然后在从域名服务器内使用下面命令:

wKiom1X5DNTz86FnAAKiwA6nR5o001.jpg

然后在从域名服务器(172.16.249.129)的/var/named/slaves中会多两个文件,就是从主域名服务器同步过来区域配置文件

然后查看下

wKiom1X5DkXA_osCAAFYxc3l_2I876.jpg

更主域名服务器的文件内容一样

然后在主服务器的区域文件中修改,然后使用命令kill -1 $(pidof named)重读,从服务器的区域文件会立即更新

主服务器的区域文件

wKiom1X5D0jQ_Se9AAEINiAvnRc178.jpg

然后在从服务器中使用cat /var/named/slaves/jjj.zone

wKiom1X5D8jwjGxfAAF8AMVWTeY866.jpg

立即同步了,

缓存服务器的构建,比较简单,在这里就不演示了,就是在最原始的配置文件中,

修改 listen-on port 53 { ***.***.***.***; };和allow-query   { ** };

然后在options {};加入 forwarders { IP(这是主域名服务器的ip地址);};

这样就可以了

3、构建分离解析主域名服务器

构建分离解析就需要使用view这个关键字,然后所有的zone都要放在view中了,

为了简便,我就用172.16.249.100代表一个网络,172.16.249.129代表一个网络,而且反向解析就不配置了,都是一样的,以正向解析

首先更改主域名服务器的配置文件

wKiom1X5PsOzmlZPAAEWsT0m4xM578.jpg

wKioL1X5QQnzZJD9AAEq6aJTJ_U001.jpg

然后在/var/named/jjj/创建文件jjj.zone.local和jjj.zone.other保证其属组为named

jjj.zone.local中的内容如下图:

wKioL1X5QoHwZ8o4AAD-pzOUyVM152.jpg

jjj.zone.other文件中的内容为:

wKiom1X5QNHSZsxlAAENqaf5D4M277.jpg

然后服务重启,进行测试

wKioL1X5Q-Wi82FAAAJ7Et4fU4s021.jpg

wKiom1X5Qa-C3kA4AAKfPVYksMU143.jpg

通过图可以清晰看到,使用不同网络的地址,解析到的地址不同


4、子域授权的实现

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

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

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

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

转发有两种方式:

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

       语法格式:

        Options{

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

            fowwarders

            }

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

       语法格式: 

        zone "ZONE_NAME" IN{

            type forward;

            forward {first|only}

            forwarders

            }


父区域的配置文件(/etc/named.conf),把以前做的配置删掉,恢复到原始状态,然后把下面这些行注释掉然后启动服务

wKiom1X5TH_RqXiOAAKDWEY30Hc763.jpg

然后编辑 /etc/named.rfc1912.zones文件,在里面新增一个zone

wKioL1X5UFbw5HPhAAEINKbfQMQ755.jpg然后使用rndc reload 然后使用rndc status可以查看这个新的区域已经启动了

wKioL1X5URKwXew4AAE_mhFykF4207.jpg

还可以查看配置文件来看是否启动成功,(tail /var/log/messages)

然后在/var/named/下创建区域文件jjj.zone,然后编辑如下:

wKiom1X5UQywwp3EAAEbeBvks4E831.jpg


然后检查语法,修改权限和属组

wKiom1X5UeLBksFcAAEgT18XciM652.jpg

然后查看日志,或者使用dig验证下,是否启动成功

wKioL1X5Xb2SP2M6AAKFVCLYots295.jpg

这样一个正向解析的主域名服务器就做好了

然后继续编辑/var/named/下的jjj.zone文件

wKioL1X5Xy3xWH5kAAFH3w47Dy8536.jpg


这样子域就创建好了,然后在同步,查看zones并没有变化,但子域已经创建好了

然后启动另一个虚拟机,然后创建子域服务器,首先要创建缓存域名服务器

跟主域名服务器一样,先编辑/etc/named.conf如下:

wKiom1X5XsLy0X4uAALFp7mQ34E747.jpg

然后启动服务 service  named  start 

wKioL1X5YYaz49UiAADonplmai4875.jpg

确定启动成功了,然后编辑区域库文件/etc/named.named.rfc1912.zones文件

wKiom1X5YFjwtI9zAABhtZwRs7w808.jpg


然后重读下,会发现多一个区域,然后查看日志文件,成功,但文件找不到,是因为我们没有创建这个文件,然后在/var/named/下创建ops.jjj.zone

wKioL1X5Z4HyM-XVAAED6Y2yH-Q493.jpg

然后执行rndc reload,查看日志就会发现启动成功,没有错误了

要保证ops.jjj.zone的属组为naemd

wKiom1X5aUHyUhOcAAKHSqCr7J0769.jpg

这就证明创建成功了,可以解析子域自己的了

然后去主域名服务器中使用dig -t A www.ops.jjj.com @172.16.249.100这个时候是查不到的

然后使用dig -t NS  ops.jjj.com @172.16.249.100,也是查不到的,域名服务器默认递归帮我们查找

,这时候在命令后面加上,+norecurse 就可以了

dig -t NS  ops.jjj.com @172.16.249.100  +norecurse

wKioL1X5cPDyk4poAAKC57s5W4I184.jpg

然后在查看下A记录

wKioL1X5ctfzkxVvAAJ2Zzuqq3I517.jpg

也可以查找到,但这不是真实存在的,是自己作为父域有子域路径,但dig命令不能返回我们想要的结果


下面做转发,让子域不找根,直接来找父域,实现子域到父域之间的查询

我们的主域名服务器因为不能连接互联网,所以不能找根,但自己的网关是介入互联网的,可以指定网关的地址去解析

例如:我们在主域名服务器(172.16.249.100)解析 www.baidu.com  当你不联网是解析不到的,

wKiom1X5dISiUxz2AAL7hgybkzY425.jpg

为了保证解析都能找到,我们在主域名服务器上,配上转发,指向172.16.0.1

编辑主域名服务器上/etc/named.conf文件

wKiom1X5dX-DIhM7AAIrDFU6ThQ866.jpg

然后保存,重新启动服务,这样还是不行

需要修改,/etc/named.conf

wKioL1X5hiaA3SmcAAF6dX6hZvg373.jpg

然后在重启测试就可以了

wKiom1X5hDOCHlkRAANOEZ35acE335.jpg


下面我们先做全局转发,在子域服务器上编辑,/etc/named.rfc1912.zones

文件

wKioL1X5gkXz-9UdAACL1fuNgfo390.jpg

然后修改/etc/named.conf文件

wKiom1X5hJzQALS0AAFWcek75hs638.jpg

主域名服务器上的/etc/named.conf文件中,刚才测试加的转发要注释掉

wKioL1X5iK_TorRkAADR7RM1MLA260.jpg

然后在主域名服务器上测试,dig -t A www.ops.jjj.com @172.16.249.100查询子域的

wKiom1X5htfyrS3wAAKx0kfqXh4863.jpg

在子域服务器上测试解析,dig -t A www.jjj.com @172.16.249.129

wKioL1X5jeuwlDR8AAJwlEZSqek192.jpg

 

可以解析到

这样,子域授权域名服务器就做好了

如果在子域服务器/etc/named.conf也做了全局转发,但是区域转发优先级高,所以如果查找jjj.com是转发给主域服务器的,如果区域转发没有,就做全局转发





你可能感兴趣的:(dns)