《DNS与BIND(第5版)》——7.2 更新区域数据文件

7.2 更新区域数据文件

网络总是在不断变化的——新的工作站加入,老的被淘汰或卖掉,或者将主机移至另一个网络。每次改变都意味着区域数据文件必须跟着修改。应该手动修改这些文件还是应该使用工具协助修改呢?

本节将首先讨论如何手动修改区域数据文件。然后再介绍一个协助修改的工具:h2n。事实上,本书推荐使用工具来创建区域数据文件;或者至少使用工具来增加序号。区域数据文件的语法很容易导致错误。因为它无法保证存放在不同文件中的地址和指针记录,能够保持彼此之间的一致性。不过,就算是使用工具,也还是必须知道更新文件会造成什么影响,所以本节会先介绍手动修改的方法。

7.2.1 增加和删除主机
在创建区域数据文件后,如果要增加新主机,显然需要修改原来的文件。下面会以举例说明的方式,将整个步骤介绍一遍。请按照这些步骤来修改primary名称服务器的区域数据文件。如果按照这些步骤来修改slave名称服务器所备份的区域数据文件,那么虽然slave的数据会发生改变,但是在下次区域传输时这些改变将会被覆盖。

更新db.DOMAIN文件中的序号。序号一般会在文件的开头,所以先更新它很容易,同时也能避免忘记对其进行修改。`
在db.DOMAIN文件中,为新增主机添加A(地址)、CNAME(别名)以及MX(邮件交换器)记录。当一台新主机(cujo)加入网络后,在db.movie.edu文件中增加如下资源记录:

为新增主机的每个IP地址所对应的db.ADDR文件增加PTR记录,并更新序号。由于cujo只有一个位于192.253.253/24网络上的IP地址,所以在db.192.253.253文件中增加如下PTR记录:

https://yqfile.alicdn.com/ebf6d45b253533ab52ad70dff7970f8ee6cd3f53.png" >

重新载入primary名称服务器;这会强制其加载新的信息:

https://yqfile.alicdn.com/b82b8b0205901f5fcf875d5d5d0f4d1d1ed0c7ad.png" >

如果使用的是BIND 9.1或其后续版本的名称服务器,可以仅重载有变更的区域:

这样,primary名称服务器就会载入新的区域数据。slave名称服务器则会在SOA记录中所设定的更新间隔时间内载入新的数据。如果使用的是第8或9版的primary和slave,那么slave会很快取得新的数据,因为primary会在数据修改后15分钟内通知slave。要删除一台主机,需要在db.DOMAIN文件和每个db.ADDR文件中,删除与该主机相关的资源记录。增加每个修改过的区域数据文件的序号,并重载primary名称服务器。

7.2.2 SOA的序号
每个区域数据文件都有一个序号(serial)。每当变更区域数据文件中的数据时,就必须增加该序号。如果没有增加该序号,区域的slave名称服务器就无法获取更新后的数据。

增加该序号很简单。如果原先的区域数据文件有如下SOA记录:

那么更新后的区域数据文件有如下SOA记录:

https://yqfile.alicdn.com/d003cf83dc762b08be64e778910d90f5420e91b6.png" >

这个简单的修改就是区域数据能够分发到所有slave名称服务器的关键。更新一个区域时,最常见的错误就是忘记增加序号。在最初几次更改区域数据文件时,因为过程新鲜而且注意力集中,可能不会忘记增加序号。不过习以为常之后,就可能草率行事,将增加序号的事情抛在脑后……从而导致任何slave都不会取得新的区域数据。这就是应该使用工具来协助增加序号的原因!可以使用h2n或是自己编写的程序,而且不论如何使用工具都是个好主意。

管理序号有几种好的方法。最常见的就是使用计数器:每次修改文件后就将序号加1。另一种方法是使用日期作为序号。例如,可以使用由YYYYMMDD所构成的8位数字作为序号。假设今天是2005年1月15日,那么序号就是20050115。不过这种方式仅允许每天更新一次,这样可能不够。可以再加上两位数字,表示这是今天第几次更新该文件。例如,2005年1月15日第一次修改就是2005011500。当天第二次修改后的序号就是2005011501。这种方式允许每天更新100次。这种方式还能知道上次增加区域数据文件序号的时间。如果执行h2n的同时使用了-y选项,便会产生日期格式的序号。但是无论选择哪种方式,序号必须是一个32位无符号整数。

7.2.3 重新设置一个新的序号
如果某个区域的序号突然变得非常大,并且想要将其改回一个更合理的值,应该怎么做?有一种方法适用于所有BIND版本,有一种方法适用于及其后续版本,还有一种方法适用于4.9及其后续版本。

适用于所有版本的方法就是删除slave上所有带有旧序号的文件。这样就可以从1(或者任何方便的数字)开始编号了。下面是具体方法:首先,在primary服务器上更改序号并重新启动;这样primary服务器就有了新的整数序号。其次,登录一个slave名称服务器的主机,使用rndc stop命令终止named进程。接下来,删除其备份的区域数据文件(即rm bak.movie.edu bak.192.249.249 bak.192.253.253)并重新启动slave名称服务器。由于备份文件都被删除了,该slave必须载入新版本的区域数据文件——从而取得新的序号。必须在每个slave服务器上重复该过程。如果有任何slave名称服务器不在控制之下,则必须联系其管理员完成相同的过程。

如果所有slave运行的BIND版本都在(希望使用的不是4.8.1)到8.2之间,则可以利用特殊的序号0。如果将区域的序号设置为0,则每个slave将在下一次检查序号时进行区域数据传输。实际上,此后每当slave检查时都会传输该区域的数据,因此一旦所有slave的序号都同步为0,请不要忘记增加序号。不过序号的增加范围是有限制的,请继续往下看。

另一种方法是使用固定序号(适用于4.9及其后续版本的slave),先来介绍一些背景知识,这样理解起来会更容易。DNS的序号是一个32位无符号整数,其取值范围从0到4 294 967 295。序号使用的是序列空间算法(sequence space arithmetic),这意味着对于任意序号,在数字空间中有一半的数字(2 147 483 647个数字)比该序号小,而另一半数字比该序号大。

下面举例说明序列空间数字(sequence space numbers)。假设序号是5。则从6到(5 + 2 147 483 647)的序号都比5大,而从(5 + 2 147 483 649)到4的序号则都比5小。注意,当序号达到4 294 967 295之后会回过头来到4。另请注意,此处没有包含数字(5 + 2 147 483 648),因为它刚好在数字空间的一半,所以它可能比5大也可能比5小,这取决于实现方式。为了安全起见,请不要使用它。

现在回到原来的问题。如果区域的序号是25 000,并且想再次从1开始编号,那么可以通过两步来加速穿过序号空间。第一步,将序号增加到所允许的最大值(25 000 + 2 147 483 647 = 2 147 508 647)。如果相加的结果大于4 294 967 295(最大的32位数值),则减去4 294 967 296之后便会回到数字空间的最前面。在改变序号后,必须等待所有slave都取得新的区域数据副本。第二步,将区域的序号改为目标值(即1),现在这个数字大于目前的序号(2 147 508 647)。在所有slave都取得新的区域数据副本后,工作就完成了。

7.2.4 其他区域数据文件条目
名称服务器运行一段时间以后,可能会想在名称服务器上增加一些数据,以便协助管理区域。当有人问起某台主机的位置时,是否曾经被难住?或许根本就记不得主机是什么类型的。现在的管理员必须管理越来越多的主机,所以很容易忘记这些信息。名称服务器可以帮助解决此问题。如果某台主机发生问题,而有人想从远端发出通知,则名称服务器可以协助其找到联系人。

到目前为止,本书已经介绍了SOA、NS、A、CNAME、PTR以及MX记录。这些记录是DNS日常操作的关键:名称服务器需要它们来进行操作,并且应用程序需要查询这些类型的数据。其实DNS定义了更多的记录类型。其中最常用的资源记录类型是TXT和RP;它们可以告知一台主机的位置和负责人。常见(和不常见)的资源记录列表请参阅附录A。

1.一般的文本信息

TXT就是TeXT(文本)。这些记录只是一个字符串列表,其长度最多不超过256个字符。

TXT记录可以用来做任何事情;描述主机的位置就是其中之一:

BIND对TXT记录的限制是2KB。在TXT记录中可以使用一个或多个字符串:

2.负责人

毫无疑问,域管理员与RP(Responsible Person,负责人)记录之间是一种又爱又恨的关系。RP记录可以被附加到任意域名(内部节点或叶子节点)上,用来指明谁是该区域或主机的负责人。例如,可以找出那些发送大量DNS查询的主机是由谁负责管理的。但是当你所管理的主机发生问题时,RP记录也能使别人找到你。

这个记录有两个参数作为其特定记录数据(record-specific data):第一个是域名格式的电子邮件地址,第二个是指向联系人附加数据的域名。电子邮件地址的格式与SOA记录所使用的一样:将“@”替换成了“.”。后面的参数是一个必须关联到相应TXT记录的域名。该TXT记录可以包含任意格式的联络信息,例如全名和电话号码。如果忽略任何一个参数,都必须使用root域(“.”)来作为一个占位符。

下面是一些RP(和与之关联的TXT)记录:

https://yqfile.alicdn.com/6a674cf718cbd9780bbeae3e8c75bc8ecf58906b.png" >

注意,不需要为root.movie.edu和snewman.movie.edu设置TXT记录,因为它们只是域名格式的电子邮件地址,而不是真正的域名。

7.2.5 从主机列表生成区域数据文件
本书第4章解释了将主机表信息转换成区域数据的过程。还使用Perl写了一个自动执行此过程的工具,称为h2n1。使用工具来生成数据有个很大的好处:不会出现语法错误,或者区域数据文件中不会出现不一致的问题——假设h2n程序没有问题的话!一般常见的不一致问题是:主机有A(地址)记录却没有与之对应的PTR(指针)记录,反之亦然。由于这些数据存在于不同的区域数据文件中,所以很容易出错。

那h2n可以做些什么呢?只要提供/etc/hosts文件以及一些命令行选项,h2n就可以创建区域数据文件。作为系统管理员,必须保持主机表是最新的。每次修改主机表,都需要再次执行h2n。h2n会重建每个区域数据文件,并为每个新文件分配更大的序号。h2n可以手动执行,或者通过cron每晚执行。如果使用了h2n,就永远不用担心忘记增加序号了。

首先,h2n需要知道正向解析区域的域名以及网络号。(h2n可以从网络号找出逆向解析区域的名称。这些内容直接对应为区域数据文件的名称:movie.edu的区域数据会放入db.movie文件中,而网络192.249.249/24的数据会放入db.192.249.249文件中。可以用-d和-n选项分别指定正向解析区域的域名和网络号。

-d domain name

正向解析区域的域名。

-n network number

所管理网络的网络号。如果要为多个网络生成文件,可以在命令行上使用多个-n选项。请省略网络号结尾的0以及网络掩码。

h2n命令要求使用-d选项和至少一个-n选项;这两个选项都没有默认值。例如,为movie.edu区域(包含两个网络)创建数据文件,可以使用以下命令:

为了进一步控制数据,还可以使用其他选项:

-s server

为NS记录指定名称服务器。与-n选项一样,如果有多个primary或slave名称服务器,则可以使用多个-s选项。BIND 8或9的服务器会在区域数据改变时通知列表中的服务器。该选项的默认值是运行h2n的主机。

-h host

为SOA记录的MNAME字段指定主机。host必须是primary名称服务器,以确保NOTIFY功能可以正常运行。该选项的默认值是运行h2n的主机。

-u user

设置区域数据负责人的邮件地址。该选项的默认值是运行h2n的主机上的root用户。

-o other

设置SOA记录的其他值(以冒号分隔的列表),不包括序号。该选项的默认值是10800:3600:604800:86400。

-f file

从文件名为file的文件中读取h2n的选项,而不是从命令行读取。如果有许多选项,那么可以将它们放入文件中。

-v 4|8

为BIND 4或8生成配置文件;该选项的默认值是8。由于BIND 9的配置文件基本上和BIND 8的一样,所以可以使用-v 8为BIND 9名称服务器生成配置文件。

-y

根据日期生成序号。

现在举个例子,使用了刚才提到的所有选项:

opts文件的内容如下:

https://yqfile.alicdn.com/fc65123c4cd5e8564e3ff9cc50be218cf9f5531d.png" >

如果某个选项要求一个主机名,则可以提供完整的域名(例如toystory.movie.edu),或仅提供主机的名称(例如toystory)。如果只提供主机名称,那么h2n会把-d选项所指定的域名添加其后,组成一个完整的域名。(如果结尾的“.”是必须的,h2n也会加上它。)

除了刚才介绍的,h2n还有更多的选项。完整的选项列表请查阅其手册。

当然,某些类型的资源记录不容易通过/etc/hosts来生成;因为必要的数据根本不在该文件中。这就需要手动添加这些记录。但是由于h2n每次运行都会重写区域数据文件,会不会将这些手动添加的记录覆盖掉呢?

还好,h2n为加入这类数据提供了一扇“后门”。将这些特殊的记录放入名为spcl.DOMAIN的文件中,其中DOMAIN就是区域域名的第一个标签。当h2n发现这个文件时,就会将以下语句:

https://yqfile.alicdn.com/c7d6d361b2887d8cea52aa2eb0a3e988c4493ae8.png" >

添加到db.DOMAIN文件的结尾。($INCLUDE控制语句将在本章稍后予以说明。)例如,movie.edu的管理员会将额外的MX记录加入spcl.movie文件,这样用户就能直接发邮件到movie.edu而不需要通过movie.edu中的其他主机。在找到该文件后,h2n会把以下语句:

https://yqfile.alicdn.com/1c8d83972571c6129c582d93f6a3b8e3d5307811.png" >

添加到区域数据文件db.movie的结尾。

7.2.6 保持Root提示文件是最新的
正如本书第4章的说明,root提示文件会告诉名称服务器,root区域的服务器位于何处。该文件必须定期更新。虽然root名称服务器不会经常变动,但是变动也是无法避免的。一个良好的习惯是每一到两个月检查root提示文件一次。在第4章中,本书介绍了如何FTP到ftp.rs.internic.net以取得root提示文件。而且这可能是将该文件保持最新的最佳方法。

如果有dig程序(该程序是一个包含在BIND发行套件中的查询工具,第12章会予以说明),则可以执行如下命令取得当前root名称服务器的列表:

时间: 2024-10-25 14:22:37

《DNS与BIND(第5版)》——7.2 更新区域数据文件的相关文章

《DNS与BIND(第5版)》——4.2 建立区域数据

4.2 建立区域数据 建立电影大学名称服务器的第一步,是将主机表转换成等效的DNS区域数据.该数据的DNS版本有多个文件.一个文件将所有主机名映射成地址.其他文件将地址映射回主机名.名称到地址(name-to-address)的查询有时被称作正向解析(forward mapping),而地址到名称(address-to-name)的查询则被称作逆向解析(reverse mapping).每个网络都拥有自己的逆向解析数据文件. 作为本书的一个约定,将主机名映射到地址的文件称作db.DOMAIN.例

《DNS与BIND(第5版)》——4.3 建立BIND配置文件

4.3 建立BIND配置文件 现在已经创建好了区域数据文件,接下来必须指引名称服务器读取这些文件.对于BIND来说,指引服务器读取其区域数据文件的机制便是配置文件.到目前为止,本章已经讨论了那些数据和格式被DNS规范描述过的文件.不过,下面所讨论的配置文件的语法,虽然是BIND所特有的,但是却没有在DNS RFC中被定义. 从版本4到版本8之间,BIND配置文件的语法发生了显著的变化.幸运的是,BIND 8和BIND 9之间未发生任何变化.BIND 4已问世很久了,这里就不再讨论它的配置文件.如

《DNS与BIND(第5版)》——4.6 工具

4.6 工具 如果有一种工具,可以轻易地将主机表转换成主(master)文件格式,那不是很方便吗?确实有这样的工具,它就是用Perl语言编写的h2n--一个从主机表到主文件的转换器.可以先使用h2n来创建区域数据文件,然后再手动维护它.或者可以不断地执行h2n.显而易见,主机表的格式比主文件的格式更易于理解和修改.因此,可以先维护/etc/hosts,然后在每次修改后重新运行h2n来更新区域数据文件. 如果打算使用h2n,最好一开始就使用它,因为h2n会使用/etc/hosts文件来直接产生新的

《DNS与BIND(第5版)》——10.12 系统优化

10.12 系统优化 对于大多数名称服务器来说,在BIND的默认配置下就能工作得很好,然而可能其中某个还需要进一步调优.本节将讨论可以用来优化名称服务器的所有配置项. 10.12.1 区域传输区域传输会给名称服务器带来沉重的负担.所以BIND提供一些机制,可以限制slave名称服务器给master服务器带来的区域传输负载. 1.限制请求单个名称服务器传输的区域数量 在slave名称服务器上,可以限制其一次能够向单个master名称服务器请求传输的区域数量.这样master名称服务器的管理员应该会

《DNS与BIND(第5版)》——10.3 DNS NOTIFY(区域变更通知)

10.3 DNS NOTIFY(区域变更通知) 习惯上,BIND中的slave通过轮询(polling)机制来决定何时需要进行区域传输.轮询间隔时间又被称为更新间隔时间(refresh interval).而区域SOA记录中的其他参数,则可以用来配置轮询机制的其他参数. 但是使用这种轮询机制,在slave检测到并且从其master名称服务器传回新的区域数据,需要等待一段更新间隔时间.对使用动态更新的环境而言,这种延迟所带来的后果是灾难性的.当区域信息变更时,如果primary名称服务器能够主动通

《DNS与BIND(第5版)》——10.5 转发机制

10.5 转发机制 某些网络连接不希望发送过多的流量到外界去,可能是因为对外的连接速率低.延迟高:例如,远程办公室通过卫星连接到公司的网络.在这些情况下,可能需要将对外的DNS流量限制到最低.BIND提供了一种解决此问题的机制:转发器(forwarder). 如果需要将名称解析分流至特定的名称服务器,那么转发器也是很有用的.例如,如果网络中只有一台主机连接到Internet,并且该主机是名称服务器,则可以将其配置为其他名称服务器的转发器,这样它们就可以查询Internet上的域名了.(本书第11

《DNS与BIND(第5版)》——10.2 DNS动态更新

10.2 DNS动态更新 Internet(即通常使用TCP/IP协议的网络)如今变得愈加动态化.许多大型企业使用DHCP动态分配IP地址.几乎所有的ISP都使用DHCP为其拨号及使用线缆调制解调器(cable modem)的用户分配IP地址.为适应这种变化,DNS需要提供动态增加和删除记录的功能.RFC 2136描述了这种机制,称为DNS动态更新. BIND 8和9支持RFC 2136提出的动态更新功能.此功能允许经过授权的更新者(updater),在区域中的权威名称服务器上增加和删除资源记录

《DNS与BIND(第5版)》——7.6 保持一切平稳运行

7.6 保持一切平稳运行 维护的一个重要意义在于:能够在真正的问题出现之前,察觉到某些异常.问题发现得越早,就越容易进行修复.正如老话说的:预防为主,治疗为辅. 这一章的内容不全然是关于故障排除的(本书稍后会有一章专门讨论如何排除故障),更偏重于故障出现前的预防.而故障排除是在问题变得复杂后,不得不进行的操作,并且需要根据症状来找出问题. 下面两小节将讨论预防性维护的相关内容:定期查看syslog文件及BIND名称服务器的统计信息,以检查是否存在任何问题.就像给名称服务器做体检一样. 7.6.1

《DNS与BIND(第5版)》——7.3 整理文件

7.3 整理文件 当首次设置区域时,整理文件很简单:将它们全部放到一个目录中即可.这些文件中包含了一个配置文件和数个区域数据文件.然而,随着时间的推移,任务会越来越艰巨.有更多的网络加入,相应地就有更多in-addr.arpa区域.或许已经授权了一些子域,也已经开始为其他站点备份区域.一段时间后,当使用ls查看名称服务器的目录时,会发现一屏都无法列出所有内容.是时候重新整理这些文件了.BIND提供了一些功能用来帮助进行文件的整理. BIND名称服务器支持一个叫做include的配置文件语句,它允