A+ A A-

Использование утилиты netsh для управления DHCP сервером

  • Обновлено 01.01.2013 20:15
  • Автор: Николай Андрианов (Slayer)

Каждый Windows администратор сталкивался с DHCP сервером. Многие привыкли конфигурировать его напрямую с контроллера домена. Более опытные ставят пакет adminpak на свои рабочие станции, и управляют Active Directory и службами непосредственно со своей рабочей станции.

Статья первоначально была написана для журнала Windows  IT/Pro RE , здесь представлена более полная авторская версия.

    Управление DHCP сервером возможно не только с помощью оснастки DHCP пакета adminpak, но и с помощью утилиты netsh. Данная утилита позволяет настраивать не только DHCP и WINS серверы, но и другие сервисы. Более подробную информацию по netsh можно прочитать по адресу: http://www.microsoft.com/  или же использовать команду: “netsh /?”. Также информацию о netsh можно получить в Центре Справки и Поддержки (Start>Help and Support).

    Netsh изначально присутствует в Windows XP и Windows Server 2003 и не требует установки дополнительных пакетов.

    В данной статье мы рассмотрим создание bat сценариев для создания и конфигурирования и удаления DHCP зон вида 10.10.25.0/29, 10.10.25.8/29. Передо мной стояла задача создания большого количества одинаковых зон для разных сетей, но с одинаковыми параметрами:
Шлюз всегда имеет первый адрес в диапазоне
Маска для всех зон 255.255.255.248.
Ситуация осложнялась тем, что эти зоны не должны входить в домен и для них приходится указывать параметры: router, name servers, DNS servers, DNS domain name.

    Прежде чем экспериментировать на боевом DHCP сервере, рекомендую сохранить конфигурацию DHCP. Это можно сделать с помощью оснастки DHCP, а можно используя netsh.

    Для сохранения конфигурации DHCP необходимо выполнить следующую команду
«netsh dump \\10.10.1.3 > c:\dump.dmp», где \\10.10.1.3 – DHCP сервер «>» - обозначает вывод результата команды в файл c:\dump.dmp

    Восстановить конфигурацию сервера можно также с помощью netsh:
netsh exec c:\dump.dmp
    Восстановление конфигурации DHCP из дампа возможно только с консоли данного сервера!

    Для того, чтобы применить восстановленную конфигурацию необходимо выполнить команды net stop dhcpserver и net stop dhcpserver с консоли сервера.

В статье используется два скрипта, которые имеют общую часть, которая приведена в листинге 3.

Механизм работы общей части

    В самом начале работы сценариев мы отключаем отображение исполняемых команд. Указание параметра @ отключает вывод самой команды echo off. Далее делаем проверку версии Windows, на которой запускается сценарий (он может работать на версиях от Windows NT 4.0 и до Windows XP и Windows Server 2003). Если проверка завершается ошибкой, то происходит вывод информации о сценарии и сценарий завершает работу.
Если система относится к семейству Windows NT, то переменной INFO присваивается значение rem, а переменной SEXIT значение 0 и происходит переход к следующему шагу.

Ниже представлен листинг скрипта создания, конфигурирования и активации областей (scope):

Листинг1:


@echo off
@if not "%OS%"=="Windows_NT" (set INFO=echo && set SEXIT=1) else (set INFO=rem && set SEXIT=0)

%INFO% *********************
%INFO% Script: dhcp_config.bat
%INFO% Creation Date: 20.12.2005
%INFO% Author: Nikolay Andrianov
%INFO% Email: slayer@almodi.org
%INFO% *********************
%INFO% Description: Скрипт генерации DHCP областей,
%INFO% их конфигурирования и активации.
%INFO% *********************
@if "%sexit%"=="1" goto exit

set server_adress=10.10.1.3
set n_scope=0
set name=1
set IPTMP=10.10.25.
set fullscope=%IPTMP%%n_scope%
set /A router=%n_scope%+1
set /A s_range=%n_scope%+2
set /A e_range=%s_range%+4
set count=1
set count_end=32

:dhcp1
netsh dhcp server %server_adress% add scope %fullscope% 255.255.255.248 RU-POS%name% RU-POS%name%
netsh dhcp server %server_adress% scope %fullscope% add iprange %IPTMP%%s_range% %IPTMP%%e_range%
netsh dhcp server %server_adress% scope %fullscope% set optionvalue 003 IPADDRESS %IPTMP%%router%
netsh dhcp server %server_adress% scope %fullscope% set optionvalue 005 IPADDRESS 10.10.1.2 10.10.1.4
netsh dhcp server %server_adress% scope %fullscope% set optionvalue 006 IPADDRESS 10.10.1.2 10.10.1.4
netsh dhcp server %server_adress% scope %fullscope% set optionvalue 015 STRING domain.ru
netsh dhcp server %server_adress% scope %fullscope% set state 1

if %count% EQU %count_end% goto end1
set /A n_scope=%n_scope%+8
set /A name=%name%+1
set fullscope=%IPTMP%%n_scope%
set /A router=%n_scope%+1
set /A s_range=%n_scope%+2
set /A e_range=%s_range%+4
set /A count=%count%+1
goto dhcp1

:end1
exit


Где:
set server_adress=10.10.1.3 – адрес DHCP сервера. Если вы используете конструкцию вида «netsh dhcp server адрес_сервера», это позволит запускать скрипт на любой машине в домене, но только если экаунт под которым запускается скрипт входит в группу локальных администраторов DHCP сервера.
set n_scope=0 – указываем начальную зону
set name=1 – переменная подставляется в имя зоны и ее комментарий
set IPTMP=10.10.25. – основная часть зоны
set fullscope=%IPTMP%%n_scope% - полный адрес зоны
set /A router=%n_scope%+1 – адрес шлюза
set /A s_range=%n_scope%+2 – начало диапазона адресов для выдачи
set /A e_range=%s_range%+4 – конец диапазона адресов для выдачи
set count=1 и set count_end=32 – начальный и конечный счетчики, необходимы для цикла. Вместо числа 32 в переменную «count_end=32» нужно поставить число создаваемых зон. Число 32 означает, что мы хотим разбить сеть С класса на 32 подсети с диапазоном раздачи на 4 адреса.

:dhcp1 – стандартная метка bat файлов

netsh dhcp server %server_adress% add scope %fullscope% 255.255.255.248 RU-POS%name% RU-POS%name% - подсоединяемся к серверу, создаем зону %fullscope% с маской 255.255.255.248, именем и комментарием RU-POS%name%

netsh dhcp server %server_adress% scope %fullscope% add iprange %IPTMP%%s_range% %IPTMP%%e_range% - в уже созданную зону добавляем диапазон адресов

netsh dhcp server %server_adress% scope %fullscope% set optionvalue 003 IPADDRESS %IPTMP%%router% - добавляем адрес шлюза

netsh dhcp server %server_adress% scope %fullscope% set optionvalue 005 IPADDRESS 10.10.1.2 10.10.1.4 – задаем серверы имен

netsh dhcp server %server_adress% scope %fullscope% set optionvalue 006 IPADDRESS 10.10.1.2 10.10.1.4 – задаем адреса DNS серверов

netsh dhcp server %server_adress% scope %fullscope% set optionvalue 015 STRING domain.ru – задаем имя домена

netsh dhcp server %server_adress% scope %fullscope% set state 1 – активируем зону.

    Хочу обратить ваше внимание на параметр команду optionvalue. Числом задается параметр зоны, BYTE | WORD | DWORD | STRING | IPADDRESS указывает тип данных типа параметра, значение параметра.
Числовые коды параметров можно посмотреть в оснастке DHCP.

Просмотр числовых кодов
 


if %count% EQU %count_end% goto end1
set /A n_scope=%n_scope%+8
set /A name=%name%+1
set fullscope=%IPTMP%%n_scope%
set /A router=%n_scope%+1
set /A s_range=%n_scope%+2
set /A e_range=%s_range%+4
set /A count=%count%+1
goto dhcp1

:end1
exit


В этой части скрипта мы создаем цикл, проверку на его завершение, производим инкрементацию переменных.
После выполнения условий цикла «if %count% EQU %count_end%» делаем переход на метку «:end1» и завершаем выполнение скрипта.
Подробный справочник по командам DOS Вы найдете на сайте http://www.ss64.com.

Чистим ненужные Области и Суперобласти

    Хотя netsh не может создавать суперобласти, зато он может их удалять. Также можно удалять опции, суперобласти и другие параметры.
    Например, у нас есть суперобласть RU-POS1. Чтобы ее удалить, необходимо выполнить команду:
netsh dhcp server 10.10.1.3  delete superscope "RU-POS1"
Обращаю ваше внимание, что название суперобласти надо писать в кавычках, и с учетом регистра букв!
    После удаления суперобласти у нас остается область RU-POS1. Чтобы удалить область, необходимо выполнить команду:
netsh dhcp server 192.168.100.2 delete scope 10.10.25.0 dhcpfullforce
dhcpfullforce – позволит нам удалить область, даже если там остались выданные адреса. Если мы не хотим удалять область с адресами, то нужно применить параметр dhcpnoforce.
    
Можно модифицировать наш скрипт, и превратить его в скрипт удаления суперобластей  и областей:

Листинг2:

@echo off
@if not "%OS%"=="Windows_NT" (set INFO=echo && set SEXIT=1) else (set INFO=rem && set SEXIT=0)

%INFO% *********************
%INFO% Script: dhcp_config.bat
%INFO% Creation Date: 16.07.2006
%INFO% Author: Nikolay Andrianov
%INFO% Email: slayer@almodi.org
%INFO% *********************
%INFO% Description: Скрипт удаления DHCP областей и суперобластей.
%INFO% *********************
@if "%sexit%"=="1" goto exit

set server_adress=10.10.1.3
set n_scope=0
set name=1
set IPTMP=10.10.25.
set fullscope=%IPTMP%%n_scope%
set count=1
set count_end=32

:dhcp1
netsh dhcp server %server_adress% delete superscope “RU-POS%name%”
netsh dhcp server %server_adress% delete scope %fullscope% dhcpfullforce

if %count% EQU %count_end% goto end1
set /A n_scope=%n_scope%+8
set /A name=%name%+1
set fullscope=%IPTMP%%n_scope%
set /A count=%count%+1
goto dhcp1

:end1
Exit


Что нельзя сделать скриптом


    К сожалению, с помощью утилиты netsh нельзя создать суперобласть(superscope) и Вам придется сделать это самостоятельно, через оснастку DHCP.

Что можно сделать скриптом

    Скрипт можно модифицировать, и использовать его не только для создания областей, но и для их конфигурирования и удаления. Также не забывайте использовать функцию Backup (в оснастке DHCP), для сохранения конфигурации DHCP , перед использованием скриптов или же делать дамп конфигурации.

Листинг3:


@echo off
@if not "%OS%"=="Windows_NT" (set INFO=echo && set SEXIT=1) else (set INFO=rem && set SEXIT=0)

%INFO% *********************
%INFO% Script: dhcp_config.bat
%INFO% Creation Date: 20.12.2005
%INFO% Author: Nikolay Andrianov
%INFO% Email: slayer@almodi.org
%INFO% *********************
%INFO% Description: Скрипт генерации DHCP областей,
%INFO% их конфигурирования и активации.
%INFO% *********************
@if "%sexit%"=="1" goto exit


 Автор: Андрианов Николай

Комментарии