> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Виявлення Bonjour

OpenClaw може використовувати Bonjour (mDNS / DNS-SD), щоб виявляти активний Gateway (кінцеву точку WebSocket).
Багатоадресний перегляд `local.` — це **зручність лише для LAN**. Вбудований `bonjour`
plugin відповідає за оголошення в LAN. Він автоматично запускається на хостах macOS і вмикається вручну для
розгортань Gateway у Linux, Windows і контейнерах. Для виявлення між мережами той самий
beacon також можна опублікувати через налаштований домен wide-area DNS-SD. Виявлення
й далі працює за принципом best-effort і **не** замінює підключення через SSH або Tailnet.

## Wide-area Bonjour (Unicast DNS-SD) через Tailscale

Якщо вузол і gateway перебувають у різних мережах, багатоадресний mDNS не перетне
межу. Ви можете зберегти той самий UX виявлення, перемкнувшись на **unicast DNS-SD**
("Wide-Area Bonjour") через Tailscale.

Кроки високого рівня:

1. Запустіть DNS-сервер на хості gateway (доступний через Tailnet).
2. Опублікуйте записи DNS-SD для `_openclaw-gw._tcp` у виділеній зоні
   (приклад: `openclaw.internal.`).
3. Налаштуйте Tailscale **split DNS**, щоб вибраний домен розв’язувався через цей
   DNS-сервер для клієнтів (зокрема iOS).

OpenClaw підтримує будь-який домен виявлення; `openclaw.internal.` — лише приклад.
Вузли iOS/Android переглядають і `local.`, і ваш налаштований wide-area домен.

### Конфігурація Gateway (рекомендовано)

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  gateway: { bind: "tailnet" }, // tailnet-only (recommended)
  discovery: { wideArea: { enabled: true } }, // enables wide-area DNS-SD publishing
}
```

### Одноразове налаштування DNS-сервера (хост gateway)

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw dns setup --apply
```

Це встановлює CoreDNS і налаштовує його так, щоб він:

* прослуховував порт 53 лише на інтерфейсах Tailscale gateway
* обслуговував вибраний домен (приклад: `openclaw.internal.`) з `~/.openclaw/dns/<domain>.db`

Перевірте з машини, підключеної до tailnet:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
dns-sd -B _openclaw-gw._tcp openclaw.internal.
dig @<TAILNET_IPV4> -p 53 _openclaw-gw._tcp.openclaw.internal PTR +short
```

### Налаштування DNS у Tailscale

У консолі адміністратора Tailscale:

* Додайте nameserver, що вказує на tailnet IP gateway (UDP/TCP 53).
* Додайте split DNS, щоб ваш домен виявлення використовував цей nameserver.

Після того як клієнти приймуть tailnet DNS, вузли iOS і виявлення CLI зможуть переглядати
`_openclaw-gw._tcp` у вашому домені виявлення без multicast.

### Безпека слухача Gateway (рекомендовано)

Порт Gateway WS (типово `18789`) за замовчуванням прив’язується до loopback. Для доступу через LAN/tailnet
задайте прив’язку явно й залиште автентифікацію ввімкненою.

Для налаштувань лише через tailnet:

* Установіть `gateway.bind: "tailnet"` у `~/.openclaw/openclaw.json`.
* Перезапустіть Gateway (або перезапустіть застосунок macOS у рядку меню).

## Що оголошує

Лише Gateway оголошує `_openclaw-gw._tcp`. Багатоадресне оголошення в LAN
надає вбудований `bonjour` plugin, коли plugin увімкнено; публікація wide-area
DNS-SD залишається у власності Gateway.

## Типи сервісів

* `_openclaw-gw._tcp` - beacon транспорту gateway (використовується вузлами macOS/iOS/Android).

## Ключі TXT (несекретні підказки)

Gateway оголошує невеликі несекретні підказки, щоб зробити потоки UI зручними:

* `role=gateway`
* `displayName=<friendly name>`
* `lanHost=<hostname>.local`
* `gatewayPort=<port>` (Gateway WS + HTTP)
* `gatewayTls=1` (лише коли TLS увімкнено)
* `gatewayTlsSha256=<sha256>` (лише коли TLS увімкнено і fingerprint доступний)
* `canvasPort=<port>` (лише коли хост canvas увімкнено; наразі той самий, що й `gatewayPort`)
* `transport=gateway`
* `tailnetDns=<magicdns>` (лише повний режим mDNS, необов’язкова підказка, коли Tailnet доступний)
* `sshPort=<port>` (лише повний режим; пропускається в мінімальному та вимкненому режимах)
* `cliPath=<path>` (лише повний режим; пропускається в мінімальному та вимкненому режимах)

Примітки щодо безпеки:

* Записи Bonjour/mDNS TXT **не автентифікуються**. Клієнти не повинні вважати TXT авторитетним джерелом маршрутизації.
* Клієнти мають маршрутизувати, використовуючи розв’язану кінцеву точку сервісу (SRV + A/AAAA). Розглядайте `lanHost`, `tailnetDns`, `gatewayPort` і `gatewayTlsSha256` лише як підказки.
* Автоматичний вибір цілі SSH так само має використовувати розв’язаний хост сервісу, а не підказки лише з TXT.
* Закріплення TLS ніколи не має дозволяти оголошеному `gatewayTlsSha256` перевизначати раніше збережений pin.
* Вузли iOS/Android мають розглядати прямі підключення на основі виявлення як **лише TLS** і вимагати явного підтвердження користувача перед довірою до першого fingerprint.

## Налагодження на macOS

Корисні вбудовані інструменти:

* Переглянути екземпляри:

  ```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
  dns-sd -B _openclaw-gw._tcp local.
  ```

* Розв’язати один екземпляр (замініть `<instance>`):

  ```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
  dns-sd -L "<instance>" _openclaw-gw._tcp local.
  ```

Якщо перегляд працює, але розв’язання завершується помилкою, зазвичай причина в політиці LAN або
проблемі resolver mDNS.

## Налагодження в журналах Gateway

Gateway записує ротаційний файл журналу (друкується під час запуску як
`gateway log file: ...`). Шукайте рядки `bonjour:`, особливо:

* `bonjour: advertise failed ...`
* `bonjour: suppressing ciao cancellation ...`
* `bonjour: ... name conflict resolved` / `hostname conflict resolved`
* `bonjour: watchdog detected non-announced service ...`
* `bonjour: disabling advertiser after ... failed restarts ...`

Watchdog розглядає активні `probing`, `announcing` і свіжі перейменування через конфлікт як
стани в процесі виконання. Якщо сервіс ніколи не досягає `announced`, OpenClaw зрештою
перестворює advertiser і, після повторних помилок, вимикає Bonjour для цього
процесу Gateway замість нескінченного повторного оголошення.

Bonjour використовує системне ім’я хоста для оголошеного хоста `.local`, коли воно є
дійсною DNS-міткою. Якщо системне ім’я хоста містить пробіли, підкреслення або інший
недійсний символ DNS-мітки, OpenClaw повертається до `openclaw.local`. Установіть
`OPENCLAW_MDNS_HOSTNAME=<name>` перед запуском Gateway, коли вам потрібна
явна мітка хоста.

## Налагодження на вузлі iOS

Вузол iOS використовує `NWBrowser`, щоб виявляти `_openclaw-gw._tcp`.

Щоб зібрати журнали:

* Settings → Gateway → Advanced → **Discovery Debug Logs**
* Settings → Gateway → Advanced → **Discovery Logs** → відтворіть → **Copy**

Журнал містить переходи станів browser і зміни набору результатів.

## Коли вмикати Bonjour

Bonjour автоматично запускається для запуску Gateway з порожньою конфігурацією на хостах macOS, тому що
локальний застосунок і найближчі вузли iOS/Android часто покладаються на виявлення в тій самій LAN.

Увімкніть Bonjour явно, коли автоматичне виявлення в тій самій LAN корисне на Linux,
Windows або іншому хості не macOS:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw plugins enable bonjour
```

Коли ввімкнено, Bonjour використовує `discovery.mdns.mode`, щоб визначити, скільки метаданих TXT
публікувати. Той самий режим керує необов’язковими підказками TXT у записах wide-area DNS-SD.
Типовий режим — `minimal`; використовуйте `full` лише тоді, коли клієнтам потрібні підказки `cliPath` або
`sshPort`. Використовуйте `off`, щоб придушити багатоадресну передачу LAN без зміни
увімкнення plugin; wide-area DNS-SD усе ще може публікувати мінімальний beacon Gateway, коли
`discovery.wideArea.enabled` має значення true.

## Коли вимикати Bonjour

Залишайте Bonjour вимкненим, коли багатоадресне оголошення в LAN непотрібне, недоступне
або шкідливе. Типові випадки — сервери не macOS, мережа Docker bridge,
WSL або мережева політика, що відкидає multicast mDNS. У цих середовищах
Gateway і далі доступний через опубліковану URL-адресу, SSH, Tailnet або wide-area
DNS-SD, але автоматичне виявлення в LAN ненадійне.

Надавайте перевагу наявному перевизначенню середовища, коли проблема стосується розгортання:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
OPENCLAW_DISABLE_BONJOUR=1
```

Це вимикає багатоадресне оголошення в LAN без зміни конфігурації plugin.
Це безпечно для Docker-образів, service files, скриптів запуску та одноразового
налагодження, бо налаштування зникає разом із середовищем.

Використовуйте конфігурацію plugin, коли ви навмисно хочете вимкнути вбудований LAN
discovery plugin для цієї конфігурації OpenClaw:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw plugins disable bonjour
```

## Підводні камені Docker

Вбудований Bonjour plugin автоматично вимикає багатоадресне оголошення LAN у виявлених
контейнерах, коли `OPENCLAW_DISABLE_BONJOUR` не задано. Мережі Docker bridge
зазвичай не пересилають multicast mDNS (`224.0.0.251:5353`) між контейнером
і LAN, тому оголошення з контейнера рідко забезпечує роботу виявлення.

Важливі підводні камені:

* Bonjour автоматично запускається на хостах macOS і вмикається вручну в інших середовищах. Якщо залишити його
  вимкненим, це не зупиняє Gateway; це лише пропускає багатоадресне оголошення LAN.
* Вимкнення Bonjour не змінює `gateway.bind`; Docker усе ще типово використовує
  `OPENCLAW_GATEWAY_BIND=lan`, щоб опублікований порт хоста міг працювати.
* Вимкнення Bonjour не вимикає wide-area DNS-SD. Використовуйте wide-area discovery
  або Tailnet, коли Gateway і вузол не в одній LAN.
* Повторне використання того самого `OPENCLAW_CONFIG_DIR` поза Docker не зберігає
  політику автоматичного вимкнення контейнера.
* Установлюйте `OPENCLAW_DISABLE_BONJOUR=0` лише для host networking, macvlan або іншої
  мережі, де multicast mDNS гарантовано проходить; установіть його в `1`, щоб примусово вимкнути.

## Усунення несправностей вимкненого Bonjour

Якщо вузол більше не виявляє Gateway автоматично після налаштування Docker:

1. Підтвердьте, чи Gateway працює в автоматичному, примусово ввімкненому або примусово вимкненому режимі:

   ```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
   docker compose config | grep OPENCLAW_DISABLE_BONJOUR
   ```

2. Підтвердьте, що сам Gateway доступний через опублікований порт:

   ```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
   curl -fsS http://127.0.0.1:18789/healthz
   ```

3. Використовуйте пряму ціль, коли Bonjour вимкнено:
   * Control UI або локальні інструменти: `http://127.0.0.1:18789`
   * Клієнти LAN: `http://<gateway-host>:18789`
   * Клієнти між мережами: Tailnet MagicDNS, Tailnet IP, SSH-тунель або
     wide-area DNS-SD

4. Якщо ви навмисно ввімкнули Bonjour plugin у Docker і примусово ввімкнули оголошення
   за допомогою `OPENCLAW_DISABLE_BONJOUR=0`, протестуйте multicast з хоста:

   ```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
   dns-sd -B _openclaw-gw._tcp local.
   ```

   Якщо перегляд порожній або журнали Gateway показують повторні скасування
   ciao watchdog, відновіть `OPENCLAW_DISABLE_BONJOUR=1` і використовуйте прямий або
   Tailnet маршрут.

## Поширені режими відмови

* **Bonjour не перетинає мережі**: використовуйте Tailnet або SSH.
* **Multicast заблоковано**: деякі мережі Wi-Fi вимикають mDNS.
* **Advertiser застряг у probing/announcing**: хости із заблокованим multicast,
  container bridges, WSL або зміни інтерфейсів можуть залишити ciao advertiser у
  неоголошеному стані. OpenClaw повторює спробу кілька разів, а потім вимикає Bonjour
  для поточного процесу Gateway замість нескінченного перезапуску advertiser.
* **Мережа Docker bridge**: Bonjour автоматично вимикається у виявлених контейнерах.
  Установлюйте `OPENCLAW_DISABLE_BONJOUR=0` лише для host, macvlan або іншої
  мережі з підтримкою mDNS.
* **Сон / зміни інтерфейсів**: macOS може тимчасово втратити результати mDNS; повторіть спробу.
* **Перегляд працює, але розв’язання завершується помилкою**: використовуйте прості імена машин (уникайте емодзі або
  пунктуації), потім перезапустіть Gateway. Ім’я екземпляра сервісу походить від
  імені хоста, тому надто складні імена можуть збивати з пантелику деякі resolver.

## Екрановані імена екземплярів (`\032`)

Bonjour/DNS-SD часто екранує байти в іменах екземплярів сервісів як десяткові
послідовності `\DDD` (наприклад, пробіли стають `\032`).

* Це нормально на рівні протоколу.
* UI має декодувати для відображення (iOS використовує `BonjourEscapes.decode`).

## Увімкнення / вимкнення / конфігурація

* Хости macOS автоматично запускають вбудований Plugin виявлення локальної мережі за замовчуванням.
* `openclaw plugins enable bonjour` вмикає вбудований Plugin виявлення локальної мережі на хостах, де його не ввімкнено за замовчуванням.
* `openclaw plugins disable bonjour` вимикає багатоадресне оголошення в локальній мережі, вимикаючи вбудований Plugin.
* `OPENCLAW_DISABLE_BONJOUR=1` вимикає багатоадресне оголошення в локальній мережі без зміни конфігурації Plugin; прийняті істинні значення: `1`, `true`, `yes` і `on` (застаріле: `OPENCLAW_DISABLE_BONJOUR`).
* `OPENCLAW_DISABLE_BONJOUR=0` примусово вмикає багатоадресне оголошення в локальній мережі, зокрема всередині виявлених контейнерів; прийняті хибні значення: `0`, `false`, `no` і `off`.
* Коли Plugin Bonjour увімкнено, а `OPENCLAW_DISABLE_BONJOUR` не задано, Bonjour оголошується на звичайних хостах і автоматично вимикається всередині виявлених контейнерів.
* `gateway.bind` у `~/.openclaw/openclaw.json` керує режимом прив’язки Gateway.
* `OPENCLAW_SSH_PORT` перевизначає порт SSH, коли оголошується `sshPort` (застаріле: `OPENCLAW_SSH_PORT`).
* `OPENCLAW_TAILNET_DNS` публікує підказку MagicDNS у TXT, коли ввімкнено повний режим mDNS (застаріле: `OPENCLAW_TAILNET_DNS`).
* `OPENCLAW_CLI_PATH` перевизначає оголошений шлях CLI (застаріле: `OPENCLAW_CLI_PATH`).

## Пов’язані документи

* Політика виявлення та вибір транспорту: [Виявлення](/uk/gateway/discovery)
* Сполучення Node + схвалення: [Сполучення Gateway](/uk/gateway/pairing)
