В одной из предыдущих статей я уже рассказывал о том, как использовать несложные BAT-файлы для перевода только что установленных серверов на роль контроллеров домена (DC) и как с помощью простых сценариев создать пакет программ на случай аварийной ситуации. Также было показано, как с помощью Netsh сконфигурировать стек IP и выполнить его тонкую настройку — первое, что нужно сделать при подготовке сервера Windows Server 2003 или сервера Windows 2000 для работы в качестве контроллера домена. Далее, на этапе установки Active Directory (AD), создается динамическая инфраструктура DNS (DDNS).

В своей тестовой конфигурации я создал однодоменный лес, назвал его bigfirm.biz и установил в нем два DC: UptownDC.bigfirm.biz (адрес IP — 192.168.0.2) и DowntownDC.bigfirm.biz (адрес IP — 10.0.0.2). Для подсетей 192 и 10 я использовал маску 255.255.255.0 и запланировал на каждой машине сконфигурировать сервер как DC и DNS. На обеих системах изначально присутствовали копии Windows 2000 или Windows 2003, а также программное обеспечение Microsoft DNS, которое поставлялось вместе с обеими операционными системами. В предыдущей статье я уже рассказывал о том, как с помощью BAT-файла настроить IP-стек в системах; суффикс DNS в обеих системах был настроен на bigfirm.biz. Новый BAT-файл был написан с целью правильно установить DNS в каждой системе. UptownDC планируется использовать в качестве основного сервера DNS для bigfirm.biz и реверсной зоны (reverse-lookup zone) 192.168.0.x. Этот же сервер будет основным сервером DNS и для реверсной зоны 10.0.0.x.

Я выбрал программу Dnscmd в качестве главного инструмента командной строки для настройки DNS. Эта утилита входит в состав Microsoft Windows 2000 Resource Kit, а в Windows 2003 она находится в каталоге Support Tools. Мне понадобилось дополнительно установить ее на оба контроллера домена — UptownDC и DowntownDC. Программа Dnscmd — очень мощная утилита, но ее синтаксис столь мудреный, что, надеюсь, в представленных примерах вы найдете для себя много полезного.

Сначала нужно создать зону bigfirm.biz. Для этого воспользуемся командой:

dnscmd localhost /zoneadd

bigfirm.biz /primary

/file bigfirm.biz.dns


Параметр localhost сообщает утилите Dnscmd имя сервера DNS, на котором должна выполняться команда. Я запускаю BAT-файл непосредственно на UptownDC, поэтому вполне достаточно просто указать параметр localhost. Однако, имея в виду возможность Dnscmd работать в удаленном режиме, можно просто установить Dnscmd на станцию Windows XP и запустить сценарий установки контроллеров домена UptownDC и DowntownDC (предполагается, что связь с контроллерами установлена, а контекст безопасности позволяет выполнить все необходимые настройки). Параметр /zoneadd задает создание новой зоны на localhost; в данном случае это зона bigfirm.biz. Параметр /primary определяет новую зону как главную (primary zone). Назначение ключа /file bigfirm.biz.dns — устранить потенциальные конфликты в настройках зоны DNS из-за возможного запуска программы Dnscmd другими администраторами. По идеологии Microsoft DNS вся информация о настройках DNS сохраняется в отдельном файле. Bigfirm.biz.dns размещается в windowssystem32dnsigfirm.biz (для Windows 2003) или winntsystem32dnsigfirm.biz (для Windows 2000). Вместо /primary можно воспользоваться параметром /secondary для создания вторичной зоны DNS или параметром /DsPrimary для создания зон, интегрированных с AD. Я не стал создавать интегрированную зону, потому что еще не развернул AD. Потом у меня всегда будет возможность перейти от primary-зоны к интегрированной зоне. Для этого достаточно выполнить команду

dnscmd localhost /zoneresettype /DsPrimary

Команда Dnscmd /zoneadd практически завершает начальную установку зоны, но остается еще одна задача — включить динамические обновления. Для этого используется команда

dnscmd localhost /config bigfirm.biz /AllowUpdate 1

Далее я хочу «сообщить» зоне bigfirm.biz, что в ней присутствуют два сервера DNS — серверы имен (Name Servers (NS), если использовать терминологию DNS), имена которых UptownDC и DowntownDC. Microsoft DNS автоматически устанавливает запись NS на сервере, который используется как основной DNS-сервер зоны, так что с UptownDC уже все в порядке. Но мне еще надо добавить запись NS для сервера DowntownDC. Обычно я поступаю так:

@ ns downtowndc.bigfirm.biz

Символ @ означает, что запись относится к текущей зоне, ns — что в данную зону добавляется NS, а downtowndc.bigfirm.biz — это и есть, собственно, имя NS. Однако серверу DNS еще нужно знать IP-адрес DowntownDC. Поэтому я указал также запись host record, в которой прописал, что IP-адрес сервера имен downtowndc.bigfirm.biz равен 10.0.0.2:

downtowndc A 10.0.0.2

В качестве альтернативы можно воспользоваться командой Dnscmd /recordadd и внести ее в файл сценария для указания NS и записей host record:

dnscmd localhost /recordadd bigfirm.biz

@ NS downtowndc.bigfirm.biz

dnscmd localhost /recordadd bigfirm.biz

downtowndc A 10.0.0.2

Как и раньше, команда начинается с указания имени хоста (в данном случае localhost), на котором выполняется операция. Затем через параметр /recordadd сообщается имя зоны, в которую добавляется запись, и далее следует сама запись.

Читателей может удивить, что я так беспокоюсь о записях NS. Те, кому уже приходилось работать с Microsoft DNS, вероятно, знают, что назначение имен вторичным серверам DNS в данной зоне не является обязательным условием работы Microsoft DNS. В общем случае я прекрасно вижу зоны Microsoft DNS и при наличии одной-единственной записи NS для главного сервера. Тогда зачем заботиться о записях NS в BAT-файле? Во-первых, это правильно — указывать имена для всех серверов зоны. А во-вторых, присвоение имени каждому серверу NS позволит дополнительно защитить свою зону.

Чтобы в Windows 2000 присвоить имя вторичному серверу DNS зоны, нужно запустить Microsoft Management Console (MMC) DNS, открыть каталог Forward Lookups, найти нужную зону и открыть ее контекстное меню. Выбрав Properties, следует перейти на вкладку Zone Transfers. На ней имеется флажок Allow zone transfers и еще несколько параметров. Установка по умолчанию — To any server, что фактически разрешает любому желающему установить DNS-сервер и указать, что этот сервер является вторичным сервером DNS в данной зоне. После этого непрошеный вторичный сервер DNS может потребовать от главного сервера DNS предоставить всю информацию о зоне. Другие параметры, Only to servers listed on the Name Servers tab и Only to the following servers, задают ограниченный список серверов, с которыми можно работать в зоне.

Что касается Windows 2003, то разработчики Microsoft изменили установки сервера DNS, принятые по умолчанию. Если зона создается на базе сервера Windows 2003 DNS, сервер будет передавать информацию о зоне DNS только серверу, для которого есть NS-запись. Поэтому, если используется Windows 2003, вы не пожалеете, что внимательно отнеслись к вопросу именования вторичных серверов DNS. Ну, а тем, кто работает с Windows 2000, стоит перейти на вкладку Zone Transfers и сконфигурировать более безопасные настройки для существующих зон.

Теперь, поскольку мы должным образом позаботились о bigfirm.biz, можно приступать к установке реверсной зоны (reverse-lookup zone) в сети 192.168.0.x. Как и раньше, команда Dnscmd /zoneadd создаст зону, команда Dnscmd /config сделает ее динамической, а Dnscmd /recordadd добавит DowntownDC в качестве вторичного сервера DNS для реверсной зоны:

dnscmd localhost /zoneadd 0.168.192 .in-addr.arpa /primary /file 192.dns

dnscmd localhost /config 0.168.192 .in-addr.arpa /AllowUpdate 1

dnscmd localhost /recordadd 0.168.192 .in-addr.arpa @ NS downtowndc.bigfirm.biz.

Единственное, что нуждается в объяснении, это новое имя зоны — 0.168.192.in-addr.arpa. То, как именуются реверсные зоны, напоминает сетевой номер подсети (т. е. 192.168.0), только пишутся они в обратном порядке, с добавлением в конце суффикса in-addr.arpa. При обращении (реверсе) 192.168.0 получится 0.168.192; а когда добавляется in-addr.arpa, в результате получается конструкция, которая и является именем зоны.

Хотя я еще не создал реверсную зону для подсети 10.0.0 (поскольку еще не установил DowntownDC, будущий главный сервер DNS), я хочу, чтобы UptownDC стал вторичным сервером DNS для реверсной зоны 10.0.0., чтобы можно было создать вторичную зону для 10.0.0. Для этого можно использовать Dnscmd /zoneadd, но с несколько иным синтаксисом. По-прежнему требуется указать зону, имя зоны и имя файла зоны, однако для вторичных зон нужно добавить еще кое-что. Кто является мастером? Другими словами, к какому именно серверу должен обращаться вторичный сервер DNS за обновленными данными о зоне? Нужная команда выглядит следующим образом:

dnscmd localhost /zoneadd 0.0.10

.in-addr.arpa /secondary 10.0.0.2

Имя зоны для сети 10.0.0 — это структура из четырех частей с суффиксом in-addr.arpa. Параметр /secondary заменяет параметр /primary, с которым мы уже встречались раньше в командах Dnscmd /zoneadd. Обратите внимание на IP-адрес, стоящий после параметра /secondary. Это адрес IP того самого сервера, к которому данный вторичный сервер DNS будет обращаться за обновленной информацией о зоне 0.0.10.

inaddr.arpa.

Добавление команды Ipconfig /registerdns в конец BAT-файла гарантирует, что DNS-сервер регистрирует самые последние данные о своей зоне. А теперь посмотрите, что получилось в результате (содержимое BAT-файла приведено в листинге 1).

Теперь завершим нашу работу созданием аналогичного файла сценария для DowntownDC — здесь все должно быть просто. Действительно, нужно всего лишь сделать DowntownDC вторичным сервером для зоны bigfirm.biz и 0.168.192.in-addr.arpa, затем создать зону 0.0.10.in-addr.arpa и сделать ее динамической. Результат представлен в листинге 2. Первые три команды листинга 2 создают вторичную и главную зоны. Четвертая команда устанавливает для реверсной зоны 10.0.0 динамические свойства. Пятая команда добавляет UptownDC в качестве вторичного сервера DNS для этой зоны. И наконец, BAT-файл выдает команду саморегистрации сервера DNS.

Dnscmd имеет много параметров, но в этой статье я постарался представить большую часть из того, что действительно может понадобиться. Основываясь на приведенных примерах, вы сможете приступить к созданию собственных сценариев на случай возникновения аварийной ситуации в системе.


Марк Минаси — редактоp Windows NT Magazine MCSE и автор книги «Mastering Windows NT Server 4.0» (издательство Sybex). С ним можно связаться по адресу: mark@minasi.com