Remotik Relay On-Premise

Remotik Relay On-Premise

Темы: remotik
Собственный сервер-мост Ремотик

Собственный сервер-мост Ремотик

Сервер-мост для самостоятельного размещения на своей инфраструктуре. Это дополнение к тарифу Ремотик "Команда".

Сервер-мост передаёт зашифрованный трафик и поддерживает соединение между устройствами, когда прямое соединение невозможно или ограничено. В пользовательских текстах такой узел называется "мост". Имя программного компонента и репозитория: remotik-relay-on-premise.

Сайт проекта: remotik.ru. Описание опции: собственный сервер-мост.

Статус репозитория

Репозиторий содержит серверную реализацию для интеграционного стенда: общий транспортный пакет, исполняемый файл, исходящий клиент управления и Docker Compose. Поддерживаемого промышленного выпуска пока нет.

В исходниках облачного API Ремотик и личного кабинета реализованы выдача одноразового токена, проверка доступа, регистрация, доставка публичных ключей проверки подписей, статус и отзыв установки. Для получения токена нужны активный оплаченный тариф "Команда", действующее разрешение на опцию и подтверждённая почта владельца аккаунта. Для стенда разрешение выдаётся администратором на ограниченный срок. Отдельного общего переключателя в окружении кабинета или облачного API нет. Наличие кода не означает, что он уже развёрнут на core.remotik.ru. В кабинете реализованы покупка и продление опции с баланса. Автопродление включается отдельно. После окончания оплаты сервер приостанавливает сессии и возобновляет работу после продления без новой регистрации. Условия промышленного выпуска остаются открытыми. Ротация ключа установки с восстановлением потерянного ответа, аудит безопасности и подписание артефактов остаются условиями промышленного выпуска.

Существующий репозиторий управляемого сервера-моста остаётся приватным. Его история Git и интеграции, относящиеся только к инфраструктуре Ремотик, не копируются в этот репозиторий. Пакет engine содержит транспортное ядро; приватный сервис подключает его через адаптер конфигурации и статистики.

Как используется собственный мост

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

  • личные устройства владельца тарифа "Команда";
  • устройства его компании;
  • личные устройства участников этой компании.

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

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

Содержимое сессий и технические данные

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

Для работы соединения сервер-мост обрабатывает технические сведения: IP-адреса, идентификаторы устройств и сессий, время подключения и объём трафика. Локально сохраняется служебное состояние установки, включая её ключ аутентификации, разрешения на сессии и результаты команд. Этот ключ не является ключом расшифрования сессионного трафика. В облачный сервис передаются сведения о регистрации, состоянии сервера и выполнении команд, без содержимого сессий.

Подробности, границы хранения и ссылки на условия сервиса: Данные и роль сервера-моста.

Возможности

  • Автоматическая регистрация при первом запуске по одному токену из панели. Ключ установки создаётся локально; при перезапуске токен больше не нужен.
  • TCP с TLS 1.3 и WSS на отдельных портах, совместимые с REMOTIK/2.
  • Канал управления и до 4 видеоканалов и 8 файловых каналов на сессию.
  • Аутентификация участников подписанными токенами rjt1.
  • Исходящий HTTPS polling с проверкой подписей запросов и ответов.
  • Сохранение ключа установки, курсора команд, разрешений и результатов в одном файле с атомарной заменой, синхронизацией на диск и правами 0600.
  • Повторная доставка команд, смена транспортной эпохи, drain и отзыв установки.
  • Абсолютный срок разрешения на сессию. Трафик и переподключение его не продлевают.
  • Общий лимит соединений, лимит на IP и ограничение числа сессий.
  • Локальные /healthz и /readyz без идентификаторов клиентов.

Сборка и запуск через Docker Compose

Для сервера используйте Linux amd64 или arm64. Установите Git, Docker Engine и плагин Docker Compose. Команды ниже рассчитаны на обычную установку Docker Engine на Linux и выполняются из каталога репозитория. Go на сервере устанавливать не нужно: компиляция выполняется внутри Docker.

1. Подготовьте Docker и исходники

sudo docker version
sudo docker compose version
git clone https://hub.mos.ru/liftsoft/remotik-relay-on-premise.git
cd remotik-relay-on-premise
cp config.example.json config.json

docker version должен показывать клиент и работающий Docker Engine. Используется команда docker compose с пробелом. Если она недоступна, установите плагин Compose по ссылке выше.

2. Настройте адреса и сертификат

Отредактируйте config.json: укажите display_name, доступный облачный API в control_url и свой домен в endpoints.tcp_host. Внешние порты задаются в endpoints.tcp_port и endpoints.wss_port, по умолчанию в примере это 8093 и 8443. Адрес WSS собирается автоматически как wss://ВАШ-ДОМЕН:8443/ws. Пути внутри контейнера менять не нужно. TLS 1.3 используется всегда. Параметра для его отключения в конфигурации нет.

Настройте DNS и доступ с клиентских устройств к TCP-портам 8093 и 8443. Compose публикует оба порта контейнера под теми же номерами на сервере. Внутри контейнера порты фиксированы. Внешние порты при необходимости меняются в compose.yaml и endpoints файла config.json. При размещении за NAT перенаправьте TCP 8093 и 8443 на эти порты сервера. Для регистрации и дальнейшей работы нужен исходящий HTTPS-доступ к облачному API.

Подготовьте действующий TLS-сертификат для своего домена. В командах ниже замените /path/to/fullchain.pem и /path/to/privkey.pem путями к вашим файлам. Копируйте сами файлы, включая цепочку сертификатов, а не символьные ссылки на каталоги за пределами tls/.

sudo install -d -o root -g 65532 -m 0750 tls
sudo install -o root -g 65532 -m 0640 /path/to/fullchain.pem tls/fullchain.pem
sudo install -o root -g 65532 -m 0640 /path/to/privkey.pem tls/privkey.pem
sudo install -d -o 65532 -g 65532 -m 0700 state
sudo install -o root -g 65532 -m 0640 /dev/null relay-token.txt

Контейнер работает от UID/GID 65532. Каталог state/ должен быть доступен ему для записи, сертификат, ключ и файл токена для чтения. Эти команды подготовки предназначены для первой установки.

3. Соберите образ, затем получите токен

sudo docker compose config --quiet
sudo docker compose build relay
sudo docker run --rm remotik-relay-on-premise:local version

Сборка загружает базовый образ и зависимости Go, поэтому ей нужен доступ в интернет. Результат сохраняется локально как remotik-relay-on-premise:local. Готовый промышленный образ пока не опубликован.

После успешной сборки получите токен на странице настройки собственного сервера-моста в кабинете. Запустите команду ниже, вставьте токен одной строкой, нажмите Enter, затем Ctrl+D:

sudo tee relay-token.txt > /dev/null

Токен показывается один раз и действует 15 минут до регистрации. Не передавайте его в командной строке, переменных окружения или config.json.

4. Запустите и проверьте

sudo docker compose up -d --no-build relay
sudo docker compose ps
sudo docker compose logs --tail=100 relay

Регистрация выполняется автоматически. Вернитесь в кабинет и обновите статус. Статус healthy в Docker означает, что процесс отвечает на локальную проверку; доступность сервера для клиентов проверяется реальным подключением.

После регистрации очистите содержимое relay-token.txt, сохранив сам файл для подключения в контейнер:

sudo truncate -s 0 relay-token.txt

При перезапуске используется state/, новый токен не нужен. Сохраняйте этот каталог при обновлении.

Команды остановки, обновления, резервного копирования и диагностики приведены в инструкции развёртывания.

Сборка и проверка без Docker

go test -race ./...
go vet ./...
go build -o bin/remotik-relay ./cmd/remotik-relay
./bin/remotik-relay version

Требуется Go 1.24 или новее; CI и Docker закреплены на Go 1.26.3. Целевые платформы сервера: Linux amd64 и arm64. macOS поддерживается для локальной разработки. Инструкция стенда описывает конфигурацию, регистрацию, запуск, обновление и откат.

Модель безопасности

  • Сервер-мост пересылает непрозрачные кадры прикладного протокола, защищённые сквозным шифрованием. Он не расшифровывает и не сохраняет содержимое сессий.
  • Участники соединения проходят аутентификацию с помощью короткоживущих данных, привязанных к сессии, устройству, роли, каналу и транспортной эпохе.
  • Для подключений к серверу-мосту по TCP и WSS используется TLS 1.3. Незашифрованные подключения к этим портам не поддерживаются.
  • Сервер-мост не получает приватные ключи устройств и ключи сквозного шифрования сессий. Ключ установки, TLS-ключ и публичные ключи проверки подписей служат аутентификации и защите транспорта.
  • Управление установкой выполняется через исходящее аутентифицированное соединение. Клиентская установка не открывает доступ к внутренним API управления Ремотик.

Последовательность работ описана в плане выделения. Контракт аутентифицированного исходящего управления приведён в CONTROL_PROTOCOL.md. Реализация клиента находится в control/, формат доказательства регистрации в protocol/controlauth/.

Лицензия

© 2026 Лифтсофт. Исходный код предоставляется по условиям Apache License 2.0. Лицензия не предоставляет разрешение на использование коммерческих наименований, товарных знаков, знаков обслуживания или наименований продуктов Ремотик.

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

Уведомления о сторонних компонентах: THIRD_PARTY_NOTICES.md.