Короткий ответ
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 есть, интернета нет | DHCP | NAT/WAN |
| IP есть, сайты нет | DHCP | DNS |
| Нет IP | DNS/NAT | DHCP |
| Шторм, CPU 100%, DHCP flapping | пул кончился | loop |
Возможные причины
- DHCP server disabled,
interface=ether2вместоbridge. - Pool
192.168.88.10-192.168.88.20исчерпан, static lease съели диапазон. - Network не задан или
gateway/dns-serverпустые — клиент получает адрес «без интернета» (это уже погранично с DNS/NAT). - Адрес
192.168.88.1не на том интерфейсе, где server. - Relay: сервер ждёт giaddr, прямые Discover не обрабатывает как вы думаете.
- Conflict detection: адрес пингуется (чужой статикой), сервер не выдаёт.
- Второй DHCP (Windows, Tenda, «усилитель» в router mode).
- 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.110.0.10.10 — ваш DHCP. На core pool и network должны соответствовать VLAN 20, не LAN 192.168.88.0/24.
Как проверить, что проблема устранена
release/renewна двух клиентах (провод и Wi‑Fi)./ip dhcp-server lease printпоказываетbound, верныйserver.- У клиента gateway
192.168.88.1, DNS ожидаемый. - 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 countvs размер 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.