Маршрутизаторы Mikrotik позволяют вычислить чужой, "левый", сторонний DHCP-сервер который находится в вашей сети и тем самым мешает вашим устройствам получать правильные IP-адреса. Такая ситуация может возникнуть, когда клиент, например, подсоединил свой домашний роутер не через WAN порт, а через LAN-порты, а ваша сеть не ориентированна на изоляцию клиента (VLANs, EoIP/VPLS Tunnels, Horizon Bridging/Private VLAN Edge(PVE)). Для этого в RouterOS существует настройка /ip dhcp-server alert:
Добавляем правило, с отсылкой на выполнения скрипта script1:
Сам скрипт:
Последняя запись в логе инициализированная скриптом. Ну и само письмо будет иметь такой вид:
Как видим в тему письма подтягиваются название роутера (идентификатор). А в тело - IP, интерфейс обнаружения и MAC-адрес чужого DHCP-сервера. Письма будут отсылаться через промежуток времени указанный в Alert Timeout, до того момента, пока DHCP-сервер не пропадет или вы его не найдете.
Добавляем правило, с отсылкой на выполнения скрипта 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 с нашего интерфейса.
Но наша задача при появлении "левого" DHCP-сервера отсылать уведомление на e-mail. Что-бы на "мыло" приходило не только оповещение, но и IP, интерфейс на котором найден и MAC-адрес чужого DHCP-сервера. Для этого скрипт нужно писать напрямую в окне on-alert, так как там мы будем использовать спец-переменные. Проблема в том, что оператором get данные с DHCP Alerts получить нельзя (проблема микротиковцам известна). Итак, напишем скрипт в on-alert:
/tool e-mail send server=10.10.10.10 port=25 user=admin@ya.ru password=111111 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"";После появления в сети чужого DHCP-сервера раз в заданное время опроса скрипт будет выполнятся, в это время будут писаться записи в терминал и лог журнал:
/log info "e-mail send unknown dhcp-server"
Последняя запись в логе инициализированная скриптом. Ну и само письмо будет иметь такой вид:
Используемые материалы:
Смотри, Жень, у меня только что идея появилась..
ОтветитьУдалитьОбычно у роутеров в диапазоне dhcp всего 100 клиентов. Можно скриптом поднять на локальном интерфейсе в бридже 100 вланов с включенным dhcp-клиентом.. типа, микротик берет всю фигню на себя, пока ты лазишь по сети и ищешь грамотея, который включил сеть в лан-порт роутера.
Еще можно зайти на 192.168.1.1 и зашить ту железяку намерть, если пароль дефолтный. А потом еще денег срубить за восстановление роутера )) Я в прошлом месяце так дважды делал. правда, клиенты не звонили.. наверное, в гарантию отнесли. =) Короче, кто не работает головой - работает ногами, епт.
для того что б поднять вланы клиентский роутер тоже должен пакеты в вланы отдавать. На физ. интерфейсе можно поднять виртуальные интерфейсы, но врятли и это получится..
Удалитьну вот я только что создал вручную три виртуальных на одном реальном. Единственное "НО" - у них у всех одинаковый мак. Выход такой: создаем каждому виртуальному интерфейсу свой бридж, на бридже пишем уникальный мак, поднимаем дхцп-клиент на каждом и вуаля - все они вейтинг =) Да, некрасиво будет в винбоксе на вкладке interface..а шо робыть? Работать должно. Теоретически. Приеду домой - попробую на практике такой изврат ))
УдалитьВ первую очередь Спасибо автору за такую хорошую публикацию!
ОтветитьУдалитьСкрипт у меня не сразу заработал.
Сначала из-за лишней кавычки в конце где ! mac-address""; !
А потом не показывал MAC-адрес в письме. Решил проблему заменив часть текста ! quot;mac-address"; ! на ! $"mac-address"" !
Возможно эти проблемы из-за версии прошивки (6.35.1) на моем микротике.
В итоге у меня получился вот такой рабочий скрипт:
-----------------------------------------
/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"
-----------------------------------------
Скрипт получился по короче т.к. настройки почты у меня сделаны в Tools-> Email -> Email Settings
Спасибо, мил человек!
УдалитьС твоей версией скрипта все заработало, как надо :)
Большое спасибо)
Удалитьблокировка DHCP работает
ОтветитьУдалитьтока письма не приходить на почту
на Tools-> Email -> Email Settings настроил вроде норма
можешь показать пример
в routeros 7.x не работает.
ОтветитьУдалить