MikroTik Скрипты: Обнаружение неизвестного DHCP сервера в сети

Настройка обнаружения в сети неизвестного DHCP сервера и отправка уведомления в Telegram или на электронную почту. Отправляется имя DHCP интерфейса на котором обнаружен сервер, IP и MAC адреса неавторизованного устройства.

Иногда происходит ситуация, когда сотрудник подключает к локальной сети предприятия личный роутер, с включенным DHCP сервером, что может вызвать проблемы получения новых IP адресов устройств в локальной сети. Причем проблемы могут обнаруживаться не сразу, а когда истекает аренда IP адресов.

Для быстрого уведомления о появлении неавторизованного DHCP сервера в локальной сети используйте настройку Alerts в настройках DHCP сервера.

Статья на других языках:
?? — MikroTik Scripts: Discover Unknown DHCP Server on the Network
?? — Scripts MikroTik: Descubre un servidor DHCP desconocido en red
?? — Scripts MikroTik: Découverte d’un serveur DHCP inconnu sur le réseau
?? — MikroTik-Skripte: Erkennen Sie unbekannte DHCP-Server im Netzwerk
?? — MikroTik-scripts: Detectie van een onbekende DHCP-server op het netwerk

Создать предупреждение

Начальные данные:

  • Interface: bridge1-lan — название интерфейса DHCP сервера;
  • Valid Servers: 64:D1:54:52:6C:36 — MAC адрес интерфейса DHCP сервера (bridge1-lan);
  • Alert Timeout: 10 минут — интервал проверки неавторизованного DHCP сервера и отправка уведомления.

Настраиваем предупреждение:

[IP] -> [DHCP Server] -> [Alerts] -> [+] -> [Interface: bridge1-lan] -> [Valid Servers: 64:D1:54:52:6C:36] -> [Alert Timeout: 00:10:00]

Я рекомендую в окне Alert вызывать скрипт проверки, а не размещать текст скрипта. Если скрипты размещаются в одном месте [System] -> [Scripts] это улучшает удобство управления устройством, чем размещение скриптов в определенных настройках устройства.

Код вызова скрипта:

/system script run DiscoverUnknownDHCPServer
Создать предупреждение DHCP сервера

Скрипт: Обнаружить неизвестный DHCP сервер и отправить сообщение в Telegram

Для отправки Telegram сообщения, я использую вызов функции — MikroTik Скрипты: Отправка сообщения в Telegram (функция).

Пример Телеграм уведомления от MHelp.pro
Пример Телеграм уведомления от MHelp.pro

Создаем скрипт:

[System] -> [Scripts] -> [+] -> [Name: DiscoverUnknownDHCPServer] -> [Policy: read, write, polisy, test]

Код скрипта:

# Find DHCP Alert 
:local CurrentTime [/system clock get time];
:local MsgID [/log find where message ~"dhcp alert" time =$CurrentTime];
:local MsgText [/log get number=$MsgID message];

# Send Telegram Message
:local DeviceName [/system identity get name];
:local MessageText "\F0\9F\94\B4 <b>$DeviceName: UNKNOWN DHCP SERVER FOUND! </b> Info: $CurrentTime $MsgText";
:local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
MikroTik Скрипты: Обнаружение неизвестного DHCP сервера в сети

Скрипт: Обнаружить неизвестный DHCP сервер и отправить сообщение на почту

Для отправки Telegram сообщения, я использую вызов функции — MikroTik Скрипты: Отправить письмо и файл на почту (функция)

Пример электронного письма уведомление от MHelp.pro
Пример электронного письма уведомление от MHelp.pro

Создаем скрипт:

[System] -> [Scripts] -> [+] -> [Name: DiscoverUnknownDHCPServer] -> [Policy: read, write, polisy, test]

В данном скрипте не используется отправка файла, поэтому параметру FileName присваивается пустое значение «».

Код скрипта:

# Find DHCP Alert 
:local CurrentTime [/system clock get time];
:local MsgID [/log find where message ~"dhcp alert" time =$CurrentTime];
:local MsgText [/log get number=$MsgID message];

# Send Email
:local DeviceName [/system identity get name];
:local Time [/system clock get time];
:local Date [/system clock get date];

:local SendTo "mail@mail.com";
:local Subject "\F0\9F\94\B4 CRITICAL: $DeviceName [$Date $Time] UNKNOWN DHCP SERVER FOUND!";
:local MessageText "$MsgText";
:local FileName "";

:local SendEmail [:parse [/system script get SendEmailFunction source]];
$SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
Скрипт: Обнаружить неизвестный DHCP сервер и отправить сообщение на почту

Скрипт в одну строку

Отправка уведомления о неизвестном DHCP сервере в Телеграм:

/tool fetch url="https://api.telegram.org/bot<BotToken>/sendMessage\?chat_id=<GroupID>&text=Unknown DHCP server on interface: $interface (IP: $address, MAC:$"mac-address")" keep-result=no;

Отправка уведомления о неизвестном DHCP сервере на электронную почту:


/tool e-mail send to=dest_mail@mail.com server=[:resolve "smtp.mail.com"] port=465 start-tls=tls-only user="my_mail@mail.com" password="Pa$$woRD"  from="my_mail@mail.com" subject="$[/system identity get name] UNKNOWN DHCP SERVER FOUND!" body="Unknown DHCP server on interface: $interface (IP: $address, MAC:$"mac-address")"

? Как обнаружить появление неизвестного DHCP сервера в локальной сети (проблема в небольших сетях) и отправить уведомление в Telegram или электронной почтой обсуждалось в этой статье . Я надеюсь, что быстрый способ узнать о появлении неавторизованного DHCP сервера в локальной сети, позволит вам отреагировать быстрее и облегчит вашу работу. Однако, если вы столкнетесь с каким-то проблемами при настройке, не стесняйтесь написать в комментариях. Я постараюсь помочь.

1 комментарий к “MikroTik Скрипты: Обнаружение неизвестного DHCP сервера в сети”

  1. Не работает это скрипт на RouterOS 7
    Переделал с другого скрипта

    :local DeviceName [/system identity get name];
    :global routername [/system resource get board-name]
    :local Time [/system clock get time];
    :local Date [/system clock get date];
    :local TelegramMessageText;

    :global ParseLogDHCPEndArrayID;

    :local IDsEventsDHCP [/log find where topics~»dhcp» message ~»dhcp alert»];

    :local LenArrayIDs [:len $IDsEventsDHCP];
    :local StartArrayID [:find $IDsEventsDHCP $ParseLogDHCPEndArrayID];
    :local EndArrayID ($IDsEventsDHCP -> ($LenArrayIDs-1));

    :if ($EndArrayID != $ParseLogDHCPEndArrayID and [:tobool $ParseLogDHCPEndArrayID] ) do={

    :for KeyArray from=($StartArrayID+1) to=($LenArrayIDs-1) do={
    :local IDMessage ($IDsEventsDHCP ->$KeyArray );
    :set TelegramMessageText «$TelegramMessageText %0A$[/log get number=$IDMessage time] — $[/log get number=$IDMessage message];%0A»;
    }

    # START SEND TELEGRAM
    :local MessageText «\F0\9F\94\B4 $DeviceName: UNKNOWN DHCP SERVER FOUND! Info: $TelegramMessageText»;
    :local SendTelegramMessage [:parse [/system script get TGBotSendMessageFunction source]];
    $SendTelegramMessage MessageText=$MessageText;
    # END SEND TELEGRAM
    }

    :set ParseLogDHCPEndArrayID $EndArrayID;

    Ответить

Оставьте комментарий