Короткий ответ

Исчерпанный scope: сервер не может Ack новый Discover. Старые клиенты живут до конца lease, новые получают APIPA или NAK. Сначала посчитайте свободные адреса и кто занимает пул (stale, принтеры, клоны). Потом либо освободите мёртвые lease, либо расширьте диапазон минус статика шлюза 10.0.10.1, DNS 10.0.10.2 и серверов. Не включайте весь /24 с .1 по .254 без exclusions.

Симптомы и как отличить

  • Только новые устройства без IP, старые работают;
  • на сервере AddressesFree : 0;
  • tcpdump: Discover, нет Offer или NAK.

Не путать с мёртвым DHCP (нет Offer при свободном пуле) и с неверным шлюзом при живых адресах.

Возможные причины

  1. Пул узкий (например .100–.120), хостов больше.
  2. Lease слишком длинный, уволенные ПК держат IP.
  3. Резервации съели диапазон.
  4. Второй VLAN ошибочно в этом scope (relay).
  5. BYOD/гости в том же пуле.
  6. /24 почти заполнен легитимно — нужен новый VLAN/prefix.

Диагностика

1. Свободные адреса

Windows DHCP:

Get-DhcpServerv4Scope -ComputerName DC01
Get-DhcpServerv4ScopeStatistics -ComputerName DC01 -ScopeId 10.0.10.0
Get-DhcpServerv4FreeIPAddress -ComputerName DC01 -ScopeId 10.0.10.0 -NumAddress 10

PercentageInUse 100% — эта статья. Ubuntu isc-dhcp: смотрите dhcpd.leases и range в конфиге; Kea — lease4-get-all / статистика.

2. Кто держит lease

Get-DhcpServerv4Lease -ComputerName DC01 -ScopeId 10.0.10.0 |
  Sort-Object LeaseExpiryTime |
  Format-Table IPAddress, ClientId, HostName, AddressState, LeaseExpiryTime

Ищите: Inactive, имена localhost, дубли MAC, имена давно списанных ПК.

3. Клиент

ipconfig /all
ipconfig /renew

Журнал DHCP-клиента: timeout. Ubuntu: journalctl -u NetworkManager / dhclient.

sudo dhclient -v eth0

No DHCPOFFERS vs DHCPNAK — разные ветки (сервер недоступен vs отказ).

4. Не пересечение ли со статикой

Список статик: 10.0.10.1 gw, 10.0.10.2 DNS, серверы .10–.30. Если пул .10–.200конфликты ещё до «конца пространства».

5. Event на Windows DHCP Server

Документированный Event ID 1020: сервер не смог назначить адрес (нехватка в scope). Не чистите журнал вместо расширения пула.

Решение

Сценарий A. Мёртвые lease

Удалите Inactive, проверьте, что MAC не жив в ARP. Не удаляйте активные «пакетом».

Remove-DhcpServerv4Lease -ComputerName DC01 -ScopeId 10.0.10.0 -IPAddress 10.0.10.150

Reconcile scope после сбоев БД:

Repair-DhcpServerv4IPRecord -ComputerName DC01 -ScopeId 10.0.10.0 -Force

Только если понимаете эффект; сначала бэкап DHCP.

Сценарий B. Расширить диапазон

Пример: было .100–.149, стало .100–.199, exclusions на .1–.30.

Не захватывайте .1, .2, VIP, принтеры со статикой. Сверьте IPAM.

Если /24 забит — новый VLAN 10.0.30.0/24 + helper, не маска /16 «чтобы хватило».

Сценарий C. Гости съели пул

Отдельный guest scope/VLAN, короткий lease. Corp пул — только corp.

Сценарий D. Слишком длинный lease

Уменьшение lease действует на новые и при renew. Не ставьте 5 минут: шторм Discover. 8–24 ч типично для ПК, гостям короче.

6. Считать занятость как инвентарь, не как «добавить /16»

Пока AddressesFree=0, новые узлы будут либо в APIPA, либо в NAK. Не расширяйте range в .1–.30, где живут 10.0.10.1 и 10.0.10.2. Сначала выгрузка lease в CSV, отметка Inactive и имён, которых нет в AD/инвентаре. Удаляйте точечно, сверяя ARP: живой MAC при Inactive lease — не трогать, сначала понять. Backup DHCP до reconcile. Если /24 действительно заполнен легитимно — новый VLAN и helper, не маска /16 «на всех». Гости и corp в одном пуле — гости выиграют гонку; вынесите guest. Lease 8–24 ч для ПК; 5 минут на 2000 хостов создадут шторм Discover. После расширения пула проверьте, что новый диапазон не пересекается со статикой принтеров. Клиентский тест: свежий Ubuntu/Windows получает 10.0.10.x/24, gw 10.0.10.1, DNS 10.0.10.2, Offer в tcpdump. Старые клиенты не должны массово сменить IP без нужды. Мониторинг 80% — чтобы статья не повторялась в пятницу вечером. Split-scope failover: смотрите оба партнёра, один Free=0 при живом втором всё равно даёт NAK, если клиент попал не туда.

Не используйте APIPA как «запасной пул». Не выдавайте директору статику из середины range без исключения в scope — получите конфликт через неделю, когда DHCP дойдёт до этого адреса.

На стороне клиента отличите «нет Offer» от NAK. Первое — VLAN, relay, мёртвый dhcpd. Второе — сервер сознательно отказал, часто из-за пустого пула или фильтра MAC. sudo dhclient -v eth0 на Ubuntu печатает это прямо. Windows Event DHCP-клиента дополняет, но не заменяет статистику scope. После появления Free адресов не закрывайте тикет, пока новый хост не получил lease, видимый на сервере с тем же MAC. Иначе вы «освободили» цифру в GUI, а range всё ещё пересекается со статикой и конфликт вылезет через час. В отчёт: PercentageInUse до/после, сколько lease сняли, какой новый range, какие exclusions. Это и есть профилактика следующего исчерпания.

Как проверить, что проблема устранена

AddressesFree > запас (хотя бы 10–20% или ваш SLA). Новый клиент:

ipconfig /renew
ipconfig /all
ping -n 2 10.0.10.1
nslookup contoso.example 10.0.10.2

Нет новых конфликтов ARP. tcpdump: Offer+Ack. Повторите с Ubuntu-ноута.

Если не помогло

  • Free есть, клиент всё равно APIPA — VLAN/relay/snooping, не размер пула.
  • Split-scope failover: один партнёр полный, второй нет — смотрите соотношение.
  • Резервации вне range не занимают AddressesFree так, как думаете — перечитайте статистику.
  • IPv6 RA раздаёт адреса, IPv4 пул кончился — жалобы смешанные.

Профилактика

  • Алерт PercentageInUse > 80%.
  • IPAM, статика вне range.
  • Списание ПК = удаление lease/резервации.
  • Гостевая сеть отдельно.
  • Регулярный отчёт по hostname в lease.

FAQ

Взять адреса из 10.0.11.0 без нового VLAN?

Только если L2 и маршрутизация это позволяют (тот же сегмент уже не /24). Иначе это новый префикс и SVI, не «ещё циферки в scope».

Удалить все lease разом?

Нет. Шторм Discover и конфликты с теми, кто ещё считает адрес своим.

Почему старые ПК работают при Free=0?

У них валидный lease. Кончатся — тоже встанут. Это отложенный инцидент.

Можно ли выдать статику новому директору «на час»?

Да, из свободной зоны вне пула, с проверкой ARP. Параллельно чините scope.

Ubuntu dnsmasq на тестовой VM съел пул?

Да, чужой DHCP. Найдите Offer MAC. Это и неверный шлюз, и исчерпание «не вашего» пула.