Не правильная статистика на Windows DHCP сервере
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов рунета Pyatilistnik.org. В прошлый раз мы с вами активно изучили и научились использовать две замечательные утилиты Iperf и Robocopy. Продолжаем с вами админские будни и сегодня я бы хотел рассмотреть ситуацию, когда вы заходите в вашу оснастку DHCP и обнаруживаете, что у вас в окне статистике показаны не правильные данные, количество используемых IP-адресов меньше в действительности. Ниже я покажу, в чем дело и как это можно исправить.
Описание проблемы со статистикой DHCP
У меня есть установленный DHCP-сервер на Windows Server, в какой-то момент я захотел посмотреть статистику используемых Ip-адресов на одной из областей. Данные из окна меня слегка смутили, приведу пример из тестовой лаборатории. У меня есть область с именем 192.168.31.0, кликнув по ней правым кликом я выбираю пункт "Отобразить статистику".
В результате я вижу, что всего у меня 101 IP-адрес и 24 из них используются, как активные, но загвоздка в том, что если зайти в раздел "Арендованные адреса", то тут их будет всего 14, а не 24. Сразу встает вопрос, либо еще не обновилась статистика, либо это какой-то глюк или фитча DHCP-сервера Microsoft.
Когда у вас IP-адресов предостаточно, то паниковать и не стоит, но бывают ситуации, что в Windows DHCP заканчиваются IP-адреса и вот там уже понимание этого процесса очень спасает, но обо всем по порядку.
Как актуализировать данные статистики DHCP-сервера Windows
Первое, что нужно сделать, это попытаться вручную обновить данные статистики, тут вы это сделать можете на уровне области (Scope) или на уровне сервера, щелкнув по IPv4 правым кликом и выбрав "Отобразить статистику - Обновить".
Если вы хотите настроить автоматическое обновление статистики, то вы можете зайти в свойства IPv4 и на вкладке общие включить галку "Автоматически обновлять статистику каждые" и задать диапазон времени, я в примере оставлю 10 минут.
В моем случае, это не дало эффекта и я стал искать информацию дальше. Я наткнулся на ряд обсуждений на форуме Microsoft, а так же несколько блогов, где мне по крупицам удалось понять в чем дело и поправить, это. Ссылки на обсуждения я укажу ниже.
В одном из обсуждений автор ответа предлагал воспользоваться утилитой командной строки netsh, так как она давно использовалась, как альтернатива настройки графическому интерфейсу. Откройте cmd от имени администратора и для начала давайте посмотрим список наших пулов, так как нам нужно точное имя или IP-диапазон. Выполните:
netsh dhcp server 192.168.31.1 show scope (на удаленном)
В результате я вижу, что у меня есть активная область с именем 192.168.31.0.
То же самое вы можете посмотреть и через PowerShell запущенный в режиме администратора. Воспользуемся командлетом Get-DhcpServerv4Scope:
Если нужно вывести конкретную область, то пишем ключ -ScopeId
В итоге вы так же получите информацию, о нужных вам областях на DHCP сервере
Следующим шагом вам необходимо вывести информацию, о арендованных IP-адресах в нужной области (Scope). Для это в командной строке введите:
и вот тут уже полученная информация куда интереснее, в графической оснастке DHCP я вижу, что есть 7 арендованных IP-адресов, а вот уже в командной строке их 24. Особо обратите внимание, что время когда я смотрю команду 14-33, а у многих записей срок действия аренды уже давно истек, аж в 13-55.
То же самое вы можете посмотреть и через PowerShell, через командлет Get-DhcpServerv4ScopeStatistics
В результате я так же вижу, что используемых IP-адресов 24 и свободно 77, но я хочу большего и увидеть все более детально. Если нужно получить статистику с DHCP сервера, работающего в режиме отказоустойчивости, то можно добавить ключ -Failover.
Давайте воспользуемся командлетом Get-DhcpServerv4Lease
Посмотреть только устаревшие записи:
Тут уже становится еще интереснее, так как те IP-адреса, которые зарегистрированы, но отсутствуют в консоли по управлению DHCP сервером, тут имеют статус "Expired", а те, что я вижу имеют статус "Active".
Получается, что после того, как у IP-адреса который был запрошен ранее закончилось время аренды, и компьютер его не продлил, был помечен статусом "Устарел Expired" и Windows DHCP-сервер Чтобы удалить такие IP-адреса, которые имеют статус "Expired", то можно в PowerShell использовать командлет Remove-DhcpServerv4Lease, в своем примере я удалю устройство имеющее mac-адрес 00-0c-29-9a-ec-85:
Для того, чтобы удалить устаревшую аренду в DHCP через netsh вы можете воспользоваться вот такой конструкцией:
Как видим мы получили правильное сообщение, что все применилось "Контекст текущей области изменен на область 192.168.31.0"
Теперь если вновь ввести команду на просмотр арендованных IP-адресов в области, то я уже не увижу тут удаленный 192.168.31.100
Если вам необходимо массово удалить все истекшие IP-адреса со статусом Expired, то вы можете воспользоваться готовым скриптом PowerShell, единственное вам нужно будет изменить под себя адрес сервера DHCP и имя области (Scope). Вот код скрипта.
$computername = "Тут пишите адрес вашего DHCP"
$scopeid = "Тут пишите имя вашей области"
foreach ($object in Get-DhcpServerv4Lease -ComputerName $computername -ScopeId$scopeid)
{
if ($object.leaseExpiryTime -le (Get-Date))
{
$object.hostname
Remove-DhcpServerv4Lease -ComputerName $computername -IPAddress ($object.IPAddress).IPAddressToString
}
}
В итоге получаем полное отсутствие записей Expired.
Почему DHCP не высвобождает IP-адреса после истечения аренды?
У вас может возникнуть вполне закономерный вопрос, Иван, а в чем же дело, почему DHCP сервер от Microsoft ведет себя подобным образом, так как у Cisco DHCP такого нет поведения.Оказывается есть такое понятие "Льготный период (grace period)" именно он добавляет дополнительные 4 часа по умолчанию к высвобождению арендованного IP_адреса у DHCP, я об этом уже рассказывал в статье, как происходит выделение IP-адреса на DHCP сервере. В моем тестовом окружении у данной области срок действия аренды для DHCP клиентов составляет не более 10 минут.
Зная, что служба DHCP благодаря функции "Льготный период (grace period)" добавляет еще 4 часа, то получается 4 часа 15 минут, до момента полной отдачи ip-адреса в случае если клиент не запросил его повторно.
Windows DHCP льготный период
Windows DHCP имеет льготный период по умолчанию четыре (4) часа. Он защищает аренду клиента в следующих случаях:
- Клиент и сервер находятся в разных часовых поясах
- Внутренние часы клиентского и серверного компьютеров не синхронизированы, сломался NTP-сервер.
- Клиент не в сети, когда срок аренды истекает
При добавлении льготного периода ожидается следующее:
- Когда истекает срок действия IP-адреса DHCP, он исчезает из интерфейса администратора dhcpmgmt.msc.
- Вы можете получить просроченные IP-адреса только запросив базу данных DHCP. Это возможно с помощью командлетов Get-DHCPServerv4Lease и Get-DHCPServerv6Lease (доступно с момента выпуска Windows Server 2012 R2 и PowerShell 4.0).
Чтобы настроить по вашему желанию льготный период, а это делают обычно, когда DHCP не может уже выдавать IP-адреса, то используют два ключа реестра.
- Интервал очистки базы данных можно сократить, обновив раздел реестра DatabaseCleanupInterval тип DWORD в разделе HKLM/System/CurrentControlSet /Services / DHCPServer/Parameters. Хочу отметить, что по умолчанию значение у ключа DatabaseCleanupInterval составляет 60 минут, когда он будит проходить и вычищать Expired записи после того, как заканчивается "Льготный период (grace period)". По умолчанию он создан уже на DHCP сервере
- Вы можете сократить льготный период аренды, создав или обновив раздел реестра LeaseExtension типDWORD в разделе HKLM/System/CurrentControlSet /Services/DHCPServer/Parameters . Значение может быть указано в десятичном формате и должно быть в минутах. Я обычно ставлю 60 секунд, так как по умолчанию именно в них считается параметр.
После этого вам необходимо произвести перезапуск службы DHCP, либо через графическую оснастку services.msc, которую можно запустить через "окно Выполнить" или же введите команду в PowerShell.
В результате этих действий моя статистика DHCP стала отображать корректные данные и я теперь точно знаю, что после того, как закончится время аренды IP-адреса то он точно уже освободится через 1 час. На этом у меня все, надеюсь было интересно. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.
Полезные ссылки
- https://social.technet.microsoft.com/Forums/windowsserver/en-US/43c2bcc9-4c4e-420d-96db-11f05843859c/dhcp-leases-vs-dhcp-statistics
- https://social.technet.microsoft.com/Forums/windowsserver/en-US/4b9e4e9c-1983-4239-b4d8-e775a539ffc9/dhcp-server-and-scope-statistics-are-inaccurate-and-automatically-update-does-not-work
- https://docs.microsoft.com/en-us/powershell/module/dhcpserver/get-dhcpserverv4scope?view=win10-ps
- https://docs.microsoft.com/en-us/powershell/module/dhcpserver/Get-DhcpServerv4ScopeStatistics?view=win10-psh
- ttps://docs.microsoft.com/en-us/powershell/module/dhcpserver/Remove-DhcpServerv4Lease?view=win10-ps
- https://social.technet.microsoft.com/wiki/contents/articles/25098.how-to-force-a-dhcp-database-cleanup-for-expired-leases-in-a-specific-scope.aspx
- https://social.technet.microsoft.com/wiki/contents/articles/25089.dhcp-on-windows-servers-why-are-the-expired-ip-addresses-not-getting-re-assigned.aspx