Миграция службы DHCP с старого 2003 сервера на новый 2012R2 в целом не вызывает сложностей. Всего то нужно:
- установить роль DHCP на новом сервере
- создать нужную область (Scope), настроить ее параметры по образу и подобию старого сервера.
- перенести на новый сервер зарезервированные IP-адреса с их уникальными параметрами (если они есть)
- выключить службу на старом сервера
- авторизовать и включить службу на новом сервере.
Основная проблема, с которой придется столкнуться, это перенос резервированных IP адресов.
Особенно это коснется тех, кто предпочитает резервировать ВСЕ адреса в области DHCP (встречаются и такие), или тех, у кого достаточно большое хозяйство и накопилось много зарезервированных адресов, которые руками перетаскивать долго.
Было найдено два рабочих варианта:
Первый: полу-автоматический
- На старом сервере запускаем netsh — Dhcp — server\\имя_сервера_2003 – exportc:\win2003DbAll
- На новом ставим роль DHCP, останавливаем DHCP-службу, удаляем базу C:\Windows\System32\DHCP\*.mdb, снова запускаем DHCP-сервер, импортируем настройки, командой Netsh – Dhcp – server \\имя_сервера_2012 – import c:\win2003db
- Удаляем роль DHCP на старом сервере.
- Перезапускаем и авторизуем новый DHCP сервер, проверяем что все работает корректно.
Второй: полу-ручной (кому-то этот вариант понравится больше, т.к. есть возможность не только причесать свою службу DHCP в процессе миграции, но и не ловить в дальнейшем «хвосты старых проблем». Мы же параноики… Кто его знает что там мигрирует и как, правда? Никакая мигрированная настройка (тем более через 4 поколения серверных ОС) не сравнится с вручную созданной с нуля :). Ну и грех в данном случае не использовать мощь PowerShell.
- На новом сервере ставим DHCP, настраиваем параметры области, параметры сервера (если нужно).
- На старом сервере в консоли DHCP выбираем вкладку «Address Leases» и экспортируем все что видим в CSV-файл
- Редактируем при необходимости CSV-файл (убираем ненужные резервации, переименовываем комментарии к второпях сделанным адресам и т.д.). Перед сохранением выбираем только те записи, которые имеют в столбце ТИП упоминание Reservation и приводим таблицу к виду ScopeID;IPAddress;Name;ClientID;Description, где ScopeID — имя области(Scope) на новом сервере (в моем случае это 192.168.0.0.
- Сохраняем с разделителями «;»
- На новом сервере импортируем резервированные адреса из CSV-файла с помощью PowerShell
Import-Csv c:\Users\user\Desktop\RezervDHCP.txt -delimiter «;» -Encoding Default | Add-DhcpServerv4Reservation -ComputerName NewServ2012
Далее интреснее.
Многие админы не просто резервируют адреса, но и назначают им параметры, отличающиеся от стандартных. Например меняют адрес шлюза, или ставят DNS другие чем у всех. Здесь логично объединить эти «отличающиеся адреса» каким нибудь общим признаком, чтобы потом было удобнее ими управлять. В моем случае это была группировка по начальным цифрам адреса. т.е. Scope была с раширенной маской 255.255.248.0 и компьютеры были группированы так:
- имевшие адрес начинающийся с 192.168.0.0 — имели другой адрес шлюза
- имевшие адрес начинающийся с 192.168.1.0 — имели другой адрес шлюза и другой DNS
Для автоматической правки получившихся чистых резерваций достаточно сделать следующее:
$rsrv = Get-DhcpServerv4Reservation -ScopeID "192.168.0.0" Foreach ($r in $rsrv) { if ($r.Ipaddress.Ipaddresstostring.StartsWith("192.168.0.")) { #echo $R.Ipaddress.Ipaddresstostring Set-DhcpServerv4OptionValue -ReservedIP $R.Ipaddress.Ipaddresstostring -Router 192.168.0.1 } elseif ($r.Ipaddress.Ipaddresstostring.StartsWith("192.168.1.")) { Set-DhcpServerv4OptionValue -ReservedIP $R.Ipaddress.Ipaddresstostring -Router 192.168.0.1 -DnsServer 8.8.8.8 -DnsDomain "" } elseif ($r.Ipaddress.Ipaddresstostring.StartsWith("192.168.2.")) { Set-DhcpServerv4OptionValue -ReservedIP $R.Ipaddress.Ipaddresstostring -Router 192.168.2.1 } }