как запускать скрипты на микротике

Полезные скрипты для MikroTik RouterOS

Перезагрузка роутера, при зигрузке CPU

Копирование и применение последней актуальной понфигурации

То есть забираем по FTP lastconfig.backup и восстанавливаемся с него. FTP пользователь должен быть настроен, желательно с ограничением доступа по IP. Обратите внимание, что к FTP подключаемся по IP-адресу локального физического интерфейса, который доступен только между роутерами.

Этот скрипт ставим в планировщик на несколько минут позже выполнения скрипта резервного копирования.

И последний скрипт — применение настроек на резервном сервере. В нем также используется МАС для идентификации роутера.

Здесь меняем имя роутера, ip-адрес LAN-интерфейса и приоритет VRRP на меньший, чтобы роутер сделать слейвом. Запуск этого скрипта нужно поставить в автозагрузку. Изменения будут происходить на резервном сервере после копирования и применения последней актуальной конфигурации.

Резервное копирование

Проверка статуса роутера и выключение интерфейса

Подключение к динамическим серверам или сервисам, на примере pptp-соединения

Проверка синтаксиса скрипта

Настройка на 2 провайдера:

Блокировка трафика по времени:

Если нужно запретить трафик по времени ночью, скажем с 22:00 до 10:00 утра:

0) Стандартный способ – использовать два правила с временными промежутками 22:00:00-23:59:59 и 00:00:00-10:00:00

1) Использовать через запрет – Где-то в конце есть правило, которое запрещает, а конкретным правилом разрешать.

2) Использовать шедулер –
также создаём правило в файрволе, но не указываем конкретное время –

Источник

MikroTik`s scripts спешат на помощь

как запускать скрипты на микротике

В статье показан пример практического анализа работы DDNS клиента, интегрированного в прошивку домашнего роутера, и его интерпретация на оборудовании MikroTik. Возможности RouterOS позволяют без труда выполнить всю необходимую работу. Если кому-то придется столкнуться с такого рода задачей, то держите решение, оно позволит сберечь ваше время и нервы.

Модернизируя сетевую инфраструктуру одного из заказчиков, мы столкнулись с настоящим телеком динозавром из семейства «for home use only». На границе периметра был засунут старенький роутер Asus, основное назначение которого было выполнение роли DDNS клиента. Так получилось, что в компании давно были настроены внутренние сетевые ресурсы и с интернет провайдером заключен договор о лизинге белого динамического IP. Со временем в инфраструктуре многое поменялось, но из-за твердого не желания заказчика вмешиваться в существующие, налаженные годами процессы, настройки клиентской стороны не менялись, и Asus работал себе и работал, сообщая внешнему DDNS сервису свой текущий адрес. В этом месте вспоминается разговор у костра с одним коллегой, который поведал мне о увиденном им лично коммутаторе Cisco с uptime в целых 11 лет, хотите верьте, хотите нет. Настал черед выйти Asus-у на пенсию и уступить место оборудованию от MikroTik. В этом месте мы столкнулись с инженерной задачей, готового решения которого в интернете найдено не было. В связи с чем, было проведено небольшое исследование, которое может кому-то поможет сэкономить время.

▍Техническая часть

Протокол DDNS отвечает за автоматизированное преобразование доменного имени в динамические IP адреса. Прошивки роутеров Asus имеют функционал по настройке DDNS клиента, в котором зашиты определенные сервисы.

как запускать скрипты на микротике Настройка DDNS клиента

В первую очередь, это, конечно, сервис от самой компании Asus. Из настроек можно указать только «Имя хоста», которое и будет резолвиться в IP. У оборудования MikroTik дела с этим обстоят по-другому. Встроенный функционал работает только со своим сервером cloud.mikrotik.com и, разумеется, никакого www.asus.com в нем нет. В интернете мы не нашли описание, как выкрутиться из этой истории и все-таки списать динозавра на пенсию. Имеются материалы, касающиеся настройки сервиса No-IP, но нам они не подходят, потому что не работают. Сразу стало понятно, что в такой ситуации решением будет регулярная отправка из скрипта необходимой информации на сервера Asus посредством HTTP клиента fetch. Осталось только разобраться что, куда и как. Запишем трафик, который передает Asus. Для этого отключим работу его DDNS клиента и брандмауэра, настроим DHCP клиент на WAN порту и подключим к подготовленному MikroTik с работающим DHCP сервером.

как запускать скрипты на микротике Отключение брандмауэра для WAN порта

как запускать скрипты на микротике Настройка DHCP клиента для WAN порта

Если все сделано верно, тогда в лизинге увидим нужный нам IP.

Настраивая на MikroTik снифер, мы выбрали наиболее простой вариант /tool sniffer с сохранением дампа в память роутера:

Активируем DDNS клиент на Asus и смотрим трафик, а там все как на ладони.

как запускать скрипты на микротике
Работа DDNS клиента

Все данные у нас есть, верстаем скрипт на RouterOS, заголовки Authorization и User-Agent пропускаем для простоты:

Сервер нам выдает ошибку 401 Unauthorized, все понятно, добавляем в скрипт данные для аутентификации, как есть, в сыром виде. И DDNS сервис от Asus заработал, но уже на оборудовании MikroTik:

Не забываем скрипт засунуть в планировщик заданий:

Как видно, мы пропустили User-Agent, но лучше так не делать, мало ли ребята из Asus рассердятся и начнут блокировать наше решение (http-header-field=«User-Agent: ez-update-3.0.11b5»). Осталось разобрать заголовок Authorization. Это связка логина и пароля, закодированные в Base64. После декодирования видно, что в качестве логина используется прошитый MAC адрес WAN интерфейса.

как запускать скрипты на микротике
Декодированный заголовок Authorization

как запускать скрипты на микротике
MAC адрес WAN порта

А вот откуда берется пароль, нам выяснить не удалось. В системных логах загрузки роутера ничего подобного не упоминалось. Даже не поленились посмотреть под корпусом, ничего похоже и там не нашли. После обновления версии операционной системы он не изменился, поэтому будем считать, что она берет эту информацию откуда-то изнутри железа. Что интересно, сервер DDNS проверяет на валидность только первые 6 знаков (для шестнадцатеричного представления, разумеется) и наличие «:» после 12 знака, остальное можно опустить или изменить, но аутентификацию так не пройти.

▍Заключение

В работе технических специалистов постоянно возникают различного рода нестыковки, иногда в самых неожиданных местах. Тогда в дело вступает светлая голова, ровные руки, везение и качественное оборудование, на котором приятно работать. Немного добавим про безопасность такой вот реализации DDNS клиента. На наш взгляд, все хорошо. Чтобы злоумышленнику попытаться стравить IP адрес, ему придется ввести данные для аутентификации. Если с MAC адресом вроде как все это проще, то пароль точно не подобрать. Да и вообще на дворе 2021 год и пора давно бы отказаться от DDNS, в корпоративной среде уж точно, как-то не серьезно.

Источник

Писать скрипты для Mikrotik RouterOS — это просто

блокировать все TCP соединения на порт 80 по адресу example.com

блокировать все TCP соединения на порт 80 по любому адресу из списка с именем DenyThis

Текст скрипта нужно добавить в репозиторий скриптов, находящийся в разделе /system scripts.
Скрипт выполняется построчно. Каждая строка имеет следующий синтаксис:
[prefix] — «:» — для глобальных комманд, с символа «/» начинается командная строка, которая будет выполняться относительно корня конфигурации, префикс может отсутствовать, тогда командная строка выполняется относительно текущего раздела конфигурации;
[path] — путь до требуемого раздела конфигурации, по которому происходит переход перед выполнением команды;
command — непосредственно действие, выполняемое командной строкой;
[uparam] — безымянный параметр команды;
[param=[value]] — именованные параметры и их значения.

Итак, первым делом, определим параметры работы скрипта в виде переменных. Переменная объявляется командами :local и :global, соответственно получаем локальную переменную, доступную только внутри своей зоны видимости, или глобальную, которая добавляется в список переменных окружения ОС и будет доступна откуда угодно. Локальные переменные живут, пока выполняется их зона видимости, глобальные — пока мы не удалим их.

Переменная DNSList содержит массив доменов, с которым мы хотим работать. Переменная ListName содержит строку, которой будет называться полученный address-list. Переменная DNSServers — содержит массив адресов DNS-серверов, прописанных на роутере или полученных от провайдера при подключении, плюс «восьмёрки» на случай, если на роутере не используется служба DNS, который будет использоваться для получения информации о записях доменов.

В цикле «для каждого» обойдём массив доменов и отрезолвим их IP-адреса на каждом DNS-сервере на случай, если разные DNS отдают разные IP. Конструкцияслужит для отлова runtime-ошибок. Если не использовать её, то скрипт может прервётся при ошибке резолва несуществующего или ошибочного адреса.

перейдём в раздел конфигурации /ip dns cahe all. Там содержатся DNS-кэш роутера в виде таблицы Name — Type — Data — TTL. Выполним отбор по типу — нам требуются только A-записи. И результат отбора обойдём в цикле «для каждого». Это и будет главным циклом нашего скрипта.

Создадим переменные, обновляемые в каждом цикле: два флага — bNew, исключающий дублирования, match, показывающий, входит ли текущая запись кэша в наш список доменов; переменная cacheName содержит поле Name текущей записи кэша, то есть домен.

Обойдём список доменов и для каждого проверим, содержится ли в строке cacheName подстрока в виде домена из этого списка.

Если содержится, установим значение флага match в true.

В заключающем этапе если текущий адрес требует добавления (match установлен в true), то мы его добавляем в список адресов. Коментарий к добавляемой записи будет содержать домен, к которому она относится. При этом выполняем несколько проверок. Если address-list пустой, то добавляем сразу, если что-то там есть, проверяем, нет ли там уже записи с таким IP-адресом и если нет — добавляем.

Список адресов нужно периодически обновлять. Для этого в RouterOS есть диспетчер заданий. Задание можно добавить из консоли или из графического интерфейса winbox

Сценарии работы со списком адресов не ограничиваются созданием правил в фаерволе. Поэтому приведу несколько примеров. Можно выполнять в консоли, можно добавлять мышкой в winbox’е.
Чёрный список:

Статический маршрут до данных узлов

Сбор информации о клиентах

UPD: специально по просьбе turone внёс изменения в скрипт, чтобы адреса DNS-серверов брались из системы.
UPD 24.08.2016: заметил, что в новых версиях RouterOS (начиная с 6.36) появилась возможность указывать в адрес-листах DNS-имена. Так что теперь ценность данного скрипта лишь образовательная.

Источник

Удалённое включение скриптов Mikrotik из Telegram

И комментарий в одной из групп ВК Кирилла Казакова:

Да уж, совсем не секьюрно. Я бы лучше написал телеграм бота, который принимает только с моего аккаунта команды на включение.

Я решил написать такого бота.

Итак, первое, что нужно сделать – это создать бота в telegram.

Use this token to access the HTTP API: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

как запускать скрипты на микротике
Затем, нужно найти нашего бота в поиске по имени @MikrotikROuter_bot и нажать на кнопку Start.

После этого нужно открыть браузер и ввести следующую строку:

Где XXXXXXXXXXXXXXXXXX – токен вашего бота.

Откроется страница примерно следующего вида:

как запускать скрипты на микротике

Находим на ней следующий текст:

Итак, у нас есть вся необходимая информация для написания скриптов для Mikrotik’а, а именно:

Токен бота: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

ID чата, куда он должен писать: 631290

Для проверки можем зайти через браузер:

Должны получить результат:

как запускать скрипты на микротике

Для нашего удобства, сразу добавим команды для бота:

Находим аккаунт с именем @botfather
После чего пишем ему команду /setcommands

Сейчас немного поясню что они делаю:

Создаем задание:

непонятно почему но из рабочего скрипта не оглашает глобальные данные, добавил скрипт при загрузке системы.
Telegram-startup

Как это работает

Все проверено на Mikrotik rb915 RouterOS 6.37.1
Если отправить сразу много команд, они все по очереди будут выполняться с интервалом 30 сек.

P.S. Огромное спасибо Кириллу Казакову за идею и моему другу Александру за помощь со скриптами.

Ссылки

Добавил проверку на chat_id
Проверка на дурака, если кто то напишет нашему боту, он ответит ему: » I can’t talk with you. «, аналогично ответит нам, если не распознает команду.
По выполнению команды, бот отписывается в чат (см. Скрипт wolmypc)

Нашли с 7Stuntman7 что файл с выше

14 сообщений, перестает обрабатываться командой find (ограничения Mikrotik). По этому в будущем скрипт переделаю на lua cпасибо 7Stuntman7 за это, про lua не знал.

в Telegram видимо немного изменили «выхлоп» getUpdate. теперь в основном скрипте нужно поправить смещение сообщения с 2 на 1

Источник

Универсальный скрипт переключения 2-х каналов интернета Mikrotik

Около 2,5 лет назад писал статью на тему автоматического переключения канала Интернет на резервный. Скрипт, конечно, и по сей день работает «на отлично», но его внешний вид и некоторые нюансы…

Итак, встала задача улучшить скрипт, максимально устранив побочные эффекты. Что ж, приступим.

как запускать скрипты на микротике

В нашем распоряжении Mikrotik RB850Gx2, для которого мы будем писать скрипт (его работоспособность также проверена на моделях RB450G и RB951G-2HnD).

как запускать скрипты на микротике

Присвойте скрипту имя, например, script-check-inet

Что же будем в нем использовать?

Итак, для начала определим необходимые переменные:

где:
$firstInterface — имя нашего PPPoE-соединения основной линии связи.
$secondInterface — имя нашего Ethernet-соединения резервной линии.
$pingTo1 и $pingTo2 — IP-адреса ресурсов, которые будем «пинать».
$pingCount — количество пингов на каждый IP-адрес
$stableConnectFrom — процентное соотношение для определения «стабильности» Интернет-канала. Например, в нашем случае при потере свыше 30% пакетов пинга (`$pingStatus Создадим запись в шедулере

как запускать скрипты на микротике

как запускать скрипты на микротике

В поле `Name` введите имя записи, чтобы не запутаться.
Поле `Start Time` я выставил `00:00:00` для запуска ровно в полночь.
Интервал — 30 секунд
В поле `On Event` вписываем имя нашего скрипта — `script-check-inet`
И жмем «ОК».

Вот, собственно, и все!

Ниже под спойлером приведен полный код скрипта.

Так как мы ввели дополнительную переменную `$firstInterfaceName`, то удалось изменить эту конструкцию и добились работоспособности скрипта на всех перечисленных устройствах.

UPD 2

Код скрипта в очередной раз был обновлен. esudnik обратил внимание на проблему большого количества потерянных пакетов при активном подключении к сети. Таким образом, мы ввели дополнительную переменную (`stableConnectFrom`), используемую для определения процентного соотношения «качества» линии.

В примере указано значение переменной равное «70». Это значит, если процент успешно отправленных пакетов будет ниже 70%, скрипт активирует резервный канал.

UPD 3

Как заметил icCE, при использовании скрипта на прошивке 6.36rc10, выходит ошибка:

Прошивке не нравится «* 100«. Решение проблемы было простым — обрамить вычисляемые значения в дополнительные скобки, получив

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *