---
read_when:
    - Реализация или изменение обнаружения/анонсирования Bonjour
    - Настройка режимов удаленного подключения (прямое и SSH)
    - Проектирование обнаружения Node и сопряжения для удаленных Node
summary: Обнаружение Node и транспорты (Bonjour, Tailscale, SSH) для поиска Gateway
title: Обнаружение и транспорты
x-i18n:
    generated_at: "2026-06-28T22:56:29Z"
    model: gpt-5.5
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 7f53e1292d9e5b402186c48c777e7e665c790981a64679c783ae8d8a1f170ee1
    source_path: gateway/discovery.md
    workflow: 16
---

OpenClaw решает две разные проблемы, которые на поверхности выглядят похожими:

1. **Удаленное управление оператором**: приложение в строке меню macOS управляет Gateway, запущенным в другом месте.
2. **Сопряжение узлов**: iOS/Android (и будущие узлы) находят Gateway и безопасно сопрягаются с ним.

Цель дизайна — держать все сетевое обнаружение/объявление в **Node Gateway** (`openclaw gateway`), а клиентов (приложение mac, iOS) оставить потребителями.

## Термины

- **Gateway**: один долгоживущий процесс Gateway, который владеет состоянием (сеансы, сопряжение, реестр узлов) и запускает каналы. В большинстве установок используется один процесс на хост; изолированные установки с несколькими Gateway возможны.
- **Gateway WS (плоскость управления)**: конечная точка WebSocket на `127.0.0.1:18789` по умолчанию; может быть привязана к LAN/tailnet через `gateway.bind`.
- **Прямой транспорт WS**: обращенная к LAN/tailnet конечная точка Gateway WS (без SSH).
- **Транспорт SSH (резервный вариант)**: удаленное управление через проброс `127.0.0.1:18789` по SSH.
- **Устаревший TCP-мост (удален)**: старый транспорт узлов (см.
  [протокол моста](/ru/gateway/bridge-protocol)); больше не объявляется для
  обнаружения и больше не входит в текущие сборки.

Подробности протоколов:

- [Протокол Gateway](/ru/gateway/protocol)
- [Протокол моста (устаревший)](/ru/gateway/bridge-protocol)

## Почему мы сохраняем и прямое подключение, и SSH

- **Прямой WS** дает лучший UX в той же сети и внутри tailnet:
  - автообнаружение в LAN через Bonjour
  - токены сопряжения + ACL, которыми владеет Gateway
  - доступ к shell не требуется; поверхность протокола может оставаться узкой и пригодной для аудита
- **SSH** остается универсальным резервным вариантом:
  - работает везде, где у вас есть доступ по SSH (даже между несвязанными сетями)
  - переживает проблемы multicast/mDNS
  - не требует новых входящих портов, кроме SSH

## Входные данные обнаружения (как клиенты узнают, где находится Gateway)

### 1) Обнаружение Bonjour / DNS-SD

Multicast Bonjour работает по принципу best-effort и не пересекает границы сетей. OpenClaw также может просматривать
тот же beacon Gateway через настроенный домен wide-area DNS-SD, поэтому обнаружение может охватывать:

- `local.` в той же LAN
- настроенный домен unicast DNS-SD для обнаружения между сетями

Целевое направление:

- **Gateway** объявляет свою конечную точку WS через Bonjour, когда включен встроенный
  Plugin `bonjour`. Plugin автоматически запускается на хостах macOS и
  включается явно в других средах.
- Клиенты просматривают и показывают список «выбрать Gateway», затем сохраняют выбранную конечную точку.

Устранение неполадок и подробности beacon: [Bonjour](/ru/gateway/bonjour).

#### Подробности service beacon

- Типы служб:
  - `_openclaw-gw._tcp` (beacon транспорта Gateway)
- Ключи TXT (не секретные):
  - `role=gateway`
  - `transport=gateway`
  - `displayName=<friendly name>` (отображаемое имя, настроенное оператором)
  - `lanHost=<hostname>.local`
  - `gatewayPort=18789` (Gateway WS + HTTP)
  - `gatewayTls=1` (только когда TLS включен)
  - `gatewayTlsSha256=<sha256>` (только когда TLS включен и fingerprint доступен)
  - `canvasPort=<port>` (порт хоста canvas; сейчас совпадает с `gatewayPort`, когда хост canvas включен)
  - `tailnetDns=<magicdns>` (необязательная подсказка; определяется автоматически, когда доступен Tailscale)
  - `sshPort=<port>` (только полный режим mDNS; wide-area DNS-SD может опускать его, и тогда значения SSH по умолчанию остаются `22`)
  - `cliPath=<path>` (только полный режим mDNS; wide-area DNS-SD все равно записывает его как подсказку удаленной установки)

Примечания по безопасности:

- TXT-записи Bonjour/mDNS **не аутентифицированы**. Клиенты должны считать значения TXT только подсказками для UX.
- Маршрутизация (host/port) должна предпочитать **разрешенную конечную точку службы** (SRV + A/AAAA) значениям `lanHost`, `tailnetDns` или `gatewayPort`, предоставленным через TXT.
- Закрепление TLS никогда не должно позволять объявленному `gatewayTlsSha256` переопределять ранее сохраненный pin.
- Узлы iOS/Android должны требовать явного подтверждения «доверять этому fingerprint» перед сохранением pin в первый раз (внеполосная проверка), когда выбранный маршрут основан на secure/TLS.

Включение/отключение/переопределение:

- `openclaw plugins enable bonjour` включает multicast-объявление в LAN.
- `OPENCLAW_DISABLE_BONJOUR=1` отключает объявление.
- Когда Plugin Bonjour включен и `OPENCLAW_DISABLE_BONJOUR` не задан,
  Bonjour объявляется на обычных хостах и автоматически отключается внутри обнаруженных контейнеров.
  Запуск Gateway на macOS с пустой конфигурацией включает Plugin автоматически; Linux,
  Windows и контейнеризованные развертывания требуют явного включения.
  Используйте `0` только на host, macvlan или другой сети с поддержкой mDNS; используйте `1`, чтобы
  принудительно отключить.
- `gateway.bind` в `~/.openclaw/openclaw.json` управляет режимом привязки Gateway.
- `OPENCLAW_SSH_PORT` переопределяет объявляемый порт SSH, когда выводится `sshPort`.
- `OPENCLAW_TAILNET_DNS` публикует подсказку `tailnetDns` (MagicDNS).
- `OPENCLAW_CLI_PATH` переопределяет объявляемый путь CLI.

### 2) Tailnet (между сетями)

Для установок в стиле London/Vienna Bonjour не поможет. Рекомендуемая «прямая» цель:

- имя Tailscale MagicDNS (предпочтительно) или стабильный IP tailnet.

Если Gateway может определить, что он запущен под Tailscale, он публикует `tailnetDns` как необязательную подсказку для клиентов (включая wide-area beacon).

Приложение macOS теперь предпочитает имена MagicDNS сырым IP Tailscale при обнаружении Gateway. Это повышает надежность при изменении IP tailnet (например, после перезапуска узла или переназначения CGNAT), потому что имена MagicDNS автоматически разрешаются в текущий IP.

Для сопряжения мобильных узлов подсказки обнаружения не ослабляют безопасность транспорта на маршрутах tailnet/public:

- iOS/Android по-прежнему требуют безопасный путь первого подключения tailnet/public (`wss://` или Tailscale Serve/Funnel).
- Обнаруженный сырой IP tailnet — это подсказка маршрутизации, а не разрешение использовать plaintext удаленный `ws://`.
- Прямое подключение `ws://` в частной LAN остается поддерживаемым.
- Если вам нужен самый простой путь Tailscale для мобильных узлов, используйте Tailscale Serve, чтобы и обнаружение, и код настройки разрешались в одну и ту же безопасную конечную точку MagicDNS.

### 3) Ручная цель / SSH

Когда прямого маршрута нет (или прямое подключение отключено), клиенты всегда могут подключиться через SSH, пробросив порт loopback Gateway.

См. [Удаленный доступ](/ru/gateway/remote).

## Выбор транспорта (политика клиента)

Рекомендуемое поведение клиента:

1. Если настроена и доступна сопряженная прямая конечная точка, использовать ее.
2. Иначе, если обнаружение находит Gateway в `local.` или настроенном wide-area домене, предложить выбор в одно касание «Использовать этот Gateway» и сохранить его как прямую конечную точку.
3. Иначе, если настроен DNS/IP tailnet, попробовать прямое подключение.
   Для мобильных узлов на маршрутах tailnet/public прямое подключение означает безопасную конечную точку, а не plaintext удаленный `ws://`.
4. Иначе перейти на SSH.

## Сопряжение + auth (прямой транспорт)

Gateway — источник истины для допуска узлов/клиентов.

- Запросы на сопряжение создаются/одобряются/отклоняются в Gateway (см. [сопряжение Gateway](/ru/gateway/pairing)).
- Gateway обеспечивает:
  - auth (токен / keypair)
  - scopes/ACL (Gateway не является сырым прокси ко всем методам)
  - ограничения скорости

## Обязанности по компонентам

- **Gateway**: объявляет beacons обнаружения, владеет решениями о сопряжении и размещает конечную точку WS.
- **Приложение macOS**: помогает выбрать Gateway, показывает запросы сопряжения и использует SSH только как резервный вариант.
- **Узлы iOS/Android**: просматривают Bonjour для удобства и подключаются к сопряженному Gateway WS.

## Связанные материалы

- [Удаленный доступ](/ru/gateway/remote)
- [Tailscale](/ru/gateway/tailscale)
- [Обнаружение Bonjour](/ru/gateway/bonjour)
