---
read_when:
    - Реализация или изменение обнаружения/анонсирования Bonjour
    - Настройка режимов удалённого подключения (напрямую или через SSH)
    - Проектирование обнаружения и сопряжения удалённых узлов
summary: Обнаружение Node и транспорты (Bonjour, Tailscale, SSH) для поиска Gateway
title: Обнаружение и транспортные механизмы
x-i18n:
    generated_at: "2026-07-13T18:10:39Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 24
    provider: openai
    source_hash: 3a3f1a6a1212ab0bc7021e77c88de059edcb8e09eff90d3e1e59451b9b20876b
    source_path: gateway/discovery.md
    workflow: 16
---

OpenClaw решает две связанные, но разные задачи обнаружения:

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

Все функции сетевого обнаружения и объявления находятся в **Node Gateway**
(`openclaw gateway`); клиенты (приложение macOS, iOS) только используют их.

## Термины

- **Gateway**: единый долгоживущий процесс, который управляет состоянием (сеансами,
  сопряжением, реестром Node) и запускает каналы. В большинстве конфигураций используется один процесс на хост;
  также возможны изолированные конфигурации с несколькими 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 (удалён)**: прежний транспорт Node (см.
  [Протокол моста](/ru/gateway/bridge-protocol)); он больше не объявляется для
  обнаружения и не входит в текущие сборки.

Сведения о протоколах: [Протокол Gateway](/ru/gateway/protocol),
[Протокол моста (устаревший)](/ru/gateway/bridge-protocol).

## Зачем нужны и прямое подключение, и SSH

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

## Источники обнаружения

### 1) Bonjour / DNS-SD

Multicast Bonjour работает по принципу максимальных усилий и не действует между сетями. OpenClaw также
поддерживает поиск того же маяка Gateway через настроенный домен глобального DNS-SD,
поэтому обнаружение может охватывать как `local.` в той же LAN, так и настроенный
домен unicast DNS-SD для обнаружения между сетями.

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

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

#### Сведения о служебном маяке

- Тип службы: `_openclaw-gw._tcp` (маяк транспорта Gateway).
- Ключи TXT (не секретные):

  | Ключ                        | Примечания                                                                                                                                                       |
  | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | `role=gateway`              | Присутствует всегда.                                                                                                                                             |
  | `transport=gateway`         | Присутствует всегда.                                                                                                                                             |
  | `displayName=<name>`        | Отображаемое имя, настроенное оператором.                                                                                                                        |
  | `lanHost=<hostname>.local`  | Только для объявления mDNS в LAN; не записывается глобальным DNS-SD.                                                                                             |
  | `gatewayPort=18789`         | Порт Gateway WS и HTTP.                                                                                                                                          |
  | `gatewayTls=1`              | Только когда включён TLS.                                                                                                                                        |
  | `gatewayTlsSha256=<sha256>` | Только когда включён TLS и доступен отпечаток.                                                                                                                    |
  | `tailnetDns=<magicdns>`     | Необязательная подсказка; определяется автоматически, когда доступен Tailscale.                                                                                   |
  | `sshPort=<port>`            | Присутствует только при `discovery.mdns.mode="full"`; отсутствует (SSH по умолчанию использует `22`) в стандартном режиме `"minimal"` как в объявлении LAN, так и в глобальном DNS-SD. |
  | `cliPath=<path>`            | Использует то же условие `discovery.mdns.mode="full"`, что и `sshPort`; подсказка о пути CLI для удалённой установки.                                              |

  Ключ TXT `canvasPort` определён в контракте обнаружения плагина для
  будущего порта хоста холста, но текущие пути кода не задают для него значение, поэтому
  сейчас он никогда не публикуется.

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

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

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

- `openclaw plugins enable bonjour` включает multicast-объявление в LAN.
- `discovery.mdns.mode` в `openclaw.json` управляет трансляцией mDNS:
  `"minimal"` (по умолчанию), `"full"` (добавляет `cliPath`/`sshPort` как в маяк
  LAN, так и в любую глобальную зону DNS-SD) или `"off"` (отключает mDNS).
- `OPENCLAW_DISABLE_BONJOUR=1` принудительно отключает объявления; `discovery.mdns.mode="off"`
  отключает их независимо. `OPENCLAW_DISABLE_BONJOUR=0` — явное
  согласие, переопределяющее автоматическое отключение плагина внутри обнаруженного контейнера
  (Docker, containerd, Kubernetes, LXC); оно не переопределяет
  `discovery.mdns.mode="off"`. Встроенный плагин `bonjour` автоматически запускается на
  хостах macOS (`enabledByDefaultOnPlatforms: ["darwin"]`) и автоматически отключается
  внутри обнаруженных контейнеров; для Linux, Windows и других контейнерных
  развёртываний требуется явно указать `plugins enable bonjour`.
- `gateway.bind` в `~/.openclaw/openclaw.json` управляет режимом привязки Gateway.
- `OPENCLAW_SSH_PORT` переопределяет объявляемый порт SSH (действует только
  при `discovery.mdns.mode="full"`).
- `OPENCLAW_TAILNET_DNS` публикует подсказку `tailnetDns` (MagicDNS).
- `OPENCLAW_CLI_PATH` переопределяет объявляемый путь CLI.

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

Для Gateway в разных физических сетях Bonjour не поможет.
Рекомендуемая цель для прямого подключения — имя Tailscale MagicDNS (предпочтительно) или
стабильный IP-адрес tailnet.

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

При сопряжении мобильных Node подсказки обнаружения никогда не ослабляют транспортную безопасность
на маршрутах tailnet/общедоступной сети:

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

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

Если прямой маршрут отсутствует (или прямое подключение отключено), клиенты всегда могут
подключиться через SSH, перенаправив локальный порт Gateway. См.
[Удалённый доступ](/ru/gateway/remote).

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

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

## Сопряжение и аутентификация (прямой транспорт)

Gateway является источником достоверных данных для допуска Node/клиентов:

- Запросы на сопряжение создаются, одобряются и отклоняются в Gateway (см.
  [Сопряжение Gateway](/ru/gateway/pairing)).
- Gateway обеспечивает аутентификацию (токен/пара ключей), области доступа/ACL (это не необработанный
  прокси ко всем методам) и ограничения частоты запросов.

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

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

## См. также

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