СвязьГлава 25 / 51

Управление из другой сети

Как управлять домом снаружи, не делая облако его хозяином?

Внешняя сеть переносит защищённый поток. Решение о доступе остаётся на станции.

Дома приложение обращается к станции напрямую. В другой сети нужен дополнительный путь: VPN либо проверенный ретранслятор. При этом конечная сторона, которой доверяет приложение, остаётся той же станцией.

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

За пределами дома у телефона нет прямого локального маршрута к хабу. Дом может находиться за CGNAT, а входящие соединения — быть запрещены. Поэтому первая реализуемая схема строится на исходящих соединениях и небольшом сервере-посреднике под контролем владельца. Этот сервер не хранит модель комнаты и не исполняет автоматизации.

Три архитектуры удалённого пути#

ВариантМеханикаПлюсМинус
WireGuard через VPSТелефон и хаб подключаются к VPN-узлуПонятный проверенный транспортНастройка VPN и зависимость от UDP
Opaque relay на 443Хаб держит исходящий канал, relay передаёт потокУдобнее встроить в приложениеСобственная маршрутизация, лимиты, сложнее реализация
Прямое соединение с fallbackСначала поиск прямого пути, затем relayМеньше задержка при удачеNAT traversal и смена сети усложняют систему

WireGuard использует стандартную для него модель ключей и защищённого туннеля. Persistent keepalive может помочь сохранению NAT-состояния, но не гарантирует прохождение блокировок. Его частота выбирается с учётом мобильной батареи и сетевой среды. [59][72]

A29Первый удалённый профиль. VPN-сервер маршрутизирует трафик; приложение дополнительно проверяет идентичность станции и прикладные права.

Первый работающий удалённый экземпляр#

Для E0 предлагается штатный WireGuard-клиент на телефоне и станции, VPS владельца и маршрут только к хабу/нужным адресам. Это не окончательный бесшовный UX, но работающая проверяемая основа. Внутри туннеля сохраняется защищённая прикладная сессия Koobique, чтобы VPN-сервер не становился единственным основанием доверия.

Приложение выбирает локальный endpoint дома и VPN-endpoint вне дома, проверяя один и тот же ключ станции. Переход не создаёт новую команду при повторе: сохраняется прежний command_id. Локальный доступ не отправляется через удалённый VPS только потому, что тот доступен.

Интеграция VPN внутрь KMP-приложения — отдельная платформенная задача с разрешениями и жизненным циклом ОС. На iOS её нельзя считать обычным сокетом без дополнительных возможностей приложения. Для E1 сравнивается встроенный туннель и relay без системного VPN; результат требует реального мобильного стенда.

Что должен делать будущий relay#

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

Relay на TCP/443 не является «неблокируемым протоколом». Белые списки, блокировка IP, обрыв связи и политика сети могут остановить удалённый путь. Это ограничение честно отражается в приложении; локальные функции не зависят от попыток восстановления внешнего канала.

SSH как отдельный административный контур#

SSH включён для владельца, но не публикуется в интернет автоматически. Вход по ключам, отдельная учётная запись, запрет общего пароля и прямого root-входа. OpenSSH позволяет настроить эти ограничения и дополнительные параметры сеанса. [60]

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

Команда обновления по SSH вызывает штатную проверяемую процедуру, а не произвольную замену бинарника в работающей системе. Диагностический пакет маскирует ключи, Wi-Fi-пароли и персональные данные. Временный доступ можно отозвать независимо от мобильных пользователей.

Восстановление без внешней инфраструктуры#

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

Приёмка удалённого пути#

Проверить телефон в мобильной сети, смену Wi-Fi на LTE/5G, временную потерю VPS, смену адреса дома и повтор команды во время переключения. Убедиться, что VPS не может выдать себя за станцию и что обычный пользователь не получает SSH.

Туннель не отменяет авторизацию приложения#

WireGuard-пир на VPS не получает право обращаться ко всем службам Hub. На wg-интерфейсе firewall разрешает только нужный порт приложения; SSH — отдельное явное разрешение и собственные ключи. Между приложением и Hub сохраняется проверка конечной идентичности и пользовательских полномочий. Компрометация ретранслятора не должна превращаться в административную локальную сеть.

Headscale/DERP — вариант уменьшить собственный код транспортной инфраструктуры; он сравнивается с простым WireGuard для личного E0 и встроенным relay для E1. Ни один вариант не гарантирует удалённый доступ при недоступности всех разрешённых внешних каналов. Локальная работа остаётся независимой. В мобильном опыте проверяются sleep, смена Wi-Fi/LTE, отзыв и незавершённая команда. [175]

Найти в книге

Поиск по всем главам, схемам и техническим разделам.