DNS协议简介

     DNS(域名系统)是一种能够完成从名称到地址或从地址到名称的映射系统。使用DNS,计算机用户可以间接的通过域名来完成通信。Internet中的DNS被设计成为一个联机分布式数据库系统,采用客户服务器方式工作。分布式的机构使DNS具有很强的容错性。

 

 DNS系统的作用:

  正向解析:根据主机名称(域名)查找对应的IP地址

  反向解析:根据IP地址查找对应的主机域名将域名解析为IP地址

 

 解析过程:

– 客户机向DNS服务器发送域名查询请求

– DNS服务器告知客户机Web服务器的IP地址

– 客户机与Web服务器通信

 
  

clip_p_w_picpath002[4]

解析方式:

递归解析:客户端(解析器)可以从名称服务器中请求递归应答。这意味着解析器期望服务器提供最终答案。如果服务器是这一域名的授权者,它会检查它的数据库并做出响应。如果服务器不是授权者,它会把请求发送给其他服务器(通常是父服务器),并等待响应。如果父服务器是授权者,它就做出响应。否则它仍把查询发送给其他服务器。当查询最终得到解析后,响应就回溯知道最终到达发出请求的客户端。这就是递归解析(recursive resolution),

迭代解析:如果客户端没有请求递归查询,则映射以迭代的形式完成。如果服务器是名称的授权者,则它发送应答; 反之,它会返回一个它认为能够解析该查询的服务器的IP地址(给客户端),由客户端负责向第二台服务器重复发送请求。如果新的地址解析服务器能够解析这一问题, 那么就用IP地址响应这一请求。否则,它再向客户端返回新的地址解析服务器的IP地址。这时,客户端必须向第三台服务器重复该请求。 这一过程称为迭代解析(iterative resolution),

 

p_w_picpath

 

DNS查询类型:

从查询方式上分:

   递归查询

   要么做出查询成功响应,要么作出查询失败的响应

   迭代查询

   以最佳结果作答

从查询内容上分

   正向查询由域名查找IP地址

   反向查询由IP地址查找域名

 

 

 

 

p_w_picpath

 

dns 在linux系统上应用:

安装dns服务:

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom

[root@localhost ~]# cd /mnt/cdrom/Server/

[root@localhost Server]# ll bind*    搜索bind包安装dns服务必须

[root@localhost Server]# rpm -ivh bind-9.3.6-4.P1.el5.i386.rpm

[root@localhost Server]# rpm -ivh bind-chroot-9.3.6-4.P1.el5.i386.rpm  防止dns***

[root@localhost Server]# rpm -qa |grep bind   查看已安装的bind包

[root@localhost Server]# rpm -ivh caching-nameserver-9.3.6-4.P1.el5.i386.rpm

作用:1.> caching服务器 2.>dns模版

[root@localhost Server]# ll /var/named/chroot/           dns根目录

[root@localhost Server]# ll /var/named/chroot/etc/      dns配置文件

[root@localhost Server]# ll /var/named/chroot/var/named/    区域文件

[root@localhost Server]# cd /var/named/chroot/

[root@localhost chroot]# cd etc/

[root@localhost etc]# cp -p named.caching-nameserver.conf named.conf  设置配置文件

[root@localhost etc]# rndc reload     控制dns服务工具

[root@localhost etc]# vim rndc.key    控制dns钥匙

 

dns简单应用实例一:实现dns域名查询

 

p_w_picpath

 

配置步骤:

[root@localhost etc]# vim named.conf

14 options {

15 listen-on port 53 { any; };

16 listen-on-v6 port 53 { ::1; };

17 directory "/var/named";

18 dump-file "/var/named/data/cache_dump.db";

19 statistics-file "/var/named/data/named_stats.txt";

20 memstatistics-file "/var/named/data/named_mem_stats.txt";

21

22 // Those options should be used carefully because they disable port

23 // randomization

24 // query-source port 53;

25 // query-source-v6 port 53;

26

27 allow-query { any; };

28 allow-query-cache { any; };

29 };

30 logging {

31 channel default_debug {

32 file "data/named.run";

33 severity dynamic;

34 };

35 };

36 view localhost_resolver {

37 match-clients { any; };

38 match-destinations { any; };

[root@localhost etc]# service named start

[root@localhost etc]# vim named.rfc1912.zones  编辑区域声明

p_w_picpath

[root@localhost etc]# cd /var/named/chroot/var/named/  查看区域文件

[root@localhost named]# cp -p localhost.zone abc.com.db 创建正向查询版、

p_w_picpath

[root@localhostnamed]# named-checkzon abc.com /var/named/chroot/var/named/abc.com.db

检测区域文件配置是否有错

[root@localhost named]# named-checkconf /var/named/chroot/etc/named.conf

检测dns主配置文档

[root@localhost named]# rndc reload 重新读取区域文件和配置文件

[root@localhost named]# vim /etc/resolv.conf  设置dns指向

p_w_picpath

[root@localhost named]# nslookup www.abc.com 进行dns域名解析

[root@localhost named]# nslookup

p_w_picpath

[root@localhost named]# dig -t ns abc.com  查询abc.com类型为ns

[root@localhost named]# dig www.abc.com   查询abc.com

[root@localhost named]# host www.abc.com  查询地址

 

 

实例应用二:辅助dns配置

说明:主dns服务器为linux,辅助dns为windows

p_w_picpath

windows上辅助dns配置

启动dns服务

正向查找区域-------》从主服务器复制-------》刷新

p_w_picpath

 

设置dns服务权限

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

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

p_w_picpath

[root@localhost etc]# cd ../var

[root@localhost var]# cd named/

[root@localhost named]# cd /var/named/chroot/var/named/

[root@localhost named]# vim abc.com.db

[root@localhost named]# tail -f /var/log/messages 监控日志

 

windows作为主dns,linux作为辅助dns的配置:

 

p_w_picpath

windows主dns服务器配置步骤:

启动dns服务

正向查找区域------》新建区域--------》主区域--------》a.com------》完成

a.com-----》属性-----》主服务器(ns.a.com) 负责人(hostmaster.sina.com)-----》名称服务器-------》添加----》ns.a.com 192.168.100.180

a.com----à新建主机-----》www 1.1.1.1 ftp 2.2.2.2

p_w_picpath

 

linux 辅助dns服务器配置:

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

 

p_w_picpath

[root@localhost etc]# rndc reload

查看slaves文件,可以看到辅助dns已经备份主dns数据库

p_w_picpath

 

 

实际项目应用:

父子域建设以及起始授权委任:

项目简介:一家大型公司下有两个分公司,分别位于北京(bj)和上海(sh)

现在实现分公司对总公司的域名解析,现委任上海分公司对总公司和北京分公司管理:

p_w_picpath

 

linux服务器配置:

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

p_w_picpath

[root@localhost named]# cp -p localhost.zone b.com.db

[root@localhost named]# vim b.com.db 编辑父域

p_w_picpath

[root@localhost named]# cp -p b.com.db bj.b.com.db

[root@localhost named]# vim bj.b.com.db 编辑子域

p_w_picpath

[root@localhost named]# rndc reload

 windows(上海)服务器配置:

正向查找区域-------》主要区域--------》新建区域sh.b.com-------》完成

sh.b.com----》属性---------》起始授权机构-----》主服务器(ns.sh.b.com)----》名称服务器------》添加------》ns.sh.b.com 192.168.100.180

sh.b.com------》新建主机-------》www 3.3.3.3

p_w_picpath

现北京服务器下一台主机进行名称解析:

p_w_picpath

p_w_picpath

p_w_picpath

 

 

p_w_picpath

在上海配置一台主机进行名称解析:

注意:无法直接解析b.com 和bj.b.com。

两种解决方法:

1.》修改根提示

dns-----》主机------》属性-------》跟提示-----》任选一个进行编辑(ns.b.com 192.168.100.181)

2.》修改转发器:

dns-----》主机------》属性-------》转发器-----》新建(b.com 192.168.100.181)

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

 

 在windows上配置父子域,linux配置上海委任服务器:

p_w_picpath

windows dns服务器配置:

正向查找区域--------》新建区域-------》主要区域------》区域名称(c.com)------》完成

c.com------》属性------》起始授权机构------》主服务器(ns.c.com)----》名称服务器(ns.c.com 192.168.100.180)---》确定

c.com----》新建主机-----》名称(www 1.1.1.1)

c.com----》新建域(bj)----》完成

bj------》新建主机-------》名称(www 2.2.2.2)

c.com------》新建委派(sh)-----》域名(ns.sh.c.com)地址(192.168.100.181)-----》完成

p_w_picpath

linux 服务器配置:

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

p_w_picpath

[root@localhost ~]# cd /var/named/chroot/var/named/

[root@localhost named]# cp -p localhost.zone sh.c.com.db

[root@localhost named]# vim sh.c.com.db

p_w_picpath

 

[root@localhost named]# rndc reload

总部 c.com下配置pc机进行测试:

p_w_picpath

p_w_picpath

p_w_picpath

 

上海 c.com下配置pc机进行测试:

linux 下解决无法解析域名方法:

1.》修改根提示:

[root@localhost named]# vim named.ca

p_w_picpath

[root@localhost named]# rndc reload

[root@localhost named]# service named restart

 

2.》修改转发器:

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

p_w_picpath

 

 [root@localhost named]# rndc reload

 

 

 dns课外拓展:

 域名解析记录:

NS域名服务器(Name Server)记录

MX邮件交换(Mail Exchange)记录

A地址(Address)记录,只用在正向解析的区域数据文件中

CNAME别名(Canonical Name)记录

PTR指针(Point)记录,只用在反向解析的区域数据文件中

配置反向解析记录时,只需要指定IP地址中的主机地址部分即可,网络地址部分不用写

DNS区域类型

在部署一台DNS服务器时,你必须预先考虑DNS区域类型,从而决定DNS服务器类型。DNS区域分为两大类:正向查找区域和反向查找区域,其中

正向查找区域用于FQDN到IP地址的映射,当DNS客户端请求解析某个FQDN时,DNS服务器在正向查找区域中进行查找,并返回给DNS客户端对应的IP地址;

反向查找区域用于IP地址到FQDN的映射,当DNS客户端请求解析某个IP地址时,DNS服务器在反向查找区域中进行查找,并返回给DNS客户端对应的FQDN。

而每一类区域又分为三种区域类型:主要区域、辅助区域和存根区域,其中:

主要区域(Primary):包含相应DNS命名空间所有的资源记录,是区域中所包含的所有DNS域的权威DNS服务器。可以对区域中所有资源记录进行读写,即DNS服务器可以修改此区域中的数据,默认情况下区域数据以文本文件格式存放。你可以将主要区域的数据存放在活动目录中并且随着活动目录数据的复制而复制,此时,此区域称为活动目录集成主要区域,在这种情况下,每一个运行在域控制器上的DNS服务器都可以对此主要区域进行读写,这样避免了标准主要区域时出现的单点故障。

辅助区域(Secondary):主要区域的备份,从主要区域直接复制而来;同样包含相应DNS命名空间所有的资源记录,是区域中所包含的所有DNS域的权威DNS服务器;和主要区域不同之处是DNS服务器不能对辅助区域进行任何修改,即辅助区域是只读的。辅助区域数据只能以文本文件格式存放。

存根区域(Stub):此区域只是包含了用于分辨主要区域权威DNS服务器的记录,有三种记录类型:

SOA(委派区域的起始授权机构):此记录用于识别该区域的主要来源DNS服务器和其他区域属性;

NS(名称服务器):此记录包含了此区域的权威DNS服务器列表;

A glue(粘附A记录):此记录包含了此区域的权威DNS服务器的IP地址。

默认情况下区域数据以文本文件格式存放,不过你可以和主要区域一样将存根区域的数据存放在活动目录中并且随着活动目录数据的复制而复制。

当DNS客户端发起解析请求时,对于属于所管理的主要区域和辅助区域的解析,DNS服务器向DNS客户端执行权威答复。而对于所管理的存根区域的解析,如果客户端发起递归查询,则DNS 服务器会使用该存根区域中的资源记录来解析查询。DNS服务器向存根区域的NS资源记录中指定的权威DNS服务器发送迭代查询,仿佛在使用其缓存中的NS资源记录一样;如果DNS服务器找不到其存根区域中的权威DNS服务器,那么DNS服务器会尝试使用根提示信息进行标准递归查询。如果客户端发起迭代查询,DNS服务器会返回一个包含存根区域中指定服务器的参考信息,而不再进行其他操作。

如果存根区域的权威DNS服务器对本地DNS服务器发起的解析请求进行答复,本地DNS服务器会将接收到的资源记录存储在自己的缓存中,而不是将这些资源记录存储在存根区域中,唯一的例外是返回的粘附A记录,它会存储在存根区域中。存储在缓存中的资源记录按照每个资源记录中的生存时间 (TTL) 的值进行缓存;而存放在存根区域中的SOA、NS 和粘附A资源记录按照SOA记录中指定的过期间隔过期(该过期间隔是在创建存根区域期间创建的,在从原始主要区域复制时更新)。

当某个DNS服务器(父DNS服务器)向另外一个DNS服务器做子区域委派时,如果子区域中添加了新的权威DNS服务器,父DNS服务器是不会知道的,除非你在父DNS服务器上手动添加。存根区域主要是用于解决这个问题,你可以在父DNS服务器上为委派的子区域做一个存根区域,从而可以从委派的子区域自动获取权威DNS服务器的更新而不需要额外的手动操作。

 

查询响应类型:

DNS服务器对于客户请求的答复具有多种类型,常见的有以下四种:

权威答复:权威答复是返回给客户的正向答复,并且设置了DNS消息中的权威位。此答复代表从具有权威的DNS服务器处发出;

正向答复:正向答复包含了匹配客户端解析请求的资源记录;

参考答复:参考答复只在DNS服务器工作在迭代模式下使用,包含了其他有助于客户端解析请求的信息。例如,当DNS服务器不能为客户端发起的解析请求找到某个匹配值时,则向DNS客户端发送参考回复,告诉它有助于解析请求的信息;

否定答复:否定答复指出权威服务器在解析客户端的请求时可能遇到了以下两种情况之一:

权威DNS服务器报告客户端查询的名字不存在;

权威DNS服务器报告存在对应的名字但是不存在指定类型的资源记录。

无论正向答复还是否定答复,DNS客户端都将结果

 

DNS服务器类型:

根据管理的DNS区域的不同,DNS服务器也具有不同的类型。一台DNS服务器可以同时管理多个区域,因此也可以同时属于多种DNS服务器类型。

主要DNS服务器

当DNS服务器管理主要区域时,它被称为主要DNS服务器。主要DNS服务器是主要区域的集中更新源,你可以部署两种模式的主要区域:

标准主要区域:标准主要区域的区域数据存放在本地文件中,只有主要DNS服务器可以进行管理此DNS区域(单点更新)。这意味如果当主要DNS服务器出现故障时,此主要区域不能再进行修改;但是,位于辅助服务器上的辅助服务器还可以答复DNS客户端的解析请求。标准主要区域只支持非安全的动态更新。

活动目录集成主要区域:活动目录集成主要区域仅当在域控制器上 部署DNS服务器时有效,此时,区域数据存放在活动目录中并且随着活动目录数据的复制而复制。在默认情况下,每一个运行在域控制器上的DNS服务器都将成为主要DNS服务器,并且可以修改DNS区域中的数据(多点更新),这样避免了标准主要区域时出现的单点故障。活动目录集成主要区域支持安全的动态更新。

辅助DNS服务器

在DNS服务设计中,针对每一个区域,总是建议你至少使用两台DNS服务器来进行管理。其中一台作为主要DNS服务器,而另外一台作为辅助DNS服务器。

当DNS服务器管理辅助区域时,它将成为辅助DNS服务器。使用辅助DNS服务器的好处在于实现负载均衡和避免单点故障。辅助DNS服务器用于获取区域数据的源DNS服务器称为主服务器,主服务器可以由主要DNS服务器或者其他辅助DNS服务器来担任;当创建辅助区域时,将要求你指定主服务器。在辅助DNS服务器和主服务器之间存在着区域复制,用于从主服务器更新区域数据。

注意:这个地方辅助DNS服务器是根据区域类型的不同而得出的概念,而在配置DNS客户端使用的DNS服务器时,管理辅助区域的DNS服务器可以配置为DNS客户端的主要DNS服务器,而管理主要区域的DNS服务器也可以配置为DNS客户端的辅助DNS服务器。

存根DNS服务器

管理存根区域的DNS服务器称为存根DNS服务器。一般情况下,不需要单独部署存根DNS服务器,而是和其他DNS服务器类型合用。在存根DNS服务器和主服务器之间同样存在着区域复制。

缓存DNS服务器

缓存DNS服务器即没有管理任何区域的DNS服务器,也不会产生区域复制,它只能缓存DNS名字并且使用缓存的信息来答复DNS客户端的解析请求。当刚安装好DNS服务器时,它就是一个缓存DNS服务器。缓存DNS服务器可以通过缓存减少DNS客户端访问外部DNS服务器的网络流量,并且可以降低DNS客户端解析域名的时间,因此在网络的广泛的使用。例如一个常见的中小型企业网络接入到Internet的环境,并没有在内部网络中使用域名,所以没有架设DNS服务器,客户通过配置使用ISP的DNS服务器来解析Internet域名。此时就可以部署一台缓存DNS服务器,配置将所有其他DNS域转发到ISP的DNS服务器,然后配置客户使用此缓存DNS服务器,从而减少解析客户端请求所需要的时间和客户访问外部DNS服务的网络流量。

区域委派

一个完整的DNS区域包含以自己的DNS域名为基础命名空间的所有DNS命名空间的信息,当基于此DNS命名空间新建一个DNS区域时,新建的区域称为子区域。例如,完整的winsvr.org区域包含了以winsvr.org为基础命名空间的所有DNS命名空间的信息,而tech.winsvr.org则称为winsvr.org的一个子区域。

默认情况下,DNS区域管理自己的子区域,并且子区域伴随DNS区域一起进行复制和更新。不过,你可以将子区域委派给其他DNS服务器来进行管理,此时,被委派的服务器将承担此DNS子区域的管理,而父DNS区域中只是具有此子区域的委派记录。

区域委派适用于许多环境,常见的场景有:

将某个子区域委派给某个对应部门中的DNS服务器进行管理;

DNS服务器的负载均衡,将一个大区域划分为若干小区域,委派给不同的DNS服务器进行管理;

将子区域委派给某个分部或远程站点。

你只能在主要区域中执行区域委派。对于任何一个被委派的子区域,父DNS区域中只是具有指向子区域中权威DNS服务器的A记录和NS记录,而实际的解析过程必须由委派到的子区域中的权威DNS服务器完成,即被委派到的DNS服务器上必须具有以被委派的子区域为域名的主要区域。