Пользователи регистрируются, файловые серверы работают, приложения запускаются – ну не услаждают ли эти слова слух любого сетевого администратора? Жизнь так прекрасна, что мы способны забыть, с какой легкостью утопический мир компьютеров может рухнуть из-за сбоев в работе ключевых сетевых служб.

DHCP – это один пример из набора служб (можно также назвать Active Directory и WINS), которые используются в каждой системе Windows 2000, Windows NT, в смешанных сетевых средах - для обеспечения нормальной работы сетевых пользователей и приложений. Знание уязвимых мест DHCP и ясное представление о работе утилит восстановления и технике восстановления поможет быстро реанимировать DHCP в случае сбоя. Во многих ситуациях успешное восстановление зависит от профилактических мер.

DHCP: и во благо, и во вред

Начиная с NT 3.5, разработчики Microsoft ввели в систему новый протокол назначения IP-адресов, получивший название DHCP (Internet Engineering Task Force, IETF - описывает DHCP в RFC 1531). DHCP существенно облегчает процесс конфигурации TCP/IP на рабочих станциях. Кроме того, DHCP позволяет автоматически назначать клиентам IP-адреса и настраивать дополнительные свойства IP-стека клиента, например, шлюз по умолчанию, серверы DNS и WINS, тип узла WINS.

Несмотря на очевидные плюсы, здесь есть и свои сложности. Одна из проблем состоит в том, что DHCP не обеспечивает приемлемой отказоустойчивости. Реализация Microsoft DHCP такова, что в каждой подсети только один DHCP-сервер обслуживает клиентов данной подсети. Сетевые администраторы должны специально настраивать сетевые маршрутизаторы, чтобы запросы BOOTP или DHCP от одного клиента подсети поступали на DHCP-сервер другой подсети (IETF описывает пересылку BOOTP в RFC 1542). В этом сценарии сервер DHCP может ответить на удаленный запрос клиента DHCP, только если сервер настроен на обслуживание адресов удаленных клиентов.

Такой подход для большинства организаций неудобен, поскольку это означает, что каждый сервер должен хранить непересекающийся диапазон адресов для множества подсетей. Эти адреса фактически "простаивают", так как сервер зарезервировал их для удаленных клиентов. Для частных подсетей (маска подсети 10.x.x.x, 192.168.x.x или 172.16.x.x) эта ситуация не создает больших проблем, так как самих адресов много. И все-таки решение Microsoft не идеально, особенно это очевидно, когда используются маршрутизируемые IP-адреса, назначенные провайдером, ISP. У вас нет достаточного количества адресов для распространения по нескольким DHCP-серверам. Приходится создавать сложную сеть, содержащую большое число подсетей.

В процессе создания Windows 2000 разработчики Microsoft пообещали предоставить новые отказоустойчивые службы Windows 2000 DHCP. Однако компания обеспечила обещанную функциональность только для серверов DHCP в кластерной конфигурации, что требует значительно больших затрат на приобретение Windows 2000 Advanced Server или Windows 2000 Datacenter Server, а также кластерного оборудования. В результате в сетях Windows, в которых нет Windows 2000 Advanced Server или Windows 2000 Datacenter Server, каждая подсеть целиком зависит от работоспособности только одного сервера DHCP.

Восстановление служб DHCP

Сбой в работе служб DHCP или самого компьютера (если только серверы DHCP не образуют кластер Windows 2000) может повлечь за собой очень большие проблемы. Если в работе DHCP случился сбой, активные клиенты, у которых аренда адреса еще не закончена, продолжают нормально работать, однако новые клиенты, посылающие запрос на выделение IP-адреса, или же клиенты, которым нужно возобновить аренду, сделать этого не могут. Когда службы DHCP недоступны, можно воспользоваться одним из двух способов восстановления их работоспособности: восстановить функциональность существующих служб или перенести службы DHCP на другой сервер.

Для функционирующего сервера желательно привести в работоспособное состояние службы DHCP на оригинальном сервере, когда причина сбоя DHCP кроется в поврежденной базе данных. Эта база, файл dhcp.mdb, представляет собой Jet-базу, в которой хранится конфигурационная информация о диапазонах адресов и арендах активных клиентов. На серверах Windows 2000 и NT DHCP основные данные настроек базы дублируются в реестре в разделе LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services \DHCPServer\Configuration.

Как любая база данных, база DHCP может оказаться поврежденной или содержать неверные данные. Признаком того, что база данных DHCP повреждена, служит событие об ошибке Event ID 1014 в журнале System сервера DHCP. Значение Source в этом сообщении равно DhcpServer, поле Description содержит ссылки на ошибки Jet с кодами 510, 1022 или 1850. Список ошибок Jet и их описание приводится в статьях врезки "Статьи Microsoft по теме". Если база DHCP повреждена, ее можно восстановить с нормальной копии базы данных или регенерировать базу данных на основе данных реестра сервера DHCP.

Восстановление базы данных с надежной копии – самое простое решение, конечно, если такая копия создана недавно и доступна. По умолчанию, службы DHCP Windows 2000 и NT 4.0 автоматически создают резервную копию базы данных DHCP один раз в час в каталоге DHCP-сервера \%systemroot%\system32\dhcp\backup\jet\new. Для изменения частоты автоматического резервирования измените значение параметра BackupInterval в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\
Services\DHCPServer\Parameters с принятых по умолчанию 60 минут на нужное значение.

После того как копия базы данных для восстановления базы DHCP выбрана, можно приступать собственно к восстановлению поврежденной базы:

  1. остановите службу DHCP (Administrative Tools\Services в Windows 2000 или Services в Control Panel в NT 4.0). Или же выполните команду:
net stop dhcpserver
  1. для сохранения содержимого каталога базы данных DHCP создайте резервную копию этого каталога (\%systemroot%\system32\dhcp).
  2. воспользуйтесь программой DHCP Export Import (DhcpExim), чтобы импортировать копию базы данных DHCP, или скопируйте резервную копию dhcp.mdb из каталога \%systemroot%\system32\dhcp\backup\jet\new в основной каталог (\%systemroot%\system32\dhcp). Восстановить резервную копию также можно из альтернативного источника (с ленты или другого записывающего устройства, с сервера репликаций). Однако метод прямого копирования файлов используйте только в том случае, когда оба сервера работают под управлением одной и той же операционной системы. Подробнее об использовании программы DhcpExim читайте во врезке "DhcpExim в действии".
  3. служба DHCP остановлена, поэтому можно воспользоваться утилитой Jetpack для сжатия и верификации восстановленной базы данных. Откройте окно командной строки, перейдите в каталог \%systemroot%\system32\dhcp и наберите:
jetpack dhcp.mdb tmp.mdb

Подробнее об использовании программы Jetpack рассказано во врезке "Использование Jetpack для профилактического сжатия".

  1. перезапустите службу DHCP

В статье Microsoft "How to Move a DHCP Database to Another Windows NT Server" рекомендуется использовать метод копирования файлов вместо программы DhcpExim при перемещении базы данных с NT 4.0 на Windows 2000. Не следует этому верить. Для обслуживания DHCP в случае разных платформ и задач миграции лучше всего использовать утилиту DhcpExim.

Восстановление методом регенерации

Что вы станете делать, если приемлемая копия конфигурации базы данных DHCP отсутствует? В этом случае нужно выполнить следующие действия для генерации новой базы на основе содержащихся в реестре данных:

  1. остановите службу DHCP с помощью Administrative Tools\Services в Windows 2000 или Services в Control Panel в NT 4.0. Или с командной строки:
net stop dhcpserver
  1. переместите все файлы из каталога базы данных DHCP (\%systemroot%\system32\dhcp) в другое место - оригинальный каталог должен остаться пустым.
  2. перезапустите службу DHCP.

В результате для регенерации базы DHCP в качестве конфигурационной информации используются данные реестра. Возможно, после завершения процесса регенерации выяснится, что настройки адресного диапазона и распределения фиксированных адресов отсутствуют. Тогда потребуется выполнить еще несколько действий для завершения восстановления базы данных. Используйте следующую процедуру для восстановления копии настроек DHCP, содержащейся в реестре:

  1. запустите regedt32.exe и перейдите в раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\
    Services\DHCPServer\Configuration
  2. укажите раздел Configuration и выберите в меню Restore
  3. когда появится окошко с подсказкой «указать имя файла восстановления», укажите файл \%systemroot%\system32\dhcp\backup\dhcpcfg
  4. подтвердите начало операции восстановления раздела реестра, щелкнув Yes

После завершения регенерации базы данных DHCP в консоли Windows 2000 Microsoft Management Console (MMC) DHCP или NT 4.0 DHCP Manager диапазон адресов появится, но будут отсутствовать сведения об аренде адресов активными клиентами. Это связано с тем, что процедура проверяет аренду у клиентов, присутствующих в настоящее время в базе данных (а их нет!) на основе записей в реестре. Вам предстоит выполнить соответствующие действия для каждого диапазона адресов в DHCP.

Чтобы привести в соответствие аренду выбранного адресного диапазона для NT 4.0 DHCP Server, выберите нужный диапазон, затем в меню выберите Scope\Active Leases. В результирующем диалоговом окне щелкните Reconcile, затем OK. Для сервера Windows 2000 в левой части оснастки DHCP откройте контекстное меню для адресного диапазона и выберите Reconcile (см. Рисунок 1). Описанная процедура должна быть повторена для каждого адресного диапазона сервера.

Избегайте конфликтов

Независимо от того, какие именно процедуры используются для восстановления базы данных и служб DHCP, желательно включить функцию обнаружения конфликтов адресов IP, предоставляемых DHCP. Начиная с NT 4.0 Service Pack 2 (SP2) (а также для Windows 2000) в системе имеется такая функция. С помощью ping-теста выполняется верификация IP-адресов до того, как DHCP назначит клиенту очередной адрес. После процедуры восстановления сервер DHCP может оказаться в состоянии, когда выдаваемые адреса уже кем-то используются, поэтому очень полезно, чтобы к моменту начала работы восстановленного сервера DHCP названная функция была активизирована.

Чтобы проверить состояние функции обнаружения конфликтов для серверов Windows 2000 DHCP, откройте контекстное меню сервера в левой панели оснастки DHCP, выберите Properties и перейдите на вкладку Advanced. Присвойте параметру Conflict Detections Attempt любое целое значение больше нуля. Установленное число означает, сколько раз будет выполняться ping-тест, прежде чем клиенту будет выделен IP-адрес. Для NT DHCP выберите Properties в меню Server утилиты DHCP Manager. Параметр Conflict Detection Attempts устанавливается на вкладке General.

Подготовьтесь к сбоям DHCP

В дополнение к известным способам восстановления после сбоев в работе DHCP, можно заранее предпринять некоторые шаги для облегчения процедуры восстановления. Во-первых, периодически запускайте Jetpack для компрессии базы данных DHCP и проверки ее целостности. Во-вторых, регулярно используйте программу DhcpExim для получения экспортных файлов текущей конфигурации каждого из имеющихся серверов DHCP и храните эти файлы отдельно (не на тех же самых серверах). В-третьих, если это необходимо, отредактируйте реестр с целью увеличения частоты автоматически выполняемых процедур резервирования конфигурации DHCP. В-четвертых, рассмотрите возможность привлечения имеющихся в Windows 2000 и NT способов реплицирования данных или программных продуктов независимых разработчиков для реплицирования базы данных DHCP в другое место в сети. И, наконец, если работа выполняется в кластерной среде, изучите вопрос реализации DHCP как кластерной службы.

Перечисленные шаги, в дополнение к известным способам восстановления DHCP, позволят существенно упростить процесс восстановления в случае сбоя.


DhcpExim в действии

В процессе подготовки статьи я испробовал несколько методов переноса конфигурации сервера DHCP и диапазона данных (scope data) в различных комбинациях источника и приемника (например, с Windows NT 4.0 на Windows 2000, с Windows 2000 на Windows 2000, с Windows 2000 на Windows NT 4.0). Процедуры эти утомительны и сложны и незначительно отличаются друг от друга. Был обнаружен гораздо более удобный способ переноса конфигурации сервера DHCP между машинами – с помощью относительно новой (и поэтому известной не так широко) утилиты DHCP Export Import (DhcpExim), которая работают в любых комбинациях источника-приемника для систем Windows 2000 и Windows NT 4.0. Упоминание об этой утилите мне встретилось в документации Microsoft Windows 2000 Server Resource Kit Supplement One. Не располагая копией самого пакета, я полагал, что смогу просто загрузить программу DhcpExim с Web-сайта Microsoft. Но, к сожалению, Microsoft не предоставила DhcpExim для загрузки. Не найдя ничего лучшего, я загрузил эту программу по FTP (ftp://ftp.mddinc.com/microsoft). Важно получить как саму программу DhcpExim, так и сопутствующие файлы readme и dhcpexim_readme.txt (впоследствии я внимательно просмотрел Supplement One, но не обнаружил DhcpExim в списке программ, содержащихся на данном диске).

DhcpExim – прекрасная программа, особенно когда сравниваешь ее с альтернативными процедурами резервирования-восстановления или миграции DHCP-конфигурации между серверами. На первом шаге выполняется экспорт конфигурации DHCP с исходного сервера. Конфигурационные данные содержат общие серверные установки и диапазон, указанный для экспорта. Я считаю особенно ценной степень детализации, с которой диапазоны данных представлены в экспортном файле.

Чтобы выполнить экспорт конфигурации DHCP, запустите dhcpexim.exe и на первом шаге мастера выберите Export configuration of the local service to a file. Затем присвойте конфигурационному файлу имя и сохраните его. Наконец, выберите диапазон для экспорта (см. Рисунок А) и щелкните Export. Для импорта сохраненной конфигурации выберите Import configuration to the local service from a file и укажите файл, созданный на этапе экспорта.

Я бы рекомендовал запускать DhcpExim на всех серверах DHCP и хранить результирующие конфигурационные файлы экспорта в надежном месте. Кроме того, периодически следует обновлять содержимое этих файлов.


Использование Jetpack для профилактического сжатия

В DHCP и WINS используется технология базы данных Microsoft Jet и, как большинство им подобных, размер файлов баз данных DHCP и WINS растет по мере добавления и удаления записей. Microsoft поставляет программный продукт Jetpack, инструмент для сжатия файлов баз данных (есть как для Windows 2000, так и для Windows NT). Очень рекомендуется регулярно использовать Jetpack как для базы данных DHCP (файл dhcp.mdb), так и для базы данных WINS (файл wins.mdb).

Формат команды Jetpack:

jetpack .mdb .mdb

Например, чтобы сжать базу данных DHCP, сделайте каталог базы DHCP текущим и остановите службу DHCP. Затем в командной строке наберите

jetpack dhcp.mdb tmp.mdb

и нажмите Enter. Это приведет к тому, что Jetpack в процессе работы будет использовать tmp.mdb в качестве временной базы данных. Jetpack копирует записи одну за другой из основной базы во временную. После успешного завершения процесса копирования программа Jetpack удаляет оригинальную базу данных и переименовывает файл временной базы данных, присваивая ему оригинальное имя. Регулярное использование Jetpack для баз DHCP и WINS не только позволит сэкономить место на диске, но также оповестит вас в случае обнаружения потенциальных нарушений целостности данных, поскольку в процессе копирования Jetpack выполняет проверку на несовместимость данных и при необходимости выдает сообщение об ошибке.

Если DHCP и WINS функционируют в кластерной среде, придется использовать иные процедуры для запуска Jetpack. Специалисты Microsoft посвятили этой проблеме отдельную статью "How to Use the Jetpack Utility on a Clustered WINS/DHCP Database".


Статьи Microsoft по теме


Шон Дейли - один из редакторов журнала Windows NT Magazine и президент компании iNTellinet Solutions, занимающейся консалтингом и сетевой интеграцией. Имеет сертификат MCSE. Последней из его книг была «Optimizing Windows NT», выпущенная издательством IDG Books. С ним можно связаться по адресу: sean@ntsol.com.