Если сервер «потерялся»
Столкнувшись с проблемами в DNS, многие пользователи описывают приблизительно одну и ту же ситуацию. Приведу пример: «Я установил компьютер DC1 с адресом 192.168.1.4 для тестирования AD. На компьютере стоит операционная система Windows 2000 Server, машина играет роль сервера DNS и первичного контроллера домена моего тестового домена, который я назвал acme.com. Контроллер домена работает прекрасно - я могу создавать учетные записи пользователей и запускать все программы администрирования AD. Затем я установил второй компьютер DC2 с Windows 2000 Server и адресом 192.168.1.5 и запустил команду Dcpromo, чтобы сделать второй компьютер вторичным контроллером домена acme.com. Неожиданно я получаю сообщение Dcpromo о том, что подключиться к домену и сделать DC2 контроллером домена acme.com невозможно. При этом я могу выполнить команду ping между DC1 и DC2 и наоборот (оба компьютера находятся в одной и той же подсети). Не могу понять, что мешает им увидеть друг друга».

Из-за чего же возникает проблема? Чтобы в этом разобраться, необходимо реконструировать события.

Поиск сервера DNS

При запуске Dcpromo для настройки дополнительного контроллера домена программа выводит диалоговое окно Network Credentials. В нем запрашиваются имя, домен и пароль учетной записи, обладающей достаточными полномочиями для добавления контроллеров домена в существующий домен (в нашем случае, acme.com). Далее Dcpromo обращается к контроллеру домена acme.com и пытается зарегистрироваться в домене с этими именем и паролем. Но сначала программе Dcpromo требуется найти первичный контроллер домена.

Тут необходимо вспомнить, что служба именования в доменах AD основана на DNS. Одна из основных задач DNS в сети Windows 2000 - помочь компьютерам найти свои контроллеры домена. Для успешной работы DNS в системе должны присутствовать серверная часть (сервер DNS) и клиентская часть. Клиент DNS исполняется на рабочей станции и необходим для разрешения имен. Но он не может выполнять свою работу до тех пор, пока не найдет сервер DNS. Так что в поисках контроллера домена, который выполнит аутентификацию компьютера, Dcpromo обращается к клиентской части DNS: «Разыщи сервер DNS для домена acme.com и узнай у него имена и адреса IP-контроллеров для этого домена». Чтобы выполнить запрос, клиент DNS обращается к серверу DNS для получения записей типа SRV.

Чтобы понять, к какому серверу DNS обращается конкретная система, достаточно из командной строки выполнить команду:

ipconfig /all

Результатом работы будет список адресов IP всех серверов DNS домена. Когда клиенту DNS требуется разрешить запрос к DNS, он пытается обратиться к первому в списке серверу DNS. Если сервер отозвался, он становится предпочтительным, и все последующие запросы клиент DNS будет передавать ему. Клиент не будет обращаться к другим серверам DNS до тех пор, пока не перестанет получать ответы от сервера, выбранного в качестве предпочтительного.

Когда компьютер Windows 2000 выполняет поиск контроллера домена AD, чтобы произвести регистрацию, система пытается найти локальный контроллер домена. В первую очередь выполняется запрос на поиск локального контроллера домена acme.com. Если этот запрос не проходит, система осуществляет поиск всех контроллеров домена acme.com.

Проблемы с аутентификацией в AD

Для отладки процесса аутентификации AD лучше всего воспользоваться утилитой Nslookup, которая имитирует поведение системы Windows 2000 при попытке регистрации в домене AD. В командной строке следует ввести команду

nslookup

В качестве ответа на этот запрос будет получено имя и адрес сервера DNS, назначенного по умолчанию. Такой результат означает, что, во-первых, Nslookup связалась с сервером DNS и, во-вторых, запросила у сервера обратное преобразование адреса IP в символьное имя сервера. Обратное преобразование адреса в имя при регистрации в домене AD не требуется, но, если сервер DNS не сможет выполнить эту операцию, Nslookup вернет сообщение об ошибке. Данное сообщение послужит сигналом, что в настройках имеются проблемы.

DNS request timed out.
timeout was 2 seconds.
*** Can't find server name for address
200.200.10.10:
Timed out
*** Default servers are not available
Default Server:  UnKnown
Address:  200.200.10.20

При этом можно ввести имя известного сервера в Internet (скажем, www.win2000mag.com) в приглашении Nslookup, и Nslookup легко справится с задачей:

www.win2000mag.com
Server:  ns1.yourisp.com
Address:  200.200.10.10

Name:    www.win2000mag.com
Address:  63.88.172.66

Nslookup также может выдать подобное сообщение, если есть проблемы с сервером DNS, на который настроен клиент DNS:

*** Can't find server name for address
200.200.10.10:
No response from server
*** Default servers are not available
Default Server:  UnKnown
Address:  200.200.10.10

Кто-нибудь заметил существенные отличия между этим текстом и сообщением о невозможности обратного преобразования адреса в символьное имя? Я нет. Как же тогда различить ситуации, когда возникла реальная проблема с сервером, а когда Nslookup не может выполнить обратное преобразование имени? Проще всего попытаться разрешить адрес сервера Internet. В случае проблемы с сервером сообщение будет выглядеть несколько иначе:

Server:  UnKnown
Address:  200.200.10.20
*** UnKnown can't find
www.win2000mag.com: No
response from server

Теперь попробуем с помощью Nslookup смоделировать процесс регистрации на локальном контроллере домена. Для этого необходимо знать имя домена и имя сайта AD. По крайней мере один сайт имеется всегда: при создании первого контроллера домена в лесу программа Dcpromo создает сайт, названный по умолчанию Default-First-Site-Name. Из командной строки следует вызвать Nslookup. В приглашении нужно ввести две команды, используя предложенный синтаксис:

set type=srv
_kerberos._tcp.
._sites.dc._msdcs.

Все символы подчеркивания должны быть введены в точности так, как здесь указано, причем вторая команда не должна содержать пробелов. Например, для сайта с названием HQ в домене acme.com команды будут выглядеть следующим образом:

set type=srv
_kerberos._tcp.hq._sites.dc
._msdcs.acme.com

Если команда введена правильно, результат будет подобен тому, который изображен на Экране 1. Если не получилось - не стоит беспокоиться, в конце концов, мы же занимаемся устранением неполадок. Но если эти команды не сработали, тогда и Dcpromo не сможет выполнить регистрацию в домене. В этом случае Dcpromo обращается к серверу DNS: «Сообщи мне обо всех существующих для acme.com контроллерах доменов». Для эмуляции этого запроса можно воспользоваться Nslookup:

_kerberos._tcp.dc._msdcs
.acme.com

Но если первый запрос потерпел неудачу, вероятно, со вторым произойдет то же самое, причем система выдаст сообщение типа ns1.yourisp.com can't find kerberos._tcp.dc._msdcs. acme.com: Non-existent domain (ns1.yourisp.com не может обнаружить kerberos._tcp.dc._msdcs.acme.com: домена не существует).

Причина большинства проблем тестовых сетей заключается в том, что имя домена AD (в нашем случае acme.com) совпадает с зарегистрированным именем домена в Internet, т. е. возникает конфликт имен. Чтобы понять причины происходящего, следует вспомнить, какие действия выполнялись при создании первого контроллера домена в тестовом лесу AD.

Причины неполадок

При вызове Dcpromo для создания нового домена под названием acme.com, Dcpromo требуется внести некоторые записи в открытую для записи копию зоны acme.com, размещенную на первичном сервере DNS. Таким образом, Dcpromo запрашивает у локального сервера DNS адрес первичного сервера DNS домена acme.com. Поскольку мы просто экспериментировали, то сервер Windows 2000, вероятнее всего, обратится в Internet по линии DSL или через кабельный модем, и, что естественно, вернет адрес какого-нибудь сервера DNS в Internet. Если «повезло» и найденный сервер DNS знает зарегистрированное доменное имя acme.com, он честно отвечает, что первичным сервером домена acme.com является какой-то сервер Unix в Internet.

Затем Dcpromo сообщает найденному серверу Unix: «Я собираюсь записать в область динамического DNS (DDNS) несколько записей SRV. Не возражаете?» Сервер Unix отвечает: «Ни за что! Я тебя знать не знаю и не позволю записывать ничего в мою зону!» Понятно, что такой ответ приводит Dcpromo в замешательство.

Вместо того чтобы сообщить, что найденный сервер DNS домена acme.com не позволяет выполнить обновление, Dcpromo пытается обмануть и сообщает, что сервер DNS для acme.com не найден. При этом Dcpromo предлагает альтернативу: «Не желаете ли настроить сервер DNS для этого домена?» Вы, конечно, соглашаетесь, радуясь, какая прекрасная программа Dcpromo, как много она умеет делать. Dcpromo настраивает будущий контроллер домена сервером DNS, создает на сервере зону acme.com, настраивает эту зону для установки acme.com и перезапускает компьютер.

Именно в этот момент и начинаются проблемы.

Регистрация в AD и раздельная обработка запросов DNS

И большие корпоративные домены, и крохотные тестовые домены часто сталкиваются с одной и той же проблемой - создавая домены AD с именами существующих в Internet доменов (это может быть конкретный корпоративный домен в Internet), администратор вводит службу DNS в заблуждение. Это то, что я называю «раздвоением личности» DNS. Допустим, к примеру, что создан тестовый домен AD под названием acme.com. В Internet доменным именем acme.com владеет кто-то другой, и поиск домена acme.com с помощью службы DNS выдает адрес постороннего сервера DNS под управлением Unix. Если Dcpromo спросит у найденного сервера, допускает ли тот динамическое обновление (а эту функцию должен поддерживать каждый сервер DNS в домене AD), обычный сервер DNS в Internet, как легко догадаться, ответит: «Нет, ни за что!»

Сбитый с толку Dcpromo спрашивает, что делать? Вместо того чтобы сообщить, что найденный сервер не разрешает динамическое обновление, Dcpromo сообщает о невозможности найти сервер DNS для домена acme.com. Затем Dcpromo предлагает установить службы сервера DNS на том сервере Unix в Internet и настроить его в качестве сервера DNS для локального домена acme.com. Большинство пользователей принимают это предложение, и, как я уже говорил, здесь-то и начинаются проблемы.

При настройке локального сервера DNS программа Dcpromo создает зону с именем, совпадающим с именем домена, - в нашем примере, acme.com. Таким образом, после создания нового домена AD компьютер начинает выполнять две функции: он является одновременно первым контроллером домена и сервером DNS для домена. Но поскольку Dcpromo не сообщает программному обеспечению контроллера домена, что программное обеспечение сервера DNS работает на том же компьютере, контроллер домена не может найти сервер DNS, который бы допускал динамическое обновление для acme.com.

Другими словами, Dcpromo настраивает службу сервера DNS и создает зону acme.com, но не сообщает стеку TCP/IP, что при поиске сервера DNS необходимо обращаться к самому себе. Сервер DNS функционирует, но ни один компьютер, включая и тот, на котором он работает, «не знает», что при поиске домена к данному компьютеру необходимо обращаться в первую очередь. Вот и получается, что Dcpromo выполняет базовую настройку домена, а затем, с разрешения пользователя, перезапускает компьютер.

После перезапуска компьютер настраивает стек TCP/IP в таком виде, в каком он был перед назначением ком-пьютера контроллером домена. А в тот момент либо использовался DHCP для конфигурирования стека, либо устанавливался статический адрес. При использовании DHCP обращение происходило к серверу DHCP провайдера, или к корпоративному серверу DHCP. В любом случае вряд ли используемый сервер DHCP сообщит компьютеру, что в качестве предпочтительного сервера DNS он (данный компьютер) должен использовать себя самого. Если с самого начала применялась статическая настройка стека TCP/IP, то, вероятнее всего, компьютеру также забыли сообщить, что предпочтительным сервером DNS является он сам.

В результате после перезагрузки компью-тера его конфигурация DHCP или статическая конфигурация сообщают компьютеру, что надо использовать какой-то посторонний сервер DNS - возможно, один из серверов Internet. В этот момент начинает работу служба Netlogon.

Как и в Windows NT 4.0, в Windows 2000 служба Netlogon является важной службой, которая выполняется только на контроллерах домена. Одной из основных функций службы Netlogon является поиск первичного сервера DNS для своего домена (т. е. ac-me.com). После обнаружения первичного сервера DNS Netlogon, используя динамический DNS, вносит в зону домена идентификационную запись сервера (SRV) и запись имени хоста (A) для Netlogon. На каждом контроллере домена службы Netlogon периодически выполняют повторное представление себя зоне DNS своего домена, так что DNS знает о существовании этих контроллеров домена. После того как в зоне acme.com становится известно о существовании контроллера домена, рабочие станции и другие контроллеры домена получают возможность обращаться к нему.

Но когда стек TCP/IP контроллера домена acme.com указывает на сервер DNS, отличный от самого себя, запрос к первичному серверу DNS заканчивается обнаружением какого-то сервера DNS в Internet. Тогда запрос возвращает в качестве результата сервер DNS зарегистрированного домена acme.com. Когда Netlogon пытается внести изменения в записи работающего под управлением Unix сервера DNS, сервер не позволяет внести эти изменения, и Netlogon сообщает в системном реестре о событии ID 5773: The DNS server for this DC does not support dynamic DNS. Add the DNS records from the file '%SystemRoot%System32Config etlogon.dns' to the DNS server serving the domain referenced in that file («Сервер DNS для данного контроллера домена не поддерживает динамический DNS. Добавьте записи DNS из файла '%Sys-temRoot%System32Config etlogon.dns' на сервер DNS, обслуживающий указанный в данном файле домен.»).

Если нельзя заставить рабочую станцию зарегистрироваться в новом домене AD или если Dcpromo не работает на втором компьютере, который планировалось назначить вторым контроллером домена, проверьте системный журнал на присутствие в нем событий с ID 5773. Если Dcpromo сообщает, что может настроить DNS, то наличие событий с ID 5773 в системном журнале говорит о том, что настройку стека TCP/IP для контроллера домена администратору придется выполнить самостоятельно.

Для большей уверенности необходимо запустить встраиваемый модуль DNS в Microsoft Management Console (MMC), дважды щелкнуть мышью на значке сервера, открыть папку Forward Lookup Zones и дважды щелкнуть на папке домена. Если в папке содержится всего пара-тройка записей, и вложенные папки отсутствуют, это означает, что Netlogon не может обнаружить сервер DNS, работающий на том же ком-

пьютере, что и Netlogon. Параметры TCP/IP компьютера следует настроить так, чтобы он являлся первичным сервером DNS, затем нужно перезапустить Netlogon и снова проверить папку домена. В папке домена теперь должны находиться четыре вложенные папки, содержащие сведения о местонахождении контроллера домена.

Добавление второго контроллера домена

Но пока проблема окончательно не решена. Первый контроллер домена теперь может находить самого себя, но его пока не может найти второй контроллер домена. Когда Windows 2000 установлена на второй компьютер, и он включен в домен acme.com, необходимо настроить стек TCP/IP для обращения к первому компьютеру как к главному серверу DNS. Возможно, такую настройку TCP/IP придется выполнить для всех компьютеров, которые решено сделать дополнительными контроллерами домена.

Если сеть требуется расширять, может понадобиться еще несколько серверов Windows 2000, используемых в качестве серверов DNS для домена acme.com. Поскольку Dcpromo автоматически делает зону acme.com интегрированной в AD, можно задействовать в качестве серверов DNS только контроллеры домена acme.com. Если интегрированная зона не используется, например, потому что не хочется применять контроллеры домена в качестве серверов DNS, можно преобразовать интегрированную в AD зону в стандартную первичную зону. Замечательно, что для этого достаточно несколько раз щелкнуть мышью. Требуется открыть встраиваемый модуль DNS, дважды щелкнуть на значке сервера DNS, затем открыть папку Forward Lookup Zones. В этой папке есть папка с названием созданного домена. Щелкнув правой кнопкой мыши на значке папки, нужно выбрать Properties и перейти на вкладку General (Общие). Затем следует нажать Change (Изменить) и выбрать Standard Primary вместо Active Directory-Integrated.

Теперь наша инфраструктура DNS находится в хорошей форме. Как же расширить ее для больших сетей? Вместо использования Dcpromo для обнаружения проблем с DNS, убедимся, что DNS функционирует нормально с самого начала.

Предположим, что мы действительно работаем в корпорации acme.com и собираемся настроить AD для своей компании. Облегчит ли это нашу задачу? Нам необходимо только заменить существующие серверы DNS серверами, которые допускают динамическое обновление, правильно? Возможно, и нет. AD хранит информацию в зоне DNS, которую, может быть, не захочется делать доступной из Internet. Так что, даже если домен должен действительно называться acme.com, потребуется обмануть AD таким образом, чтобы служба AD пользовалась только внутренними серверами DNS и не пыталась обращаться к «внешним», общедоступным серверам DNS. Такая настройка называется «раздвоением DNS», она необходима для обеспечения безопасности корпоративной сети. Пусть провайдер корпорации Acme поддерживает доступную публично зону acme.com. Далее я расскажу, как настроить только внутренний DNS для AD acme.com.

Во-первых, необходимо создать по крайней мере, один дополнительный сервер DNS для сети acme.com. На первом сервере надо сформировать стандартную первичную зону acme.com и разрешить в ней динамические обновления. На всех последующих серверах необходимо настроить ac-me.com в качестве стандартной вторичной зоны. В качестве вторичных серверов DNS в AD можно даже использовать серверы с Windows NT 4.0 и установленным пакетом обновлений SP6a. Необходимо настроить стек TCP/IP на каждом компьютере и рабочей станции в сети так, чтобы они использовали один из внутренних серверов DNS в качестве предпочтительного и другой внутренний сервер - в качестве альтернативного сервера DNS.

Теперь при запуске Dcpromo найдет тот сервер DNS для домена acme.com, который нужен, - внутренний сервер DNS, и корректно настроит AD. Рабочие станции и серверы смогут находить этот DC и регистрироваться на нем, а при запуске Dcpromo на другой системе для создания дополнительных контроллеров домена Dcpromo будет работать нормально. После установки AD можно будет преобразовать зону в AD-интегрированную.

Теперь, после настройки параметров DNS, остается учесть только одно. Если какой-либо пользователь acme.com попытается найти www.acme.com, он всегда будет находить зоны на сервере внутренней сети и не сможет выйти в общедоступный Internet. Так что необходимо вручную скопировать записи о публичной зоне в зоны внутренней сети.