码迷,mamicode.com
首页 > 其他好文 > 详细

DNS

时间:2015-09-17 15:37:05      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:dns

DNS域名系统

 DNS的相关概念:

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

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

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

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

 DNS系统的作用

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

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

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

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

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

    技术分享

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

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

 DNS系统的分布式数据结构

    技术分享

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

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

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

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

技术分享


要想构建一个域名服务器,需要有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

如下图:

技术分享

技术分享

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

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

技术分享

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

技术分享

在jjj.in.zone中写入

技术分享


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

正向解析

技术分享

反向解析

技术分享


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

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

技术分享

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

技术分享

技术分享

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

技术分享

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

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

技术分享

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

然后查看下

技术分享

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

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

主服务器的区域文件

技术分享

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

技术分享

立即同步了,

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

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

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

这样就可以了

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

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

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

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

技术分享

技术分享

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

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

技术分享

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

技术分享

然后服务重启,进行测试

技术分享

技术分享

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


4、子域授权的实现

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

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

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

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

转发有两种方式:

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

       语法格式:

        Options{

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

            fowwarders

            }

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

       语法格式: 

        zone "ZONE_NAME" IN{

            type forward;

            forward {first|only}

            forwarders

            }


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

技术分享

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

技术分享然后使用rndc reload 然后使用rndc status可以查看这个新的区域已经启动了

技术分享

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

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

技术分享


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

技术分享

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

技术分享

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

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

技术分享


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

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

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

技术分享

然后启动服务 service  named  start 

技术分享

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

技术分享


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

技术分享

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

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

技术分享

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

然后去主域名服务器中使用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

技术分享

然后在查看下A记录

技术分享

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


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

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

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

技术分享

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

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

技术分享

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

需要修改,/etc/named.conf

技术分享

然后在重启测试就可以了

技术分享


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

文件

技术分享

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

技术分享

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

技术分享

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

技术分享

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

技术分享

 

可以解析到

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

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




本文出自 “10520982” 博客,请务必保留此出处http://10530982.blog.51cto.com/10520982/1695520

DNS

标签:dns

原文地址:http://10530982.blog.51cto.com/10520982/1695520

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!