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

DHCP Server в RouterOS 7 должен слушать тот L3-интерфейс, где висят клиенты: обычно bridge с адресом 192.168.88.1/24, не ether1. Пул должен покрывать сеть из /ip dhcp-server network, шлюз в network — тот же 192.168.88.1. Если сервер стоит за relay, смотрите /ip dhcp-server relay, не «нет интернета». Conflict detection и чужой DHCP в VLAN дают «то выдаёт, то нет».

Не сбрасывайте роутер. Снимите /ip dhcp-server print, lease print, pool print, лог dhcp.

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

ПК «без сети», 169.254.x.x, или вечный «получение адреса». Соседний ПК в том же кабеле работает — смотрите MAC bind и conflict. Все беспроводные мертвы, проводные живы — Wi‑Fi плюс DHCP на wifi-интерфейсе вне bridge.

КартинаНе этоЭто
IP есть, интернета нетDHCPNAT/WAN
IP есть, сайты нетDHCPDNS
Нет IPDNS/NATDHCP
Шторм, CPU 100%, DHCP flappingпул кончилсяloop

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

  1. DHCP server disabled, interface=ether2 вместо bridge.
  2. Pool 192.168.88.10-192.168.88.20 исчерпан, static lease съели диапазон.
  3. Network не задан или gateway/dns-server пустые — клиент получает адрес «без интернета» (это уже погранично с DNS/NAT).
  4. Адрес 192.168.88.1 не на том интерфейсе, где server.
  5. Relay: сервер ждёт giaddr, прямые Discover не обрабатывает как вы думаете.
  6. Conflict detection: адрес пингуется (чужой статикой), сервер не выдаёт.
  7. Второй DHCP (Windows, Tenda, «усилитель» в router mode).
  8. Filter input drop UDP 67/68 на bridge — редко, но после «hardening» бывает.

Диагностика

/ip address print
/ip pool print
/ip dhcp-server print
/ip dhcp-server network print
/ip dhcp-server lease print
/ip dhcp-server alert print

Ожидание для SOHO: server на bridge, network 192.168.88.0/24 с gateway=192.168.88.1, pool внутри этой сети, не пересекается с 192.168.88.1.

Лог:

/log print where topics~"dhcp"

С клиента: ipconfig /all или nmcli — есть ли чужой DHCP Server identifier.

Relay:

/ip dhcp-relay print

Если relay на другом MikroTik/L3-свитче, сервер должен иметь route к giaddr и pool для удалённой подсети, не только для 192.168.88.0/24.

Решение

Сценарий A. Сервер не на bridge

/ip dhcp-server
print
set [find] interface=bridge disabled=no

Имя find поправьте, если серверов несколько. Адрес:

/ip address print where interface=bridge

Должен быть 192.168.88.1/24.

Сценарий B. Pool

/ip pool
print
set [find name=default-dhcp] ranges=192.168.88.10-192.168.88.254

Не включайте .1 и чужие статические серверы. Static lease:

/ip dhcp-server lease print where dynamic=no

Сценарий C. Network / DNS / gateway

/ip dhcp-server network
print
set [find address="192.168.88.0/24"] gateway=192.168.88.1 dns-server=192.168.88.1

Если DNS cache на роутере выключен — ставьте dns-server=1.1.1.1 или чините cache.

Сценарий D. Conflict и чужой DHCP

/ip dhcp-server
set [find] conflict-detection=yes

Найдите устройство, отвечающее на ping адреса из пула. Выключите DHCP на «усилителях». Alert:

/ip dhcp-server alert

Сценарий E. Relay

На интерфейсе без локального сервера:

/ip dhcp-relay add name=to-core interface=vlan20 dhcp-server=10.0.10.10 local-address=10.0.20.1

10.0.10.10 — ваш DHCP. На core pool и network должны соответствовать VLAN 20, не LAN 192.168.88.0/24.

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

  1. release/renew на двух клиентах (провод и Wi‑Fi).
  2. /ip dhcp-server lease print показывает bound, верный server.
  3. У клиента gateway 192.168.88.1, DNS ожидаемый.
  4. Ping шлюза и, отдельно, интернет — если интернет нет, DHCP уже не виноват.
/ip dhcp-server lease print
/log print where topics~"dhcp"

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

  • Клиент получает адрес и сразу теряет: loop, порта isolation, Wi‑Fi roaming между SSID с разными DHCP.
  • Только PXE: отдельный boot-file-name / next-server, не путайте с «DHCP сломан».
  • IPv6 RA: клиенты с IPv6 «живут» без v4 — смотрите Dual Stack, не только dhcp-server.

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

  • Один DHCP на broadcast-домен.
  • Резерв адресов под статику вне pool.
  • Мониторинг lease count vs размер pool.
  • Не ставить DHCP server на WAN ether1.

Relay, giaddr и почему «сервер включён, а Offer нет в этом VLAN»

Локальный /ip dhcp-server на bridge слышит только broadcast в том L2, где висит 192.168.88.1/24. Клиенты в VLAN 20 с адресом на vlan20 не получат аренду, пока вы не поставите второй server на vlan20 со своим pool/network или dhcp-relay к core.

На реле:

/ip dhcp-relay print
/ip dhcp-relay monitor [find]

На сервере pool должен соответствовать удалённой сети, не 192.168.88.10-254. Network gateway — SVI VLAN 20, не 192.168.88.1. Если gateway в option 3 указать чужой, клиент получит адрес и не будет ходить в интернет — это уже похоже на mt-01, хотя корень в DHCP network.

Conflict detection: сервер пингует кандидата перед Offer. Зависший хост со статикой в середине пула даёт дырки. Смотрите lease print where status=conflict. Чужой DHCP (Tenda «усилитель» в router mode) видно по alert и по Server Identifier на клиенте. Выключите чужой сервер, не уменьшайте lease-time «чтобы быстрее само прошло».

FAQ

add-arp=yes обязателен?

Нет. Он пишет ARP из lease. Полезно, не лечит «нет Offer».

Почему lease «blocked»?

Conflict или admin block. Смотрите status в lease print detail.

Нужен ли DHCP на каждом VLAN?

Нужен server или relay на SVI этого VLAN. Один server на bridge без VLAN не обслужит tagged сети.

use-framed-as-classless vs option 121?

Классовые маршруты — отдельная опция. Не путайте с «нет default gateway». Gateway — option 3 в network.

Можно ли pool 192.168.88.0/24 целиком?

Не отдавайте адрес самого роутера и broadcast. Ranges .10-.254 при .1 на bridge — нормальная практика.

Почему lease есть, а шлюз на клиенте чужой?

Option 3 берётся из /ip dhcp-server network, не из адреса на bridge. Если network указывает gateway=192.168.0.1 при живом 192.168.88.1, клиент получит адрес из пула и пойдёт не туда. Сверьте network print с /ip address print where interface=bridge. Relay добавляет ещё giaddr: pool и network должны относиться к VLAN клиента, не к сети ядра. После правки клиенту нужен renew, старый lease с чужим gateway живёт до expiry.