DNS服务器详解

DNS 服务器详解 DNS 组件完整的DNS 系统由DNS 服务器、区域、解析器(DNS 客户端)和资源记录组成,并且你需要正确的进行配置。DNS 协议采用UDP/TCP 53端口进行通讯:DNS 服

DNS 服务器详解 DNS 组件

完整的DNS 系统由DNS 服务器、区域、解析器(DNS 客户端)和资源记录组成,并且你需要正确的进行配置。DNS 协议采用UDP/TCP 53端口进行通讯:DNS 服务器侦听UDP/TCP 53端口,DNS 客户端通过向服务器的这两个端口发起连接进行DNS 协议通讯。其中UDP 53端口主要用于答复DNS 客户端的解析请求,而TCP 53端口用于区域复制。

DNS 服务器

运行DNS 服务器软件的计算机。常见的DNS 服务器软件有Windows 的DNS 服务器和Unix 下的BIND 。一个DNS 服务器包含了部分DNS 命名空间的数据信息,当DNS 客户发起解析请求时,DNS 服务器答复客户的请求,或者提供另外一个可以帮助客户进行请求解析的服务器地址,或者回复客户无对应记录。

当DNS 服务器管理某个区域时,它是此区域的权威DNS 服务器,而无论它是主要区域还是辅助区域。DNS 服务器可以是一级或者多级DNS 命名空间的权威DNS 服务器,例如,Internet 根域的DNS 服务器只是对于顶级域名例如“.org ”具有权威,而顶级域名.org 的权威DNS 服务器只是对于winsvr.org 二级域名具有权威,而对于三级域名www.winsvr.org ,则只有winsvr.org 域的DNS 服务器才具有权威。

DNS 区域

DNS 区域是DNS 服务器具有权威的连续的命名空间,一个DNS 服务器可以对一个或多个区域具有权威,而一个区域可以包含一个或多个连续的域。例如,一个DNS 服务器可以对区域winsvr.org 和isacn.org 具有权威,而每个区域下又可以包含多个域。不过,你可以通过区域委派来将连续的域例如winsvr.org 、tech.winsvr.org 存放在不同的区域中。

区域文件包含了DNS 服务器具有权威的区域的所有资源记录。通常情况下,区域数据存在在文本文件中,但是运行在Windows 2000或者Windows Server 2003域控制器上的DNS 服务器,可以把区域信息存放在活动目录中。

DNS 解析器(DNS 客户端)

DNS 解析器是使用客户端计算机用于通过DNS 协议查询DNS 服务器的一个服务。在Windows 2000及其后的系统中,DNS 解析器是通过DNS 客户端这个服务来实现,

,

除此之外,DNS 客户端服务还可以对DNS 解析结果进行缓存。你必须在客户端计算机的TCP/IP属性中配置使用DNS 服务器,此时客户端计算机的DNS 解析器才会将DNS 解析请求发送到相应的DNS 服务器。

资源记录

资源记录是用于答复DNS 客户端请求的DNS 数据库记录,每一个DNS 服务器包含了它所管理的DNS 命名空间的所有资源记录。资源记录包含和特定主机有关的信息,如IP 地址、提供服务的类型等等。常见的资源记录类型有:

资源记录类型

说明

解释

起始授权结构(SOA )

起始授权机构

此记录指定区域的起点。它所包含的信息有区域名、区域管理员电子邮件地址,以及指示辅 DNS 服务器如何更新区域数据文件的设置等。

主机(A )

主机(A )记录是名称解析的重要记录,它用于将特定的主机名映射到对应主机的IP 地址 上。你可以在DNS 服务器中手动创建或通过DNS 客户端动态更新来创建。

别名(CNAME )

标准名称

此记录用于将某个别名指向到某个主机(A )记录上,从而无需为某个需要新名字解析的主机额外创建A 记录。

邮件交换器(MX )

邮件交换器

此记录列出了负责接收发到域中的电子邮件的主机 ,通常用于邮件的收发。

名称服务器(NS )

名称服务器

此记录指定负责此DNS 区域的权威名称服务器。

理解DNS 服务器的工作方式

当DNS 客户端需要为某个应用程序查询名字时,它将联系自己的DNS 服务器来解析此名字。DNS 客户发送的解析请求包含以下三种信息:

,

1. 需要查询的域名。如果原应用程序提交的不是一个完整的FQDN ,则DNS 客户端加上域名后缀以构成一个完整的FQDN ;

2. 指定的查询类型。指定查询的资源记录的类型,如A 记录或者MX 记录等等;

3. 指定的DNS 域名类型。对于DNS 客户端服务,这个类型总是指定Internet [IN]类别。

DNS 客户端完整的DNS 解析过程如下:

1、检查自己的本地DNS 名字缓存

当DNS 客户端需要解析某个FQDN 时,先检查自己的本地DNS 名字缓存。本地的DNS 名字缓存由两部分构成:

Hosts 文件中的主机名到IP 地址映射定义

前一次DNS 查询得到的结果,并且此结果还处于有效期;如果DNS 客户端从本地缓存中获得相应结果,则DNS 解析完成。

2、联系自己的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 服务器的IP 地址。为了正常的执行递归解析,DNS 服务器必须知道从哪儿开始搜索DNS 域名,而根提示信息则用于实现这一需求。全世界范围内的根DNS 服务器总共有13个,它们的名字和IP 地址信息保存在systemrootsystem32dnscache.dns文件中,每次DNS 服务器启动时从cache.dns 文件中读取。一般情况下,不需要对此文件进行修改;如果你的DNS 服务器是在内部网络中部署并且不需要使用Internet 的根DNS 服务器,则可以根据需要进行修改,将其指向到某个内部根域DNS 服务器。

例如,当某个DNS 客户端请求解析域名www.winsvr.org 并且DNS 服务器工作在递归模式下时,完整的解析过程如下:

DNS 客户端检查自己的本地名字缓存,没有找到对应的记录;

DNS 客户端联系自己的DNS 服务器NameServer1,查询域名 www.winsvr.org;

NameServer1检查自己的权威区域和本地缓存,没有找到对应值。于是,联系根提示中的某个根域服务器,查询域名www.winsvr.org ;

根域服务器也不知道www.winsvr.org 的对应值,于是,向NameServer1返回一个参考答复,告诉NameServer1 .org顶级域的权威DNS 服务器;

NameServer1联系.org 顶级域的权威DNS 服务器,查询域名www.winsvr.org ;

.org 顶级域服务器也不知道www.winsvr.org 的对应值,于是,向NameServer1返回一个参考答复,告诉NameServer1 Winsvr.org域的权威DNS 服务器;

NameServer1联系Winsvr.org 域的权威DNS 服务器,查询域名www.winsvr.org ;

Winsvr.org 域的权威DNS 服务器知道对应值,并且返回给NameServer1;

NameServer1向原DNS 客户端返回www.winsvr.org 的结果,此时,解析完成

查询响应类型

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

,

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

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

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

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

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

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

无论正向答复还是否定答复,DNS 客户端都将结果保存在自己的本地缓存中。

理解缓存的工作方式

DNS 客户端和DNS 服务器都会缓存获得的解析结果,这样可以提高DNS 服务性能和减少DNS 相关的网络流量。

DNS 客户端缓存

当DNS 客户端服务启动时,会读取Hosts 文件中的所有主机名和IP 地址的映射,并且保存在缓存中。Hosts 存放在systemrootsystem32driversetc目录,当你修改Hosts 文件后,DNS 客户端会立即读取Hosts 文件并且对本地缓存进行更新。

另外,DNS 客户端会缓存过去的查询结果,当DNS 客户端服务停止时,将清空本地缓存。

DNS 服务器缓存

DNS 服务器像DNS 客户端一样缓存名字解析结果,并且可以使用缓存中的信息来答复其他客户端的请求。你可以在DNS 服务器管理控制台或者使用DNSCMD 命令行工具手动清空缓存,另外当DNS 服务器停止时,同样会清空DNS 服务器缓存。

资源记录的生存时间(TTL )指定了资源记录可以缓存的时间的长短,而无论是DNS 客户端缓存还是DNS 服务器缓存;默认情况下,TTL 是3600秒(1小时)。需要注意的是,由于缓存的作用,DNS 服务器上对于资源记录的修改可能不能立即生效。并且对于Internet 域名来说,资源记录的修改可能会需要超过24小时

,

的时间才能在所有DNS 服务器上完成更新。

动态更新

当DNS 客户端计算机上产生某个事件触发更新时,DNS 客户端计算机上的DHCP 客户端服务将会为本地计算机中使用的所有网络连接在相应的DNS 服务器中对自己的A 记录进行更新,从而可以确保DNS 域名记录和IP 地址记录的对应关系。而DNS 服务器需要配置为允许动态更新,才能让DNS 客户端计算机成功完成更新。

当DNS 客户端计算机上产生以下事件时,会触发DHCP 客户端服务的动态更新行为:

添加、删除或修改了本地计算机任何网络连接TCP/IP属性中的IP 地址;

本地计算机的任何网络连接向DHCP 服务器获取IP 地址租约或者续约;

DNS 客户端上运行了Ipconfig /registerdns命令;

DNS 客户端计算机启动;

此DNS 区域中的一台成员服务器提升为域控制器;

对于标准主要区域,你可以选择不允许动态更新和允许非安全和安全动态更新。但是允许非安全和安全动态更新具有安全隐患,因为DNS 服务器不会对进行动态更新的客户端计算机进行验证,所以任何客户端计算机都可以对任何A 记录进行动态更新,而不管它是否是此A 记录的拥有者。通常情况下,你不应该使用此选项。

对于活动目录集成区域,除了上述的两个选项外,你还可以使用安全动态更新。当使用此方式时,在客户端计算机更新自己的记录时,DNS 服务器将要求客户端计算机进行身份验证来确保只有对应资源记录的拥有者才能更新此记录。

只有Windows 2000及以后版本操作系统的客户端计算机才能执行动态更新,低版本的Windows 系统(NT4、9x/ME)不支持动态更新。不过,你可以通过DHCP 服务器为这些低版本客户端计算机代理进行动态更新。当DHCP 服务器在代理低版本客户端计算机注册A 记录时,会将自己设置为此A 记录的所有者。而在安全动态更新方式中,只有资源记录的所有这才能修改此记录,这样在其他DHCP 服务器为此低版本客户端计算机代理注册时会出现拒绝访问的问题。因此,你需要将此DHCP 服务器加入到DnsUpdateProxy 安全组中,这样当DHCP 服务器更新A 记录时,不会记录下此A 记录的所有者信息,从而允许其他DHCP 服务器来修改此A 记录。 区域委派

一个完整的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 服务器上必须具有以被委派的子区域为域名的主要区域。

在Windows Server 2003的DNS 服务器管理控制台中,提供了向导工具,可以让你轻松的完成DNS 区域委派。

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 ):存根区域是Windows Server 2003新增加的功能。此区域只是包含了用于分辨主要区域权威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 客户端解析域名的时间,因此在网络的广泛的使用。例如一个常见的中小型企业网络接入到

Internet 的环境,并没有在内部网络中使用域名,所以没有架设DNS 服务器,客户通过配置使用ISP 的DNS 服务器来解析Internet 域名。此时就可以部署一台缓存DNS 服务器,配置将所有其他DNS 域转发到ISP 的DNS 服务器,然后配置客户使用此缓存DNS 服务器,从而减少解析客户端请求所需要的时间和客户访问外部DNS 服务的网络流量。

标签: