Короткий ответ
Исчерпанный 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 при свободном пуле) и с неверным шлюзом при живых адресах.
Возможные причины
- Пул узкий (например .100–.120), хостов больше.
- Lease слишком длинный, уволенные ПК держат IP.
- Резервации съели диапазон.
- Второй VLAN ошибочно в этом scope (relay).
- BYOD/гости в том же пуле.
- /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 10PercentageInUse 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 eth0No 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.150Reconcile 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. Это и неверный шлюз, и исчерпание «не вашего» пула.