我正在努力解决基于 Windows 的 LAN 上的 DNS 缓存问题。
我注意到,如果我更改由第三方名称服务器托管的域上的 DNS 记录,我似乎总是最后一个看到更改发生的人。我经常可以使用检查全球传播的服务(如 www.whatsmydns.net)查询域,但我通常会发现所有其他 DNS 服务器都是正确的,只有我自己的服务器拥有旧 IP - 甚至 8-12 小时后也是如此。这对我们来说是一个问题,因为我们是网站开发人员,经常更改 DNS 记录,因此这些巨大的延迟令人沮丧。
这似乎是因为我们 LAN 上的主域控制器服务器 (+Active Directory 和 DNS)(也是我们的本地 DNS 服务器)缓存了 AGES 的记录(远远超出了其发布的 TTL)。我如何才能停止 Windows DNS 服务器的缓存,或将缓存时间缩短到仅一小时左右?
答案1
如果我理解正确的话,那就是您对 DNS 服务器缓存外部记录不满意。您可能希望在 DNS 服务器(因为它有自己的缓存)和最终用户工作站上试验这些设置。更改注册表后重新启动 DNS 客户端服务。
使用注册表控制缓存时间
缓存肯定或否定响应的时间长度取决于以下注册表项中的条目值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNSCache\Parameters
肯定响应的 TTL 是以下值中较小者:
- 解析器收到的查询响应中指定的秒数
- MaxCacheTtl 注册表设置的值。
笔记
- 肯定响应的默认 TTL 为 86,400 秒(1 天)。
- 负面响应的 TTL 是 MaxNegativeCacheTtl 注册表设置中指定的秒数。
- 否定响应的默认 TTL 为 900 秒(15 分钟)。
如果您不想缓存负面响应,请将 MaxNegativeCacheTtl 注册表设置设为 0。
要在客户端计算机上设置缓存时间:
- 启动注册表编辑器 (Regedit.exe)。
在注册表中找到并单击以下项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\参数
在“编辑”菜单上,指向“新建”,单击“DWORD 值”,然后添加以下注册表值:值名称:MaxCacheTtl
数据类型:REG_DWORD 默认值:86400 秒 数值数据:如果将客户端 DNS 缓存中的最大 TTL 值降低到 1 秒,则会显得客户端 DNS 缓存已被禁用。
值名称:MaxNegativeCacheTtl
数据类型:REG_DWORD 默认值:900 秒 数值数据:如果不希望缓存负面响应,请将值设置为 0。
键入要使用的值,然后单击“确定”。
退出注册表编辑器。