模块二:1、DNS的配置和故障排除。

第一节:安装DNS服务器角色方面1、DNS(Domain Name System域名系统)角色概要,它是分层的分布式数据库,这个数据库里记录的是IP地址和名字的对应关系,某一个域名对应到某一个的IP地址,这就是DNS数据库的内容;它是互联网名称方案的基础,如果没有DNS,访问互联网上的目的网站就只能通过那些抽象的IP地址,这是极其麻烦的,我们基本上是无法记忆那些数也数不清的网站的IP地址的,而有了DNS,我们就可以通过形象的网站名称(域名)来访问网站,当我们在浏览器中输入域名以后,电脑通过DNS服务器查找到该域名所对应的IP地址,然后转入相应IP的网站;DNS支持使用字母来访问资源,而不是使用点分十进制的IP地址;由InterNIC负责管理域名空间,它是一个非盈利性的公益组织;DNS的使用是为了满足Internet主机数量快速增长的需求,包括我们局域网里也是一样的,随着局域网里的地址越来越多,达到成百上千的数目,为了方便记忆,通过DNS将帮助我们记录每个IP的具体使用者情况,并且可以通过名字去访问对方;2、DNS名称空间概要,它是分层的分布式的结构,首先DNS最顶上的域称为根域,用一个点来表示它,根域下是一级域(net、com、org、cn等)、二级域(跟在net、com等之后的,如nwtraders)、三级域四级域(子域)等,子域前有一个名字,这个名字就是某台电脑的名字;比如有台名为Server1的电脑在四级域sales里,sales在south这个三级域里,south这个子域所在的二级域为nwtraders,nwtraders所在的一级域为com,那么Server1这台电脑将被描述为——FQDN:Server1.sales.south.nwtraders.com(根域的点不用写出),当然如果没有具体的分层图,我们是无法通过这个FQDN判断出Server1是子域的名称还是电脑的名称,因为它们的写法是完全相同的;3、Windows Server 2008的DNS实现,Server 2008可以用来做DNS Server,在Server 2008里做一个数据库,这个数据库用于记录IP地址和FQDN的对应关系;Server 2008中新的和增加的功能有后台区域加载(如果DNS服务器不止一台,它们之间存在同步的关系,当第一台DNS服务器数据库的内容发生改变,它要同步到第二台去,此时若有客户端在第二台上做解析,Server 2008以前的系统是无法完成这个请求的,它必须要在同步完成以后才能响应客户端的请求,而Server 2008在DNS服务器数据库同步期间,对于客户端的DNS查询请求,对于已经加载的部分,则可以答复客户端,它在后台加载,不影响客户端的查询)、IPv6支持(Server 2008的DNS已经内置了IPv6的支持,它支持把IPv6的地址对应到一个域名上)、支持只读域控制器(RODC,它是Server 2008里全新引入的DC,由于这个DC是只读的,所以支持它的DNS也是只读的)、全局单一名称(这是由于历史的原因所造成的,比如我们在建域的时候将常规的域名sina.com只写成sina,这个sina就是单一的名字,这个单一的名字在以前的DNS是无法做解析的,只能通过WINS来完成,而Server 2008里已经可以在DNS Server里解析这种单标签的域了);4、部署DNS服务器角色需要考虑的事项,用户帐号必须是本地管理员组或相等的组成员,比如说域管理员帐号;建议手工配置服务器使用静态的IP地址,这是因为DNS服务器是要给客户端用的,客户端配置TCP/IP属性时需要填入DNS,如果DNS服务器本身的IP地址不是静态的,那就意味着客户端TCP/IP属性里的DNS地址也总是变化的,这样对于使用者和管理者来说都很不方便;DNS服务器配置好后,我们不建议手工编辑服务器和启动文件,而是通过图形界面去实现它,在配置DNS服务器的时候我们可以使用DNS控制台或dnscmd命令行命令(这条命令可以对DNS服务器做一些配置和修改);AD集成的DNS区域不能使用文本编辑器来管理,而是使用Console或是MMC来进行管理。

演示:安装DNS服务器角色(nslookup命令可以用于查看域名是否正确的解析到相应的IP地址)。

首先,单纯的在一台服务器上添加DNS角色是没有什么意义的,所以,为了以后实验的需要,我们将一台Server 2008的IP地址设置为与上节课中配置的DC服务器在同一个网段,并且将这台服务器加入到DC服务器新建的域中,然后我们以DC管理员帐号在这台DNS服务器上登录,并使用服务器管理器添加DNS角色。

第二节:配置DNS服务器角色方面1、DNS解决方案的组件,包括DNS客户端,即需要查询域名IP对应关系的电脑;以及DNS服务器,即记录了IP和域名对应关系的数据库用于答复客户端的查询响应,在DNS服务器里有资源记录,也就是数据库里具体的一条条的表项,比如IP1对应域名1,IP2对应域名2;还有就是互联网上的DNS服务器,有DNS的根".",以及".com"和".edu"等其他一级域名;当客户端需要查询域内的资源,DNS服务器会给予一个答复,如果客户端是要查找互联网上的资源,在查到DNS的时候,DNS服务器上没有这个记录,它会将这个查询转发到互联网上去查,查到后将这个结果答复给客户端,这就是一个完整的DNS解决方案;2、DNS资源记录,隶属于DNS解决方案的组件,它包括有SOA—起始授权机构(域里的第一台DNS服务器)、A—主机记录(某一台主机的名字对应到一个IP地址,这样的一条记录,就是一个A记录)、CNAME—别名记录(当A记录太长,为了方便记忆,我们给它取一个简短的别名来对应A记录,我们将它称为别名记录)、MX—邮件交换记录(用于Email服务器,M=Mail,X=Exchange)、SRV—服务资源记录(它不是记录某个IP对应到某台主机,它记录的是某种服务由某台主机来完成)、NS—名称服务器记录(Name Server)、AAAA—IPv6 DNS记录(它专门记录IPv6的记录,一个机器名对应到一个IPv6的IP地址,Server 2008的DNS默认支持IPv6的记录);我们可以在DC这台服务器的“管理工具”——"DNS"——正向查找区域中具体形象的看到这些记录的信息;3、根提示,包括DNS根服务器的IP地址,在互联网上有那么几台服务器我们把它称为根".",在我们的DNS服务器里默认就内置了互联网上的这几台根服务器("DNS"——右击服务器名选“属性”——“根提示”),这样当我的客户端对我的DNS服务器发出查询请求的时候,若查询的是域内的资源,能解析的它会返回查询的结果,若不能解析,则DNS服务器去找根提示,也就是去找互联网上的域名,它去找根提示然后将返回的结果告诉客户端;4、DNS查询,是指DNS的客户端向DNS服务器发起的名称解析的请求,比如客户端发一个名字给DNS服务器,查询这个名字对应的IP地址;查询有递归查询和迭代查询;DNS客户端和DNS服务器都会发起查询(DNS服务器对于知道的查询返回查询结果,对于不知道的,它也会发起查询去其他DNS服务器查找结果);DNS服务器对域名称空间是权威的或非权威的;权威的是指在DNS服务器的数据库里有这个记录并答复给客户端的查询(返回所请求的IP地址或者返回权威的“否”—不知道),结果来自于自身的数据库;非权威是指在DNS服务器的数据库里没有客户端需要查询的记录,当客户端来查询的时候,这台DNS服务器又发起查询请求到其他DNS服务器查找,然后将查询返回的结果再告诉给客户端(这个过程包括检查缓存、使用转发器、使用根提示),结果来自于非自身的数据库;5、递归查询,是指客户端发往DNS服务器的查询能够直接的得到完整的回复,也就是客户端只通过一个DNS服务器就获得了需要查询的记录(当然DNS服务器上可能直接有被查询的记录,也可能这个记录是通过迭代查询而从其他DNS服务器获取的);6、迭代查询,是指客户端发往服务器的查询请求,并不能直接获得查询结果,所得到的信息仅是提供参考的其他DNS服务器位置;举例,比如客户端"mail1.nwtraders.com"向本地DNS服务器发出查询请求(这个过程始终是递归查询),但本地DNS服务器没有这个记录,然后它通过根提示"."得知记录存放在".com",在到达".com"服务器后又被告知记录存放在"nwtraders.com"服务器里,最后从"nwtraders.com"服务器获得匹配的IP地址记录(从本地DNS服务器之后开始的查询过程就是迭代查询,且"nwtraders.com"服务器给出的是权威答复),再将该记录由本地DNS服务器返回给客户端(这个就是非权威答复);递归查询比较消耗资源,所以一般流量较大的服务器都只接受迭代查询,比如互联网上的那些根服务器;7、转发器,是设计成解析外部或外站点域名空间的DNS服务器;当客户端需要本地DNS服务器做解析,而此时DNS服务器上的设置是数据库里有的记录它直接返回给客户端,这也就是权威答复,而对于DNS服务器上没有记录的情况,再由设置好的转发器进行后续的查询操作,这就是转发(客户端找本地DNS服务器解析外网的地址,服务器把这个请求转发到其他DNS服务器来完成),举例,与刚才例子的环境类似,只需在本地DNS服务器后添加一台转发服务器即可,这样本地DNS服务器到转发器进行递归查询,其后的迭代查询均由转发器替代本地DNS服务器完成;所以当我们在局域网里做好DNS服务器,然后把客户端TCP/IP的DNS设置都指向这台DNS服务器,这个时候不用做任何的设置,客户端也可以解析互联网上的地址,这是因为有根提示".",通过它来找,当然由于根提示服务器是在国外的,会比较慢,为了提高解析的速度,我们可以在本地DNS服务器设置转发,转发到我们本地的ISP提供的DNS服务器,这样客户端就可以更快的解析外网地址了;转发器分为有条件的转发(指定某个域名到×××,其他的做无条件转发)和无条件的转发(知道的回复,不知道的都去指定的地方找)两种;8、有条件转发,按照域名条件转发请求,比如客户端要在本地DNS上查找"www.contoso.msft"的地址解析,而我们在本地DNS服务器上指定了凡是"contoso.msft"这个域名都到"Contoso.msft DNS"上去查,这就是有条件转发,而不是"contoso.msft"这个域名的,都将到默认的"ISP DNS"去查找解析,这就是无条件的转发,这就类似静态和动态路由,去到某一个网段从这里走这就是静态路由,去到所有的网段从这里走这就是默认路由,指定某一个域名去到某个指定的DNS服务器解析就是有条件转发,其他所有域名的解析按照默认的查询方向就是无条件转发(或称为转发);9、DNS服务器缓存的工作方式,比如客户端1发起一个查询查找ServerA的IP地址,本地DNS服务器通过层层查询获得了ServerA的地址是"192.168.8.44"并将这个地址返回给了客户端1,客户端1也将在自己的Cache中保留这个记录,这样当它再次需要查询的时候就不需要再到本地DNS上查找了,当又有一台客户端2需要查询ServerA的IP地址时,本地DNS服务器将从自身的缓存中取得刚才查到的"192.168.8.44"这个IP地址并返回客户端2,而无需再次经过层层查找了,从此我们可以看出,Cache缓存不止是服务器有,客户端同样也有。

演示:配置DNS服务器角色方面1、更新DNS服务器的根提示,它的位置是在“管理工具”——"DNS"——右击服务器名选择“属性”——“根提示”(一般情况没有必要更改);2、配置DNS服务器使用转发器,它的位置是在“管理工具”——"DNS"——右击服务器名选择“属性”——“转发器”,这里“编辑”添加的就是无条件转发,有条件转发是在服务器名菜单——右击“条件转发器”选择“新建条件转发器”;3、右击服务器名选择“属性”——“接口”指的是这台DNS服务器响应从以下这些IP端口过来的查询,如果有双网卡,还可以设置哪个网卡过来的响应,哪个网卡过来的不响应;4、使用DNS控制台清除DNS服务器缓存,右击服务器名——“清除缓存”;5、使用DNSCmd命令清除DNS服务器缓存,通过在命令行下输入"dnscmd /?"查询可得DNSCmd的具体用法以及相应的参数"/clearcache"。

第三节:配置DNS区域方面1、DNS区域,比如我们刚才在DNS这台主机上新建了DNS服务器这个角色,新建角色之后它的正向和反向查找区域都是空的,这台DNS服务器是要为某个域来做解析的,我们说这台DNS所负责的域就是区域,这个域包括正向的(从域名到IP的解析)和反向的(从IP到域名的解析),因为我们有时候只知道域名不知道IP(正向解析),而有时候我们又只知道IP不知道域名(反向解析);从根域到一级域二级域,每一个域所对应的就是一个区域,每一个区域又包含了正向区域和反向区域;2、DNS区域的类型,主要区域(主要区域的DNS服务器它的数据库是可读可写可修改的,可以人为的更改里面的资源记录),辅助区域(辅助区域的DNS数据库是一个只读的拷贝,是不能更改的,它只能够向主要区域去复制),存根区域(存根区域是在我的副域的DNS上指定某个子域它是一个存根区域,指定后,它只包括指定名称服务器的这个区域的拷贝,而不像辅助区域拷贝的是主域上的所有记录,比如在我们的"win08r2.com"上有很多的分公司,有"guangzhou.win08r2.com",有"shanghai.win08r2.com",在上海又有"kw.shanghai.win08r2.com",那么在主要区域,在副区域"win08r2.com"上解析"kw.shanghai.win08r2.com",经过层层传递,我们可以在"win08r2.com"上指定"kw.shanghai.win08r2.com"它是一个存根区域,这样以后需要解析"kw.shanghai.win08r2.com"的时候我们可以直接的把这个请求转发到存根区域去,让它去找),以及AD集成区域(AD集成区域指的是DNS数据库不是存放在DNS服务器上的硬盘上的数据库里,而是存在AD里面,也就是活动目录里),特别说明的是,在我们讲AD的时候,我们所做的DNS都是AD集成区域;3、正向和反向查找区域,名字到IP的对应关系就是正向的,反过来,IP到名字的对应关系就是反向的;4、存根区域,举例,根域"contoso.com"下有一个子域"na.contoso.com",这个子域下又有一个名为"ny.na.contoso.com"的子域,当这个子域中的客户端需要解析域"fabrikam.com"下面的子域"na.fabrikam.com"的时候,客户端首先需要通过父域"na.contoso.com",然后再到根域"contoso.com"查找到"na.fabrikam.com"的父域"fabrikam.com",进而查找到它,也就是说"ny.na.contoso.com"服务器必须查询多个DNS服务器才能发现维护"na.fabrikam.com"区域的服务器,而如果将"na.fabrikam.com"指定为"ny.na.contoso.com"的存根区域的话,那客户端就可以直接通过存根区域查找到"na.fabrikam.com"而无需经过层层查找,这样不但查找能更快捷,当其中的任何一台父域或根域无法访问时,也不会影响到对"na.fabrikam.com"的解析,因为它们两个子域在网络上是通的,也就是说使用定义好的存根区域,"ny.na.contoso.com"服务器不需要查询多个DNS服务器就能发现维护"na.fabrikam.com"区域的服务器;5、DNS区域委派,将子域的DNS委派给子域的服务器进行管理,以避免所有的子域都到父域中去做DNS解析,就好像一个公司里,不要所有的事情都找总经理,有的事情找部门经理就可以解决了,因为总经理对部门经理进行了委派,授予部门经理一定的管理权限。

演示:创建正向和反向查找区域。

我们可以通过“新建区域向导”在正向和反向查找区域里新建“主要区域”、“辅助区域”和“存根区域”,并且如果这台DNS服务器是可写域控制器时,我们还可以通过勾选“在Active Directory中存储区域……”来建立一个AD集成区域。这里我们在"win08r2dns.win08r2.com"这台DNS服务器上新建一个“区域名称”为"win08r2.com"的正向查找的主要区域,以及一个使用IPv4地址"192.168.200."的反向查找的主要区域。同理,我们也可以在"win08r2dc.win08r2.com"这台DC上的DNS服务器角色中创建不同区域的正向和反向查找。

第四节:配置DNS区域传输方面1、DNS区域传输,是DNS服务器之间权威DNS区域数据的同步;主要DNS服务器上的数据是可以更改的,而辅助DNS服务器上的数据是不能更改的,当主要DNS服务器上的数据库记录发生更改的时候,辅助DNS服务器到主要DNS服务器上进行学习(拷贝),即主要DNS服务器的数据库传给辅助DNS服务器,这就涉及到区域传输;第一步辅助DNS服务器发起一个起始资源记录SOA对区域查询,主要DNS服务器给予辅助DNS服务器SOA查询答复,辅助DNS服务器在收到答复以后,开始对区域的IXFR或AXFR进行查询(区域查询),而后主要DNS服务器给予辅助DNS服务器IXFR或AXFR查询答复(区域传输);2、DNS通知的工作流程,是原来的DNS协议规范的更新,它允许在区域改变时发送通知到辅助DNS服务器;辅助DNS服务器(目的服务器)和主要DNS服务器(源服务器)的数据库要保持一致,当主要DNS服务器的数据库发生改变,它主动的发DNS通知告诉辅助DNS服务器它数据库中的资源记录和SOA序列号更新了,辅助DNS服务器可以过来学了(拷贝),而后辅助DNS服务器在得知主要DNS服务器上的DNS数据库发生了改变后,会开始一个Zone区域传输;3、安全的区域传输,指的是并非辅助DNS服务器想学就能学的,辅助区域必须要在主要区域许可的情况下才能进行区域传输;安全的区域传输可以限制到指定服务器的区域传输,主要区域允许才能学,不允许就不能学;可以加密区域传输的流量;如果是在局域网内部的域内还可以考虑使用AD集成的区域,域内的DNS服务器之间会存在DNS数据的传输,它的传输是随着AD的数据一起来同步的。

演示:配置辅助区域和配置DNS区域传输。

首先我们把上个实验在"win08r2dns.win08r2.com"上添加的正向和反向查找区域内的空区域删除,然后在正向查找区域中添加区域名称为"win08r2.com",IP为"192.168.200.101"的“辅助区域”,此时点击“正向查找区域”——"win08r2.com"应该可以看到“不是由DNS服务器加载的区域”,这是因为主DNS服务器"win08r2dc.win08r2.com"的"win08r2.com"域还没有开通允许进行区域传送的设置;接下来我们来到服务器"win08r2dc.win08r2.com"上,在“正向查找区域”——右击"win08r2.com"选择“属性”——“区域传送”——勾选“允许区域传送”——“只允许到下列服务器”(“到所有服务器”很不安全)——“编辑”添加IP"192.168.200.102"(DNS通知是在“编辑”下的“通知...”选项里设置的,在“允许区域传送”时,我们可以通过配置主DNS服务器上的DNS通知来自动更新辅助DNS服务器)——“确定”退出;最后回到服务器"win08r2dns.win08r2.com"上的“正向查找区域”——右击刷新"win08r2.com",等待片刻即可实现从"win08r2dc"服务器到"win08r2dns"服务器的DNS区域传输。

第五节:DNS管理和故障排除方面1、Time to Live(TTL)、老化和清除,TTL指明DNS服务器里的记录保持有效的时间长短,若DNS服务器里的某条记录是手工添加的,那么这条记录会永远有效,比如我们在服务器"win08r2dc.win08r2.com"的域"win08r2.com"中添加一条A记录(由于服务器"win08r2dns.win08r2.com"上的域"win08r2.com"是一个辅助区域,所以不能更改它的记录),这条记录就是永远有效的;而我们在域"win08r2.com"下看到的主机地址"win08r2dc"、"win08r2dns"或者还有一台客户端Client1加入进来,它会自动的生成名字和IP的对应关系,之后若它们的IP发生改变,它注册以后,它们的域名又会对应到新的IP,若客户端Client1很长时间没有开机,那么在DNS服务器里所记录的名字和IP地址的对应关系要记录多久呢,它有一个老化的时间,当时间超过了TTL所指明的保持有效的时间它就会老化,即插入DNS服务器的记录达到截止时间并被移除时发生老化;清除是指清理DNS服务器中过时的资源记录,在多台DNS服务器的时候,我们不介意在某一台DNS服务器上单独的执行清除,哪怕这是一次误操作,因为清除后的同步操作又会恢复那些被清除的记录,所以为了能够切实的执行清除或老化,我们可以将那些记录标记为清除或老化,然后在DNS服务器同步的时候,统一的处理掉它们;2、测试DNS服务器配置,通过在客户端或服务器上进行一系列的操作,包括使用简单查询以确保DNS服务能提供响应,或是使用递归或迭代查询以确保DNS服务器能和上流DNS服务通信;3、识别DNS问题的工具,Nslookup是一个用于排除故障的命令行工具,它只是用来做域名解析而无法对DNS数据库做更改,它一般是在客户端上使用的;Dnscmd用于编辑DNS的配置,即在DNS管理客户端这个图形界面下的操作基本都可以通过Dnscmd这个命令行来完成,对于它的具体用法,我们可以通过“Windows帮助和支持”或是命令行下的"dnscmd /?"来查询;Dnslint用于诊断普通的DNS问题,同样的它也不能更改DNS数据库的配置;Nslookup做查询,Dnslint做诊断,而要对DNS数据库做更改可以通过使用DNS管理客户端这个图形界面或是命令行工具Dnscmd(题外:与MCSE2003不同,现在微软将开发和管理分的很细,对于管理,它要求管理员知道这些命令是做什么用的,但是对于这些命令的细节不做过多的要求,在MCSE2003时,对于管理所使用的脚本要求要有一定的了解,到了MCITP里改变为尽量的通过图形界面去完成管理操作);4、使用DNS事件日志和排错日志监控DNS,在事件日志中监测DNS事件用以监测区域传输信息(是指在多台DNS服务器之间的区域传递)以及监测计算机事件(比如一台计算机加入了域,它就会在DNS服务器上生成一条记录,记录它的域名和IP的对应关系,我们可以通过日志去查看它);启用DNS排错日志以查看DNS活动细节,日志的位置是在"DNS"——服务器名——“全局日志”——“DNS事件”,我们一般关注的是带红色感叹号的错误日志。

演示:管理DNS记录;测试DNS服务器配置。(命令行下的清屏命令是"cls",我们除了在命令行下通过命令来使用"nslookup"以外,还可以通过右击“DNS服务器”下的服务器名选择“启动nslookup”直接进入)

我们可以在主要DNS服务器"win08r2dc.win08r2.com"的“服务器管理器”——“角色”——“DNS服务器”——"DNS"——右击"win08r2dc",在出现的菜单中“为所有区域设置老化/清理”和“清除过时的资源记录”两项就是管理DNS记录的选项工具;我们可以通过在命令行下的"nslookup win08r2.com"命令来获得域"win08r2.com"对应的IP是"192.168.200.100",而"nslookup win08r2dc.win08r2.com"显示的对应IP也是"192.168.200.100",因为服务器"win08r2dc.win08r2.com"也就是域"win08r2.com"的服务器;我们也可以直接使用命令"nslookup",然后再在提示符">"后跟上需查询的主机名或域名,这样就可以进行连续的查询了;我们留意到使用"nslookup"后会显示“默认服务器:UnKnown   Address:::1”,这并非是说DNS没有配好,而是DNS没有配置反向区域,因为输入"nslookup"以后,这台机器会去找本机TCP/IP里配置的DNS服务器IP地址,然后它通过这个IP地址反向的查找到域名,而这个反向的查找区域我们并没有设置,所以它的显示是这样的;为了解决这个问题,我们在服务器"win08r2dc"——右击“反向查找区域”选择“新建区域”,新建“主要区域”,使用默认选项,设置IPv4的反向查找区域,网络ID为"192.168.200.",然后右击这个新建的反向区域选择“新建指针”,设定“主机IP地址”为"192.168.200.101",“浏览”选择主机名为"win08r2dc"——“正向查找区域”——"win08r2.com"——"win08r2dc",然后“确定”退出;需要注意的是,我们刚才运行"nslookup"的服务器是"win08r2dc",而我们最开始在这台服务器上配置的DNS服务器IP地址为它本机的IP"127.0.0.1",所以在进行了如上的反向查找区域设置以后,在服务器"win08r2dc"上运行"nslookup"还会有这个提示(因为我们设置的反向查找地址是"192.168.200.101"),要想看到设置后的效果,我们可以在服务器"win08r2dns"上运行"nslookup"查看(这台服务器的TCP/IP设置里的DNS服务器IP地址是"192.168.200.101",运行"nslookup"后,它会通过这个地址到"win08r2dc"上去找,而我们刚才已经在"win08r2dc"上设置好了反向记录,所以它会反向的找到"192.168.200.101"所对应的服务器名是"win08r2dc.win08r2.com"),此时显示的会是“默认服务器:win08r2dc.win08r2.com   Address:192.168.200.101”。