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

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

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

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

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