配置Windows DNS解析程序缓存

时间:2009-03-10 15:29:58

标签: c# .net dns

请注意,我在谈论客户端DNS解析器缓存。此消息与Windows DNS服务器无关。

我有一个C#程序可以执行很多DNS解析。因为HTTPWebRequest组件不允许我更改Host标头,所以我无法创建自己的内部DNS缓存。所以我必须依赖Windows DNS缓存,这似乎无法改变。

Windows Server 2003中的DNS缓存注册表设置有一个相当不错的TechNet article,但我无法证明设置它们可以做任何事情。我通过Google搜索找到的所有其他页面都引用该页面,或者有时会错误地解释它。

Windows'ipconfig命令有一个/ displaydns开关,用于输出缓存的内容。据我所知,这是确定DNS缓存大小的唯一方法。在我使用2 GB内存的32位Windows XP盒子上进行的实验中,无论我将DNS缓存注册表值设置为什么,我总是在缓存中最终得到30到40个项目 - 即使在进行了数千次DNS解析之后。在具有16 GB内存的64位Windows 2008计算机上,我总是在缓存中获得270到300个项目。

我很难过。我不知道答案是什么,但我认为以下情况之一就是这样:

  1. 无法更改DNS解析程序缓存的大小。
  2. 有可能,但文档错误。
  3. 文档尽可能正确,但它不完整。
  4. 文档是正确和完整的,但我太笨了,无法理解它。
  5. 记录的注册表项实际上已更改了缓存的大小,但ipconfig未向我显示缓存中的所有条目。
  6. 有人能告诉我是否可以在Windows XP,Vista或Server 2008中配置DNS解析器缓存的大小?

4 个答案:

答案 0 :(得分:1)

使用这些设置,在网上几分钟后,我看到1517个缓存条目:

REGEDIT4

[HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \服务\的dnscache \参数]
“QueryIpMatching”= DWORD:00000001
“NegativeCacheTime”= DWORD:00000000
“NegativeSOACacheTime”= DWORD:00000000
“CacheHashTableBucketSize”= DWORD:00000001
“CacheHashTableSize”= DWORD:00000180
“MaxCacheEntryTtlLimit”= DWORD:00000e10
“MaxSOACacheEntryTtlLimit”= dword:0000012c

[HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \服务\ TCPIP \参数]
“QueryIpMatching”= dword:00000001

答案 1 :(得分:1)

您可以使用“可移植DNS缓存”程序查看DNS缓存,监控DNS解析器的活动,以及查看通过缓存解析的查询以及转发到DNS服务器的查询。在其设置中,您可以配置缓存中的最大项目数。虽然,它似乎强制所有项目保留在缓存中,直到您单击“清除缓存”按钮或达到缓存限制。

答案 2 :(得分:0)

默认情况下,缓存的最小TTL是1天,我玩过它但默认情况下我认为注册表项默认不存在。

这是你正在寻找的关键,至少在XP中是这样的:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNSCache\Parameters

您需要添加DWORD MaxCacheTtl - 这将更改要在解析程序缓存中存储的最小TTL。

由于它默认为86,400(值以秒为单位,默认值为1天),因此不会缓存任何比此更短的内容。如果你把它降低到300,你会看到更多的东西被缓存在客户端上。

答案 3 :(得分:-1)

您可以使用的hack是在Windows上向hosts文件添加条目,这样就不会对文件中的所有条目进行DNS查询。您可以定期再次查询以验证条目。