DHCP Snooping на MikroTik — защита от rogue DHCP
DHCP Snooping — механизм безопасности на уровне bridge, который фильтрует DHCP-ответы от неавторизованных серверов. В корпоративной сети, общежитии или коворкинге любой пользователь может случайно или намеренно запустить DHCP-сервер на своём устройстве, что приведёт к выдаче неправильных IP-адресов, шлюзов и DNS-серверов. Rogue DHCP — одна из самых частых причин «необъяснимых» проблем с сетью. MikroTik поддерживает DHCP Snooping в bridge начиная с RouterOS 6.43, в RouterOS 7.20+ функция значительно улучшена. В этом руководстве настроим DHCP Snooping, разберём Dynamic ARP Inspection (DAI) и IP Source Guard, а также рассмотрим типичные сценарии и ошибки.
Описание
Проблема: rogue DHCP-сервер
DHCP работает на широковещательном уровне — клиент отправляет DHCP Discover broadcast, и все DHCP-серверы в L2-домене могут ответить. Клиент принимает первый пришедший DHCP Offer. Если в сети появился несанкционированный DHCP-сервер (rogue DHCP), он может ответить быстрее легитимного.
Последствия rogue DHCP:
| Проблема | Описание |
|---|---|
| Неправильный IP | Клиенты получают адреса из чужой подсети — нет связи с сетью |
| Неправильный шлюз | Трафик идёт через устройство злоумышленника → MITM-атака |
| Неправильный DNS | DNS-запросы идут на вредоносный сервер → фишинг, подмена сайтов |
| Дублирование IP | Два DHCP-сервера выдают одинаковые адреса → конфликты IP |
| Каскадный отказ | Все устройства перестают работать после обновления lease |
Типичные причины появления rogue DHCP:
- Сотрудник принёс домашний Wi-Fi роутер и подключил LAN-портом в офисную сеть
- Виртуальная машина с DHCP-сервером (VMware, Docker) подключена к bridged-сети
- Вредоносное ПО запускает DHCP-сервер для MITM-атаки
- Misconfigured устройство в серверной
Как работает DHCP Snooping
DHCP Snooping делит порты bridge на два типа:
| Тип порта | Описание | DHCP Offer/Ack |
|---|---|---|
| Trusted | Порт, к которому подключён легитимный DHCP-сервер или uplink | Разрешены |
| Untrusted | Все остальные порты (клиентские) | Блокируются |
Логика работы:
code[DHCP Client]──►[Bridge Port (untrusted)] │ DHCP Discover ──► проходит (broadcast от клиента) │ [DHCP Server]──►[Bridge Port (trusted)] │ DHCP Offer ──► проходит (ответ от trusted порта) [Rogue DHCP]──►[Bridge Port (untrusted)] │ DHCP Offer ──► БЛОКИРУЕТСЯ (ответ от untrusted порта)
Bridge анализирует DHCP-пакеты (порты UDP 67/68) и блокирует DHCP Offer, DHCP Ack и DHCP NAK с untrusted портов. DHCP Discover и DHCP Request от клиентов пропускаются с любых портов.
DHCP Snooping Database
При прохождении DHCP-транзакции через bridge DHCP Snooping записывает binding: связку MAC-адрес ↔ IP-адрес ↔ порт ↔ VLAN ↔ время. Эта база данных используется для:
- Dynamic ARP Inspection (DAI) — проверка ARP-пакетов на соответствие DHCP Snooping Database
- IP Source Guard — блокировка трафика с поддельным src-IP
| Запись Snooping DB | Значение |
|---|---|
| MAC-address | MAC клиента из DHCP-пакета |
| IP-address | Назначенный DHCP-сервером IP |
| Bridge port | Физический порт, с которого пришёл запрос |
| VLAN | VLAN-тег (если используется) |
| Lease time | Время аренды адреса |
Архитектура защиты
code[Uplink / DHCP Server] │ Bridge Port 1 (trusted=yes) │ ┌─────────────────────────────────┼─────────────────────────────────┐ │ Bridge │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ DHCP Snooping│ │ DAI │ │ IP Source │ │ │ │ (фильтрация │ │ (проверка │ │ Guard │ │ │ │ DHCP Offer) │ │ ARP) │ │ (проверка IP)│ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ │ Port 2 Port 3 Port 4 Port 5 │ │ (untrusted) (untrusted) (untrusted) (untrusted) │ └──────┬──────────────┬──────────────┬──────────────┬──────────────┘ │ │ │ │ [PC-1] [PC-2] [Rogue DHCP] [PC-4] ✗ DHCP Offer blocked
DHCP Snooping vs другие методы защиты
| Метод | Уровень защиты | Сложность | Побочные эффекты |
|---|---|---|---|
| DHCP Snooping | Bridge (L2) | Низкая | Нет, если правильно настроены trusted-порты |
| Firewall filter | IP (L3) | Средняя | Нужно знать IP rogue DHCP заранее |
| DHCP Alert | Мониторинг | Низкая | Только оповещение, не блокирует |
| 802.1X | Port-based auth | Высокая | Требует RADIUS, сертификаты |
| Static DHCP | DHCP server | Низкая | Неудобно для большого числа клиентов |
Настройка
Шаг 1: Подготовка bridge
Убедитесь, что bridge существует и все клиентские порты добавлены.
[admin@MikroTik] ># Проверяем текущую конфигурацию bridge /interface/bridge print /interface/bridge/port print # Если bridge ещё не создан /interface/bridge add name=bridge-lan protocol-mode=rstp comment="LAN Bridge" # Добавляем порты /interface/bridge/port add bridge=bridge-lan interface=ether2 comment="Server/DHCP uplink" /interface/bridge/port add bridge=bridge-lan interface=ether3 comment="Office - floor 1" /interface/bridge/port add bridge=bridge-lan interface=ether4 comment="Office - floor 2" /interface/bridge/port add bridge=bridge-lan interface=ether5 comment="Meeting room" /interface/bridge/port add bridge=bridge-lan interface=wlan1 comment="Wi-Fi"
Шаг 2: Включение DHCP Snooping на bridge
[admin@MikroTik] ># Включаем DHCP Snooping /interface/bridge set bridge-lan dhcp-snooping=yes # Опционально: включаем IP Source Guard и DAI /interface/bridge set bridge-lan dhcp-snooping=yes arp-inspection=yes
После включения DHCP Snooping все порты bridge по умолчанию становятся untrusted. Это означает, что DHCP Offer/Ack будет заблокирован на всех портах, включая тот, к которому подключён легитимный DHCP-сервер. Именно поэтому следующий шаг критически важен.
Шаг 3: Назначение trusted-портов
Trusted-порт — это порт, через который bridge ожидает получать DHCP-ответы. Обычно это:
- Порт, к которому подключён DHCP-сервер (или сам роутер, если он DHCP-сервер)
- Uplink-порт (если DHCP-сервер находится в другом сегменте)
- Порт, ведущий к relay agent
[admin@MikroTik] ># Порт, к которому подключён DHCP-сервер — trusted /interface/bridge/port set [find where interface=ether2] trusted=yes # Если роутер сам является DHCP-сервером, то trust bridge port не нужен — # пакеты от самого роутера не проходят через bridge filter. # Но если DHCP-сервер на другом устройстве — порт к нему должен быть trusted. # Все остальные порты остаются untrusted (по умолчанию) # Проверяем /interface/bridge/port print
Важно: если MikroTik сам является DHCP-сервером (что часто бывает), DHCP-ответы генерируются локально и не проходят через bridge. В этом случае trusted-порт нужен только для внешних DHCP-серверов или relay.
Шаг 4: Настройка DHCP Snooping для VLAN-сети
Если используются VLAN, DHCP Snooping работает per-VLAN. Необходимо включить VLAN filtering на bridge.
[admin@MikroTik] ># Включаем VLAN filtering (если ещё не включён) /interface/bridge set bridge-lan vlan-filtering=yes # DHCP Snooping автоматически работает для всех VLAN # Trusted-порт пропускает DHCP-ответы во всех VLAN # Пример: VLAN 10 — офис, VLAN 20 — гости /interface/bridge/vlan add bridge=bridge-lan vlan-ids=10 tagged=ether2 untagged=ether3,ether4 /interface/bridge/vlan add bridge=bridge-lan vlan-ids=20 tagged=ether2 untagged=ether5,wlan1
Шаг 5: Dynamic ARP Inspection (DAI)
DAI проверяет ARP-пакеты на соответствие записям DHCP Snooping Database. Если устройство отправляет ARP с IP-адресом, который не соответствует его MAC в snooping DB, пакет отбрасывается. Это защищает от ARP spoofing.
[admin@MikroTik] ># Включаем ARP Inspection вместе с DHCP Snooping /interface/bridge set bridge-lan dhcp-snooping=yes arp-inspection=yes # DAI также использует trusted/untrusted порты: # - На trusted портах ARP не проверяется # - На untrusted портах ARP проверяется по DHCP Snooping DB # Для устройств со статическим IP (не через DHCP) нужно добавить # статические записи, иначе DAI заблокирует их ARP
Важно: если в сети есть устройства со статическими IP (серверы, принтеры), DAI заблокирует их ARP-запросы, потому что в DHCP Snooping Database нет записей для этих устройств. Решение — добавить статические записи или разместить такие устройства на trusted-портах.
Шаг 6: IP Source Guard
IP Source Guard проверяет, что src-IP в пакетах соответствует DHCP Snooping Database. Это предотвращает IP spoofing.
[admin@MikroTik] ># IP Source Guard включается на уровне bridge port # Работает только при активном DHCP Snooping # Для конкретных портов /interface/bridge/port set [find where interface=ether3] ip-source-guard=yes /interface/bridge/port set [find where interface=ether4] ip-source-guard=yes /interface/bridge/port set [find where interface=ether5] ip-source-guard=yes
Внимание: IP Source Guard блокирует ВСЕ пакеты с IP-адресом, не зарегистрированным в Snooping DB. Включайте только после того, как все клиенты получили DHCP lease.
Шаг 7: Сценарий — офис с несколькими этажами
code[MikroTik Router] ether1 — WAN (ISP) ether2 — Сервер с DHCP (10.0.0.2) ether3 — Коммутатор 1 этажа (20 портов) ether4 — Коммутатор 2 этажа (20 портов) ether5 — Wi-Fi точка доступа
[admin@MikroTik] ># Bridge /interface/bridge add name=bridge-office dhcp-snooping=yes comment="Office LAN" # Порты /interface/bridge/port add bridge=bridge-office interface=ether2 trusted=yes \ comment="DHCP Server uplink" /interface/bridge/port add bridge=bridge-office interface=ether3 trusted=no \ comment="Floor 1 switch" /interface/bridge/port add bridge=bridge-office interface=ether4 trusted=no \ comment="Floor 2 switch" /interface/bridge/port add bridge=bridge-office interface=ether5 trusted=no \ comment="Wi-Fi AP" # DHCP-сервер (если на MikroTik) /ip/address add address=10.0.0.1/24 interface=bridge-office /ip/dhcp-server/network add address=10.0.0.0/24 gateway=10.0.0.1 dns-server=10.0.0.1 /ip/pool add name=office-pool ranges=10.0.0.100-10.0.0.250 /ip/dhcp-server add name=dhcp-office interface=bridge-office address-pool=office-pool \ lease-time=8h disabled=no
Шаг 8: Сценарий — общежитие / коворкинг
В общежитии или коворкинге риск rogue DHCP максимален. Рекомендуется включить все три механизма защиты.
[admin@MikroTik] ># Создаём bridge с полной защитой /interface/bridge add name=bridge-dorm \ dhcp-snooping=yes \ arp-inspection=yes \ comment="Dorm network - full L2 security" # Uplink — trusted /interface/bridge/port add bridge=bridge-dorm interface=sfp1 trusted=yes \ comment="Uplink to core switch" # Все клиентские порты — untrusted + IP Source Guard /interface/bridge/port add bridge=bridge-dorm interface=ether1 trusted=no \ comment="Room 101" /interface/bridge/port add bridge=bridge-dorm interface=ether2 trusted=no \ comment="Room 102" /interface/bridge/port add bridge=bridge-dorm interface=ether3 trusted=no \ comment="Room 103" /interface/bridge/port add bridge=bridge-dorm interface=ether4 trusted=no \ comment="Room 104" # Включаем IP Source Guard на клиентских портах /interface/bridge/port set [find where bridge=bridge-dorm and !trusted] ip-source-guard=yes
Шаг 9: Мониторинг через DHCP Alert (дополнительно)
DHCP Alert — это отдельный механизм, который оповещает администратора при обнаружении DHCP-ответа от неизвестного сервера. Работает параллельно с DHCP Snooping.
[admin@MikroTik] ># Включаем DHCP Alert на интерфейсе /ip/dhcp-server/alert add interface=bridge-office \ valid-server=10.0.0.1 \ on-alert="/log warning \"Rogue DHCP detected!\"" # valid-server — IP легитимного DHCP-сервера # Если обнаружен ответ от другого IP — срабатывает alert
Проверка
Проверка состояния DHCP Snooping
[admin@MikroTik] ># Проверяем настройки bridge /interface/bridge print detail where name=bridge-office # Ищем: dhcp-snooping=yes # Проверяем trusted/untrusted порты /interface/bridge/port print detail # Ищем: trusted=yes/no для каждого порта
Просмотр DHCP Snooping Database
[admin@MikroTik] ># Таблица binding — MAC ↔ IP ↔ port /interface/bridge/host print where dhcp-snooping=yes # Или через специальную команду (зависит от версии RouterOS) /interface/bridge/host print
Тестирование — имитация rogue DHCP
Для тестирования подключите второй роутер к untrusted-порту и настройте на нём DHCP-сервер.
[admin@MikroTik] ># На тестовом роутере (rogue) /ip/dhcp-server add name=rogue interface=ether1 address-pool=rogue-pool /ip/pool add name=rogue-pool ranges=192.168.99.10-192.168.99.50 # На основном роутере — проверяем логи /log print where topics~"bridge" # Если DHCP Snooping работает, клиенты НЕ получат адрес 192.168.99.x
Проверка DAI
[admin@MikroTik] ># Проверяем, что ARP Inspection включён /interface/bridge print detail where name=bridge-office # Проверяем счётчики отброшенных ARP-пакетов /interface/bridge/port print stats # Тест: на клиентском ПК назначаем статический IP (не через DHCP) # и проверяем, что ARP для этого IP блокируется
Проверка IP Source Guard
[admin@MikroTik] ># Проверяем, на каких портах включён IP Source Guard /interface/bridge/port print where ip-source-guard=yes # Мониторинг заблокированных пакетов /interface/bridge/port print stats
Проверка логов
[admin@MikroTik] ># Включаем подробное логирование bridge /system/logging add topics=bridge action=memory # Проверяем логи /log print where topics~"bridge" # Типичные записи при блокировке rogue DHCP: # bridge,info DHCP snooping: dropping DHCP offer from untrusted port ether4
Проверка через Packet Sniffer
[admin@MikroTik] ># Перехватываем DHCP-трафик для анализа /tool/sniffer set filter-protocol=udp filter-port=67-68 \ filter-interface=bridge-office streaming-enabled=no /tool/sniffer start # Ждём несколько DHCP-транзакций /tool/sniffer stop /tool/sniffer/packet print detail
Типичные ошибки
Ошибка 1: После включения DHCP Snooping клиенты не получают IP
Проблема: включили DHCP Snooping на bridge, но забыли установить trusted=yes для порта с DHCP-сервером. Все DHCP-ответы блокируются.
Симптомы: клиенты получают APIPA-адрес (169.254.x.x), в логах — сообщения о drop DHCP offer.
Решение:
[admin@MikroTik] ># Проверяем, какой порт ведёт к DHCP-серверу /ip/dhcp-server print # Смотрим interface — если это bridge, DHCP-сервер на самом MikroTik # Если DHCP на внешнем устройстве — находим порт # Устанавливаем trusted /interface/bridge/port set [find where interface=ether2] trusted=yes # Проверяем /interface/bridge/port print
Важный нюанс: если MikroTik сам является DHCP-сервером, его ответы генерируются локально и не фильтруются bridge. В этом случае trusted-порт нужен только для внешних DHCP-серверов. Но если DHCP-сервер находится за trunk-портом (через коммутатор), этот порт обязательно должен быть trusted.
Ошибка 2: DHCP Snooping блокирует DHCP Relay
Проблема: DHCP-сервер находится в другом VLAN или подсети, используется DHCP Relay. После включения DHCP Snooping relay перестаёт работать.
Решение: порт, через который relay-ответы возвращаются в bridge, должен быть trusted.
[admin@MikroTik] ># Пример: DHCP Relay на MikroTik /ip/dhcp-relay add name=relay-vlan10 interface=bridge-vlan10 \ dhcp-server=10.0.0.2 disabled=no # Порт, через который идёт связь с DHCP-сервером — trusted /interface/bridge/port set [find where interface=ether1] trusted=yes
Ошибка 3: DAI блокирует устройства со статическим IP
Проблема: серверы, принтеры и другие устройства со статическим IP не могут общаться с сетью после включения ARP Inspection. DAI проверяет ARP по DHCP Snooping DB, но для статических IP записей нет.
Решение: варианты.
- Перевести устройства на DHCP reservation (рекомендуется).
[admin@MikroTik] ># Создаём статический DHCP lease для сервера /ip/dhcp-server/lease add address=10.0.0.5 mac-address=AA:BB:CC:DD:EE:FF \ server=dhcp-office comment="Print server (static lease)"
- Подключить устройства к trusted-порту.
[admin@MikroTik] ># Порт с принтером — trusted (DAI не проверяет) /interface/bridge/port set [find where interface=ether5] trusted=yes
- Отключить DAI, оставить только DHCP Snooping.
[admin@MikroTik] >/interface/bridge set bridge-office arp-inspection=no
Ошибка 4: DHCP Snooping не работает с hardware offloading
Проблема: на устройствах с аппаратным bridge (CRS3xx, CRS5xx) DHCP Snooping может не работать при включённом hardware offloading. Трафик обрабатывается чипом коммутатора, минуя CPU.
Решение: отключите hardware offloading для портов, где нужен DHCP Snooping.
[admin@MikroTik] ># Проверяем статус HW offloading /interface/bridge/port print where hw=yes # Отключаем HW offload для нужных портов /interface/bridge/port set [find where interface=ether3] hw=no /interface/bridge/port set [find where interface=ether4] hw=no # Альтернатива: отключить HW offload для всего bridge /interface/bridge set bridge-office frame-types=admit-all
Внимание: отключение hardware offloading увеличивает нагрузку на CPU. На устройствах с большим трафиком (>1 Gbps) это может вызвать проблемы с производительностью.
Ошибка 5: IP Source Guard блокирует весь трафик после перезагрузки
Проблема: после перезагрузки роутера DHCP Snooping Database очищается. IP Source Guard блокирует весь трафик, пока клиенты не обновят DHCP lease.
Решение: несколько подходов.
[admin@MikroTik] ># 1. Уменьшить lease time, чтобы клиенты быстрее обновляли /ip/dhcp-server set dhcp-office lease-time=1h # 2. После перезагрузки — временно отключить IP Source Guard /interface/bridge/port set [find where ip-source-guard=yes] ip-source-guard=no # Подождать, пока клиенты обновят lease # Включить обратно /interface/bridge/port set [find where bridge=bridge-office and !trusted] ip-source-guard=yes
Ошибка 6: Snooping не блокирует rogue DHCP на Wi-Fi
Проблема: rogue DHCP-сервер подключился по Wi-Fi, но DHCP Snooping не блокирует его ответы.
Причина: Wi-Fi интерфейс (wlan1) не добавлен в bridge, или добавлен, но его порт отсутствует в конфигурации bridge/port.
[admin@MikroTik] ># Проверяем, что Wi-Fi интерфейс в bridge /interface/bridge/port print where interface~"wlan" # Если нет — добавляем /interface/bridge/port add bridge=bridge-office interface=wlan1 trusted=no \ comment="Wi-Fi AP" # Для CAPsMAN — интерфейсы CAP автоматически добавляются в bridge # Проверяем /interface/bridge/port print where interface~"cap"
Ошибка 7: Конфликт DHCP Snooping и Firewall filter
Проблема: администратор настроил и DHCP Snooping, и firewall filter для блокировки DHCP. Правила конфликтуют или дублируются.
Решение: используйте один механизм. DHCP Snooping предпочтительнее, так как работает на L2 и эффективнее.
[admin@MikroTik] ># Удаляем firewall-правила для блокировки DHCP (если есть) /ip/firewall/filter remove [find where comment~"block DHCP" or comment~"rogue"] # Оставляем только DHCP Snooping на bridge /interface/bridge set bridge-office dhcp-snooping=yes
Рекомендации по развёртыванию
Пошаговый план внедрения
Не включайте все механизмы защиты одновременно. Поэтапный подход снижает риск потери связи.
| Этап | Действие | Риск |
|---|---|---|
| 1 | Включить DHCP Snooping, настроить trusted-порты | Низкий |
| 2 | Мониторинг 1–2 дня, проверка логов | Нет |
| 3 | Включить DAI | Средний (статические IP) |
| 4 | Мониторинг, добавление static lease для проблемных устройств | Нет |
| 5 | Включить IP Source Guard на отдельных портах | Высокий |
| 6 | Расширить IP Source Guard на все untrusted-порты | Средний |
Полная конфигурация (итоговый скрипт)
[admin@MikroTik] ># === DHCP Snooping — полная настройка для офиса === # Bridge с DHCP Snooping /interface/bridge add name=bridge-office dhcp-snooping=yes comment="Office LAN with DHCP Snooping" # Порты /interface/bridge/port add bridge=bridge-office interface=ether2 trusted=yes \ comment="Uplink to DHCP server" /interface/bridge/port add bridge=bridge-office interface=ether3 trusted=no \ comment="Floor 1" /interface/bridge/port add bridge=bridge-office interface=ether4 trusted=no \ comment="Floor 2" /interface/bridge/port add bridge=bridge-office interface=ether5 trusted=no \ comment="Meeting room" /interface/bridge/port add bridge=bridge-office interface=wlan1 trusted=no \ comment="Wi-Fi" # IP и DHCP /ip/address add address=10.0.0.1/24 interface=bridge-office /ip/pool add name=office-pool ranges=10.0.0.100-10.0.0.250 /ip/dhcp-server/network add address=10.0.0.0/24 gateway=10.0.0.1 dns-server=10.0.0.1 /ip/dhcp-server add name=dhcp-office interface=bridge-office \ address-pool=office-pool lease-time=8h disabled=no # DHCP Alert — оповещение /ip/dhcp-server/alert add interface=bridge-office \ valid-server=10.0.0.1 \ on-alert="/log warning \"Rogue DHCP detected on bridge-office!\"" # Логирование /system/logging add topics=bridge,dhcp action=memory
[DHCP Client]──►[Bridge Port (untrusted)]
│
DHCP Discover ──► проходит (broadcast от клиента)
│
[DHCP Server]──►[Bridge Port (trusted)]
│
DHCP Offer ──► проходит (ответ от trusted порта)
[Rogue DHCP]──►[Bridge Port (untrusted)]
│
DHCP Offer ──► БЛОКИРУЕТСЯ (ответ от untrusted порта)
[Uplink / DHCP Server]
│
Bridge Port 1
(trusted=yes)
│
┌─────────────────────────────────┼─────────────────────────────────┐
│ Bridge │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ DHCP Snooping│ │ DAI │ │ IP Source │ │
│ │ (фильтрация │ │ (проверка │ │ Guard │ │
│ │ DHCP Offer) │ │ ARP) │ │ (проверка IP)│ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ Port 2 Port 3 Port 4 Port 5 │
│ (untrusted) (untrusted) (untrusted) (untrusted) │
└──────┬──────────────┬──────────────┬──────────────┬──────────────┘
│ │ │ │
[PC-1] [PC-2] [Rogue DHCP] [PC-4]
✗ DHCP Offer blocked
# Проверяем текущую конфигурацию bridge
/interface/bridge print
/interface/bridge/port print
# Если bridge ещё не создан
/interface/bridge add name=bridge-lan protocol-mode=rstp comment="LAN Bridge"
# Добавляем порты
/interface/bridge/port add bridge=bridge-lan interface=ether2 comment="Server/DHCP uplink"
/interface/bridge/port add bridge=bridge-lan interface=ether3 comment="Office - floor 1"
/interface/bridge/port add bridge=bridge-lan interface=ether4 comment="Office - floor 2"
/interface/bridge/port add bridge=bridge-lan interface=ether5 comment="Meeting room"
/interface/bridge/port add bridge=bridge-lan interface=wlan1 comment="Wi-Fi"
# Включаем DHCP Snooping
/interface/bridge set bridge-lan dhcp-snooping=yes
# Опционально: включаем IP Source Guard и DAI
/interface/bridge set bridge-lan dhcp-snooping=yes arp-inspection=yes
# Порт, к которому подключён DHCP-сервер — trusted
/interface/bridge/port set [find where interface=ether2] trusted=yes
# Если роутер сам является DHCP-сервером, то trust bridge port не нужен —
# пакеты от самого роутера не проходят через bridge filter.
# Но если DHCP-сервер на другом устройстве — порт к нему должен быть trusted.
# Все остальные порты остаются untrusted (по умолчанию)
# Проверяем
/interface/bridge/port print
# Включаем VLAN filtering (если ещё не включён)
/interface/bridge set bridge-lan vlan-filtering=yes
# DHCP Snooping автоматически работает для всех VLAN
# Trusted-порт пропускает DHCP-ответы во всех VLAN
# Пример: VLAN 10 — офис, VLAN 20 — гости
/interface/bridge/vlan add bridge=bridge-lan vlan-ids=10 tagged=ether2 untagged=ether3,ether4
/interface/bridge/vlan add bridge=bridge-lan vlan-ids=20 tagged=ether2 untagged=ether5,wlan1
# Включаем ARP Inspection вместе с DHCP Snooping
/interface/bridge set bridge-lan dhcp-snooping=yes arp-inspection=yes
# DAI также использует trusted/untrusted порты:
# - На trusted портах ARP не проверяется
# - На untrusted портах ARP проверяется по DHCP Snooping DB
# Для устройств со статическим IP (не через DHCP) нужно добавить
# статические записи, иначе DAI заблокирует их ARP
# IP Source Guard включается на уровне bridge port
# Работает только при активном DHCP Snooping
# Для конкретных портов
/interface/bridge/port set [find where interface=ether3] ip-source-guard=yes
/interface/bridge/port set [find where interface=ether4] ip-source-guard=yes
/interface/bridge/port set [find where interface=ether5] ip-source-guard=yes
[MikroTik Router]
ether1 — WAN (ISP)
ether2 — Сервер с DHCP (10.0.0.2)
ether3 — Коммутатор 1 этажа (20 портов)
ether4 — Коммутатор 2 этажа (20 портов)
ether5 — Wi-Fi точка доступа
# Bridge
/interface/bridge add name=bridge-office dhcp-snooping=yes comment="Office LAN"
# Порты
/interface/bridge/port add bridge=bridge-office interface=ether2 trusted=yes \
comment="DHCP Server uplink"
/interface/bridge/port add bridge=bridge-office interface=ether3 trusted=no \
comment="Floor 1 switch"
/interface/bridge/port add bridge=bridge-office interface=ether4 trusted=no \
comment="Floor 2 switch"
/interface/bridge/port add bridge=bridge-office interface=ether5 trusted=no \
comment="Wi-Fi AP"
# DHCP-сервер (если на MikroTik)
/ip/address add address=10.0.0.1/24 interface=bridge-office
/ip/dhcp-server/network add address=10.0.0.0/24 gateway=10.0.0.1 dns-server=10.0.0.1
/ip/pool add name=office-pool ranges=10.0.0.100-10.0.0.250
/ip/dhcp-server add name=dhcp-office interface=bridge-office address-pool=office-pool \
lease-time=8h disabled=no
# Создаём bridge с полной защитой
/interface/bridge add name=bridge-dorm \
dhcp-snooping=yes \
arp-inspection=yes \
comment="Dorm network - full L2 security"
# Uplink — trusted
/interface/bridge/port add bridge=bridge-dorm interface=sfp1 trusted=yes \
comment="Uplink to core switch"
# Все клиентские порты — untrusted + IP Source Guard
/interface/bridge/port add bridge=bridge-dorm interface=ether1 trusted=no \
comment="Room 101"
/interface/bridge/port add bridge=bridge-dorm interface=ether2 trusted=no \
comment="Room 102"
/interface/bridge/port add bridge=bridge-dorm interface=ether3 trusted=no \
comment="Room 103"
/interface/bridge/port add bridge=bridge-dorm interface=ether4 trusted=no \
comment="Room 104"
# Включаем IP Source Guard на клиентских портах
/interface/bridge/port set [find where bridge=bridge-dorm and !trusted] ip-source-guard=yes
# Включаем DHCP Alert на интерфейсе
/ip/dhcp-server/alert add interface=bridge-office \
valid-server=10.0.0.1 \
on-alert="/log warning \"Rogue DHCP detected!\""
# valid-server — IP легитимного DHCP-сервера
# Если обнаружен ответ от другого IP — срабатывает alert
# Проверяем настройки bridge
/interface/bridge print detail where name=bridge-office
# Ищем: dhcp-snooping=yes
# Проверяем trusted/untrusted порты
/interface/bridge/port print detail
# Ищем: trusted=yes/no для каждого порта
# Таблица binding — MAC ↔ IP ↔ port
/interface/bridge/host print where dhcp-snooping=yes
# Или через специальную команду (зависит от версии RouterOS)
/interface/bridge/host print
# На тестовом роутере (rogue)
/ip/dhcp-server add name=rogue interface=ether1 address-pool=rogue-pool
/ip/pool add name=rogue-pool ranges=192.168.99.10-192.168.99.50
# На основном роутере — проверяем логи
/log print where topics~"bridge"
# Если DHCP Snooping работает, клиенты НЕ получат адрес 192.168.99.x
# Проверяем, что ARP Inspection включён
/interface/bridge print detail where name=bridge-office
# Проверяем счётчики отброшенных ARP-пакетов
/interface/bridge/port print stats
# Тест: на клиентском ПК назначаем статический IP (не через DHCP)
# и проверяем, что ARP для этого IP блокируется
# Проверяем, на каких портах включён IP Source Guard
/interface/bridge/port print where ip-source-guard=yes
# Мониторинг заблокированных пакетов
/interface/bridge/port print stats
# Включаем подробное логирование bridge
/system/logging add topics=bridge action=memory
# Проверяем логи
/log print where topics~"bridge"
# Типичные записи при блокировке rogue DHCP:
# bridge,info DHCP snooping: dropping DHCP offer from untrusted port ether4
# Перехватываем DHCP-трафик для анализа
/tool/sniffer set filter-protocol=udp filter-port=67-68 \
filter-interface=bridge-office streaming-enabled=no
/tool/sniffer start
# Ждём несколько DHCP-транзакций
/tool/sniffer stop
/tool/sniffer/packet print detail
# Проверяем, какой порт ведёт к DHCP-серверу
/ip/dhcp-server print
# Смотрим interface — если это bridge, DHCP-сервер на самом MikroTik
# Если DHCP на внешнем устройстве — находим порт
# Устанавливаем trusted
/interface/bridge/port set [find where interface=ether2] trusted=yes
# Проверяем
/interface/bridge/port print
# Пример: DHCP Relay на MikroTik
/ip/dhcp-relay add name=relay-vlan10 interface=bridge-vlan10 \
dhcp-server=10.0.0.2 disabled=no
# Порт, через который идёт связь с DHCP-сервером — trusted
/interface/bridge/port set [find where interface=ether1] trusted=yes
# Создаём статический DHCP lease для сервера
/ip/dhcp-server/lease add address=10.0.0.5 mac-address=AA:BB:CC:DD:EE:FF \
server=dhcp-office comment="Print server (static lease)"
# Порт с принтером — trusted (DAI не проверяет)
/interface/bridge/port set [find where interface=ether5] trusted=yes
/interface/bridge set bridge-office arp-inspection=no
# Проверяем статус HW offloading
/interface/bridge/port print where hw=yes
# Отключаем HW offload для нужных портов
/interface/bridge/port set [find where interface=ether3] hw=no
/interface/bridge/port set [find where interface=ether4] hw=no
# Альтернатива: отключить HW offload для всего bridge
/interface/bridge set bridge-office frame-types=admit-all
# 1. Уменьшить lease time, чтобы клиенты быстрее обновляли
/ip/dhcp-server set dhcp-office lease-time=1h
# 2. После перезагрузки — временно отключить IP Source Guard
/interface/bridge/port set [find where ip-source-guard=yes] ip-source-guard=no
# Подождать, пока клиенты обновят lease
# Включить обратно
/interface/bridge/port set [find where bridge=bridge-office and !trusted] ip-source-guard=yes
# Проверяем, что Wi-Fi интерфейс в bridge
/interface/bridge/port print where interface~"wlan"
# Если нет — добавляем
/interface/bridge/port add bridge=bridge-office interface=wlan1 trusted=no \
comment="Wi-Fi AP"
# Для CAPsMAN — интерфейсы CAP автоматически добавляются в bridge
# Проверяем
/interface/bridge/port print where interface~"cap"
# Удаляем firewall-правила для блокировки DHCP (если есть)
/ip/firewall/filter remove [find where comment~"block DHCP" or comment~"rogue"]
# Оставляем только DHCP Snooping на bridge
/interface/bridge set bridge-office dhcp-snooping=yes
# === DHCP Snooping — полная настройка для офиса ===
# Bridge с DHCP Snooping
/interface/bridge add name=bridge-office dhcp-snooping=yes comment="Office LAN with DHCP Snooping"
# Порты
/interface/bridge/port add bridge=bridge-office interface=ether2 trusted=yes \
comment="Uplink to DHCP server"
/interface/bridge/port add bridge=bridge-office interface=ether3 trusted=no \
comment="Floor 1"
/interface/bridge/port add bridge=bridge-office interface=ether4 trusted=no \
comment="Floor 2"
/interface/bridge/port add bridge=bridge-office interface=ether5 trusted=no \
comment="Meeting room"
/interface/bridge/port add bridge=bridge-office interface=wlan1 trusted=no \
comment="Wi-Fi"
# IP и DHCP
/ip/address add address=10.0.0.1/24 interface=bridge-office
/ip/pool add name=office-pool ranges=10.0.0.100-10.0.0.250
/ip/dhcp-server/network add address=10.0.0.0/24 gateway=10.0.0.1 dns-server=10.0.0.1
/ip/dhcp-server add name=dhcp-office interface=bridge-office \
address-pool=office-pool lease-time=8h disabled=no
# DHCP Alert — оповещение
/ip/dhcp-server/alert add interface=bridge-office \
valid-server=10.0.0.1 \
on-alert="/log warning \"Rogue DHCP detected on bridge-office!\""
# Логирование
/system/logging add topics=bridge,dhcp action=memory