Скрипт на микротик для копирования файлов
То есть забираем по FTP lastconfig.backup и восстанавливаемся с него. FTP пользователь должен быть настроен, желательно с ограничением доступа по IP. Обратите внимание, что к FTP подключаемся по IP-адресу локального физического интерфейса, который доступен только между роутерами.
Этот скрипт ставим в планировщик на несколько минут позже выполнения скрипта резервного копирования.
И последний скрипт — применение настроек на резервном сервере. В нем также используется МАС для идентификации роутера.
Здесь меняем имя роутера, ip-адрес LAN-интерфейса и приоритет VRRP на меньший, чтобы роутер сделать слейвом. Запуск этого скрипта нужно поставить в автозагрузку. Изменения будут происходить на резервном сервере после копирования и применения последней актуальной конфигурации.
Локальное перенаправление портов:
/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 “интерфейс_в_инет”
Меняем MAC на интерфейсе на свой:
Настройка отправки почты
Для начала нужно указать какую почту и сервер smtp мы будем использовать для отправки. Перейдём в Tools – E-Mail:
Если вы хотите углубить свои знания по работе с роутерами MikroTik, то наша команда рекомендует пройти курсы которые сделаны на основе MikroTik Certified Network Associate и расширены автором на основе опыта . Подробно читайте ниже.
Планируемая последовательность действий
- Скачиваем шаблон CSV файла (FileTemplate.zip на GitHub);
- Добавляем пользователей в файл (проверено Microsoft Excel);
- Загружаем файл на устройство MikroTik;
- Создаем скрипт импорта PPP пользователей;
- Включаем Безопасный режим MikroTik;
- Запускаем скрипт;
- Проверяем журнал устройства и список PPP пользователей;
- Если все хорошо, выключаем Безопасный режим MikroTik;
- Пишем комментарий к статье, что всё получилось (укажите модель устройства и версию RouterOS).
Исправление ошибок
В процессе написания данной статьи я столкнулся с ошибкой аутентификации при отправке писем. В логах были вот такие события. Я сначала подумал, что пароль не верный, сменил, не помогло. Далее стал ковырять tool – e-mail, убрал поле from, пытался всячески отправлять через терминал разными вариациями – не помогло.
Решается оно довольно просто, но не логично. В настройках почтового ящика нужно включить поддержку протокола POP.
После чего, письма отправляются без проблем.
И так, в данной статье вы узнали как настроить на MikroTik автоматическую отправку созданных Backup email. Если вам понравился материал можете паставить 5 звезд и написать в комментариях слова благодарности:).
Если через 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
Изменить профиль, что бы динамические правила больше не создавались:
Видео: работа скрипта
Дописать текст в файл:
: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”
Блокировка трафика по времени:
Если нужно запретить трафик по времени ночью, скажем с 22:00 до 10:00 утра:
0) Стандартный способ – использовать два правила с временными промежутками 22:00:00-23:59:59 и 00:00:00-10:00:00
1) Использовать через запрет – Где-то в конце есть правило, которое запрещает, а конкретным правилом разрешать.
2) Использовать шедулер –
также создаём правило в файрволе, но не указываем конкретное время –
Далее получаем номер правила с помощью
И теперь создаём два правила шедулера –
Проверка средней скорости интернет и запись в 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”
Проверяем шлюз провайдера, если он отличается от статического – синхронизируем:
Добавляем автоматически 254 маршрута:
Конфигурационный файл устройства
Касательно файла конфигурации минимальная конфигурация это:
Остальные директивы конфиг файлы подробно описаны и являются опциональными, то есть имеют дефолтное значение:
Если вы хотите зашедулить выполнение, можно использовать пример cron задачи:
Итак, сразу об использовании в планировщике cron можете копировать и пользоваться моим решеним, но я немного поясню. Естественно все пути должны существовать и файлы должны быть доступны на чтение, а скприт на выполнение. Использование переменных в кроне не возбраняется и немного улучшает читабельность, когда кроновских задач у вас больше 50.
Не частая MikroTik задача — одномоментное создание множества VPN пользователей, но она встречается в практике сетевого администратора. Скрипт создает множество PPP (Point-to-Point Protocol) пользователей из CSV файла шаблона.
CSV (от англ. Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных. Строка таблицы соответствует строке текста, которая содержит одно или несколько полей, разделенных запятыми.
Wikipedia
Еще один скрип бекапа на FTP
Автоматизация резервного копирования
Как я говорил ранее, встроенных графических утилит для подобной задачи в RouterOS нет. Но мы будем использовать скрипт, который работает по следующему алгоритму:
- Задаёт глобальную переменную для системного бэкапа. По сути, генерирует имя из SystemID, даты, времени;
- Задаёт глобальную переменную для экспорта, аналогично п. 1;
- Создаёт бинарный бэкап без шифрования с именем из п. 1;
- Экспортирует конфиг с именем из п. 2;
- Отправляет письмо с бинарником;
- Отправляет письмо с экспортом;
- Удаляет созданные файлы резервных копий.
Наше дело добавить скрипт в System – Scripts.
Сам скрипт:
Запустим его из консоли:
В процессе работы создадутся в корне flash 2 файла. После отправки на e-mail они удаляться. Проверим почту.
К сожалению, вложение двух файлов в одно письмо я не осилил, как сделать, поэтому сделал отдельными. Если будут предложения, пишите их в комментариях.
Последним этапом зашедулим данный скрипт через планировщик в удобное для нас время.
По заданным параметрам, задание будет стартовать каждый день в 23:00.
Проверка синтаксиса скрипта
Бекап по частям
ip firewall export file=ip-firewall.rsc
ip pool export file=ip-pool.rsc
ip route export file=ip-route.rsc
Резервное копирование
Дополнительная информация при запуске консоли Mikrotik:
Всем привет, в моей первой публикации на хабре хочу поделиться готовым решением для бэкапов устройств Mikrotik.
Для микротика предусмотрены два вида бэкапов конфигурации, это бинарный бэкап и экспорт конфигурации. Бинарный бэкап имеет свои преимущества и недостатки. Преимуществом является то, что после восстановления бинарного бэкапа у вас сохраняется вся конфигурация( с пользователями, паролями, импортированными для пользователей ssh-ключами); недостатком же является то, что такой бэкап нельзя восстановить на другого типа устройство.
В целом и общем это полноценный бэкап, его восстановление занимает мало времени и восстанавливает всю конфигурацию. Экспорт конфигурации как способ бэкапа в свою очередь отчасти сглаживает эти недостатки, являясь скриптом для ребилда микротика. Суть тут в том, что выводятся все настройки, которые могут быть экспортированы. Преимуществом является то, что можно посмотреть и пощупать, что же там экспортируется, а к недостаткам можно опять же отнести то, что это тоже упирается в модель. но чуть меньше. Иногда дело в количестве интерфейсов, иногда ещё в чём-то. Так же не все настройки могут быть экспортированы в текст(пользователи, файлы на усройстве, ssh-ключи).
В целом и общем, как я вынес для себя, совершенно необходимо иметь для себя оба варианта и желательно регулярно и обязательно автоматически. Идею я взял из вики микротика: раз и два.
Предложенный вариант бэкапов по почте или ftp мне не нравится тем, что тут всё либо по почте, либо по ftp, всё plaintext. Так же не нравится то, что надо держать какой-то ящик или ftp и микротики сами будут слать. Мне удобнее всё делать с сервера бэкапов.
По сути для бэкапа по ssh руками достаточно просто зайти на микротик, выполнить бэкап и забрать его. Соответственно это можно автоматизировать.
Как вы уже поняли, реализовалось это всё с помощью обычного bash-скрипта, далее он немного оброс мусором и тихо работает. Поэтому я решил его описать здесь чтобы получить какой-то фидбэк от тех, кому это может быть интересно.
Итак, переходим непосредственно к скрипту.
Файлы скрипта
Для работы скрипта используется исполняемый файл и параметром к нему указывается файл конфигурации.
Соответственно размещается бэкапный скрипт в директории /usr/local/bin/ для простоты поиска оного в PATH, а файлы конфигурации хранятся в /etc/mikrotik_backup/ в соответствии с FHS. Размещение файлов дело сугубо личное, мне просто так удобнее.
Исполняемый скрипт
Самая первая секция содержит shebang, проверки конфигурационного файла, не указав который, скрипт не выполнится. Далее идут дефолтные переменные, достаточно лаконичные, часть из которых вы можете переопределить в файле конфигурации конкретного устройства.
Далее идёт строка, которая делает source конфигурационного файла:
После идёт секция с некоторыми переменными, которые лучше задавать после того, как импортируется конфигурационный файл и системные утилиты, которые я для пущей надёжности ищу через which:
После идёт определение функций скрипта, описание я дам ниже:
Все функции подписаны, но я немного поясню. Функции fn_check_log fn_check_readme проверяют и создают первичное наполнение файлов LOG.TXT и README.TXT
fn_check_directory проверяет создана ли директория для устройства, которое вы описываете в директиве ST_HOSTNAME="" в конфиг-файле
fn_mikrotik_cleanup выполняет очистку кэша DNS и истории команд в консоли, чтобы не тянуть это в бэкап и в секурных целях.
fn_mikrotik_fixtime вещь опциональная, которая принудительно устанавливает ntp-сервер для обновления времени. В этой функции можно написать всё, что угодно, если вы хотите постоянно это выполнять. Можно так же не пользоваться этой функцией если нет нужды.
fn_backup_binary и fn_backup_export делают бинарный и экспорт-бэкапы соответственно. При чём стоит заметить, что вместо plaintext, создаётся зашифрованный экспорт-файл используя openssl. (Соответственно нужно иметь openssl в системе)
fn_backup_retention упаковывает бэкапы старше чем ST_RTN дней, которую вы задаёте в конфиг файле, если не используете стандарт(30 дней). Функция кладёт их в папку archive
fn_log в самом конце скрипта создаёт запись в файле LOG.TXT о статусе бэкапа
Отправка почты при изменении состояния порта:
Код скрипта
В строке :local FileName «FileTemplate.csv»; вы можете указать свое название файла импорта.
Решение проблем
- Script CreatePPPUsers: running. Import from file: FileTemplate.csv— скрипт начал работу, импорт пользователей из файла FileTemplate.csv;
- Error run script CreatePPPUsers: file size exceeded 4 KB (size constraint of a variable in Router OS 6) — превышен размер переменной для RouterOS 6. Разделите файл на мелкие части или делайте поэтапный импорт пользователей;
- Script CreatePPPUsers: completed — работа скрипта корректно завершена.
Указываем мост одной командой для всех интерфейсов:
>interface bridge port add interface=ether1 bridge=bridge-local; ip address set 0 interface=bridge-local; ip dhcp-server set 0 interface=bridge-local
Скрипт не работает при запуске
Проверьте права запуска скрипта, они должны соответствовать указанным в статье (в ROS 6.47.8 замечена ошибка — максимальные права установленные по умолчанию, могут вызывать ошибку доступа).
🟢 Скрипт MikroTik — добавление множества VPN (PPP) пользователей, из файла csv, обсуждалось в этой статье. Я надеюсь, что теперь добавление большого количества VPN/PPP пользователей на устройство MikroTik не окажется сложной задачей. Однако, если вы столкнетесь с каким-то проблемами при настройке, не стесняйтесь написать в комментариях. Я постараюсь помочь.
✅ Скрипт проверен: MikroTik hAP ac lite (RouterBOARD 952Ui-5ac2nD), RouterOS 6.47.8 (stable).
Если заглянуть назад в прошлое когда еще не было Ansible или других систем удаленного администрирования linux мы пользовались только своими подручными скриптами, позволяли им подключаться к системам по ssh с помощью ключей. Думаю и по сей день многие использую свои скрипты взамен системам централизованного управления.
Я и решил поделиться своим опытом.
Нужно было написать скрипт который умеет ходить на заданное количество хостов и бекапит некоторые файлы конфигураций.
Логика работы выстроилась сразу. Зайти на хост по ssh, выполнить некоторые команды для подготовки бекапов и забрать готовые файлы с помощью scp.
- Имя пользователя для работы входа без пароля должно быть одинаковое на всех хостах или придется для каждого хоста указывать свой логин что не есть удобно;
- Пользователь должен иметь доступ на хост без пароля (ssh-keygen в помощь) ;
- Пользователь должен иметь доступ к файлам которые необходимо забрать.
Имеем такую конфигурацию —
10 хостов (Mikrotik) с которых необходимо получить два типа бекапов — бинарный (для восстановления с нуля) и конфигурацию без паролей и сертификатов для заливки на работающий конфиг. Так же в полном нашем распоряжении имеется машина с debian 8 на борту назовем ее сервер (и не важно что это контейнер, важно что это дебиан) ну и конечно куда ж без него — zabbix-server.
- IP Mikrotik — 10.10.0.1, 10.10.1.1, 10.10.2.1, 10.10.3.1, 10.10.4.1, 10.10.5.1, 10.10.6.1, 10.10.7.1, 10.10.8.1, 10.10.9.1;
- IP Zabbix-server — 10.10.10.10;
- Zabbix hostnames — mik0.host, mik1.host, mik2.host, mik3.host, mik4.host, mik5.host, mik6.host, mik7.host, mik8.host, mik9.host
Если кто не помнит — zabbix hostname мы указываем в файле настроек zabbix-agent(агент тут не нужен, но все же) и на сервере zabbix в web-ui.
Первым делом создаем на нашем сервере ключ RSA. Почему RSA — да вообщем то по привычке, кстати, старые версии RB поддерживают только DSA, а все что свежее 6.35 уже работает с RSA и DSA, потому смотрите по обстановке, можно и обновиться, как сделал я :), если у вас уже есть готовый ключ — пропускайте этот шаг.
ssh-keygen -t RSA
Переносим содержимое файла $HOME/.ssh/id_rsa.pub с сервера на наши хосты. Я ленивый и для Mikrotik использовал winbox.
Для линукс можно сделать проще создаем скрипт sh и запускаем его от имени пользователя которым мы будем ходить на хост за бекапами (на хостах пользователь уже должен быть) такого содержания —
Если у вас ключ DSA то измените id_rsa.pub на id_dsa.pub
Запускаем его и вводим поочередно пароли для всех 10 серверов.
В скрипте есть подвох — специально не стал добавлять проверку, а то совсем забуду как клавиши нажимать -) если вы все прочитали то подвох не сработает.
Тааак, что там дальше, а, точно, мы уже умеем ходить без пароля на все хосты под пользователем допустим user.
Мы же хотим получить конфиги Mikrotik. Собственно приступим.
Создаем на сервере вот такой вот скрипт —
Постарался максимально прокомментировать все что происходит в скрипте. Давайте разберем, что же тут такое делается.
Тут мы говорим каким интерпретатором будем выполнять код
Тут создаем массив с необходимыми нам данными для подключения к хостам и отправки данных в zabbix
Тут думаю только одна переменная нуждается в объяснении — $cmd. Это две команды которые выполняются на Mikrotik последовательно. Первая создает бинарный бекап
вторая создает скрипт с настройками без выгрузки паролей и ключей шифрования.
Тут чистим место. Переменная $age поможет нам сохранить бекапы столько сколько нам этого надо
Теперь самое тривиальное.
Создаем на сервере zabbix шаблон или просто элемент данных типа zabbix_trapper на наших узлах которые мы заблаговременно добавили на мониторинг в zabbix.
Не буду выкладывать шаблон из одного элемента данных и одного триггера. Думаю сделать его сможет каждый. Главное помнить, если хосты мониторятся через zabbix-proxy, данные вы должны отправлять на zabbix-proxy. В ином случае отправляем все на zabbix-server.
Не важно даже какой будет IP у этих хостов в zabbix web ui. Важно чтобы совпадали hostname с данными в скрипте.
PS. На все скрипты нужно кинуть chmod +x так их можно будет запускать без вызова интерпретатора.
P.S.S Чтобы передавать scp список файлов для резервного копирования на linux можно сделать еще одни массив и вложить его в цикл for. Можно сделать все в виде получаемых параметров. Ну вообщем можно развлечься.
В прошлой статье мы рассмотрели основные виды резервного копирования на Микротик (RouterOS). Итого у нас есть системный backup и экспорт конфигурации. Сегодня мы поговорим немного об автоматизации данного процесса и отправку созданных бэкапов на email.
Предположим, что у нас не один девайс, а несколько и со всех них нам бы хотелось иметь резервную копию как бинарного вида, так и экспорта. Встроенными графическими средствами нам автоматизации не добиться, будем использовать простенький скрипт. Для примера я возьму обычный CHR 6.48.2.
Содержание
Подключение к динамическим серверам или сервисам, на примере pptp-соединения
И создаём шедулер:
Делаем бекап конфигов микрота и отправляем на удаленный FTP сервер:
Настройка на 2 провайдера:
Проверка статуса роутера и выключение интерфейса
89 вопросов по настройке MikroTik
Вы хорошо разбираетесь в Микротиках? Или впервые недавно столкнулись с этим оборудованием и не знаете, с какой стороны к нему подступиться? В обоих случаях вы найдёте для себя полезную информацию в курсе «Настройка оборудования MikroTik». 162 видеоурока, большая лабораторная работа и 89 вопросов, на каждый из которых вы будете знать ответ. Подробности и доступ к началу курса бесплатно тут.
Создать скрипт
Для запуска скрипта необходимы разрешения: read, write, test, policy.
Перед запуском скрипта я рекомендую включить Безопасный режим MikroTik, а выключить Безопасный режим, убедившись, что скрипт отработал правильно — VPN пользователи были созданы.
Читайте также: