Files
rmm-openwrt/ROADMAP.md
2026-06-04 15:26:43 +03:00

14 KiB
Raw Blame History

OpenWrt RMM Roadmap

Цель

Создать RMM-платформу для удаленного мониторинга и управления устройствами на OpenWrt: роутерами, шлюзами, точками доступа и небольшими edge-устройствами.

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

Основные принципы

  • Устройство само устанавливает исходящее соединение с сервером.
  • Агент должен быть легким и совместимым с ограниченными ресурсами OpenWrt.
  • Все команды должны быть проверяемыми, журналируемыми и ограниченными по правам.
  • Конфигурация OpenWrt должна изменяться через штатные механизмы: uci, ubus, init scripts, opkg.
  • MVP должен быть простым, но архитектурно не мешать переходу к production-уровню.

Целевая архитектура

Agent

Компонент, устанавливаемый на OpenWrt-устройство.

Обязанности:

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

Server

Центральный backend для управления устройствами.

Обязанности:

  • учет организаций, пользователей и устройств;
  • прием heartbeat и метрик;
  • хранение состояния устройств;
  • очередь команд;
  • аудит действий;
  • API для web UI;
  • интеграции с уведомлениями.

Web UI

Панель оператора.

Обязанности:

  • список устройств и их состояние;
  • карточка устройства;
  • просмотр интерфейсов, Wi-Fi, DHCP leases, маршрутов и системных метрик;
  • запуск разрешенных команд;
  • управление конфигурацией;
  • просмотр логов и истории действий;
  • алерты и уведомления.

Этап 0: Подготовка проекта

Цель: зафиксировать базовую структуру и технические решения.

Задачи:

  • выбрать основной стек для server и web UI;
  • выбрать формат агента для MVP: shell, Go или Rust;
  • описать модель устройств и команд;
  • определить минимальный набор поддерживаемых версий OpenWrt;
  • описать threat model;
  • подготовить структуру репозитория.

Результат:

  • базовая документация;
  • структура директорий;
  • черновой API-контракт;
  • список ограничений MVP.

Этап 1: MVP Agent

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

Функции:

  • конфигурационный файл агента;
  • уникальный device id;
  • enrollment token;
  • heartbeat;
  • сбор базовых данных:
    • hostname;
    • OpenWrt version;
    • uptime;
    • load average;
    • memory usage;
    • disk usage;
    • network interfaces;
    • default route;
    • WAN IP;
  • выполнение базовых команд:
    • ping target;
    • traceroute target;
    • reboot;
    • service restart;
    • opkg list-installed;
  • отправка результата команды на сервер.

OpenWrt-интеграции:

  • ubus call system board;
  • ubus call system info;
  • uci show;
  • ip addr;
  • ip route;
  • /etc/init.d/*;
  • opkg.

Результат:

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

Этап 2: MVP Server API

Цель: реализовать backend, достаточный для работы агента и первой панели управления.

Функции:

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

Основные сущности:

  • organization;
  • user;
  • device;
  • device enrollment;
  • device heartbeat;
  • command;
  • command result;
  • audit event.

Результат:

  • REST API или WebSocket API для агента;
  • REST API для UI;
  • хранилище данных;
  • минимальная авторизация.

Этап 3: MVP Web UI

Цель: сделать рабочую панель оператора.

Функции:

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

Результат:

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

Этап 4: Безопасность

Цель: довести базовую модель безопасности до уровня, пригодного для реального использования.

Задачи:

  • mTLS или подписанные device tokens;
  • ротация токенов устройства;
  • подпись команд;
  • allowlist команд на агенте;
  • RBAC для пользователей;
  • per-organization isolation;
  • audit log для всех операторских действий;
  • rate limits;
  • защита от replay-атак;
  • secure enrollment flow.

Результат:

  • агент не выполняет произвольные команды;
  • каждое действие связано с пользователем или системой;
  • компрометация одного устройства не дает доступа к другим.

Этап 5: Управление конфигурацией OpenWrt

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

Функции:

  • чтение UCI-конфигурации;
  • безопасное изменение UCI-секций;
  • preview diff перед применением;
  • apply/commit/revert workflow;
  • управление Wi-Fi SSID;
  • управление firewall rules;
  • управление DHCP;
  • управление static routes;
  • backup текущей конфигурации;
  • восстановление конфигурации.

Результат:

  • оператор может менять типовые настройки OpenWrt без ручного SSH.

Этап 6: Мониторинг и алерты

Цель: добавить наблюдаемость и уведомления.

Метрики:

  • online/offline;
  • uptime;
  • load average;
  • memory usage;
  • disk usage;
  • WAN status;
  • interface errors;
  • Wi-Fi clients;
  • DHCP leases;
  • packet loss;
  • latency to configured targets.

Алерты:

  • устройство offline;
  • WAN down;
  • высокая нагрузка;
  • мало памяти;
  • мало места на диске;
  • потеря VPN;
  • частые перезагрузки.

Интеграции:

  • email;
  • Telegram;
  • Slack;
  • webhook.

Результат:

  • система не только показывает состояние, но и сообщает о проблемах.

Этап 7: Remote Access

Цель: обеспечить безопасный удаленный доступ к устройствам и сервисам за ними.

Возможности:

  • reverse tunnel;
  • временный SSH-доступ через сервер;
  • browser-based terminal;
  • TCP port forwarding;
  • доступ к LuCI через tunnel;
  • ограничение доступа по времени и пользователю;
  • запись audit events для сессий.

Результат:

  • оператор может попасть на устройство без проброса портов и публичного IP.

Этап 8: Обновления и пакеты

Цель: управлять установленными пакетами и обновлениями.

Функции:

  • список установленных пакетов;
  • доступные обновления;
  • установка пакета;
  • удаление пакета;
  • обновление package lists;
  • staged upgrade;
  • контроль совместимости;
  • запрет опасных операций без подтверждения;
  • история изменений пакетов.

Результат:

  • управление пакетами становится частью RMM-процесса.

Этап 9: Fleet Management

Цель: управление группами устройств.

Функции:

  • группы устройств;
  • теги;
  • массовые команды;
  • шаблоны конфигурации;
  • политики;
  • rollout с лимитами;
  • canary-группы;
  • отчет о применении изменений.

Результат:

  • система подходит не только для одного роутера, но и для парка устройств.

Этап 10: Production Hardening

Цель: подготовить систему к эксплуатации.

Задачи:

  • structured logging;
  • metrics для server;
  • health checks;
  • backup/restore базы данных;
  • миграции схемы данных;
  • horizontal scaling;
  • graceful shutdown;
  • retry policies;
  • disaster recovery plan;
  • нагрузочное тестирование;
  • e2e-тесты agent-server;
  • package build для OpenWrt.

Результат:

  • систему можно разворачивать и поддерживать в production-среде.

Предлагаемая структура репозитория

rmm-openwrt/
  agent/
    README.md
    openwrt/
    scripts/
    package/
  server/
    README.md
    cmd/
    internal/
    migrations/
  web/
    README.md
    src/
  docs/
    architecture.md
    api.md
    security.md
    openwrt.md
  ROADMAP.md

MVP Scope

Минимальный полезный продукт должен включать:

  • agent enrollment;
  • heartbeat;
  • basic inventory;
  • device list;
  • device detail page;
  • command queue;
  • command result;
  • basic audit log;
  • allowlist команд;
  • offline detection.

Что сознательно не входит в первый MVP:

  • полноценный remote shell;
  • массовые rollout-операции;
  • сложный RBAC;
  • управление firmware upgrade;
  • полноценный tunnel к LuCI;
  • multi-region deployment.

Открытые вопросы

  • Какой стек использовать для backend: Go, Node.js/TypeScript или другой?
  • Агент MVP делать на shell или сразу на Go?
  • Нужен ли self-hosted-only вариант или SaaS-модель с multi-tenant архитектурой?
  • Какие версии OpenWrt поддерживать первыми?
  • Нужна ли интеграция с LuCI или отдельный UI будет основным интерфейсом?
  • Какой транспорт выбрать для агента: polling HTTPS, WebSocket или MQTT?
  • Нужно ли поддерживать устройства за CG-NAT без постоянного соединения?

Ближайший следующий шаг

Сформировать техническое решение для MVP:

  • выбрать стек;
  • описать API agent-server;
  • создать структуру репозитория;
  • реализовать первый вертикальный сценарий:
    • агент регистрируется;
    • агент отправляет heartbeat;
    • UI показывает устройство online.