# Автоматическая репликация областей отказоустойчивого DHCP сервера Windows Server

<p class="callout info">Источник http://pyatilistnik.org/oshibki-20291-i-20292-na-dhcp-v-windows-server/</p>

Как я написал выше, Microsoft до сих пор не решило проблему автоматической репликации данных, о зарезервированных IP-адресах, даже в Windows Server 2019. Тут у вас два варианта, первый самый топорный, это ручной запуск на сервере, где были изменены настройки. Для этого запустите PowerShell и введите команду:

<div id="bkmrk-invoke-dhcpserverv4f"><div>Invoke-DhcpServerv4FailoverReplication -ComputerName dc01.root.pyatilistnik.org</div></div>- dc01.root.pyatilistnik.org - сервер с которого мы будем реплицировать настройки (**DHCP сервер-партнер**)

В этом примере реплицируются **все области** отработки отказа службы DHCP-сервера, работающей на компьютере с именем dc01.root.pyatilistnik.org*,* в одну или несколько соответствующих партнерских служб DHCP-сервера на основе одного или нескольких отношений отработки отказа, в которых включены службы DHCP-сервера. Обратите внимание, что у вас появится запрос на подтверждение данного действия. Если хотите его пропускать, то необходимо добавить ключ **-Force**.

<div id="bkmrk-invoke-dhcpserverv4f-0"><div>Invoke-DhcpServerv4FailoverReplication -ComputerName dc01.root.pyatilistnik.org -Force</div></div>[![Команда Invoke-DhcpServerv4FailoverReplication -ComputerName dc01.root.pyatilistnik.org](http://pyatilistnik.org/wp-content/uploads/2020/04/id-20291-id-20292-20.png)](http://pyatilistnik.org/wp-content/uploads/2020/04/id-20291-id-20292-20.png)

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

<div id="bkmrk-invoke-dhcpserverv4f-1"><div>Invoke-DhcpServerv4FailoverReplication -ComputerName dc01.root.pyatilistnik.org -Name dc01.root.pyatilistnik.org-svt2019s01</div></div>В этом примере реплицируется конфигурация всех областей, которые являются частью отношения отработки отказа с именем **dc01.root.pyatilistnik.org-svt2019s01** в службе DHCP-сервера, работающей на компьютере с именем **dc01.root.pyatilistnik.org**, в службу DHCP-сервера партнера.

<div data-index="2" id="bkmrk--0"></div>[![Репликация отработки отказа через PowerShell](http://pyatilistnik.org/wp-content/uploads/2020/04/id-20291-id-20292-21.png)](http://pyatilistnik.org/wp-content/uploads/2020/04/id-20291-id-20292-21.png)

Предположим, что вам необходимо выполнить репликацию отработки отказа, только для определенных областей, для этого есть параметр -ScopeId, вот пример для моих областей:

<div id="bkmrk-invoke-dhcpserverv4f-2"><div>Invoke-DhcpServerv4FailoverReplication -ComputerName dc01.root.pyatilistnik.org -ScopeId 192.168.31.0,192.168.32.0 -Force</div></div>Зная теперь основные команды, вы можете создать для себя автоматический сценарий при котором у вас будет происходить репликация. Тут все просто на поможет сценарий PowerShell и планировщик заданий, который будет срабатывать на определенное событие в журналах Windows.

<div id="bkmrk-%D0%A5%D0%BE%D1%87%D1%83-%D0%BE%D1%82%D0%BC%D0%B5%D1%82%D0%B8%D1%82%D1%8C%2C-%D1%87%D1%82%D0%BE-%D1%8F"><div>Хочу отметить, что я и сама Microsoft настоятельно рекомендует, всем администраторам делать изменение настроек исключительно на одном из серверов партнеров, а уже потом реплицировать на второй, так можно гарантировать, что все реплики будут корректны и минимизировано количество потерь ваших изменений</div></div>**Алгоритм действий:**

- Создаете в Active Directory новую учетную запись, например dhcp-replication и **делаете ее администратором на обоих DHCP серверах**, кто входит в группу репликации. [Как дать права на DHCP](http://pyatilistnik.org/how-to-grant-dhcp-server-rights-in-windows-server/) читайте по ссылке.

[![Создание учетной записи для репликации областей отработки отказа](http://pyatilistnik.org/wp-content/uploads/2020/05/id-20291-id-20292-22.png)](http://pyatilistnik.org/wp-content/uploads/2020/05/id-20291-id-20292-22.png)

- Создаем небольшой скрипт dhcp-replication.ps1. Для этого вам просто нужно открыть PowerShell ISE и ввести там команду:

<div id="bkmrk-invoke-dhcpserverv4f-3"><div><div>Invoke-DhcpServerv4FailoverReplication -ComputerName dc01.root.pyatilistnik.org -Force#dc01.root.pyatilistnik.org - сервер с которого мы будем реплицировать настройки (**DHCP сервер-партнер**)</div></div></div>Далее вам просто нужно сохранить его в формате ps1.

[![Создание PowerShell скрипта для репликации DHCP](http://pyatilistnik.org/wp-content/uploads/2020/05/id-20291-id-20292-23.png)](http://pyatilistnik.org/wp-content/uploads/2020/05/id-20291-id-20292-23.png)

- Создаем задание в планировщике Windows, которое по событию будет запускать ваш скрипт. Почему именно по событию, все просто, чтобы уменьшить количество бесполезного трафика и нагрузку на ваш сервер.

Когда вы производите новое резервирование IP-адреса на вашем DHCP сервере, у вас генерируется событие ID 106.

<div id="bkmrk-id-106%3A%C2%A0%D0%A0%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD"><div>ID 106: Резервирование: [[192.168.31.109]] для IPv4 настроено в области [[192.168.31.0]192.168.31.0] через ROOT\Администратор.</div></div>Генерируется оно журналом **Microsoft-Windows-DHCP Server Events**.

[![Событие с кодом ID 106](http://pyatilistnik.org/wp-content/uploads/2020/05/id-20291-id-20292-24.png)](http://pyatilistnik.org/wp-content/uploads/2020/05/id-20291-id-20292-24.png)

И так, откройте планировщик событий, самый быстрый способ, это в окне "**Выполнить**", ввести **taskschd.msc**.

[![как открыть планировщик заданий](http://pyatilistnik.org/wp-content/uploads/2020/05/id-20291-id-20292-25.png)](http://pyatilistnik.org/wp-content/uploads/2020/05/id-20291-id-20292-25.png)

Щелкаем правым кликом и создаем новую, простую задачу.

[![Создание задания по репликации в DHCP](http://pyatilistnik.org/wp-content/uploads/2020/05/id-20291-id-20292-26.png)](http://pyatilistnik.org/wp-content/uploads/2020/05/id-20291-id-20292-26.png)

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

[![Заполнение поля имени задачи в планировщике](http://pyatilistnik.org/wp-content/uploads/2020/05/id-20291-id-20292-27.png)](http://pyatilistnik.org/wp-content/uploads/2020/05/id-20291-id-20292-27.png)

Выбираем пункт "**При занесении в журнал указанного события**".

[![При занесении в журнал указанного события](http://pyatilistnik.org/wp-content/uploads/2020/05/sozdanie-zadaniya-v-planirovschike-01.png)](http://pyatilistnik.org/wp-content/uploads/2020/05/sozdanie-zadaniya-v-planirovschike-01.png)

Далее заполняем три пункта:

- Журнал - Microsoft-Windows-DHCP Server Events/Работает
- DHCP-Server
- Код события 106

> 1. [![создание задания в планировщике Windows по репликации областей DHCP](http://pyatilistnik.org/wp-content/uploads/2020/05/sozdanie-zadaniya-v-planirovschike-02.png)](http://pyatilistnik.org/wp-content/uploads/2020/05/sozdanie-zadaniya-v-planirovschike-02.png)

Оставляем пункт "**Запустить программу**".

[![Запуск программы через планировщик Windows](http://pyatilistnik.org/wp-content/uploads/2020/05/sobytie-s-kodom-id-106-01.png)](http://pyatilistnik.org/wp-content/uploads/2020/05/sobytie-s-kodom-id-106-01.png)

Далее в поле:

- Программа или сценарий, вы указываете powershell.exe
- В поле "Добавить аргументы" введите текст **-WindowStyle Hidden -File "C:\\Scripts\\dhcp-replication.ps1"**. Где **WindowStyle** - это указание не показывать диалоговое окно, а атрибут -**File** указывает путь до вашего скрипта PowerShell. Мы такое уже разбирали в [методах запуска скрипта PowerShell](http://pyatilistnik.org/kak-zapustit-skript-powershell-v-windows/).

[![Заполняем аргументы для запуска скрипта PowerShell](http://pyatilistnik.org/wp-content/uploads/2020/05/sobytie-s-kodom-id-106-02.png)](http://pyatilistnik.org/wp-content/uploads/2020/05/sobytie-s-kodom-id-106-02.png)

Смотрим сводную информацию и закрываем мастер настройки простого задания.

[![Завершение создания задания в планировщике](http://pyatilistnik.org/wp-content/uploads/2020/05/sobytie-s-kodom-id-106-03.png)](http://pyatilistnik.org/wp-content/uploads/2020/05/sobytie-s-kodom-id-106-03.png)

В результате ваше новое задание появится в списке.

[![Список заданий в планировщике](http://pyatilistnik.org/wp-content/uploads/2020/05/sobytie-s-kodom-id-106-04.png)](http://pyatilistnik.org/wp-content/uploads/2020/05/sobytie-s-kodom-id-106-04.png)

Далее нам необходимо открыть свойства вашего задания и в параметрах безопасности выбрать созданного ранее пользователя, от имени которого будет запускаться задание, далее выставить опцию "**Выполнить для всех пользователей**" и поставить галку "**Выполнить с наивысшими правами**".

Все теперь ждем появления события ID 106, вы его сами можете вызвать, путем резервирования IP-адреса. Как видим у меня успешно отработало мое задание и все резервированные IP-адреса на текущем сервере, благополучно отреплецировались на DHCP-партнера.

С событием установки резервирования (ID 106) мы разобрались, но еще есть и обратная операция, это удаление резервирования IP-адреса за определенным компьютером, и тут генерируется событие **ID 107**.

<div id="bkmrk-id-107%3A-%D0%A0%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD"><div>ID 107: Резервирование: [[192.168.31.118]] для IPv4 удалено в области [[192.168.31.0]192.168.31.0] через ROOT\Администратор.</div></div>- Журнал Microsoft-Windows-DHCP Server Events/Работает
- Источник DHCP-Server

В итоге вам нужно создать такое же задание, как и в случае с ID 106, но сделать для ID 107 некоторые изменения. Теперь при включении и выключении аренды IP адреса, все области отработки будут автоматически согласованы и ошибок с ID 202091 и ID 20292 не должно быть.