2009-03-10 2 views
7

Обратите внимание, что я говорю о кэше DNS-резольвера DNS-клиента. Это сообщение не связано с DNS-сервером Windows.Настройка кэша DNS-резольвера Windows

У меня есть программа на C#, которая выполняет множество разрешений DNS. Поскольку компонент HTTPWebRequest не позволяет мне изменять заголовок Host, я не могу создать свой собственный внутренний DNS-кеш. Поэтому я должен зависеть от кеша Windows DNS, который не выглядит подходящим для изменения.

Существует достаточно хорошо TechNet article о настройках реестра кэша DNS в Windows Server 2003, но я не смог доказать, что их настройка ничего не делает. Все другие страницы, которые я нашел в поиске Google, ссылаются на эту страницу или перефразируют ее, иногда неправильно.

Команда Windows ipconfig имеет переключатель/displaydns, который выводит содержимое кеша. Насколько я знаю, это единственный способ определить размер кеша DNS. В моих экспериментах на 32-битной коробке Windows XP с 2 ГБ памяти, независимо от того, что я установил значения реестра кэша DNS, я всегда получаю от 30 до 40 элементов в кеше - даже после выполнения тысяч разрешений DNS , На моей 64-битной машине Windows 2008 с 16 ГБ памяти я всегда получаю от 270 до 300 элементов в кеше.

Я в тупике. Я не знаю, что ответ, но я считаю, что один из следующих случаев:

  1. Невозможно изменить размер кеша DNS-резольвера.
  2. Возможно, но документация неверна.
  3. Документация правильная, насколько это возможно, но она неполна.
  4. Документация правильная и полная, но я слишком тупой, чтобы понять ее.
  5. Задокументированные записи реестра фактически изменили размер кеша, но ipconfig не показывает мне все записи, которые находятся в кеше.

Может ли кто-нибудь сказать мне, можно ли настроить размер кеша DNS-резольвера в Windows XP, Vista или Server 2008?

+0

Перезапуск службы DNS-клиента после изменения значений? – Dave

+0

Пробовал, что. Без изменений. Также попытался перезагрузить машину. –

ответ

0

По умолчанию минимальный TTL для кеша составляет 1 день, я играл с ним, но по умолчанию я считаю, что запись реестра по умолчанию отсутствует.

Это ключ, который вы ищете, по крайней мере в XP:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNSCache\Parameters

Вам необходимо добавить параметр DWORD MaxCacheTtl - Это изменит минимальный TTL для хранения в кэше распознавателя ,

Поскольку он по умолчанию равен 86 400 (значение в секундах, по умолчанию = 1 день), все, что меньше этого, просто не кэшируется. Если вы опустили его до 300, вы увидите, что на клиенте будет больше кэшироваться.

+0

Согласно статье базы знаний по адресу http://support.microsoft.com/kb/318803, время, в которое будет записываться запись, составляет «меньше: 1) количество секунд, указанных в ответе, полученных получателем ; 2) Значение параметра MaxCacheTtl. " Ваш ответ противоречит этому. –

+0

Я не говорил с TTL о записи кэша, а скорее о пороге, который определяет, может ли он даже быть кэшированным. –

+0

Не могли бы вы расширить свой ответ, чтобы объяснить, как сокращение MaxCacheTtl приведет к тому, что в кеш будет помещено больше записей? Все, что я прочитал в базе знаний и связанной статье TechNet, указывает, что я хочу увеличить MaxTtl, чтобы сделать кеш более эффективным. –

-1

Вы можете использовать взломанные файлы, чтобы добавить записи в файл hosts в Windows, что сделало бы его не делать DNS-запросы для всех записей в файле. Вы можете периодически запрашивать запрос для подтверждения записей.

+0

Это интригующая идея, но количество запросов DNS, которые я делаю, делает это непрактичным. Я также предпочел бы не передавать свою программу в файл hosts или каталог, который он содержит. –

+0

-1 - взлом хостов довольно явно не является решением вопроса. – benc

1

С помощью этих настроек, после нескольких минут в Интернете, я вижу 1517 кэшированных записей:

REGEDIT4

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ DNSCache \ Parameters]
«QueryIpMatching "= DWORD: 00000001
"NegativeCacheTime"= DWORD: 00000000
"NegativeSOACacheTime"= DWORD: 00000000
"CacheHashTableBucketSize"= DWORD: 00000001
" кэш Таблицы hashTableSize "= DWORD: 00000180
"MaxCacheEntryTtlLimit"= DWORD: 00000e10
"MaxSOACacheEntryTtlLimit"= DWORD: 0000012c

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters]
"QueryIpMatching"= DWORD: 00000001

+0

И вот ссылка на документацию записей реестра: [link] (http://technet.microsoft.com/en-us/library/bb726981.aspx) – Darek

1

Существует программа «Portable DNS Cache», которую вы можете использовать для просмотра кэша DNS, мониторинга активности DNS-преобразователя и просмотра запросов, разрешенных с помощью кеша, и тех, которые перенаправлены на DNS-сервер. В его настройках вы можете настроить максимальное количество элементов в кеше. Хотя кажется, что он заставляет все элементы оставаться в кеше, пока не нажмете кнопку «Очистить кеш» или не достигнет предела кеширования.

Смежные вопросы