DNS

DNS域名系统缓存

 DNS的相关概念:服务器

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

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

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

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

 DNS系统的做用测试

根据域名服务器所起的做用,能够把域名服务器划分为如下四种不一样的类型:spa

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

    (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


一、构建一个主域名服务器,而后作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


二、构建主、从域名服务器,另外一台虚拟机的地址为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地址);};

这样就能够了

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

构建分离解析就须要使用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

经过图能够清晰看到,使用不一样网络的地址,解析到的地址不一样


四、子域受权的实现

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

通常子域受权都是正向解析

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

被转发的转发服务器须要可以为请求者作递归,不然,转发请求不予进行

转发有两种方式:

     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是转发给主域服务器的,若是区域转发没有,就作全局转发

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息