DNS 清理设置

本文讨论如何设置域名系统(DNS)清理,并举例说明如何在预先存在的区域中设置清理。

清理 DNS 中的过时记录(删除)。 由于涉及删除,许多安全阀内置于清理中,这需要很长时间才能实现清理。

注意

本文重点介绍最常见的 Windows DNS 方案:托管 Active Directory(AD)集成区域的 Windows Server DNS 服务器。

在 Windows Server 中,应在以下三个位置设置清理:

  1. 在要清理的各个资源记录上。
  2. 在要清理的区域。
  3. 在执行清理的一个或多个服务器上。

清理资源记录上的设置

在 DNS Microsoft 管理控制台(MMC)中,选择“查看>高级并检查资源记录的属性以查看清理设置。 例如:

检查资源记录的属性以查看清理设置的屏幕截图。

可以在三种方法中设置资源记录的清理:

  • 第一个是在“删除此记录”变为过时复选框并选择“应用”时检查记录。 选择“应用时,当前时间向下舍入为最接近的小时,并作为记录上的时间戳应用。 静态记录的时间戳为 0,表示不会清理它们。
  • 第二种方法是客户端计算机使用动态 DNS (DDNS) 注册记录时。 Windows 客户端每隔 24 小时动态更新 DNS。 所有 DDNS 记录都设置为散文。 首次由没有现有记录的客户端创建记录时,该记录被视为“更新”,并且设置了时间戳。 如果客户端具有现有的主机记录并更改主机记录的 IP,则这也被视为“更新”,并且设置了时间戳。 如果客户端具有具有相同 IP 地址的现有主机记录,则这被视为“刷新”,以及时间戳更改是否取决于区域设置。
  • 设置记录清理的第三种方法是使用 dnscmd /ageallrecords 命令。 如果针对某个区域运行此命令,它将为该区域中的所有记录设置清理和时间戳,包括不想清理的静态记录。

在记录上设置时间戳后,该时间戳将复制到托管该区域的所有服务器。

注意

如果托管记录的区域未启用清理,则不会清理记录,因此时间戳无关紧要。 时间戳可能会在客户端动态注册的服务器上更新,但不会复制到区域中的其他服务器。

清理区域中的设置

在服务器检查记录以确定记录是否将被清理之前,区域应已启用清理。 若要访问区域的清理设置,请右键单击该区域,选择“属性”,然后在“常规”选项卡上选择“老化”。

区域老化属性窗口的屏幕截图。

注意

此屏幕截图与复制此区域的任何 DNS 服务器上相同。

首次设置区域清理时,时间戳(在底部看到)设置为当天的当前时间(向下舍入到最接近的小时),加上刷新间隔。 每当区域加载或区域中启用动态更新时,也会重置此设置。

注意

如果未看到 区域可以在时间戳后 清理,请重新加载区域。

时间戳后 ,可以清理区域是第一个安全阀。 它使客户端有时间更新其记录时间戳。 由于禁用区域清理时不会复制新的记录时间戳,因此这也为复制时间提供了保持有序的复制时间。

刷新和无刷新间隔

下一个安全阀是刷新和无刷新间隔。 两个间隔均过后,可以删除记录。

“无刷新”间隔是一段时间,在此期间无法刷新资源记录。 “刷新”是动态更新,不更改主机资源记录;只需触摸时间戳。 如果客户端更改主机记录的 IP,则这被视为“更新”,并免除“无刷新间隔”。 无刷新间隔的目的是减少复制流量。 对记录的更改意味着应复制更改。

记录时间戳加“无刷新”间隔过后,可以输入“刷新”间隔。 刷新间隔是允许刷新时间戳的时间。 允许客户端传入并更新其时间戳。 此时间戳将复制,并且“无刷新”间隔将再次开始。 如果客户端在刷新间隔期间无法更新其记录,则它有资格被清理。

注意

设置刷新间隔和无刷新间隔时,允许客户端在刷新间隔期间进行多次注册尝试。 如果不这样做,由于刷新尝试失败,记录可能有资格进行清理。

如果右键单击服务器并选择“ 为所有区域设置老化/清理...”,你将看到类似于上述屏幕截图。 此选项设置此服务器创建新区域时将使用的默认设置。 除非选中“ 将这些设置应用到现有的 Active Directory 集成区域 ”复选框,否则该设置不会影响现有区域。

清理服务器上的设置

若要在服务器上设置清理,请右键单击 MMC 中的服务器并选择“ 属性”。 然后,选择“高级”选项卡上的“启用过时记录自动清理”复选框,如下所示:

服务器属性的屏幕截图,其中“高级”选项卡上选中了“启用过时记录”复选框的“启用自动清理”。

清理周期值是此服务器清理的频率。 服务器清理时,它会记录 DNS 事件 ID 2501,以指示清理了多少条记录。 如果未清理任何记录,则会记录事件 ID 2502。 由于区域数据复制到托管该区域的所有服务器,因此只需要一台服务器。

提示

通过获取最新事件 ID 2501 或 2502 上的时间戳并向其添加清理周期,可以确切地判断服务器何时尝试清理。

尽管可以将托管区域的每个服务器设置为复仇,但建议只设置一个集。 如果服务器无法进行复仇,则不会产生严重影响。 你将有一个位置来查找可疑和一组要检查的日志。 如果有许多服务器设置为清理,则有许多日志来检查清理是否失败。

若要控制哪个服务器正在清理某个区域,可以使用 dnscmd 命令确切地指定哪些服务器可能会进行清理。 例如,该 dnscmd /zoneresetscavengeservers contoso.com 192.168.1.1 192.168.1.2 命令仅允许 IP 地址为 192.168.1.1 和 192.168.1.2 的 contoso.com DNS 服务器在区域中进行报复。

清理过程和最终检查

还可以通过右键单击服务器并选择 Scavenge 过时资源记录来手动启动清理尝试。 请注意,手动尝试不会绕过安全阀。

在删除过时记录之前,请检查以下内容:

  • 是否在区域中启用清理功能?
  • 是否在区域中启用动态更新?
  • 清理服务器是否列为该区域的清理服务器之一?
  • 超出区域的“区域是否可以在之后清理”时间戳?
    这允许在开始之前准备客户端和 AD 复制。
  • 自上次在 Active Directory 中复制此区域以来,刷新间隔是否比刷新间隔长?
    如果在出现复制问题的服务器上启用了清理功能,则这有助于防止在其他服务器上仍然有效的记录不必要的墓葬。

如果通过了上述所有检查,则区域已准备好进行清理。 此时,清理服务器会检查每个资源记录上的时间戳。 如果当前日期和时间大于时间戳加上“无刷新”和“刷新”间隔,则会删除记录。

示例:在预先存在的区域中设置清理

下面是在预先存在的区域中设置清理的示例。 此过程旨在实现最大安全性。 如果使用默认设置,此过程可能需要四到五周(对于理智检查阶段需要两周,启用阶段需要两到三周)。

安装阶段

  1. 在所有服务器上关闭清理。 可以使用 dnscmd /zoneresetscavengeservers 该命令将清理限制为单个服务器,并确保此服务器已禁用清理。
  2. 打开要清理的区域。 根据需要设置“刷新”和“无刷新”间隔。 为了更有效地进行复仇,我们建议降低“无刷新”间隔,并将“刷新”间隔保留为默认值。
  3. 添加今天的日期加上“刷新”和“无刷新”间隔。 这一次已经过去了几周后,又回来了。

健全性检查阶段

在 DNS 记录中查找早于“刷新”和“无刷新”间隔的任何记录。 如果看到任何问题,则动态注册过程存在问题,在继续操作之前,应对其进行更正。 此时,彻底检查是设置中最重要的步骤。

查找旧记录时要检查的内容:

  • ipconfig /registerdns 命令是否正常工作?
  • 谁是记录的所有者(请参阅 记录属性中的“安全 ”选项卡)
  • 记录是否由管理员静态创建,然后启用清理? 如果是这样,则需要删除记录以清除所有权并运行 ipconfig /registerdns 命令来更新该记录。
  • 服务器的 Active Directory 复制是否正常运行?

除非可以解释任何过时的记录,否则不要继续。 在下一阶段,将删除它们。

启用阶段

可以使用 dnscmd /zoneresetscavengeservers 该命令在单个服务器上启用清理。

启用清理后,创建新的测试记录,并启用它进行清理。 然后,映射此记录消失的时间点。 步骤如下:

  1. 从记录上的时间戳开始。
  2. 添加刷新间隔。
  3. 添加“无刷新”间隔。
  4. 结果将是你的“有资格复仇”时间。 不过,目前记录不会消失。
  5. 检查 DNS 事件日志中是否存在事件 ID 2501 和 2502,以查找 DNS 服务器何时将运行清理。
  6. 根据“符合清理条件”的时间,找到最新的事件 ID 2501 或事件 ID 2502 事件,并将服务器的清理期(从 服务器属性的“高级 ”选项卡)添加到其中。
  7. 这是测试记录消失的时间点。

例如:

  • 区域设置为 3 天刷新间隔和 3 天无刷新间隔。
  • 服务器清理期设置为三天。
  • 最后一个 DNS 事件 ID 2501 或 2502 发生在 2008 年 1 月 1 日上午 6 点。
  • 你有一条记录,时间戳为 2008 年 1 月 12 日(中午)。

根据这些假设,可以预测记录将在 2008 年 1 月 10 日凌晨 6 点左右删除。 下面是示例的关系图。

有关要删除的记录的预测关系图。

启用清理后,可以定期检查以查找事件 ID 2501 和 2502 事件,以了解情况。 还可以在预测的日期和时间返回,并查看测试记录是否已消失。