Как освободить ip в dhcp windows server

Иногда в крупных организациях нужно провести ревизию свободных IP-адресов. Пользователи приезжают на место/уезжают/увольняются, IP адреса остаются зарезервированны хотя за ними уже никого нет. Поиском таких «мертвых душ» и займемся.

Рассмотрим пример, как получаются отчеты из логов MS DHCP.

Технология формирования отчетов по использованию адресного пространства состоит из двух частей:

1) отделение событий DHCP renew и

2) SQL-обработка.

В папке \\dhcp_server\c$\Windows\System32\dhcp лежат логи DHCP-сервера. Их копии нужно собрать в одну папку на локальном или сетевом диске. Например, в c:\tmp

Из этих файлов можно вытащить все события обновления dhcp lease renew:

cmd

C:

cd c:\tmp\

1) На первой стадии выделяем значимые строки. Перечислите через запятую все имена файлов *.log, которые нужно обработать. Можно собрать файлы за несколько недель, переименовав их как-нибудь.

c:\tmp>for /f "tokens=1,2,3,4,5,6,7,8 delims=," %a in (DhcpSrvLog-Mon.log,DhcpSrvLog-Tue.log,DhcpSrvLog-Wed.log,DhcpSrvLog-Thu.log,DhcpSrvLog-Fri.log,DhcpSrvLog-Sat.log,DhcpSrvLog-Sun.log) do if [%e] NEQ [] echo %b,%c,%d,%e,%f,%g >> text.csv

2) Добавить в первую строчку файла text2.csv заголовок «Date,Time,Description,IP,Hostname,MAC», остальные строки заполнить событиями renew:

c:\tmp>echo Date,Time,Description,IP,Hostname,MAC >> text2.csv

c:\tmp>for /f "tokens=1,2,3,4,5,6 delims=," %a in (text.csv) do if "%c" EQU "Renew" echo %a,%b,%c,%d,%e,%f >> text2.csv

Можно хранить text2.csv за каждую неделю и собирать в один файл конкатенацией. Если, допустим, нужно проверить что адрес не использовался целый месяц, полгода и т.д, то нужно хранить файлы text2.csv за этот период и склеивать перед следующей операцией.

3) формирование отчета:

c:\tmp >"c:\Program Files (x86)\Log Parser 2.2\LogParser.exe" -i:csv -o:TPL -tpl:dhcp2.tpl "SELECT IP, hostname, mac, max(to_timestamp(add(add(Date, ' '),time), 'MM/dd/yy HH:mm:ss')) as timestamp, EXTRACT_TOKEN(ip, 0, '.') as octet1, EXTRACT_TOKEN(ip, 1, '.') as octet2, EXTRACT_TOKEN(ip, 2, '.') as octet3, EXTRACT_TOKEN(ip, 3, '.') as octet4, add(strrepeat('0',sub(3, to_int(strlen(octet4)))),octet4) as octet4lz, add(strrepeat('0',sub(3, to_int(strlen(octet3)))),octet3) as octet3lz INTO text2.html FROM text2.csv group by IP,mac,hostname order by octet1,octet2,octet3lz,octet4lz"

Получится файл text2.html, в котором можно увидеть «живые» компьютеры, получающие адреса через DHCP.

Если заменить «-o:TPL -tpl:dhcp2.tpl » на «-o:CSV», «text2.html» на «b8.csv», то выходной файл можно импортировать в excel.

"c:\Program Files (x86)\Log Parser 2.2\LogParser.exe" -i:csv -o:CSV "SELECT IP, hostname, mac, max(to_timestamp(add(add(Date, ' '),time), 'MM/dd/yy HH:mm:ss')) as timestamp, EXTRACT_TOKEN(ip, 0, '.') as octet1, EXTRACT_TOKEN(ip, 1, '.') as octet2, EXTRACT_TOKEN(ip, 2, '.') as octet3, EXTRACT_TOKEN(ip, 3, '.') as octet4, add(strrepeat('0',sub(3, to_int(strlen(octet4)))),octet4) as octet4lz, add(strrepeat('0',sub(3, to_int(strlen(octet3)))),octet3) as octet3lz INTO b8.csv FROM text2.csv group by IP,mac,hostname order by octet1,octet2,octet3lz,octet4lz"

LogParser качать тут:

www.microsoft.com/en-us/download/details.aspx?id=24659

Windows DHCP Server — Clean ReservedIP Addresses

To clean all the reserved IP addresses on a Windows DHCP server (my-srvr):

1. Dump configuration of that server to origin.cfg by running the following command on windows:

netsh dhcp server \\my-srvr scope 172.40.0.0 dump > C:\origin.cfg

2. Read the config file, get the reserved ip part, remove «Add» with «delete», and then write them to a new config file names new.cfg. Using python to do all of those:



def create_del_ri_cfg(org_path, out_path):

    org_file = open(org_path, ‘rb’)

    cfg = org_file.read()

    org_file.close()

    ri_pos = cfg.index(‘#  Start Add ReservedIp’)

    cfg = cfg[ri_pos:]

    cfg = cfg.replace(‘Add’, ‘delete’)

    out_file = open(out_path, ‘wb’)

    out_file.write(cfg)

    out_file.close()

3. Execute the new config file to delete all reserved ip addresses of my-srvr:


netsh exec C:\new.cfg

(source: http://www.fujitsu.com/fts/products/computing/servers/primergy/os/microsoft/2008-r2-sp1/)

Предпосылкой к данной статье послужил реальный кейс, когда адреса для гостевой Wi-Fi сети стали заканчиваться. Время аренды было снижено с нескольких часов до нескольких десятков минут, однако в пиковые часы проблема вновь всплыла. Было принято решение минимизировать время аренды до нескольких минут, но и это не сильно помогло.

Проблема начала проясняться, когда мы выгнали все устройства из этой области (scope) — статистика продолжала показывать, что большое количество адресов в использовании, хотя в «арендованных адресах» почти ничего не осталось (за исключением трех резервирований).

на скриншоте всего три арендованных адреса, хотя в статистике указано 242 использующихся

Причиной такого поведения является следующее: после того, как аренда адреса закончилась и не была продлена, адрес не становится сразу же доступным для последующей аренды, он отмечается как expired (истекший). Если мы воспользуемся командлетом Get-DhcpServerV4Lease с ключем —Allleases:

Get-DhcpServerV4Lease -ScopeId x.x.x.x -Allleases

то увидим все адреса, в т.ч. expired (которые не отображались в GUI)

Адреса станут доступными, когда будут очищены из базы данных DHCP. По умолчанию очистка происходит в 60 минут. Интервал очистки можно изменить — за него отвечает параметр DatabaseCleanupInterval , который находится в разделе реестра:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DHCPServer\Parameters

Можно изменить частоту, поменяв значение данного параметра (Decimal — указываем в минутах)

!!! Однако, стоит иметь в виду, что Windows Server ждет по умолчанию 4 часа, прежде чем очистить адрес в базе данных. Т.е. реально адрес освободится (будет очищен) через:

«время окончания аренды» + 4 часа + «время до следующей очистки»

Таким образом, на малых сроках аренды (до нескольких часов) мы не получим максимально быстрого высвобождения адресов.

Я намеренно написал в заголовке Windows Server 2012 R2, потому что встретил данную проблему на этой ОС и на момент написания статьи не проверял это в Windows Server 2016 и 2019. Возможно, интервалы в более свежих версиях ОС были изменены.


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

https://blogs.technet.microsoft.com/platformspfe/2014/08/12/windows-server-2012-r2-dhcp-expired-leases-not-getting-scavenged/

How do I flush DHCP leases in Windows?

How do I release all DHCP leases?

How do I flush my DHCP scope?

Is it OK to delete DHCP leases?

How do I find DHCP leases on Windows Server?

Can you delete DHCP leases?

What is the command for DHCP release?

What to do if DHCP scope is full?

How to get all DHCP leases in PowerShell?

How long should a DHCP lease last?

How do you aggressively recycle expired DHCP leases in advance?

How long until DHCP lease expires?

How do I view DHCP logs in Windows 2016?

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Windows не может опознать айфон
  • Как вызвать второй рабочий стол в windows 10
  • Просмотрщик fb2 для windows 10
  • Как отключить cfg в windows 10
  • Windows server 2003 standard edition активация