Windows Server 2012 Core — замена IP адреса, полученного от DHCP, на такой же статический.

В своей практике я довольно часто при настройке сервера, которому нужен статический адрес IP, сначала получаю этот адрес динамически от сервера DHCP,  и только потом меняю его на точно такой же, но статический. Потом на сервере DHCP я преобразую полученную аренду в резервирование, а в описании резервирования оставляю комментарий, что этот адрес назначен статически. Такой подход в реальной практике (при которой письменная документация, как правило, отсутствует или не является достоверной) обладает двумя достоинствами: во-первых, он дает достаточную гарантию того, что этот адрес больше нигде в сети не используется, а, во-вторых, позволяет все-таки документировать реальное использование IP-адресов и связанных с ними MAC-адресов имено в том месте, где это реально нужно для работы, а не для отчетности.

Недавно пришлось мне устанавливать Windows Server 2012 в варианте Core со статическим адресом, и я, естественно, попытался использовать эту практику. Для этого я ввел команду Powershell, описанную во всех руководствах, начиная с Technet Library, указав в ней тот же адрес, который был получен до этого от сервера DHCP. В моей сети и на моем сервере она выглядела так (параметры, зависящие от конкретного сервера/сети выделены курсивом, способ определения InterfaceIndex см. в статье по ссылке):

New-NetIPAddress -InterfaceIndex 12 -IPAddress 10.9.0.218 -PrefixLength 24 -DefaultGateway 10.9.0.10
Но не тут-то было — Powershell соизволил сообщить об ошибке: якобы такой адрес уже присутствует в системе. Вообще говоря это даже логично: такой адрес, полученный от DHCP, действительно есть (желающие могли бы убедиться в этом командой Get-NetIPAddress 10.9.0.218 ). Конечно, команда New-NetIPAddress, согласно описанию, в процессе выполнения отключит DHCP и этот адрес исчезнет. Но проверка-то правильности параметров команды происходит до момента отключения и ничего не знает о том, что будет в процессе выполнения!

Короче, как всегда в реальной практике, не получается слепо доверять руководствам от Microsoft, а приходится включать голову. Включаем. Раз IP адрес получается от DHCP, то следует запретить использование DHCP на интерфейсе:

Set-NetIPInterface -InterfaceIndex 12 -Dhcp Disabled
Вроде бы, можно повторно вводить написанную выше команду New-NetIPAddress, но нет — это еще не все. Маршрут по умолчанию по какой-то причине остается в PersistentStore (постоянном хранилище информации о конфигурации сети), и если команду просто повторить, то Powershell опять сообщит об ошибке — теперь уже из-за дублирующегося маршрута.

Тут можно поступить двояко. Можно удалить и маршрут:

Remove-NetRoute "0.0.0.0/0" -ifIndex 12 -PolicyStore PersistentStore -confirm:$false
— и только потом повторить команду New-NetIPAddress со всеми параметрами из официального руководства. А можно просто произвести настройку IP-адреса без указания шлюза по умолчанию:

New-NetIPAddress -InterfaceIndex 12 -IPAddress 10.9.0.218 -PrefixLength 24
Во втором варианте шлюз по умолчанию (а он именно такой, какой нужен — мы же дублируем информацию, полученную ранее от DHCP) просто будет добавлен из постоянного хранилища в активные, и нужный маршрут по умолчанию у нас будет.

После этого остается не забыть настроить другие параметры, раздаваемые через DHCP (серверы DNS и прочие), и настройка статического адреса на интерфейсе будет завершена.

Реклама
    • dt
    • 08.10.2013

    Почему нельзя было по-старинке через netsh ?

  1. @dt
    Я просто изначально решил делать настройку в новом стиле, через Powershell. Надо же когда-то осваивать новое.

  1. No trackbacks yet.

Добавить комментарий

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

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s