Находим чужие DHCP-серверы в сети.

Маршрутизаторы Mikrotik позволяют вычислить чужой, «левый», сторонний DHCP-сервер который находится в вашей сети и тем самым мешает вашим устройствам получать правильные IP-адреса. Такая ситуация может возникнуть, когда клиент, например, подсоединил свой домашний роутер не через WAN порт, а через LAN-порты, а ваша сеть не ориентированна на изоляцию клиента (VLANs, EoIP/VPLS Tunnels, Horizon Bridging/Private VLAN Edge (PVE)). Для этого в RouterOS существует настройка /ip dhcp-server alert:


Добавляем правило, с отсылкой на выполнения скрипта script1:

interface — интерфейс, на котором искать не легитимные DHCP-сервера;
valid-server — список МАС-адресов ваших легитимных DHCP-серверов;
alert-timeout — таймаут обнаружения чужих DHCP-серверов. Если параметр не заполнить (сделать не активным) — скрипт выполнится один раз при обнаружении. Это важный параметр, заполнять его нужно исходя из DHCP Lease Time вашей сети. Если у вас Lease Time стоит 12 часов, то alert-timeout можно сделать 1−2 часа. Вероятность того, что чужой сервер раздаст между этими периодами адреса минимальна. Если Lease Time то и alert-timeout нужно уменьшить. Но, если вы будете при обнаружении «левого» DHCP отправлять e-mail, то сильно уменьшенное время в alert-timeout приведет к спаму на ваше «мыло» до того момента, пока «левый» сервер не пропадет.
unknown-server — список МАС-адресов обнаруженных неизвестных серверов DHCP. Сервер будет удален из этого списка после тайм-аута.
on-alert — сценарий для запуска, если неизвестный сервер DHCP обнаружен;
reset-alert — не выведен в интерфейс WinBox, доступен с командной строки. Команда /ip dhcp alert reset-alert очищает список всех найденных «левых» DHCP-серверов.

Если DHCP Alerts не может получить dhcp-пакет, он действует как dhcp-клиент и посылает пакеты DHCP Discover раз в минуту. В on-alert можно добавлять как сам скрипт, так и ссылку на него в виде названия скрипта в /system script.
Но наша задача при появлении «левого» DHCP-сервера отсылать уведомление на e-mail. Что-бы на «мыло» приходило не только оповещение, но и IP, интерфейс на котором найден и MAC-адрес чужого DHCP-сервера. Для этого скрипт нужно писать напрямую в окне on-alert, так как там мы будем использовать спец-переменные. Проблема в том, что оператором get данные с DHCP Alerts получить нельзя (проблема микротиковцам известна). Итак, напишем скрипт в on-alert:

В пункте Unknown Server видно MAC-адрес «левого» сервера. Alert Timeout стоит тестовые 10 секунд, обычно это значение у меня 1 час. Интерфейс может быть как реальный, так и бридж. Значение Valid Servers заполняем нашими легитимными DHCP-серверами, так как у меня он только один (мое текущее устройство), то заполняем MAC с нашего интерфейса.

Сам скрипт:

/tool e-mail send server=10.10.10.10 port=25 user=admin@ya.ru password=111 111 start-tls=yes to="admin@ya.ru" from=admin@ya.ru subject=(«DHCP Alert: Discovered unknown dhcp-server, RouterBoard identity: „.[/system identity get name]) body="MikroTik have been detected unknown dhcp-server: \n\nIP: $address \nInterface: $interface \nMAC: quot;mac-address“»;
/log info «e-mail send unknown dhcp-server»

После появления в сети чужого DHCP-сервера раз в заданное время опроса скрипт будет выполнятся, в это время будут писаться записи в терминал и лог журнал:


Последняя запись в логе инициализированная скриптом. Ну и само письмо будет иметь такой вид:

Как видим в тему письма подтягиваются название роутера (идентификатор). А в тело — IP, интерфейс обнаружения и MAC-адрес чужого DHCP-сервера. Письма будут отсылаться через промежуток времени указанный в Alert Timeout, до того момента, пока DHCP-сервер не пропадет или вы его не найдете.

Используемые материалы:
Upd
рабочий скрипт:
-----------------------------------------
/tool e-mail send from="mail@gmail.com" server=smtp.gmail.com to=mail@mail.ru subject=(«DHCP Alert: Discovered unknown dhcp-server, RouterBoard identity: „.[/system identity get name]) body="MikroTik have been detected unknown dhcp-server: \n\nIP: $address \nInterface: $interface \nMAC: $"mac-address“»;
/log info «e-mail send unknown dhcp-server»