Mikrotik и Linux. Рутина и автоматизация

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Представлюсь, меня зовут Андрей.

Первоначальная задача стояла такая — создать сотни конфигов для Mikrotik, чтобы поднять на каждом ovpn с сертификатом, затем залить на сотни Mikrotik конфиги, а так же сертификаты и ключ.

Освоить MikroTik вы можете с помощью онлайн-курса «Настройка оборудования MikroTik». В курсе изучаются все темы из официальной программы MTCNA. Автор – официальный тренер MikroTik. Материал подходит и тем, кто уже давно работает с оборудованием MikroTik, и тем, кто еще не держал его в руках. В состав входят 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.

Пароль от сертификата у каждого уникален. Создавать сотни конфигов руками бред, да и в друг завтра скажут сделать новые или захочется залить еще какие-то изменения на Mikrotik.

Чего я хотел добиться:

  1. создавать автоматически уйму скриптов;
  2. автоматически отправить их на нужное мне оборудования;
  3. быть уверенным в том, что они отработали без ошибок или узнать о том, что конфиг выполнился не корректно.

image

Используя Bash и FTP все получилось.

Немного теории
В RouterOS можно автоматически выполнять скрипты (ваш файл скрипта должен иметь вид- имя.auto.rsc). После того, как файл будет загружен с помощью FTP на маршрутизатор, он будет автоматически выполнен, как и с командой '/import' (этот метод работает только с FTP).
Как только файл загружен, он автоматически выполняется. Информация об успешности выполнения команд записывается в имя.auto.log

AWK — C-подобный скриптовый язык построчного разбора и обработки входного потока (например, текстового файла) по заданным шаблонам (регулярным выражениям). Может использоваться в сценариях командной строки.

Expect — инструмент для автоматизации и тестирования в ОС Unix, написанный Don Libes как расширение к скрипт-языку Tcl, для интерактивных приложений таких, как telnet, ftp, passwd, fsck, rlogin, tip, ssh, и других.


Начнем с того, что я сделал 3 файла:

  1. Файл List.txt в него записал имя OVPN соединений (в моем случает название магазина) и пароль от ключа (разделял табуляцией);
  2. sh1.sh – Баш файл с командой построчного разбора по list.txt + конвейер;
  3. sh2.sh – Баш файл который с помощью Echo и переменных создает файл конфига и записывает в него наши настройки.

И так:

vi list.txt
gamazin1	pass1
gamazin2	pass2
gamazin3	pass3


vi sh1.sh
#!/bin/bash
awk '{print "./sh2.sh "$1 " "$2}' ./list.txt | /bin/bash 
sudo chmod +x sh1.sh

vi sh2.sh
#!/bin/bash
echo /certificate > rsc/$1.auto.rsc
echo import file-name=$1.crt passphrase=$2 >> rsc/$1.auto.rsc
echo import file-name=$1.key passphrase=$2 >> rsc/$1.auto.rsc
echo import file-name=ca.crt passphrase=$2 >> rsc/$1.auto.rsc
echo /interface ovpn-client >> rsc/$1.auto.rsc
echo add certificate=$1.crt_0 connect-to=10.10.10.10 name=$1_ovpn port=1111 user=$1 profile=default auth=sha1 cipher=blowfish128 >> rsc/$1.auto.rsc
#Каждую строчку отдельно пишем начиная с ehco.
sudo ./sh1.sh

Один нюанс!

$1.crt и $1.key их создали заранее по тому же list.txt, из — за этого имя файла так же название магазина.

Создали сотню конфигов. Теперь надо их разослать, используя все тот же AWK и Expect+FTP.

Создаем 4 файла:

  1. Файл list2.txt – в нем мы храним данные Mikrotik IP| Логин | Пароль | Название магазина. Разделял табуляцией.
  2. newsh1.sh – Баш файл с командой построчного разбора по list2.txt + конвейер
  3. newsh2.sh – Отправляет наши пожелания по FTP используя Expect пакет, который отвечает на запросы консоли.
  4. $1.auto.rsc – файл конфиг в моем случае они были созданы от переменной $1, которая являлась названием магазина в предыдущем скрипте. Пример gamazin1.auto.rsc.

vi list2.txt
192.168.1.1 admin   password1	gamazin1
192.168.2.1 admin   password2	gamazin2
192.168.3.1 admin   password3	gamazin3
#Может быть 1 файл list.txt со всей инфой для наглядности их несколько

vi newsh1.sh
#!/bin/bash
awk '{print "./newsh2.sh "$1 " "$2 " "$3 " "$4}' ./list2.txt | /bin/bash

sudo chmod +x newsh1.sh

Sudo apt-get install expect
vi newsh2.sh
#!/bin/bash
Mikrotik=$(expect -c "
    set timeout 3
    spawn ftp $1
    expect \"Name*\"
    send \"$2\n\"
    expect \"?assword:\"
    send \"$3\n\"
    expect \"ftp>\"
    send \"put $4.crt\n\" 
    expect \"ftp>\"
    send \"put $4.key\n\" 
    expect \"ftp>\"
    send \"put ca.crt\n\" 
    expect \"ftp>\"
    send \"put $4.auto.rsc\n\" 
    expect \"ftp>\"
    send \"bye\n\"
")
sudo ./newsh1.sh

Примечание


Сначала мы отправили сертификаты с ключом, а потом только конфиг (если делать в обратной последовательности он начнет ругаться что нет таких сертификатов).

Конфиги и сертификаты разлетелись как горячие пирожки. Из — за названия .auto.rsc по FTP Mikrotik их автоматически прогнал в себе и применились наши настройки.

Мы хотим знать, что везде все супер используя конфигурацию выше меняем 1 строку.

put на get

send \"get $4.auto.log\n\"
#Обратите внимание .log стал а не .rsc
 


Загрузили все файлики домой и прошлись по файлам сортировкой, где 0 байт размер файла у вас проблемы c Mikrotik. По имени файла можно узнать его IP по нашему файлику list2.txt. А в хорошем варианте открыв файл можно увидеть там “Script file loaded and executed successfully”.

Можно написать еще по этим файлам скрипты, но мне хватило сортировать файлы по весу.

Так же я еще один написал скрипт и после всех этих действий который закрывает FTP и наоборот открывает по SSH. Просто изменил FTP на SSH для того, чтобы…

Играемся с FTP
/ip service set ftp disabled=yes
#Это по SSH просто команду отправил
#Затер файл с паролями от ключей 
/file remove $4.auto.rsc 


Я пытался все сразу в 1 конфиг запихать, но file remove в конце команда не давала результата он не мог затереть файл, из которого получал эту команду. Были еще нюансы.

И в итоге… счастье! Можно управлять отдельными списками Mikrotik или всеми сразу, как душе угодно. Теперь, открывая FTP и закрывая можно отправлять команды и быть уверенным что они выполнились. Но мое мнение удобнее FTP, SSH не отвалился на пол пути так как вы будете уверены, что все прошло успешно, посмотрев в папке логи.

В данной статье я показал инструменты, а как использовать их можете придумать сами…
Все делал на Ubuntu 16.04.

Про auto.rsc в Mikrotik
AWK
Expect

Освоить MikroTik вы можете с помощью онлайн-курса «Настройка оборудования MikroTik». В курсе изучаются все темы из официальной программы MTCNA. Автор – официальный тренер MikroTik. Материал подходит и тем, кто уже давно работает с оборудованием MikroTik, и тем, кто еще не держал его в руках. В состав входят 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.
Источник: https://habr.com/ru/post/480404/


Интересные статьи

Интересные статьи

Помните старый мультфильм про Нехочуху? Ленивый мальчишка попал в страну великого Нехочухи, где большинство действий выполняли роботы. Надо сказать, мультипликаторы изобразили безрадо...
Всем доброго времени суток! В данной статье я хочу рассказать об одном OpenSource проекте под названием Docker RouterOS, изначально он был создан в качестве полигона для прогонки интеграционных ...
В данной области, как и во многих других, имеет место определенная технологическая эволюция. Точкой ее отсчета можно считать ручную обработку: когда человек мыл пол и стены дезинфицирующим раство...
В связи с пандемией вируса covid-19 и всеобщим карантином во многих странах единственным выходом многих компаний, чтобы продолжать работу — удаленный доступ к рабочим местам через интернет. Есть...
История сегодня пойдёт про автосервис в Москве и его продвижении в течении 8 месяцев. Первое знакомство было ещё пару лет назад при странных обстоятельствах. Пришёл автосервис за заявками,...