Хотя службы DNS в общем просты, в их работе  бывают определенные нарушения. Довольно часто причиной этих нарушений оказываются неясные формулировки или плохо документированные параметры в различных диалоговых окнах Windows. В данной статье рассматриваются типичные неполадки DNS, которые доставляют немало хлопот администраторам.

Сбой динамического обновления

Управление DNS в домене упрощается благодаря возможности динамического обновления записей A и PTR на серверах DNS клиентами Windows. Таким образом, если в интегрированной с AD зоне на предприятии используется IP-адресация, клиентские компьютеры могут динамически обновлять AD, добавляя в нее свои новые IP-адреса. Но иногда можно заметить, что клиентские компьютеры не пополняют записей DNS новыми адресами. Чтобы корректно выполнить обновление, необходимо разрешить динамическое обновление на сервере DNS. Для этого требуется открыть окно свойств зоны DNS и выбрать режим Secure only for Dynamic updates (экран 1).
Затем следует открыть диалоговое окно Advanced TCP/IP Settings сетевого адаптера на клиентской системе, выбрать вкладку DNS и убедиться, что установлен флажок Register this connection’s addresses in DNS.
Наконец, клиентская служба DHCP (не только клиентская служба DNS) выполняет регистрацию DNS и должна функционировать на каждом компьютере. Даже если DHCP не используется для назначения IP-адресов, клиентская служба DHCP должна работать на всех компьютерах для динамического обновления записей DNS.
По умолчанию клиент обновляет записи DNS при начальной загрузке, при изменении IP-адреса или имени либо при выполнении команды ipconfig/registerdns. Кроме того, клиент повторно регистрирует IP-адрес через каждые 24 часа.

Падение производительности из-за клиентской службы DNS

При запуске клиентской службы DNS все записи из hosts-файла загружаются в кэш. Если для блокирования доступа к нежелательным именам узлов используется очень большой hosts-файл, эта служба может существенно замедлять работу компьютера. В таком случае ее стоит отключить.
Обычно отключение клиентской службы DNS не влияет на преобразование DNS. Тогда возникает вопрос, зачем вообще нужна такая служба.
Дело в том, что наличие клиентской службы DNS — не обязательное требование для преобразования имен; она лишь повышает эффективность и гибкость этого процесса. Главная цель клиентской службы DNS — обеспечить локальное кэширование записей DNS. В сущности, служба представляет собой сервер DNS. Вместо того чтобы опубликовать базу данных записей DNS, она просто кэширует ранее преобразованные записи DNS для ускорения будущих операций. Помимо кэширования, служба оптимизирует сетевые соединения путем приоритизации записей о ресурсах на основе сетевого местоположения, скорости и готовности.

Экран 1
Клиентская служба DNS также управляет списком серверов DNS, настроенных на компьютере. Как и в случае с записями о ресурсах, служба выбирает наиболее подходящий сервер DNS из списка серверов на основе местоположения в сети, скорости и готовности.

Обязательная оптимизация правил брандмауэра

Если брандмауэр настроен на передачу любых запросов на сервер DNS, то необходимы правила, препятствующие злоупотреблениям со стороны посторонних лиц. DNS-запросы обычно поступают в UDP-порт 53 из порта-источника с номером более 1023. Сервер DNS отвечает с порта-источника 53 на тот же порт, используемый клиентом. Большинство брандмауэров c проверкой пакетов на соответствие заданным условиям может обслуживать ответы DNS, поэтому для управления запросами достаточно одного правила.
Если размер ответа на запрос превышает 512 байт, то сервер DNS сообщает клиенту, что ответ усечен. Клиент может повторно представить запрос с Extended DNS, в котором используются UDP-ответы большего размера, или клиент может повторно послать запрос через TCP. Если разрешены запросы TCP, необходимо правило, разрешающее поступление пакетов в TCP-порт 53 из порта-источника с номером более 1023. Если известно, что сервер DNS не отвечает на запросы размером более 512 байт, то порт можно оставить закрытым. В некоторых серверах DNS UDP- или TCP-порт 53 используется в качестве порта-источника и порта назначения для запросов сервер-сервер, поэтому, возможно, придется соответствующим образом настроить брандмауэр.

Каким образом Windows опрашивает несколько серверов DNS

По умолчанию Windows сначала запрашивает указанный первым сервер DNS на первичном сетевом адаптере. Если этот сервер не отвечает в течение секунды, Windows посылает запрос на указанный первым сервер DNS на любом другом сетевом адаптере компьютера. Если ответ не получен в течение двух секунд, Windows посылает запрос всем серверам DNS на всех сетевых адаптерах компьютера. Если в течение двух секунд ни один сервер не откликается, Windows вновь посылает запрос всем серверам и ждет четыре секунды. При необходимости запрос всем серверам повторяется, и ожидание длится восемь секунд.
Windows вносит коррективы в список опрашиваемых серверов DNS в зависимости от условий работы сети. Если ни один из серверов DNS для адаптера не отвечает на запросы, Windows предполагает, что произошел отказ сети, и не запрашивает серверы через этот адаптер в течение 30 секунд. Если один сервер DNS на сетевом адаптере возвращает отрицательный ответ на запрос, Windows не посылает повторных запросов ни на один из серверов DNS этого адаптера. Кроме того, Windows может изменить порядок опроса серверов DNS в пользу сервера, который отвечает быстрее других.

Медленная процедура настройки из графического интерфейса

Чтобы настраивать конфигурации большого числа серверов DNS на клиентских компьютерах, нужен более простой и эффективный метод, чем использование графического интерфейса Windows. Попробуем применить утилиты, запускаемые из командной строки. Чтобы получить список всех серверов DNS клиента, следует ввести команду

c:>netsh interface ip
show dns

Очистить список серверов DNS сетевого адаптера можно с помощью команды

c:>netsh interface ip
set DNS «Local Area Connection»
static none

где «Local Area Connection» — имя сетевого адаптера.
Чтобы добавить сервер DNS для сетевого адаптера («Local Area Connection» — имя сетевого адаптера), нужно ввести

:>netsh interface ip
 set DNS «Local Area Connection»
 static 192.168.0.1

Проблемы домена DNS

Ошибки в настройке параметров DNS — типичная причина неполадок в доменах Windows. Самый быстрый способ проверить параметры — выполнить преобразование самого имени домена, что можно сделать с помощью команды

c:>nslookup

Эта команда должна выдать список IP-адресов, которые указывают на каждый из контроллеров домена. Если получены иные результаты, необходимо проверить настройки DNS.
Проверить конфигурацию DNS можно, выполнив быстрый тест сетевой конфигурации на любом компьютере Windows XP или Windows Server 2003. В командной строке нужно ввести

c:>netsh diag show test

При этом выполняется эхо-тестирование всех серверов DNS и шлюзов в конфигурации TCP/IP. Если имеется набор ресурсов Microsoft Windows Server 2003 Resource Kit, то можно применить команду netdiag или dnsdiag

C:>netdiag /test:dns

или

C:>dnsdiag

Чтобы протестировать общедоступные серверы DNS извне, можно использовать один из следующих URL: http://www.dnsreport.com/ или http://www.dnsstuff.com/. С помощью команды

c:> echo ls -d
nslookup —

проверяем, поддерживает ли удаленный сервер DNS передачу зоны.
Если сервер позволяет передать зону для данного домена, то будут возвращены все записи в зоне. В противном случае возвращается сообщение об ошибке.

BIND — акроним, а не глагол

В диалоговом окне свойств сервера DNS имеется параметр BIND Secondaries. BIND — не глагол, а сокращение от слов Berkeley Internet Name Domain, и обозначает оно реализацию DNS, используемую для обработки DNS-запросов в Internet.
При передаче зоны сервер DNS использует более быстрый метод передачи зоны со сжатием, который обеспечивает передачу многих записей в одном TCP-сообщении. Этот формат несовместим со старыми версиями BIND. Необходимо выбрать режим BIND Secondaries, если используется более ранняя версия BIND, чем 4.9.4. Этот параметр запрещает серверу DNS Windows задействовать более быстрый метод передачи зоны.

Когда отключать рекурсию?

Рекурсия — процесс, используемый DNS для поиска заслуживающего доверия сервера в домене. Если направить на сервер DNS запрос о компьютере в домене и для данного домена сервер не заслуживает доверия и не имеет кэшированной копии запрошенной записи хоста, то сервер рекурсивно опрашивает другие серверы в Internet, чтобы найти сервер DNS, содержащий правильный ответ. Если сервер не выполняет рекурсии, то он сообщает клиенту, что ему ничего не известно о записи, или указывает, где можно найти запись.
Чтобы определить ситуации, в которых следует отключить рекурсию, необходимо проанализировать типы записей, содержащихся на сервере DNS. Если серверу DNS для домена известны все записи домена, то рекурсия не понадобится. Например, контроллер домена располагает сведениями о каждом компьютере домена, поэтому нет необходимости посылать куда-то запрос. То же самое относится к общедоступному серверу DNS, в котором хранятся опубликованные записи доменов.
Рекурсию обычно разрешают на серверах, которые обеспечивают преобразование DNS для локальных пользователей. То есть если пользователю разрешен доступ в Internet, следует предоставить ему рекурсивный сервер DNS, который может преобразовать любое имя хоста в Internet.
Важно не открывать рекурсивные серверы DNS для доступа вне компании. Сервер может быть атакован и использован в качестве участника атак с отказом в обслуживании (DDoS).

Блокирование узлов Internet

Существует проблема, возникновение которой не связано с DNS, однако DNS позволяет частично решить ее. Блокировать доступ пользователя к нежелательным узлам Internet можно с помощью брандмауэра или сервера-посредника, но эти решения не всегда эффективны. Например, провайдер услуг доступа в Internet может пожелать блокировать узлы с определенными именами, не требуя от пользователей применения сервера-посредника и не создавая чрезмерной нагрузки на брандмауэр. Один из альтернативных вариантов — блокирование имен узлов на сервере DNS.
Для этого в первую очередь необходим список блокируемых узлов. Список распространителей опасных программ, отформатированный для серверов DNS Microsoft, можно найти на сайте Malware Block Lists по адресу
http://www.malware.com.br/#blocklist. Этот список можно напрямую импортировать на сервер DNS. Можно также использовать список блокировки с сайта hpHosts Online по адресу http://www.hosts-file.net/ или с сайта Spamassassin Blacklists по адресу http://www.sa-blacklist.stearns.org/sa-blacklist, но их придется переформатировать.
Другая альтернатива — OpenDNS (http://www.opendns.com/), бесплатная DNS-служба, которая обеспечивает фильтрацию путем блокирования известных узлов фишинга. Чтобы задействовать OpenDNS, достаточно поместить IP-адреса сервера службы DNS в свою сетевую конфигурацию.
Следует помнить, что использование DNS для блокирования лишь препятствует преобразованию имен узлов, внесенных в список. Это не мешает пользователям обращаться к узлам путем ввода IP-адреса и не блокирует узлов, которых нет в списке.
В заключение хочу подчеркнуть,  что у проблем DNS обычно есть простые решения, но необходимо ясно понимать принципы работы этой службы. Изучить основы DNS не помешает каждому ИТ-специалисту.

Марк Барнетт (mburnett@xato.net) — независимый консультант по безопасности и автор, специализирующийся на проблемах безопасности Windows. Обладатель сертификата IIS MVP


Дополнительные советы по DNS

Ко мне часто обращаются с вопросами об особенностях DNS. Ниже приводятся два совета по использованию этой службы.
На серверах DNS Windows можно задействовать как циклическую ротацию (round-robin rotation), так и упорядочение с сетевой маской (netmask ordering). Часто имени узла, такому как http://www.microsoft.com/, соответствует несколько IP-адресов для более эффективного балансирования нагрузки и повышения производительности. Эти IP-адреса могут быть различными путями к одному серверу или могут указывать на географически разнесенные серверы.

Экран А  

Чтобы сбалансировать нагрузку от DNS-запросов, сервер DNS использует циклическую ротацию для прохода по списку IP-адресов, равномерно распределяя трафик между различными серверами. При упорядочении с сетевой маской сервер DNS пытается выдать IP-адрес узла, физически расположенного ближе всех к клиенту. Для этого сервер DNS просматривает несколько первых октетов IP-адреса, предполагая, что сервер с IP-адресом, похожим на адрес клиента, будет ближе всего расположен к нему физически. По умолчанию сервер DNS отдает предпочтение любому адресу хоста в одной сети класса C с клиентом.
Может показаться, что нельзя одновременно применить циклическую систему и упорядочение с сетевой маской, но, как показано на экране A, Windows позволяет сочетать оба метода. Если выбраны оба метода, Windows проверяет список IP-адресов узла, чтобы выяснить, насколько близко IP-адрес в списке соответствует IP-адресу клиента. Если обнаружено совпадение, этому IP-адресу будет назначен более высокий приоритет для циклической ротации. Результат: сервер DNS выполняет циклическую ротацию IP-адресов, но чаще выбирает ближайшие к клиенту серверы.

Интеграция DNS и Active Directory

При установке DNS на контроллере домена (DC) Windows можно сохранить зонные файлы не в простых текстовых файлах, а в базе данных Active Directory (AD). Возникает вопрос: зачем тогда интегрировать зону с AD?
В большинстве случаев интеграция зон DNS с AD приносит много преимуществ, главное из которых — более эффективная репликация. В зонах, интегрированных с AD, автоматизирована репликация записей DNS между серверами. Репликация AD — репликация с несколькими «ведущими», то есть можно внести изменение на любом DC, и это изменение будет автоматически распространено по домену. Для зон DNS, которые не интегрированы с AD, необходимо назначить первичные и вторичные серверы DNS. Изменения обычно вносятся на первичном сервере, который обновляет все вторичные.