Обнаружение и транспорты¶
В OpenClaw есть две разные задачи, которые на первый взгляд выглядят одинаково:
- Удалённое управление оператором: приложение в строке меню macOS управляет шлюзом, запущенным на другом хосте.
- Сопряжение узлов: iOS/Android (и будущие узлы) находят шлюз и безопасно выполняют сопряжение.
Цель проектирования — держать всё сетевое обнаружение/анонсирование в Node Gateway (openclaw gateway) и оставить клиентов (mac‑приложение, iOS) в роли потребителей.
Условия¶
- Gateway (шлюз): один долгоживущий процесс шлюза, который владеет состоянием (сеансы, сопряжение, реестр узлов) и запускает каналы. В большинстве установок используется один на хост; возможны изолированные конфигурации с несколькими шлюзами.
- Gateway WS (плоскость управления): конечная точка WebSocket на
127.0.0.1:18789по умолчанию; может быть привязана к LAN/tailnet черезgateway.bind. - Прямой транспорт WS: конечная точка Gateway WS, доступная из LAN/tailnet (без SSH).
- Транспорт SSH (резервный вариант): удалённое управление путём проброса
127.0.0.1:18789по SSH. - Устаревший TCP‑мост (deprecated/removed): старый транспорт узлов (см. Bridge protocol); больше не анонсируется для обнаружения.
Детали протоколов:
Почему мы сохраняем и «прямой», и SSH¶
- Прямой WS — лучший UX в одной сети и внутри tailnet:
- автообнаружение в LAN через Bonjour
- токены подключения + ACL, принадлежащие шлюзу
- не требуется доступ к shell; поверхность протокола остаётся узкой и аудируемой
- SSH остаётся универсальным резервным вариантом:
- работает везде, где есть доступ по SSH (даже между несвязанными сетями)
- переживает проблемы с multicast/mDNS
- не требует открытия новых входящих портов, кроме SSH
Источники обнаружения (как клиенты узнают, где находится шлюз)¶
1. Bonjour / mDNS (только LAN)¶
Bonjour работает по принципу best‑effort и не пересекает сети. Используется только для удобства «в одной LAN».
Целевое направление:
- шлюз анонсирует свою конечную точку WS через Bonjour.
- Клиенты просматривают и показывают список «выберите шлюз», затем сохраняют выбранную конечную точку.
Устранение неполадок и детали маяков: Bonjour.
Детали сервисного маяка¶
- Типы сервисов:
_openclaw-gw._tcp(маяк транспорта шлюза)- TXT‑ключи (несекретные):
role=gatewaylanHost=<hostname>.localsshPort=22(или то, что анонсируется)gatewayPort=18789(Gateway WS + HTTP)gatewayTls=1(только когда включён TLS)gatewayTlsSha256=<sha256>(только когда включён TLS и доступен отпечаток)canvasPort=18793(порт хоста canvas по умолчанию; обслуживает/__openclaw__/canvas/)cliPath=<path>(необязательно; абсолютный путь к исполняемомуopenclawentrypoint или бинарнику)tailnetDns=<magicdns>(необязательная подсказка; автоопределяется при наличии Tailscale)
Отключение/переопределение:
OPENCLAW_DISABLE_BONJOUR=1отключает анонсирование.gateway.bindв~/.openclaw/openclaw.jsonуправляет режимом привязки Gateway.OPENCLAW_SSH_PORTпереопределяет SSH‑порт, публикуемый в TXT (по умолчанию 22).OPENCLAW_TAILNET_DNSпубликует подсказкуtailnetDns(MagicDNS).OPENCLAW_CLI_PATHпереопределяет анонсируемый путь к CLI.
2. Tailnet (межсетевое)¶
Для конфигураций типа «Лондон/Вена» Bonjour не поможет. Рекомендуемая «прямая» цель:
- имя Tailscale MagicDNS (предпочтительно) или стабильный IP в tailnet.
Если шлюз может определить, что он запущен под Tailscale, он публикует tailnetDns как необязательную подсказку для клиентов (включая широкозонные маяки).
3. Ручная цель / SSH¶
Когда прямого маршрута нет (или прямой режим отключён), клиенты всегда могут подключиться через SSH, пробросив порт шлюза local loopback.
См. Remote access.
Выбор транспорта (политика клиента)¶
Рекомендуемое поведение клиента:
- Если настроена и достижима сопряжённая прямая конечная точка — использовать её.
- Иначе, если Bonjour находит шлюз в LAN, предложить вариант «Использовать этот шлюз» одним касанием и сохранить его как прямую конечную точку.
- Иначе, если настроен DNS/IP tailnet — попробовать прямое подключение.
- Иначе — перейти к SSH.
Сопряжение и аутентификация (прямой транспорт)¶
Шлюз — источник истины для допуска узлов/клиентов.
- Запросы на сопряжение создаются/утверждаются/отклоняются в шлюзе (см. Gateway pairing).
- Силы шлюза:
- аутентификацию (токен / пара ключей)
- области доступа/ACL (шлюз — не «сырой» прокси ко всем методам)
- лимиты по ставкам
Обязанности по компонентам¶
- Gateway (шлюз): анонсирует маяки обнаружения, принимает решения о сопряжении и хостит конечную точку WS.
- Приложение для macOS: помогает выбрать шлюз, показывает запросы на сопряжение и использует SSH только как резервный вариант.
- Узлы iOS/Android: используют просмотр Bonjour для удобства и подключаются к сопряжённой Gateway WS.