Скрипты RouterOS

Первая часть цикла посвящена использованию скриптов, написанных на фирменном языке RouterOS. а также обзору основных методов автоматизации.

Нет комментариевПросмотров: 407
10апреля 2019
все статьи

Анонс

В цикле статей «Автоматизация при эксплуатации оборудования MikroTik RouterOS» представлен обзор средств автоматизации, применяемых при эксплуатации оборудования на базе RouterOS. Решения применимы как к аппаратным решениям MikroTik, так и к облачным решениям, построенным на базе RouterOS.

Первая часть цикла посвящена использованию скриптов, написанных на фирменном языке RouterOS (RouterOS скрипт), а также обзору основных методов автоматизации.

Введение

Современная сфера связи демонстрирует сильную интеграцию инструментов, ассоциируемых со сферой разработки ПО, в область телекоммуникаций. В частности, при эксплуатации систем связи всё чаще используются средства автоматизации.

Использование подобных инструментов и методов имеет ряд особенностей и применимо не во всех реализациях:

  • внедрение средств автоматизации снижает затраты на фонд оплаты труда сотрудников за счёт снижения их числа, однако повышенные требования к профессиональным навыкам сотрудников увеличивает уровень заработной платы этих сотрудников;
  • усложнение инструментов и увеличение их числа требует постоянного профессионального развития сотрудников. Зачастую им приходится решать нетривиальные задачи, что снижает уровень рутины и повышает заинтересованность;
  • замена ручных средств эксплуатации на автоматизированные снижает уровень ошибок и, как следствие, повышает надёжность и доступность сервиса. Влияние данного аспекта увеличивается с ростом числа устройств в сети.

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

Под сетевыми задачами, решаемыми средствами автоматизации, в рамках этой статьи понимаются три типа задач:

  • контроль и обновление программного обеспечения устройств;
  • анализ и применение унифицированной конфигурации на устройствах с возможностью их изменения/дополнения;
  • контроль за состоянием устройств и каналов связи и оперативная реакция на возникающие события.

ИНСТРУМЕНТЫ АВТОМАТИЗАЦИИ

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

  • шаблоны конфигураций;
  • NMS/EMS;
  • скрипты, выполняемые на устройствах с RouterOS;
  • скрипты, выполняемые на локальном устройстве.

Шаблоны конфигураций

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

Недостатком данного метода является то, что объём ручного труда снижается, но остаётся достаточно большим. Кроме того, трудно поддерживать такую инфраструктуру в случае необходимости внесения в конфигурацию каких-либо изменений, однако, в начале эксплуатации, конфигурация оборудования будет унифицирована.

Данный метод не будет рассматриваться в рамках статьи.

NMS/EMS

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

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

Обзор системы управления устройствами DUDE представлен в отдельном цикле статей и не будет дополнительно рассмотрен здесь.

TR-069

Операционная система RouterOS поддерживает спецификацию TR-069, описывающую протокол управления абонентским оборудованием через глобальную сеть (CWMP — CPE WAN Management Protocol). Изначально протокол разрабатывался для операторов связи, однако может быть использован и в корпоративных сетях.

Архитектура решения предусматривает выделение сервера конфигурации (ACS — auto configuration server), который, взаимодействуя с абонентскими устройствами по протоколу CWMP, выполняет сбор данных и конфигурацию. Устройства, находящиеся под управлением RouterOS, могут выступать в роли клиентских устройств. Для этого потребуется дополнительная установка и конфигурация пакета tr069.

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

Скрипты, выполняемые на устройствах с RouterOS

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

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

Скрипты, выполняемые на локальном устройстве

Данный метод подразумевает запуск скрипта на локальном устройстве администратора, который выполняет подключение к заданном списку устройств с RouterOS (операции могут быть выполнены как последовательно, так и параллельно) с помощью одного из методов (telnet, SSH, API) и выполнение заданных команд. Выполнение команд может сопровождаться получением и анализом данных об устройстве.

Данный метод является достаточно гибким и может быть реализован с помощью одного из распространённых языков программирования. Это выгодно отличает его от запусков скриптов на устройствах, т. к. написания исполняемых файлов для RouterOS потребует знать специфический синтаксис, который не подойдёт для оборудования других производителей.

Кроме того, этот инструмент хорошо масштабируется и позволяет получить отчёт об успешности выполнения изменений в конфигурации.

В рамках данной статьи будет рассмотрен вариант подключения через API и использование одной из систем управления конфигурациями. В качестве языка для написания скриптов будет выбран Python3, а в качестве системы управления конфигурациями — Ansible.

Следует упомянуть о том, что администраторы могут использовать комбинированные методы при эксплуатации сети, например, формировать файлы скриптов для RouterOS и доставлять эти файлы на устройства с помощью Ansible.

СКРИПТЫ, ВЫПОЛНЯЕМЫЕ НА УСТРОЙСТВАХ С ROUTEROS

В системе RouterOS предусмотрен раздел для хранения файлов скриптов (RouterOS scripting), расположенный в /system script. Раздел представляет из себя три директории: директория для хранения файлов скриптов ./script, директория для отображения скриптов, выполняемых в текущий момент ./job и директория с отображением переменных окружения ./environment.

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

Запуск скрипта может быть реализован тремя способами: вручную, периодический запуск по расписанию (/system scheduler) и запуск скрипта при возникновении события (пример такого сценария можно найти в цикле статей про протокол VRRP).

Скрипты, используемые на практики, носят частный характер и не являются универсальными, поэтому в рамках статьи не будут рассматриваться «готовые рецепты». Будет приведено описание возможностей языка для написания скриптов и представлены базовые приёмы, которые могут упростить знакомство со скриптами в RouterOS.

В качестве полезных данных следует привести ссылки на страницы из официальной документации:

  1. Синтаксис языка
  2. Полезные трюки при написании скриптов;
  3. Набор готовых скриптов по категориям.

Возможности языка для написания скриптов

Перечислим основные возможности языка для написания скриптов, используемого в RouterOS:

  • возможность использования локальных и глобальных переменных;
  • множество типов данных с акцентом на специфику сетевой операционной системы (num, bool, str, ip, ip-prefix, ip6-prefix, id, time, array (включая словари и многомерные массивы), nil);
  • наличие ключевых слов, используемых в командах (and, or, in);
  • возможность использования операторов различных типов (арифметические, логические, операторы сравнения, операторы побитовых операций (данный тип операций особенно полезен при манипуляциях с ip-адресами и подсетями), операторы конкатенации и другие);
  • возможность использования условного оператора и нескольких циклических операторов;
  • возможность использования функций (функция может быть вызвана как в текущем скрипте, так и в стороннем).

Структура команд

Скрипт представляет собой набор команд, выполняемых последовательно до первой ошибки, либо окончания списка. Каждая из команд строится по следующему шаблону:

[prefix] [path] command [uparam] [param=[value]] .. [param=[value]], где

  • prefix — символ префикса, определяющий характер команды („:“ указывает на глобальную команду, „/“ указывает на путь);
  • path - путь;
  • command — глобальная команда, либо команда подраздела path;
  • uparam — позиционные аргументы команды (если требуются);
  • param — ключевые аргументы команды;
  • value — значение ключевых аргументов команды;
  • […] - выражение в квадратных скобках является не обязательным.

Следует упомянуть, что в качестве позиционных аргументов и значений могут быть использованы выражения, представляющие из себя отдельные команды. Такие выражения должны быть заключены в квадратные скобки […].

Демонстрация выполнения скриптов

Вывод данных

Вывод данных в окно терминала выполняется с помощью глобальной команды put. Рассмотрим базовые способы вывода информации (см. рисунок 2.1):

Скрипт
Рисунок 2.1 — Текст скрипта spw_script

В тексте скрипта приведено четыре способа вывода информации, разделённые между собой выводом пустой строки для удобства отображения результата:

  1. вывод всех wireless-интерфейсов в виде словаря (свойства интерфейса указываются в формате „параметр=значение“);
  2. вывод значения параметра l2mtu для интерфейса с порядковым номером 0 (нумерация начинается с нуля) из словаря, полученного в предыдущем выводе;
  3. вывод значения параметра l2mtu для интерфейса с именем wlan1;
  4. вывод текстовой строки.

Результат выполнения скрипта представлен на рисунке 2.2. Отметим, что выполнена последняя команда скрипта, что свидетельствует об успешном выполнении всех команд, добавленных в скрипт.

Script
Рисунок 2.2 — Результат выполнения скрипта spw_script

Работа с переменными

Изменим скрипт spw_script в соответствии с рисунком 2.3:

Automation
Рисунок 2.3 — Текст скрипта spw_script

Первая команда присваивает переменной spw1 строку „L2-MTU on wlan1-interface =“, вторая команда записывает в переменную spw2 строку, являющуюся выводом из примера, рассмотренного выше. В третьей команде используется приём конкатенации строк, в которой выводятся переменные spw1 и spw2. Результат работы скрипта приведены на рисунке 2.4.

NMS
Рисунок 2.4 — Результат выполнения скрипта spw_script

Установка параметра

Создадим bridge-интерфейс с помощью скрипта. Для этого изменим файл скрипта spw_script в соответствии с рисунком 2.5:

EMS
Рисунок 2.5 — Текст скрипта spw_script

В первой команде создаётся строковая переменная с именем будущего интерфейса, а во второй команде создаётся bridge-интерфейс с заданным именем. Результат выполнения команды приведён на рисунке 2.6:

Automation RouterOS
Рисунок 2.6 — Результат выполнения скрипта spw_script

ЗАКЛЮЧЕНИЕ

В первой части статьи представлен обзор основных средств автоматизации и её целей. Рассмотрен метод применения скриптов (MikroTik script), написанных с помощью собственного языка RouterOS.

Вторая и третья статьи цикла будут посвящены централизованным и комбинированным методам автоматизации.

Вторая часть цикла: MikroTik Ansible

Третья часть цикла: MikroTik RouterOS API

поделиться материалом:

Читайте также

комментарии — 0