Наша почта:
В Москве:
РФ (звонок бесплатный):
Новые возможности RouterOS, контейнеры и магазин приложений
{ Евангелист в InRack }
Игорь Старшинов

Видео доклада

Презентация спикера

Новые возможности RouterOS, контейнеры и магазин приложений
Нововведения RouterOS компании MikroTik — контейнерам и разделу APP (магазину приложений), который позволяет задействовать свободные ресурсы маршрутизатора. Рассмотрены порядок установки, работа с хранилищем, типичные проблемы и ограничения, а также сценарии, в которых такое решение действительно оправдано.

Магазин приложений

Раздел APP появился в версии RouterOS 7.22 и позволяет установить приложение в один клик. Больше не нужно готовить контейнеры вручную, что-то импортировать и экспортировать: достаточно открыть список, выбрать приложение, установить его и начать работу.

Для подготовки требуются два пакета:
  • Container
    отвечает и за контейнеры, и за магазин приложений;
  • ROSE storage
    обеспечивает подключение к внешним хранилищам и работу с файловыми системами.
Оба пакета включаются в разделе System → Packages (Enable → Apply Changes), после чего маршрутизатор перезагружается.

Device-mode: обязательный шаг

После установки пакетов контейнеры оказываются доступны только для чтения: система сообщает, что текущий device-mode не позволяет использовать эти функции. У MikroTik есть таблица, показывающая, какие возможности открывает каждый из режимов device-mode, — контейнеры требуют соответствующего режима.

Режим меняется командой /system/device-mode/update, после чего даётся 5 минут на перезагрузку. Важно, что перезагрузка нужна «холодная»: на домашнем маршрутизаторе следует физически отключить питание, на виртуальной машине — выполнить hard reset. Обычные reboot или shutdown не сработают. Таким образом RouterOS убеждается, что изменения выполняет владелец устройства, а не злоумышленник, подключающий контейнеры для создания очередного ботнета.

Отдельно стоит отметить: начиная с версии 7.22 device-mode можно изменить через NetInstall, что удобно при автоматизированной настройке.

Требования раздела APP

Для работы APP необходимы диск и сетевой интерфейс. В качестве интерфейса подходит только bridge — существующий или новый. Файловая система поддерживается только ext4 или BTRFS.
Диски можно создавать разных типов — локальные и сетевые. Один из неочевидных моментов: раздел APP не обновляется динамически. В RouterOS привычно, что любое изменение (например, в address-list или таблице маршрутизации) сразу отображается во всех окнах Winbox. В разделе APP только что созданный диск в списке не появляется.

Сетевые хранилища
  • NVMe-oF
    проблем нет: указываются IP-адрес и NVMe Qualified Name (NQN), подключение работает корректно.
  • iSCSI
    не умеет работать с авторизацией: указать учётные данные попросту нечем. Показательный момент: языковые модели на вопрос об авторизации уверенно предлагают «указать логин и пароль», хотя таких команд не существует. Доверяй, но проверяй.
Локальные варианты
Можно создать RAM-диск, но при каждой перезагрузке данные будут теряться; кроме того, его объём задаётся только в байтах. Второй вариант — файловый раздел на локальной флеш-памяти или USB-диске. Существует и возможность создать шифрованный раздел, но на домашнем маршрутизаторе это избыточно: слабый процессор и медленная память делают такую идею сомнительной.

На hAP ax², где USB-порта нет, рабочим оказался экзотический сценарий: подключение SMB-ресурса, создание на нём двух файлов и сборка из них RAID 0. Звучит дико, но работает. Аналогично на хостинге собирался RAID 10 из четырёх файлов на одном локальном диске — тоже работает.

У RouterOS есть странная особенность порядка действий: сначала создаётся RAID, затем создаются разделы с указанием, что они являются участниками этого RAID, и только после этого выполняется форматирование. Обычно логика обратная: создать массив, добавить диски, инициализировать.

Установка приложения

В разделе APP есть кнопка Setup, открывающая небольшой визард из трёх шагов: выбор диска, выбор bridge и выбор IP-адреса. Адрес указывается локальный или внешний — в зависимости от того, нужен ли доступ к контейнеру напрямую из интернета. Далее приложение выбирается из списка, нажимается Enable, и через несколько секунд с ним уже можно работать.

Первые эксперименты проводились на гипервизоре ESXi с образом x86. Всё в целом работает, но созданные приложения не видят внешнюю сеть, хотя находятся в одном bridge: из контейнера шлюз не пингуется, хост пингуется и наоборот. Диагностика показывает, что интерфейсы в одном bridge, подсеть корректна, MAC-адрес в ARP присутствует — технически всё должно работать. Причину установить не удалось; вероятно, это баг образа x86. На домашнем hAP ax² проблема не воспроизводится. Обходной путь — сменить в настройках приложения интерфейс на другой bridge. Там же указываются пробрасываемые порты, и все эти настройки автоматически попадают в таблицу firewall NAT — редиректить вручную ничего не нужно.

Доступ из интернета

Функция динамического DNS, знакомая по многим маршрутизаторам, есть и в RouterOS — требуется включённый IP Cloud. MikroTik пошёл дальше и сделал доступными из интернета сами приложения, выдавая домен четвёртого уровня вида «название приложения + MAC-адрес маршрутизатора + домен MikroTik». При включённой галочке HTTPS в настройках приложения автоматически выпускается сертификат Let's Encrypt, что удобно. Важный момент: на x86 IP Cloud недоступен.

Ограничения

Маршрутизатор остаётся сетевым оборудованием, а не сервером. Отсюда ограничения по процессору, памяти и архитектуре (только ARM и x86). Основная проблема — хранилище: на домашнем устройстве приложения либо не запускаются, либо постоянно падают с ошибками. Маршрутизатор можно и вовсе «убить»: RouterOS завязан на флеш-память с лицензией, и её выход из строя означает покупку нового устройства.

В разделе container требуется указать папку для временных файлов и папку для слоёв, куда скачиваются данные контейнеров; в разделе APP — путь для данных и путь для скачиваемых файлов. Заполняются они автоматически, но при попытках «заставить это работать» легко указать неверные пути.

Показательный пример: под Zabbix на RAM-диске было выделено 500 МБ — казалось, должно хватить. Через 10 минут после запуска установки маршрутизатор перезагрузился: закончилось место на диске и возникла ошибка по памяти. Как выяснилось, установленный Zabbix занимает около 800 МБ, а torrent-клиент — 92 МБ. При этом на hAP ax² всего 128 МБ флеш-памяти, то есть туда помещаются буквально система и torrent-клиент. Всё остальное — только на внешнем хранилище.
Отдельная опасность:
при ошибке скачивания пакета APP не останавливается, а через несколько секунд начинает установку заново. Тем самым он изнашивает флеш-память, нагружает ОЗУ и провоцирует kernel failure.
Ещё одно принципиальное ограничение — RouterOS не даёт полноценного доступа к ядру: догрузить модуль ядра или установить системные компоненты невозможно. Контейнеры запускаются поверх закрытой системы «как есть», и возможности заметно уже, чем в обычном Linux.

Свои контейнеры

Собрать контейнер из исходников на самом маршрутизаторе теоретически можно, но на практике не хватит места — компиляция подтянет множество dev-пакетов и компиляторы, могут потребоваться отсутствующие модули ядра, а время сборки на слабом процессоре непредсказуемо. Разумнее компилировать на внешней машине и переносить готовый бинарник в контейнер.

Перенос собственного контейнера с Linux-машины в RouterOS — это буквально две команды, но крупные образы стабильно выдают ошибки со слоями либо сообщение о том, что не найден конфиг в манифесте. Решение — утилита skopeo: она выгружает контейнер как есть, остаётся только перенести его на маршрутизатор и запустить, при этом RouterOS не скачивает никаких дополнительных пакетов и образов.

Приложение можно создать и из YAML-скрипта — фактически это Docker Compose и Dockerfile в одном флаконе. Однако длинные строки обрезаются, а большие скрипты парсятся некорректно. Пример: HTML-файл на 1400 строк приводит к тому, что вкладка General не заполняется вовсе. Упаковка в base64 позволяет контейнеру запуститься и заполнить все параметры, но в логах появляется сообщение об обрезанной строке, и приложение не работает; base64 с переносами строк снова оставляет General пустой. Единственный надёжный вариант — post-install скрипт: приложение запускается, а внутри контейнера отрабатывает установочный скрипт, докачивающий все компоненты в обход RouterOS.

RouterOS позволяет создать и собственный магазин приложений: достаточно указать URL, и созданные приложения появятся в списке с установкой в один клик. Нюанс: способ обновить этот список не найден. При редактировании скрипта на хостинге «на лету» RouterOS изменения не подхватывает, кнопки не реагируют. Работает только удаление URL и повторное его добавление.

Зачем это нужно

Примитивный, но показательный сценарий — torrent-клиент: находясь на работе, можно зайти на свой домен, добавить торрент, и к приезду домой файлы уже скачаются. Второй вариант — Zabbix в небольшом офисе: устанавливается одной кнопкой и для маленькой инфраструктуры вполне подходит. Из домашних применений хорошо себя показывает Home Bridge для интеграции умного дома — лёгкий и нетребовательный контейнер. Ассортимент растёт быстро: в версии 7.22 было 84 приложения, в последней бете — уже 104, включая чаты, системы мониторинга, Nextcloud и даже пакет CHR.
Финал
Устанавливать приложения через магазин действительно удобно: не нужно ничего компилировать, разворачивать и настраивать вручную. Но плата за это — ограничения самого маршрутизатора: мало места, мало памяти, слабый процессор, отсутствие доступа к ядру и жёсткая привязка к внешнему хранилищу. Для домашних маршрутизаторов решение выглядит скорее как интересная возможность для отдельных лёгких задач, чем как универсальный инструмент, а для корпоративной инфраструктуры, где рядом почти всегда есть полноценные серверы, применять его пока не рекомендуется.
В Москве:
РФ (звонок бесплатный):
Наша почта:
GetNet
Остались вопросы?
Группа компаний VoxLink © 2011-2026