Mikrotik как удалить файл
Русскоязычный онлайн-курс по MikroTik от нашего коллеги Дмитрия Скромнова. Здесь можно изучить MikroTik и RouterOS самостоятельно по курсу «Настройка оборудования MikroTik». Курс основан на официальной программе MTCNA, но содержит больше информации. Это 162 видеоурока и большая практическая задача, разбитая на 45 лабораторных работ. Время на изучение неограниченно – все материалы передаются бессрочно и их можно пересматривать сколько нужно. Первые 25 уроков можно посмотреть бесплатно, оставив заявку на странице курса.
Суть задачи
В ряде скриптов у меня стали участвовать одни и те же функции, такие как работа со временем, озвучка действий и тд. Тут значит возникает идея, а почему бы не вынести их в :global ? Помучившись пару часов на тему единого массива с функциями, я пришёл к неутешительному выводу, что RouterOS так не умеет и жить всем функциям отдельными переменными. Смирившись с сей траблой я поставил пару экспериментов и начал собирать скрипт. Эту статью я буду пополнять по мере создания функций и уровню их полезности на мой взгляд. В случае если у кого-то возникнут предложения или коррективы по данному вопросу, буду рад участию. Далее следует набор функций, в формате «как есть».
Edelweiss на GitHub
Для того чтобы воспользоваться функциями библиотеки не только из консоли но и в других скриптах, необходимо добавить в эти скрипты глобальные переменные библиотеки. Как только переменные добавлены, функции становятся доступными для скрипта локально.
Часто используемые переменные
Звуковое оформление для скриптов
Функция отвечает за озвучку действий скриптов. На входе воспринимает три массива — частота звука (Frequency), длительность звука (Length) и длительность задержки между звуками (Delay). Данные указываются в герцах и миллисекундах.
Удаляем все ARP записи
Удаляем все соединения фаервола (аналогично предидущему)
Работа с датой и временем
Состояние интерфейсов
Функция возвращает состояние активности интерфесов ( running ) заданного типа (Type). Есть два варианта использования. Первый — когда указывается номер конкретного интерфейса (Number), соответственно на выходе информация о нём. Второй — когда не указывается номер конкретного интерфейса, тогда на выходе результат всех интерфейсов этого типа. Если все активны, функция возвращает true , если хотя бы один не активен — false .
Включение/отключение интерфейсов по disabled статусу
Включение/отключение интерфейсов по running статусу
Удаление старых файлов
Создаёт папки в локальном хранилище при помощи FTP
Функция предназначена для создания директорий на файловом хранилище маршрутизатора. Данная функция отличается от опубликованной на официальном сайте MikroTik тем, что можно создать сразу несколько директорий, а имя пользователя и пароль задаются непосредственно при выполнении функции, а не создаются рандомно.
Сохраняет конфигурации
Сохраняет экспорт файлы на FTP
Создаёт адрес листы для динамически созданных IP (dhcp-client, vpn, …)
Функция создаёт адрес листы для динамически созданных IP адресов. К таковым относятся полученные по DHCP адреса на всевозможных интерфейсах. Второй вариант использования предполагает поиск по фрагменту имени интерфейса и добавление его IP адреса в заданный адрес лист.
Контроллер
Контроллер работы скриптов и функций. Выполняется каждые 5 секунд при наличии скриптов «Edelweiss» и «Control» а так же глобальных переменных «controlledScripts» и «controlledFunctions». Следит за работой скриптов и при аварии перезапускает их. Так же будет полезен как некий аналог штатного планировщика для работы функций построенных на базе Edelweiss.
Массив целей контроллера
Содержимое скрипта «Control». В данном примере Edelweiss будет каждые 5 секунд производить мониторинг работы скрипта «Failover» и выполнять функции «$alSet List=Dynamic» и «$alSet Find=uplink List=Uplink». Экранирование знака «$» обязательно, иначе он будет распознаваться как переменная до выполнения функции.
PS
Узнать больше о том, как работают скрипты в MikroTik RouterOS можно у нашего коллеги Дмитрия Скромнова из русскоязычного онлайн-курса для самостоятельного изучения. Основанный на официальной программе MTCNA, зтот курс по MikroTik и RouterOS , содержит много полезной информации не вошедшей в MTCNA. Целых 162 видеоурока и большое практическое задание, разбитое на 45 лабораторных работ. Время на изучение неограниченно – все материалы передаются бессрочно и их можно пересматривать сколько нужно. Первые 25 уроков можно посмотреть бесплатно, оставив заявку на странице курса.
Библиотека функций для MikroTik RouterOS : 8 комментариев
Очччень интересная мысль. Спасибо.
Если не трудно, поправьте в статье в самом начале в списке объявляемых переменных вместо повторяющейся flDel последней должна быть flCre. И применение для переменной ifRun должно описывать действия с ней, а не с предыдущей ifDis.
Спасибо вам огромное за то, что поделились в сети своими наработками.
Спасибо, поправил. Скоро будет ещё пара интересных функций в библиотеке.
Помучившись пару часов на тему единого массива с функциями, я пришёл к неутешительному выводу, что RouterOS так не умеет …
Чей та не умеет. Умеет !
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
RouterOS — сетевая операционная система на базе Linux. Данная операционная система предназначена для установки на аппаратные маршрутизаторы Mikrotik RouterBoard. Также данная система может быть установлена на ПК (или виртуальную машину), превращая его в маршрутизатор. Изначально довольно богатая функционалом ОС нет нет да и удивит отсутствием какой-нибудь нужной фишки из коробки. К сожалению, доступ к Linux-окружению очень сильно ограничен, поэтому, «это есть под Linux» абсолютно не равнозначно «это есть в RouterOS». Но не надо отчаиваться! Эта система предоставляет несколько возможностей для расширения своего функционала. Первая — самая простая и нативная — это возможность писать скрипты на встроенном языке.
В данной статье, в качестве примера будет рассмотрен скрипт, преобразующий DNS-имена в списки IP-адресов (address lists).
Зачем он может быть нужен? Многие сайты используют Round Robin DNS для распределения нагрузки (а некоторые и не только для этого). Чтобы управлять доступом к такому сайту (создать правило маршрутизации или фаервола) нам потребуются все IP-адреса, соответствующие этому доменному имени. Более того список IP-адресов по истечении времени жизни данной DNS-записи (в данном случае речь идёт об A-записи) может быть выдан абсолютно новый, поэтому информацию придётся периодически обновлять. К сожалению в RouterOS нельзя создать правило
Дело осталось за малым — автоматически формировать этот самый список. Кто ещё не утомился от моей писанины приглашаю под хабракат.
Текст скрипта нужно добавить в репозиторий скриптов, находящийся в разделе /system scripts.
Скрипт выполняется построчно. Каждая строка имеет следующий синтаксис:
[prefix] — ":" — для глобальных комманд, с символа "/" начинается командная строка, которая будет выполняться относительно корня конфигурации, префикс может отсутствовать, тогда командная строка выполняется относительно текущего раздела конфигурации;
[path] — путь до требуемого раздела конфигурации, по которому происходит переход перед выполнением команды;
command — непосредственно действие, выполняемое командной строкой;
[uparam] — безымянный параметр команды;
[param=[value]] — именованные параметры и их значения.
Итак, первым делом, определим параметры работы скрипта в виде переменных. Переменная объявляется командами :local и :global, соответственно получаем локальную переменную, доступную только внутри своей зоны видимости, или глобальную, которая добавляется в список переменных окружения ОС и будет доступна откуда угодно. Локальные переменные живут, пока выполняется их зона видимости, глобальные — пока мы не удалим их.
Переменная DNSList содержит массив доменов, с которым мы хотим работать. Переменная ListName содержит строку, которой будет называться полученный address-list. Переменная DNSServers — содержит массив адресов DNS-серверов, прописанных на роутере или полученных от провайдера при подключении, плюс «восьмёрки» на случай, если на роутере не используется служба DNS, который будет использоваться для получения информации о записях доменов.
В цикле «для каждого» обойдём массив доменов и отрезолвим их IP-адреса на каждом DNS-сервере на случай, если разные DNS отдают разные IP. Конструкцияслужит для отлова runtime-ошибок. Если не использовать её, то скрипт может прервётся при ошибке резолва несуществующего или ошибочного адреса.
Перейдём в раздел конфигурации /ip firewall address-list и удалим все записи, в которых название списка содержит значение переменной $ListName. Конструкция из квадратных скобок позволяет в рамках текущей команды выполнить другую, а результат выполнения передать текущей в виде параметра.
перейдём в раздел конфигурации /ip dns cahe all. Там содержатся DNS-кэш роутера в виде таблицы Name — Type — Data — TTL. Выполним отбор по типу — нам требуются только A-записи. И результат отбора обойдём в цикле «для каждого». Это и будет главным циклом нашего скрипта.
Создадим переменные, обновляемые в каждом цикле: два флага — bNew, исключающий дублирования, match, показывающий, входит ли текущая запись кэша в наш список доменов; переменная cacheName содержит поле Name текущей записи кэша, то есть домен.
Обойдём список доменов и для каждого проверим, содержится ли в строке cacheName подстрока в виде домена из этого списка.
Очень просто — логика скрипта предполагает что под-домены должны обрабатываться так же как домены. Если мы хотим блокировать социалочки, то имеет смысл блокировать не только основной домен, но и, к примеру, сервера отдающие статику, картинки, скрипты, и находящиеся на под-доменах данного сайта. Так же это позволит избежать перечисления отдельно доменов с «www» и без. То что, эти домены не попали в кэш при резолве — не страшно, т.к. они могут попасть туда при резолве браузером пользователя (правда для этого нужно, чтобы DNS-запросы пользователя обрабатывались в RouterOS).
Если содержится, установим значение флага match в true.
В заключающем этапе если текущий адрес требует добавления (match установлен в true), то мы его добавляем в список адресов. Коментарий к добавляемой записи будет содержать домен, к которому она относится. При этом выполняем несколько проверок. Если address-list пустой, то добавляем сразу, если что-то там есть, проверяем, нет ли там уже записи с таким IP-адресом и если нет — добавляем.
Список адресов нужно периодически обновлять. Для этого в RouterOS есть диспетчер заданий. Задание можно добавить из консоли или из графического интерфейса winbox
Сценарии работы со списком адресов не ограничиваются созданием правил в фаерволе. Поэтому приведу несколько примеров. Можно выполнять в консоли, можно добавлять мышкой в winbox'е.
Чёрный список:
Статический маршрут до данных узлов
Сбор информации о клиентах
UPD: специально по просьбе turone внёс изменения в скрипт, чтобы адреса DNS-серверов брались из системы.
UPD 24.08.2016: заметил, что в новых версиях RouterOS (начиная с 6.36) появилась возможность указывать в адрес-листах DNS-имена. Так что теперь ценность данного скрипта лишь образовательная.
о том, чего нет в мануалах
Обнаружена блокировка рекламы: Наш сайт существует благодаря показу онлайн-рекламы нашим посетителям. Пожалуйста, подумайте о поддержке нас, отключив блокировщик рекламы на нашем веб-сайте.
Удаление файлов по дате.
Всем здрасти! Подключил к своему RB951Ui-2HnD внешний диск для бекапов. Помогите со скриптом удаления всего, что старше определенной даты.
Держи.
Например этот скрипт удаляет все файлы старше 7 дней, которые лежат на disk1
Механизм выборки файлов взят отсюда, я добавил команду удаления.
Он мне все удаляет :) Создаю файл, выполняю скрипт, файла нет. Дата на роутере установлена правильно.
слегка изменил вышеуказанных скрипт под свои задачи, возможно кривовато, так как практически наугад доделывал, зато работает. удаляются все файлы и вложенные папки старше 7 дней, из папки video на внешнем usb диске. Имя диска в скрипте указывать не надо, создавайте папку под файлы участвующие в проверке и имя папки пишите в фильтр.
Всем привет. Сразу скажу, что в написании скриптов я полный ноль. Поэтому нужна помощь с запуском и работой данного скрипта. Суть в том, что я с камеры наблюдения направил запись на СД-карту, которая вставлена в роутер, подняв на нём ftp-сервер. Всё работает замечательно, пока СД-карта не заполнена целиком )))
Учитывая, что в роутере нет встроенного механизма удаления файлов, попробовал установить скрипт, описанный в данной теме. Хочу посоветоваться, всё ли правильно сделал. Зашёл в роутер через winbox и в меню \system\script создал скрипт и перенёс данный текст и нажал на кнопку Run Script. Для пробы установил интервал удаления в два дня. Теперь вопрос - в меню script\jobs он автоматически не появился. А должен он появляться? И если роутер перезагрузить, скрипт будет запускаться автоматически или каждый раз нужно заходить в меню \system\script и нажимать Run Script?
В одном уроке на Ютьбе было сказано, что для автоматического запуска пользовательского скрипта достаточно файл со скриптом обозвать myscript.auto.scr и поместить на СД-карту и, мол, система его сразу же запустит. Сразу попробовал именно так. Но понять, работает скрипт или нет, мне трудно.
Заранее спасибо за помощь. В сети очень мало информации для новичков и не опытных пользователей. Подача материала для меня сложна и не понятна в подобных туториалах.
Ага. Посмотрел на Wiki синтаксис циклов в скриптовом языке. Просто написать как в Си "for (;;) <>;" или "while (1)<>;" и поместить туда тело данного скрипта не получиться. Однако, есть конструкция, аналогичная Си - do. while (); Думаю, что это поможет зациклить данный скрипт, что бы в ручную не заходить и не запускать данный скрипт для автоматического удаления файлов старше 30-ти дней. Т.е. нечто подобное :do <"script body">while (1);"script>
Командная строка используется в Mikrotik для конфигурации через SSH, Telnet или Winbox. При вводе команд используется иерархия. Например, введя команду /ip route, мы можем вводить другие команды, находясь уже в этой ветви.
Вы можете также использовать / и .. для выполнения команд из других уровней меню без изменения текущего уровня.
[23q@23q] /ip> firewall nat
[23q@23q] /ip firewall nat> .. address-list
[23q@23q] /ip firewall address-list>
В Mikrotik активно используют функцию "Быстрый ввод". Она позволяет дополнять ввод команд. Аналогично как в Linux. Если вы написали начало команды, то можете использовать TAB для автоввода.
[admin@MikroTik] > interface set e[Tab]_
[admin@MikroTik] > interface set ether[Tab]_
[admin@MikroTik] > interface set ether[Tab]_
ether1 ether5
[admin@MikroTik] > interface set ether_
Если вы набрали часть слова, которое может быть одним из нескольких команд, то после нажатия TAB ничего не произойдет, но после повторного нажатия - покажутся варианты автодобавления команд.
Ввод можно начинать не только с начала команды, но и с середины.
[admin@MikroTik] > interface x[TAB]_
[admin@MikroTik] > interface export _
[admin@MikroTik] > interface mt[TAB]_
[admin@MikroTik] > interface monitor-traffic _
[23q@23q] > ip f f
[23q@23q] /ip firewall filter> /
[23q@23q] > ip p p
enabled: yes
src-address: ::
port: 8080
anonymous: no
parent-proxy: ::
parent-proxy-port: 0
cache-administrator: webmaster
max-cache-size: unlimited
max-cache-object-size: 2048KiB
cache-on-disk: no
max-client-connections: 600
max-server-connections: 600
max-fresh-time: 3d
serialize-connections: no
always-from-cache: no
cache-hit-dscp: 4
cache-path: web-proxy
[23q@23q] > ip p
packing pool proxy
[23q@23q] > ip proxy print
enabled: yes
src-address: ::
port: 8080
anonymous: no
parent-proxy: ::
parent-proxy-port: 0
cache-administrator: webmaster
max-cache-size: unlimited
max-cache-object-size: 2048KiB
cache-on-disk: no
max-client-connections: 600
max-server-connections: 600
max-fresh-time: 3d
serialize-connections: no
always-from-cache: no
cache-hit-dscp: 4
cache-path: web-proxy
Некоторые общие команды: print, set, remove, add, find, get, export, enable, disable, comment, move. Описывать их не буду, по-моему и так понятно.
Control-X переключение в безопасный режим, повторным нажатием - обратно (тоже самое что Safe Mode в WinBox);
Для входа в Безопасный режим из командной строки используют команду [CTRL] + [X]. Если во время ввода команд соединение разорвется, все внесенные изменения откатятся назад. Что-бы сохранить настройки и выйти из этого режима нужно повторно нажать [CTRL] + [X]. Что бы выйти, не сохраняя настроек, используйте команду [CTRL] + [D].
[U] - отменяет все изменения безопасного режима другого пользователя и помещает текущий сеанс в безопасный режим;
[R] - сохраняет все текущие изменения другого пользователя в безопасном режиме и помещает текущий сеанс в безопасный режим. Предыдущий владелец безопасного режима уведомляется об этом:
[D] - не входить в этот режим.
Стоит сказать, что история команд безопасного режима может хранить до 100 команд. Если вы превысите это количество, предыдущие команды не будут отменены. Поэтому старайтесь не вводить большое количество команд в безопасном режиме.
То есть забираем по 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) Использовать шедулер –
также создаём правило в файрволе, но не указываем конкретное время –
Далее получаем номер правила с помощью
И теперь создаём два правила шедулера –
Отправка почты при изменении состояния порта:
Делаем бекап конфигов микрота и отправляем на удаленный FTP сервер:
Еще один скрип бекапа на FTP
Бекап по частям
ip firewall export file=ip-firewall.rsc
ip pool export file=ip-pool.rsc
ip route export file=ip-route.rsc
Добавляем автоматически 254 маршрута:
Указываем мост одной командой для всех интерфейсов:
>interface bridge port add interface=ether1 bridge=bridge-local; ip address set 0 interface=bridge-local; ip dhcp-server set 0 interface=bridge-local
Меняем MAC на интерфейсе на свой:
Проверяем шлюз провайдера, если он отличается от статического – синхронизируем:
Если через PPPOE соединение некоторые сайты не открываются.
Необходимо сделать изменения в Firewall > Mangle.
Удалить динамические правила change MSS all ppp.
Добавить правило:
/ip firewall mangle add action=change-mss chain=forward new-mss=1360 protocol=tcp tcp-flags=syn tcp-mss=1453-65535
Изменить профиль, что бы динамические правила больше не создавались:
Локальное перенаправление портов:
/ip firewall nat
add action=dst-nat chain=dstnat dst-address=192.168.224.1 dst-port=8181 \
in-interface=bridge-local protocol=tcp src-address=192.168.224.0/24 \
to-addresses=192.168.224.20 to-ports=8080
add action=dst-nat chain=dstnat dst-address=192.168.224.1 dst-port=8182 \
in-interface=bridge-local protocol=tcp src-address=192.168.224.0/24 \
to-addresses=192.168.224.20 to-ports=555
add action=src-nat chain=srcnat dst-address=192.168.224.20 dst-port=8080 \
out-interface=bridge-local protocol=tcp src-address=192.168.224.0/24 \
to-addresses=192.168.224.1 to-ports=8181
add action=src-nat chain=srcnat dst-address=192.168.224.20 dst-port=555 \
out-interface=bridge-local protocol=tcp src-address=192.168.224.0/24 \
to-addresses=192.168.224.1 to-ports=8182
Если через PPPOE соединение некоторые сайты не открываются, необходимо сделать изменения в Firewall > Mangle.
Удалить динамические правила change MSS all ppp.
Добавить правило:
/ip firewall mangle add action=change-mss chain=forward new-mss=1360 protocol=tcp tcp-flags=syn tcp-mss=1453-65535
Изменить профиль, что бы динамические правила больше не создавались:
PPP > Prifiles > Default > General > Change TCP MSS “no”.
:local NOIPUser “логин_ноип”
:local NOIPPass “пароль_ноип”
:local WANInter “интерфейс_в_инет”
Дописать текст в файл:
:local ts [/system clock get time]
:set ts ([:pick $ts 0 2].[:pick $ts 3 5].[:pick $ts 6 8]):local ds [/system clock get date]
:set ds ([:pick $ds 7 11].[:pick $ds 0 3].[:pick $ds 4 6]):local ContentsFile [/file get isp-stat.txt contents];
/file set isp-stat.txt contents=”$ContentsFile\nISP DOWN-$ds-$ts”
Проверка средней скорости интернет и запись в log файл:
:local txAvg 0
:local rxAvg 0:local ts [/system clock get time]
:set ts ([:pick $ts 0 2].[:pick $ts 3 5].[:pick $ts 6 8]):local ds [/system clock get date]
:set ds ([:pick $ds 7 11].[:pick $ds 0 3].[:pick $ds 4 6])tool bandwidth-test protocol=tcp direction=transmit address=ip_bandsw_test_server duration=5s do= :set txAvg ($”tx-total-average” / 1048576 );
>tool bandwidth-test protocol=tcp direction=receive address=ip_bandsw_test_server duration=5s do= :set rxAvg ($”rx-total-average” / 1048576 );
>:local ContentsFile [/file get isp-quality.txt contents];
/file set isp-quality.txt contents=”$ContentsFile\n$ds-$ts tx: $txAvg Mbps – rx: $rxAvg Mbps”
log info “blah blah this log is in black”
log warning “blah blah this log is in blue”
log error “blah blah this log is in red”
Дополнительная информация при запуске консоли Mikrotik:
Читайте также: