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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介:

本节书摘来自异步社区《DNS与BIND(第5版)》一书中的第7章,第7.2节,作者: 【美】Joseph Davies 更多章节内容可以访问云栖社区“异步社区”公众号查看。

7.2 更新区域数据文件

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

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

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

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


9ffb8adb9a00138796f514e7485b960f9636ff3c

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


<a href=https://yqfile.alicdn.com/ebf6d45b253533ab52ad70dff7970f8ee6cd3f53.png" >

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


<a href=https://yqfile.alicdn.com/b82b8b0205901f5fcf875d5d5d0f4d1d1ed0c7ad.png" >

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


f288687bfc51d0c6061a141fa641d1f80c9de98b

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

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

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


03d0fb3f7b11aa6424128fd98624636711abaa66

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


<a href=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记录可以用来做任何事情;描述主机的位置就是其中之一:


bbf53af60b3b891da956a856b4708b55fbcea78d

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


023020a2567f2c213e6943ca2fd329fd8910500b

2.负责人

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

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

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


<a href=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区域(包含两个网络)创建数据文件,可以使用以下命令:


3523961ee980d3eb2e5cf2594f285a81a406820c

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

-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

根据日期生成序号。

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


5a7979a7385e784d68d9f09fe8afb6d9bd8cdd61

opts文件的内容如下:


<a href=https://yqfile.alicdn.com/fc65123c4cd5e8564e3ff9cc50be218cf9f5531d.png" >

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

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

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

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


<a href=https://yqfile.alicdn.com/c7d6d361b2887d8cea52aa2eb0a3e988c4493ae8.png" >

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


<a href=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名称服务器的列表:


aa7422fd8a1761cdea226b4fdfd72b84eca6cd34
相关文章
|
5天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
18 2
|
1月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
163 2
|
1月前
|
Java
Java“解析时到达文件末尾”解决
在Java编程中,“解析时到达文件末尾”通常指在读取或处理文件时提前遇到了文件结尾,导致程序无法继续读取所需数据。解决方法包括:确保文件路径正确,检查文件是否完整,使用正确的文件读取模式(如文本或二进制),以及确保读取位置正确。合理设置缓冲区大小和循环条件也能避免此类问题。
|
1月前
|
SQL 关系型数据库 MySQL
数据库导入SQL文件:全面解析与操作指南
在数据库管理中,将SQL文件导入数据库是一个常见且重要的操作。无论是迁移数据、恢复备份,还是测试和开发环境搭建,掌握如何正确导入SQL文件都至关重要。本文将详细介绍数据库导入SQL文件的全过程,包括准备工作、操作步骤以及常见问题解决方案,旨在为数据库管理员和开发者提供全面的操作指南。一、准备工作在导
242 0
|
1月前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
315 60
|
24天前
|
自然语言处理 数据可视化 前端开发
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
合合信息的智能文档处理“百宝箱”涵盖文档解析、向量化模型、测评工具等,解决了复杂文档解析、大模型问答幻觉、文档解析效果评估、知识库搭建、多语言文档翻译等问题。通过可视化解析工具 TextIn ParseX、向量化模型 acge-embedding 和文档解析测评工具 markdown_tester,百宝箱提升了文档处理的效率和精确度,适用于多种文档格式和语言环境,助力企业实现高效的信息管理和业务支持。
3980 5
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
|
11天前
|
存储
文件太大不能拷贝到U盘怎么办?实用解决方案全解析
当我们试图将一个大文件拷贝到U盘时,却突然跳出提示“对于目标文件系统目标文件过大”。这种情况让人感到迷茫,尤其是在急需备份或传输数据的时候。那么,文件太大为什么会无法拷贝到U盘?又该如何解决?本文将详细分析这背后的原因,并提供几个实用的方法,帮助你顺利将文件传输到U盘。
|
13天前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
36 2
|
19天前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
100 1
|
1月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。

相关产品

  • 云解析DNS
  • 推荐镜像

    更多