Не правильная статистика на Windows DHCP сервере

Обновлено 17.11.2022

dhcp logoДобрый день! Уважаемые читатели и гости одного из крупнейших IT блогов рунета Pyatilistnik.org. В прошлый раз мы с вами активно изучили и научились использовать две замечательные утилиты Iperf и Robocopy. Продолжаем с вами админские будни и сегодня я бы хотел рассмотреть ситуацию, когда вы заходите в вашу оснастку DHCP и обнаруживаете, что у вас в окне статистике показаны не правильные данные, количество используемых IP-адресов меньше в действительности. Ниже я покажу, в чем дело и как это можно исправить.

Описание проблемы со статистикой DHCP

У меня есть установленный DHCP-сервер на Windows Server, в какой-то момент я захотел посмотреть статистику используемых Ip-адресов на одной из областей. Данные из окна меня слегка смутили, приведу пример из тестовой лаборатории. У меня есть область с именем 192.168.31.0, кликнув по ней правым кликом я выбираю пункт "Отобразить статистику".

Отобразить статистику в dhcp сервере

В результате я вижу, что всего у меня 101 IP-адрес и 24 из них используются, как активные, но загвоздка в том, что если зайти в раздел "Арендованные адреса", то тут их будет всего 14, а не 24. Сразу встает вопрос, либо еще не обновилась статистика, либо это какой-то глюк или фитча DHCP-сервера Microsoft.

Список арендованных ip адресов в оснастке DHCP

Когда у вас IP-адресов предостаточно, то паниковать и не стоит, но бывают ситуации, что в Windows DHCP заканчиваются IP-адреса и вот там уже понимание этого процесса очень спасает, но обо всем по порядку.

Как актуализировать данные статистики DHCP-сервера Windows

Первое, что нужно сделать, это попытаться вручную обновить данные статистики, тут вы это сделать можете на уровне области (Scope) или на уровне сервера, щелкнув по IPv4 правым кликом и выбрав "Отобразить статистику - Обновить".

Как обновить статистику DHCP сервера

Не правильная статистика на Windows DHCP сервере

Если вы хотите настроить автоматическое обновление статистики, то вы можете зайти в свойства IPv4 и на вкладке общие включить галку "Автоматически обновлять статистику каждые" и задать диапазон времени, я в примере оставлю 10 минут.

параметр DHCP "Автоматически обновлять статистику каждые"

В моем случае, это не дало эффекта и я стал искать информацию дальше. Я наткнулся на ряд обсуждений на форуме Microsoft, а так же несколько блогов, где мне по крупицам удалось понять в чем дело и поправить, это. Ссылки на обсуждения я укажу ниже.

В одном из обсуждений автор ответа предлагал воспользоваться утилитой командной строки netsh, так как она давно использовалась, как альтернатива настройки графическому интерфейсу. Откройте cmd от имени администратора и для начала давайте посмотрим список наших пулов, так как нам нужно точное имя или IP-диапазон. Выполните:

netsh dhcp server show scope (на локальном сервере) или
netsh dhcp server 192.168.31.1 show scope (на удаленном)

Просмотр списка областей DHCP через утилиту netsh

В результате я вижу, что у меня есть активная область с именем 192.168.31.0.

То же самое вы можете посмотреть и через PowerShell запущенный в режиме администратора. Воспользуемся командлетом Get-DhcpServerv4Scope:

Get-DhcpServerv4Scope -ComputerName "dc01.root.pyatilistnik.org"

Если нужно вывести конкретную область, то пишем ключ -ScopeId

Get-DhcpServerv4Scope -ComputerName "dc01.root.pyatilistnik.org" -ScopeId 192.168.31.0

В итоге вы так же получите информацию, о нужных вам областях на DHCP сервере

просмотр областей DHCP через Get-DhcpServerv4Scope

Следующим шагом вам необходимо вывести информацию, о арендованных IP-адресах в нужной области (Scope). Для это в командной строке введите:

netsh dhcp server 192.168.31.1 scope 192.168.31.0 show clients

и вот тут уже полученная информация куда интереснее, в графической оснастке DHCP я вижу, что есть 7 арендованных IP-адресов, а вот уже в командной строке их 24. Особо обратите внимание, что время когда я смотрю команду 14-33, а у многих записей срок действия аренды уже давно истек, аж в 13-55.

Просмотр арендованных ip-адресов через netsh

То же самое вы можете посмотреть и через PowerShell, через командлет Get-DhcpServerv4ScopeStatistics

Get-DhcpServerv4ScopeStatistics -ComputerName "dc01.root.pyatilistnik.org" -ScopeId 192.168.31.0

В результате я так же вижу, что используемых IP-адресов 24 и свободно 77, но я хочу большего и увидеть все более детально. Если нужно получить статистику с DHCP сервера, работающего в режиме отказоустойчивости, то можно добавить ключ -Failover.

просмотр статистики ip адресов dhcp через Get-DhcpServerv4ScopeStatistics

Давайте воспользуемся командлетом Get-DhcpServerv4Lease

Get-DhcpServerv4Lease -ScopeId 192.168.31.0 -AllLeases | FT

Посмотреть только устаревшие записи:

Get-DhcpServerv4Lease -ScopeId 192.168.31.0 -AllLeases | where-object {$_.AddressState -like "Expired"}

Тут уже становится еще интереснее, так как те IP-адреса, которые зарегистрированы, но отсутствуют в консоли по управлению DHCP сервером, тут имеют статус "Expired", а те, что я вижу имеют статус "Active".

Просмотр арендованных ip-адресов DHCP через powershell

Получается, что после того, как у IP-адреса который был запрошен ранее закончилось время аренды, и компьютер его не продлил, был помечен статусом "Устарел Expired" и Windows DHCP-сервер Чтобы удалить такие IP-адреса, которые имеют статус "Expired", то можно в PowerShell использовать командлет Remove-DhcpServerv4Lease, в своем примере я удалю устройство имеющее mac-адрес 00-0c-29-9a-ec-85:

Remove-DhcpServerv4Lease -ComputerName "dc01.root.pyatilistnik.org" -ScopeId 192.168.31.0 -ClientId "00-0c-29-9a-ec-85"

Удаление устаревшей аренды в DHCP со статусом Expired

Для того, чтобы удалить устаревшую аренду в DHCP через netsh вы можете воспользоваться вот такой конструкцией:

netsh dhcp server 192.168.31.1 scope 192.168.31.0 delete lease 192.168.31.100

Как видим мы получили правильное сообщение, что все применилось "Контекст текущей области  изменен на область 192.168.31.0"

Удаление устаревшей аренды в DHCP через netsh

Теперь если вновь ввести команду на просмотр арендованных IP-адресов в области, то я уже не увижу тут удаленный 192.168.31.100

dhcp grace perio

Если вам необходимо массово удалить все истекшие 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

В итоге получаем полное отсутствие записей Expired.

Очистка от устаревших записей об аренде в DHCP

Почему DHCP не высвобождает IP-адреса после истечения аренды?

У вас может возникнуть вполне закономерный вопрос, Иван, а в чем же дело, почему DHCP сервер от Microsoft ведет себя подобным образом, так как у Cisco DHCP такого нет поведения.Оказывается есть такое понятие "Льготный период (grace period)" именно он добавляет дополнительные 4 часа по умолчанию к высвобождению арендованного IP_адреса у DHCP, я об этом уже рассказывал в статье, как происходит выделение IP-адреса на DHCP сервере. В моем тестовом окружении у данной области срок действия аренды для DHCP клиентов составляет не более 10 минут.

срок аренды ip в dhcp

Зная, что служба 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 сервере

Смена периода очистки адресов в DHCP через DatabaseCleanupInterval

  • Вы можете сократить льготный период аренды, создав или обновив раздел реестра LeaseExtension типDWORD в разделе HKLM/System/CurrentControlSet /Services/DHCPServer/Parameters . Значение может быть указано в десятичном формате и должно быть в минутах. Я обычно ставлю 60 секунд, так как по умолчанию именно в них считается параметр.

Создание ключа реестра LeaseExtension

После этого вам необходимо произвести перезапуск службы DHCP, либо через графическую оснастку services.msc, которую можно запустить через "окно Выполнить" или же введите команду в PowerShell.

Restart-Service DHCPServer

перезапуск dhcp сервера

В результате этих действий моя статистика 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
Автор - Сёмин Иван

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *