运行 Windows Server 的 DNS 服务器支持老化和清理功能。 这些功能作为一种机制提供,用于清理和删除陈旧的资源记录,这些记录会随着时间的推移在区域数据中累积。
为何使用老化处理和清理功能
通过动态更新,当计算机在网络上启动时,资源记录会自动添加到区域中。 但是,在某些情况下,当计算机退出网络时,记录不会自动删除。 例如,如果计算机在启动时注册了自己的主机 (A) 资源记录,后来又不正确地与网络断开连接,则可能不会删除其主机 (A) 资源记录。 如果您的网络具有移动用户和计算机,那么这种情况可能会频繁发生。
如果不进行管理,则区域数据中存在的过时资源记录可能会导致一些问题。 以下是一些示例:
- 如果服务器区域中保留了大量过时的资源记录,则它们最终会占用服务器磁盘空间并导致长时间的区域传输。
- 具有过时资源记录的 DNS 服务器可能会使用过时的信息来回答客户端查询,从而可能会导致客户端在网络上遇到名称解析问题。
- DNS 服务器上过时资源记录的积累会降低其性能和响应能力。
- 在某些情况下,区域中存在的过时资源记录可能会阻止其他计算机或主机设备使用 DNS 域名。
为了解决这些问题,DNS 服务器服务具有以下功能:
- 基于服务器计算机上设置的当前日期和时间的时间戳,适用于动态添加到主类型区域中的任何资源记录。 此外,在启用老化/清除的标准主要区域中记录时间戳。
- 对于手动添加的资源记录,服务器会分配一个时间戳值 0。 这意味着老化过程不适用。 这些记录可以无限期地保留在区域数据中,除非您更改其时间戳或者删除它们。
- DNS 服务器服务根据针对任何合格区域指定的刷新时间段来老化本地数据中的资源记录。 只有 DNS 服务器服务加载的主要类型区域才能参与此过程。
- 清除在指定刷新期之外仍然存在的任何资源记录。 当 DNS 服务器执行清理操作时,它可以确定截至过时点的过时资源记录,并将其从区域数据中删除。 可以将服务器配置为定期自动执行清理操作,或者您可以在服务器上立即启动清理操作。
Warning
默认情况下,DNS 服务器服务的老化和清理机制处于禁用状态。 只有在完全了解所有参数时,才应启用它。 否则,可能会意外地将服务器配置为删除不应删除的记录。 如果意外删除了记录,则用户将无法解析对该记录的查询。 此外,任何用户都可以创建记录并取得记录的所有权,即使在为安全动态更新配置的区域上也是如此。
服务器会使用每个资源记录的时间戳来确定何时清理记录。 你可以配置老化和清理属性来控制此过程。
Prerequisites
在使用 DNS 的老化和清理功能之前,必须满足以下几个条件:
- 必须在 DNS 服务器和区域中启用清理和老化功能。
默认情况下,资源记录的老化和清理处于禁用状态。
- 必须将资源记录动态添加到区域中或者手动对其进行修改,才能在老化和清理操作中使用这些资源记录。
通常,只有使用 DNS 动态更新协议动态添加的那些资源记录才会老化并被清理。
但是,你可以对通过非动态方式添加的其他资源记录启用清理。 对于使用来自其他 DNS 服务器的基于文本的区域文件添加或手动添加的记录,服务器会将时间戳设置为零。 时间戳为零会使这些记录不适合用于老化和清理操作。
要更改此默认值,你可以单独配置这些记录、重置并允许它们使用当前(非零)时间戳值。 当前(非零)时间戳值使这些记录能够老化并被清除。
Tip
将区域从标准主区域更改为 Active Directory 集成区域时,你可能希望对区域中的所有现有资源记录启用清理。 若要为区域中的所有现有资源记录启用老化,可以使用命令行工具提供的 AgeAllRecords 命令。
Terminology
以下列表指明了讨论老化和清除时使用的术语。
当前服务器时间:DNS 服务器上的当前日期和时间。 此数字可以表示为任何时间点的精确数值。
无刷新间隔 为每个区域确定的时间间隔,由以下两个事件绑定:
- 上次刷新记录的日期和时间及其时间戳设置。
- 记录下次可刷新并重置其时间戳的日期和时间。
需要使用此值来减少对 Active Directory 数据库的写入操作次数。 默认情况下,此间隔设置为 7 天。
它不应该提高到不合理的高水平,因为老化和清理功能的好处可能会丢失或减少。
记录刷新 当处理资源记录的 DNS 动态更新时,仅更新资源记录的时间戳,而不修改记录的其他特征。 刷新通常由于以下原因而发生:
- 当计算机在网络上重新启动时,它会检查其名称和 IP 地址是否与关闭前相同。 如果名称和 IP 地址一致,则计算机会发送刷新以更新其关联的资源记录。
- 计算机会在运行时发送定时刷新。
- Windows 和 Windows Server DNS 客户端服务每 24 小时会更新一次客户端资源记录的 DNS 注册。 如果动态更新请求不会导致修改 DNS 数据库,则执行刷新。
- 另一个网络服务会进行刷新尝试。 例如:
- DHCP 服务器会续订客户端地址租约。
- 群集服务器注册并更新群集的记录。
- Netlogon 服务注册和更新 Active Directory 域控制器使用的资源记录。
记录更新 为资源记录处理 DNS 动态更新时,除了修订记录的时间戳之外,还会修改该记录的其他特征。 更新通常由于以下原因而发生:
- 将新计算机添加到网络时。 启动时,计算机会发送更新,以首次将其资源记录注册到其配置的区域。
- 当区域中现有记录的计算机的 IP 地址发生变化时,会导致对 DNS 区域数据中修改的名称到地址映射发送更新。
- 当 Netlogon 服务注册新的 Active Directory 域控制器时。
刷新间隔 为每个区域确定的时间间隔,由以下两个不同的事件绑定:
- 可以刷新记录并重置其时间戳的最早日期和时间。
- 可以从区域数据库中清理并删除记录的最早日期和时间。
此值应足够大,以允许所有客户端刷新其记录。 默认情况下,此间隔设置为 7 天。 刷新间隔不应配置得太高,因为老化和清理功能的好处可能会丢失或减少。 设置此值时,请考虑网络的要求和行为。
资源记录时间戳:DNS 服务器在执行老化和清理操作时用于确定删除资源记录的日期和时间值。
清理期 在服务器上启用自动清理时,此时间段表示自动清理过程重复之间的时间。 默认值为 7 天。 为防止 DNS 服务器性能下降,允许的最小值为 1 小时。
清理服务器 一个可选的高级区域参数,可用于为已启用执行区域清理的 DNS 服务器指定受限 IP 地址列表。 默认情况下,如果未指定此参数,则所有加载目录集成区域(也启用了清理)的 DNS 服务器都会尝试清理该区域。 在某些情况下,如果最好是只在加载目录集成区域的某些服务器上执行清理,则此参数很有用。 若要设置此参数,必须在 ScavengingServers 参数中为负责清理该区域的服务器指定 IP 地址列表。 使用
dnscmd命令设置参数,dnscmd是一款基于命令行的工具,用于管理 Windows DNS 服务器。 或者,可以使用 Set-DnsServerScavenging PowerShell cmdlet。开始清理时间:以数字表示的特定时间。 服务器使用此时间来确定区域何时适合进行清理。
何时可以开始清理
在满足启用清理功能的所有先决条件后,当当前服务器时间大于该区域的开始清理时间值时,可以对该服务器区域启动清理。
服务器将时间值设置为在发生以下任何一个事件时开始按区域进行清理:
- 为区域启用了动态更新。
- 应用了清理过时资源记录复选框状态更改。 你可以使用 DNS 控制台在适用的 DNS 服务器或其主要区域之一中修改此设置。
- DNS 服务器或服务启动,导致服务器加载启用了清理功能的主要区域。
- 暂停后区域恢复服务时。
当上述任何事件发生时,DNS 服务器通过计算以下总和来设置开始清理时间的值:
当前服务器时间 + 刷新间隔 = 开始清理时间
该值在清理操作期间用作比较基准。
记录的老化和清理示例过程
要了解服务器老化和清理的过程,请考虑单个资源记录的生命周期和阶段。
在以下示例中,一条记录已添加到启用了老化和清理功能的服务器和区域中。 然后,它会老化并最终从数据库中删除。
示例 DNS 主机
host-a.example.contoso.com在启用了老化/清理功能的区域的 DNS 服务器上注册了其主机 (A) 资源记录。当 DNS 服务器注册记录时,它会根据当前服务器时间在此记录上添加时间戳。
写入记录时间戳后,DNS 服务器在区域无刷新间隔期间不接受此记录的刷新。 但是,它可以接受该时间之前的更新。 例如,如果
host-a.example.contoso.com的 IP 地址发生更改,则 DNS 服务器可以接受更新。 在这种情况下,服务器还会更新(重置)记录时间戳。无刷新期到期后,服务器开始接受刷新此记录的尝试。
初始无刷新期结束后,记录的刷新期会立即开始。 在此期间,服务器不会禁止在记录的剩余生命周期尝试刷新记录。
在刷新期间和之后,如果服务器收到记录的刷新,它将对其进行处理。
这将根据步骤 2 中描述的方法重置记录的时间戳。
当
example.contoso.com区域的服务器执行后续清理时,将检查记录(以及所有其他区域记录)。根据以下总和将每条记录与当前服务器时间进行比较,以确定是否应删除该记录:
区域记录时间戳 + 无刷新间隔 + 区域刷新间隔
如果此总和的值大于当前服务器时间,则不执行任何操作,并且记录将继续在区域中老化。
Or
如果此总和的值小于当前服务器时间,则从服务器内存内的区域数据中以及从目录集成
example.contoso.com区域的 Active Directory 内的 DnsZone 对象存储中删除该记录。