DNS 清理设置
本文讨论如何设置域名系统(DNS)清理,并举例说明如何在预先存在的区域中设置清理。
清理 DNS 中的过时记录(删除)。 由于涉及删除,许多安全阀内置于清理中,这需要很长时间才能实现清理。
注意
本文重点介绍最常见的 Windows DNS 方案:托管 Active Directory(AD)集成区域的 Windows Server DNS 服务器。
在 Windows Server 中,应在以下三个位置设置清理:
- 在要清理的各个资源记录上。
- 在要清理的区域。
- 在执行清理的一个或多个服务器上。
清理资源记录上的设置
在 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 中复制此区域以来,刷新间隔是否比刷新间隔长?
如果在出现复制问题的服务器上启用了清理功能,则这有助于防止在其他服务器上仍然有效的记录不必要的墓葬。
如果通过了上述所有检查,则区域已准备好进行清理。 此时,清理服务器会检查每个资源记录上的时间戳。 如果当前日期和时间大于时间戳加上“无刷新”和“刷新”间隔,则会删除记录。
示例:在预先存在的区域中设置清理
下面是在预先存在的区域中设置清理的示例。 此过程旨在实现最大安全性。 如果使用默认设置,此过程可能需要四到五周(对于理智检查阶段需要两周,启用阶段需要两到三周)。
安装阶段
- 在所有服务器上关闭清理。 可以使用
dnscmd /zoneresetscavengeservers
该命令将清理限制为单个服务器,并确保此服务器已禁用清理。 - 打开要清理的区域。 根据需要设置“刷新”和“无刷新”间隔。 为了更有效地进行复仇,我们建议降低“无刷新”间隔,并将“刷新”间隔保留为默认值。
- 添加今天的日期加上“刷新”和“无刷新”间隔。 这一次已经过去了几周后,又回来了。
健全性检查阶段
在 DNS 记录中查找早于“刷新”和“无刷新”间隔的任何记录。 如果看到任何问题,则动态注册过程存在问题,在继续操作之前,应对其进行更正。 此时,彻底检查是设置中最重要的步骤。
查找旧记录时要检查的内容:
- 该
ipconfig /registerdns
命令是否正常工作? - 谁是记录的所有者(请参阅 记录属性中的“安全 ”选项卡)
- 记录是否由管理员静态创建,然后启用清理? 如果是这样,则需要删除记录以清除所有权并运行
ipconfig /registerdns
命令来更新该记录。 - 服务器的 Active Directory 复制是否正常运行?
除非可以解释任何过时的记录,否则不要继续。 在下一阶段,将删除它们。
启用阶段
可以使用 dnscmd /zoneresetscavengeservers
该命令在单个服务器上启用清理。
启用清理后,创建新的测试记录,并启用它进行清理。 然后,映射此记录消失的时间点。 步骤如下:
- 从记录上的时间戳开始。
- 添加刷新间隔。
- 添加“无刷新”间隔。
- 结果将是你的“有资格复仇”时间。 不过,目前记录不会消失。
- 检查 DNS 事件日志中是否存在事件 ID 2501 和 2502,以查找 DNS 服务器何时将运行清理。
- 根据“符合清理条件”的时间,找到最新的事件 ID 2501 或事件 ID 2502 事件,并将服务器的清理期(从 服务器属性的“高级 ”选项卡)添加到其中。
- 这是测试记录消失的时间点。
例如:
- 区域设置为 3 天刷新间隔和 3 天无刷新间隔。
- 服务器清理期设置为三天。
- 最后一个 DNS 事件 ID 2501 或 2502 发生在 2008 年 1 月 1 日上午 6 点。
- 你有一条记录,时间戳为 2008 年 1 月 12 日(中午)。
根据这些假设,可以预测记录将在 2008 年 1 月 10 日凌晨 6 点左右删除。 下面是示例的关系图。
启用清理后,可以定期检查以查找事件 ID 2501 和 2502 事件,以了解情况。 还可以在预测的日期和时间返回,并查看测试记录是否已消失。