Автоматизуємо MikroTik RouterOS за допомогою Telegram Bot

💡 Усі статті, обговорення, новини для початківців — в одному місці. Приєднуйтесь до Junior спільноти!

Є такий вислів: «Щоб не витирати калюжу, краще полагодити кран». Так і системному адміністратору, щоб не витрачати 5-10 хвилин на виконання щоденної рутинної задачі, краще витратити 1-2 години на її автоматизацію. У цій публікції розглянуті можливості автоматизації корпоративної мережі за допомогою Telegram-бота.

Типи автоматизації мережі

Автоматизація мережі, як і багато типів автоматизації, визначається як набір засобів для більш швидкого виконання робочих операцій. Підвищення продуктивності роботи — це чудово, але скорочення часу розгортання та внесення змін до конфігурації далеко не завжди є саме тим завданням, яке необхідно вирішити багатьом ІТ-організаціям.

Типи автоматизації мережі:

  • Підготовка та налаштування пристроїв — автоматизації створення файлів конфігурації пристроїв.
  • Збір даних.
  • Переходи між платформами (мережеве обладнання різних вендорів).
  • Управління конфігурацією — розгортання, передача та управління станом конфігурації пристрою. Це стосується не тільки найпростіших операцій, таких як підготовка до роботи віртуальної локальної мережі, але й більш складних багатоетапних робочих процесів конфігурування стійкових (top-of-rack) комутаторів, мережевих екранів (firewalls), балансування навантаження та розвиненої інфраструктури захисту.
  • Сумісність — перевірка сумісності конфігурацій та валідація конфігурації.
  • Складання звітів.
  • Усунення проблем — розробка процесу та методик для усунення проблем та несправностей (наприклад, спочатку виконується перевірка рівня 2 моделі OSI до початку процесу усунення несправностей на рівні 3).

Для автоматизації мережі системні адміністратори використовують різні інструменти, протоколи та інтерфейси. В мережевому обладнанні MikroTik під керуванням RouterOS є можливість надсилати повідомлення по e-mail та SMS (якщо у пристрої присутній та налаштований модуль LTE).

На сьогодні альтернативою до класичних повідомлень є використання різних ботів у месенджерах (Whatsapp, Viber та Telegram). Варіант з відправкою Push-повідомлень прямо на смартфон, планшет або навіть ПК (Windows, Debian, CentOS, macOS, Linux і т. д.). Все це без використання платних сервісів-посередників та з мінімальними витратами часу.

На мою думку, саме месенджер Telegram найкраще використовувати для автоматизації, оскільки багато інформації є на офіційній сторінці, щодо написання ботів, їх конфігурації та функціоналу.

Отже, відправку Push-повідомлень реалізовуємо за допомогою сервісу Telegram, у якого є зручний API для керування ботами.

Починаємо роботу з Telegram

Насамперед, завантажуємо офіційний мобільний додаток Telegram, або якщо для ПК, то завантажуємо додаток в залежності від операційної системи, що використовуєте (я використовував додаток Telegram for Chrome для однойменного браузеру).

Наступним кроком створюємо акаунт, або використовуємо свій, якщо такий є.

Після того, як аккаунт створено, за допомогою пошуку необхідно знайти контакт @BotFather — це головний бот, за допомогою якого можна створювати нових ботів і управляти вже існуючими.

При бажанні, боту можна буде змінити ім’я, інформацію про нього, а також завантажити для нього аватар. Подальше спілкування з ботом відбуватиметься у вигляді текстових команд. Для створення нового бота, виконайте команду:

/newbot

Після введення і відправки команди, головний бот запросить ім’я, в ньому допускаються пропуски і довільний формат самої назви.

Після того, як вказали ім’я бота, бот запросить бажаний %username%. При виборі %username% обов’язковою умовою є суфікс «bot» в кінці імені, (наприклад MikrotikBot або Mikrotik_bot).

Якщо все пройшло успішно, @BotFather відповість повідомленням, що містить спеціальний token для доступу до API. Сам токен складається з двох частин, розділених двокрапкою, наприклад:

12558568:Hgsgf74tv7efcdfvhdvhfvcbn65imghmj

Наступним кроком рекомендується перевірити доступність API для вашого бота, робиться це в браузері, шляхом відкриття спеціального URL:

https://api.telegram.org/bot<ваш_токен>/getMe

Система повертає відповіді в форматі JSON, в коді відповіді повинен бути присутній параметр «ok: true», якщо він є — API доступний.

Отже, бот майже готовий, залишилося тільки навчити Mikrotik відправляти повідомлення, використовуючи API Telegram. Перед тим як приступити до налаштування RouterOS, необхідно дізнатися ID чату.

У додатку Telegram, за допомогою пошуку необхідно знайти контакт нашого бота @MikrootBor — це створений нами бот.

Відправляємо нашу боту команду:

/start

Після чого в браузері відкриваємо спеціальний URL:

https://api.telegram.org/bot<ваш_токен>/getUpdates

У відповіді нас цікавить параметр message => chat => id, в ньому зберігається унікальний ідентифікатор чату між вами і створеним ботом. По суті, це ваш ідентифікатор як користувача, він буде ідентичний для всіх ботів в рамках одного аккаунта.

Відправка тестового Telegram-повідомлення

Тепер у нас є все необхідне для того, щоб відправляти повідомлення за допомогою API. Відправлення повідомлень здійснюється за допомогою браузера, за спеціально сформованим посиланням, що має наступний вигляд:

https://api.telegram.org/bot<ваш_токен>/sendMessage?chat_id=<id_чату>&text=<повідомлення>

Параметри:

  • ваш_токен — ваш унікальний токен для доступу до API, отриманий раніше;
  • id_чату- унікальний ідентифікатор чату, в яку потрібно надіслати повідомлення;
  • Повідомлення — текст повідомлення.

Текст повідомлення може бути як англійською, так і українською. Для повідомлення на латиниці, відступи слід замінювати на «%20», точно так же, як це робиться в звичайних URL.

Для того, щоб відправити повідомлення кирилицею, попередньо текст необхідно конвертувати за допомогою urlencode, це вбудована функція PHP.

Найбільш простий варіант — скористатися будь-яким онлайн сервісом, конвертацію виконуємо в кодування UTF-8.

Відправляємо повідомлення з Mikrotik RouterOS

Надіслати повідомлення з RouterOS не складає особливих труднощів. Для цього можна скористатися наступним кодом:

https://api.telegram.org/bot<ваш_токен>/sendMessage?chat_id=<id_чату>&text=<повідомлення>

В консолі RouterOS символ ? використовується для виводу довідки меню в консолі. Наступні послідовності можуть бути використані для додавання спецсимволів в рядки:

  • " - подвійні лапки
  • \ - зворотний слеш
  • \N — символ кінця рядка
  • \R — return
  • \T — горизонтальна табуляція
  • $ — знак долара
  • ? — знак питання. спецпризначення цього символу — виводити довідку меню
  • \A — звуковий сигнал терміналу BEL (0×07)
  • \B — бекспейс
  • \F — form feed (0xFF)
  • \V — вертикальна табуляція
  • \Xx — шістнадцятковий код символу

Для того щоб відправити тестове повідомлення з консолі, використовуємо попередню команду, змінивши sendMessage?chat_id</code на <code>sendMessage?chat_id:

/tool fetch url="https://api.telegram.org/bot<ваш_токен>/sendMessage?chat_id=<id_чата>&text=<повідомлення>" keep-result=no

Для налагодження ви можете скористатися стандартними можливостями System — Scripts. Ось власне і все, решта за вами.

Як варіант, цю систему повідомлень можна використовувати при відключенні основного інтернет-каналу, Mikrotik може відправити повідомлення, використовуючи резервний канал. При цьому цей метод абсолютно безкоштовний, на відміну від звичайних SMS, за які оператор стягує плату. Єдине обмеження — доступ до Інтернет на самому Mikrotik і кінцевому пристрої з додатком Telegram (надсилання та отримання).

Приклад використання Push-повідомлень на Telegram-бота при пропаданні зв’язку із сервером

Особисто я використовую Push-повідомлення від Telegram Bot при виявленні критичних помилок у файлі логування та авторизації на мережевому обладнанні.

Як простий приклад можна використовуати Telegram API у зв’язці з вбудованим інструментом Netwatch, він гранично простий у використанні і налаштуванні.

Параметри Netwatch:

  • Host — вузол, що пінгується.
  • Interval — інтервал в секундах між спробами перевірки, за замовчуванням 1 хвилина.
  • Timeout — затримка читання, за замовчуванням 1000 мс.
  • У вкладках UP і DOWN пишеться код, який необхідно виконати, коли хост доступний або недоступна. Команди (скрипт) виконуються тільки при зміні статусу з up на down або навпаки.

Приклад надісланих Push-повідомлень на Telegram-бота при пропаданні та відновленні зв’язку із сервером:

Висновок та порада

Отже, тепер ви знаєте, як реалізувати відправку Push-повідомлень з мережевого обладнання MikroTik RouterOS на власноруч створений Telegram Bot. За Вами, як за системним адміністратором, залишається вибір подій на обладнанні, які будуть запускати механізм відправки повідомлень.

Головне — пам’ятайте, що автоматизувати задачу, яку ви виконаєте один раз — нераціонально!

Дякую за увагу. Буду вдячним, якщо поділитеся в коментах своїми думками за темою.

👍ПодобаєтьсяСподобалось3
До обраногоВ обраному3
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Створив бота — вислав ссилку всім учасникам, але повідомлення з мікротіка приходить тільки мені. Як зробити щоб приходило всім? Бачу у вас пише 5 members — у мене такого немає.

группу создай и бота туда запихни

Працює, дякую, хто шукає fetch в tools, він є системі але в прихованих.

Питання до автора, а що робити коли в тебе версія router os 7.6 ?

Товариш майор схвалює таку інтеграцію! Даєш підконтрольні ФСБ роутери по всьому світові!

якщо без зворотнього звьязку, а просто відправку статусних повідомлень, як в статті, то ніякої підконтрольності — лише додаткове навантаження для тг 😉

Ну в принципі цікава стаття, але чому просто не юзати snmp й нормальний моніторинг?

Це ж державний службовець.
Треба телеграм. І ще мейлру з яндексом

якось пройшло повз, і це заступник начальника відділу йооомайо 🙈

Краще б не про бота розказали, а більше про те як щось діставати з мікротіку. Цікавить як стягувати логи і т.д. Бачив що є якийсь REST API, але не пробував його ще. Маю мікротік як домашній роутер, хотів би написати якийсь гуй для нього

SNMP для статистики, а логи шлеш на syslog сервер

Ну і малюеш в графані собі гуй

За Вами, як за системним адміністратором, залишається вибір подій на обладнанні, які будуть запускати механізм відправки повідомлень.

А мені якраз це і цікаво :) Можете описати які події у вас запускають механізм відправки повідомлень?
По суті це ж моніторинг виходить. Чи не краще використовувати Prometheus чи Zabbix? Там ще й графіки красиві можна намалювати і в річний звіт департаменту додати ;)

RouterOS далеко не на всі події можна вішати скрипти.
З того що знаю та використовую я:
— DHCP leasing (client/server)
— DHCP rouge server detection
— PPP (etc.) connection up/down
— Netwatch
— Scheduling

Дуже не вистачає виконання скрипта у разі спрацювання правил Firewall та вхід/вихід користувачів RouterOS.

Дещо розширити ці можливості допомагає The Dude, але не на кожен роутер його можна встановити.

Дякую за статтю.
Схоже не те, що mikrotik можна автоматизувати «з коробки», без всяких там ansible, чи python. Що ж робити, коли у тебе тисячі mikrotik-ів? Потрібно на кожен заходити і конфігурувати, так би мовити, руцями? :)

Ставите telegram-cli
Піднімаєте сервіс і відправляєте

echo "msg $1 $2" | socat - tcp:127.0.0.1:2391
Для перевірки стану пристроїв є mmonit
в якому
 check host andriy with address 10.20.30.3
   if failed ping then exec /etc/monit/notifications/up.sh
   else if succeeded then exec /etc/monit/notifications/down.sh

А якщо в хузяйстві нема окремого сервера щоб там це все встановити?

сучасні мікроти з рос7 підтримують контейнери 😉

мікротам на рос7 треба ще пару рочків щоб стати mature і їх можна було в прод запускати

Підписатись на коментарі