Gateway
Виявлення Bonjour
OpenClaw може використовувати Bonjour (mDNS/DNS-SD), щоб виявляти активний Gateway (кінцеву точку WebSocket). Багатоадресний пошук у local. — це зручна можливість лише для LAN: вбудований Plugin bonjour відповідає за оголошення в LAN, автоматично запускаючись на хостах macOS і потребуючи явного ввімкнення в Linux, Windows та контейнеризованих розгортаннях Gateway. Той самий маяк також можна публікувати через налаштований домен глобального DNS-SD для виявлення між мережами. Виявлення виконується за можливості й не замінює підключення через SSH або Tailnet.
Глобальний Bonjour (одноадресний DNS-SD) через Tailscale
Якщо Node і Gateway перебувають у різних мережах, багатоадресний mDNS не може перетнути їхню межу. Збережіть той самий інтерфейс виявлення, перейшовши на одноадресний DNS-SD («глобальний Bonjour») через Tailscale:
- Запустіть DNS-сервер на хості Gateway, доступний через Tailnet.
- Опублікуйте записи DNS-SD для
_openclaw-gw._tcpу виділеній зоні (приклад:openclaw.internal.). - Налаштуйте роздільний DNS Tailscale, щоб вибраний домен на клієнтах, зокрема iOS, розпізнавався через цей DNS-сервер.
openclaw.internal. вище — лише приклад: OpenClaw підтримує будь-який домен виявлення. Вузли iOS/Android переглядають і local., і налаштований глобальний домен.
Конфігурація Gateway
{ gateway: { bind: "tailnet" }, // лише tailnet (рекомендовано) discovery: { wideArea: { enabled: true, domain: "openclaw.internal" } },}Якщо discovery.wideArea.domain не задано, він також приймає резервне значення зі змінної середовища OPENCLAW_WIDE_AREA_DOMAIN.
Одноразове налаштування DNS-сервера (хост Gateway, лише macOS)
openclaw dns setup --applyЦя команда доступна лише в macOS і потребує Homebrew та активного підключення Tailscale. Вона встановлює CoreDNS (brew install coredns) і налаштовує його так, щоб він:
- прослуховував порт 53 лише на інтерфейсах Tailscale хоста Gateway;
- обслуговував вибраний домен (приклад:
openclaw.internal.) із~/.openclaw/dns/<domain>.db.
Спочатку виконайте команду без --apply, щоб переглянути план (домен, шлях до файлу зони, виявлену IP-адресу Tailnet і рекомендовану конфігурацію), нічого не встановлюючи.
Перевірте з пристрою, підключеного до Tailnet:
dns-sd -B _openclaw-gw._tcp openclaw.internal.dig @<TAILNET_IPV4> -p 53 _openclaw-gw._tcp.openclaw.internal PTR +shortНалаштування DNS у Tailscale
У консолі адміністрування Tailscale:
- Додайте сервер імен, що вказує на IP-адресу Tailnet хоста Gateway (UDP/TCP 53).
- Додайте роздільний DNS, щоб ваш домен виявлення використовував цей сервер імен.
Коли клієнти почнуть використовувати DNS Tailnet, вузли iOS і засоби виявлення CLI зможуть переглядати _openclaw-gw._tcp у вашому домені виявлення без багатоадресного передавання.
Безпека прослуховувача Gateway
Порт WS Gateway (типово 18789) за замовчуванням прив’язується до local loopback. Для доступу через LAN/Tailnet задайте прив’язку явно та залиште автентифікацію ввімкненою. Для конфігурацій лише з Tailnet задайте gateway.bind: "tailnet" у ~/.openclaw/openclaw.json і перезапустіть Gateway (або застосунок рядка меню macOS).
Що оголошується
Лише Gateway оголошує _openclaw-gw._tcp. Багатоадресне оголошення в LAN надходить від вбудованого Plugin bonjour, коли його ввімкнено; публікація глобального DNS-SD залишається у відповідальності Gateway.
Типи служб
_openclaw-gw._tcp— маяк транспортного механізму Gateway, який використовують вузли macOS/iOS/Android.
Ключі TXT (несекретні підказки)
| Ключ | Коли наявний |
|---|---|
role=gateway |
Завжди. |
displayName=<friendly name> |
Завжди. |
lanHost=<hostname>.local |
Завжди. |
gatewayPort=<port> |
Завжди (WS + HTTP Gateway). |
transport=gateway |
Завжди. |
gatewayTls=1 |
Лише коли ввімкнено TLS. |
gatewayTlsSha256=<sha256> |
Лише коли ввімкнено TLS і доступний цифровий відбиток. |
gatewayDirectReachable=1 |
Лише коли Gateway доступний безпосередньо (а не тільки через ретранслятор або проксі). |
canvasPort=<port> |
Лише коли ввімкнено хост полотна; наразі збігається з gatewayPort. |
tailnetDns=<magicdns> |
Лише в повному режимі mDNS; необов’язкова підказка, коли доступний Tailnet. |
sshPort=<port> |
Лише в повному режимі; відсутній у мінімальному та вимкненому режимах. |
cliPath=<path> |
Лише в повному режимі; відсутній у мінімальному та вимкненому режимах. |
Примітки щодо безпеки:
- Записи TXT Bonjour/mDNS не автентифіковані. Клієнти не повинні вважати TXT авторитетним джерелом маршрутизації.
- Клієнти мають прокладати маршрут за розпізнаною кінцевою точкою служби (SRV + A/AAAA). Вважайте
lanHost,tailnetDns,gatewayPortіgatewayTlsSha256лише підказками. - Автоматичний вибір цілі SSH також має використовувати розпізнаний хост служби, а не лише підказки TXT.
- Закріплення TLS ніколи не повинно дозволяти оголошеному
gatewayTlsSha256перевизначати раніше збережений відбиток. - Вузли iOS/Android мають вважати прямі підключення на основі виявлення такими, що працюють лише через TLS, і вимагати явного підтвердження користувача перед довірою до відбитка, отриманого вперше.
Налагодження в macOS
Вбудовані засоби:
# Переглянути екземпляриdns-sd -B _openclaw-gw._tcp local. # Розпізнати один екземпляр (замініть <instance>)dns-sd -L "<instance>" _openclaw-gw._tcp local.Якщо перегляд працює, але розпізнавання завершується помилкою, зазвичай причиною є політика LAN або проблема засобу розпізнавання mDNS.
Налагодження в журналах Gateway
Gateway записує циклічно оновлюваний файл журналу (під час запуску його шлях виводиться як gateway log file: ...). Шукайте рядки bonjour:, особливо:
bonjour: advertise failed ...bonjour: suppressing ciao cancellation ...bonjour: ... name conflict resolved/hostname conflict resolvedbonjour: watchdog detected non-announced service ...bonjour: disabling advertiser after ... failed restarts ...
Сторожовий механізм вважає активні стани probing, announcing і нещодавні перейменування через конфлікти станами виконання. Якщо служба так і не досягає стану announced, OpenClaw повторно створює оголошувач, а після неодноразових збоїв вимикає Bonjour для цього процесу Gateway замість нескінченного повторного оголошення.
Bonjour використовує системне ім’я хоста для оголошеного хоста .local, якщо воно є дійсною DNS-міткою. Якщо системне ім’я хоста містить пробіли, символи підкреслення або інший символ, недійсний для DNS-мітки, OpenClaw використовує резервне значення openclaw.local. Якщо потрібна явна мітка хоста, перед запуском Gateway задайте OPENCLAW_MDNS_HOSTNAME=<name>.
Налагодження на вузлі iOS
Вузол iOS використовує NWBrowser для виявлення _openclaw-gw._tcp.
Щоб зібрати журнали: Settings -> Gateway -> Advanced -> Discovery Debug Logs, потім Settings -> Gateway -> Advanced -> Discovery Logs -> відтворіть проблему -> Copy. Журнал містить переходи станів браузера та зміни набору результатів.
Коли вмикати Bonjour
Bonjour автоматично запускається під час запуску Gateway із порожньою конфігурацією на хостах macOS, оскільки локальний застосунок і розташовані поруч вузли iOS/Android зазвичай покладаються на виявлення в тій самій LAN.
Увімкніть його явно, коли автоматичне виявлення в тій самій LAN корисне в Linux, Windows або на іншому хості не з macOS:
openclaw plugins enable bonjourКоли Bonjour увімкнено, параметр discovery.mdns.mode визначає обсяг метаданих TXT для публікації; той самий режим керує необов’язковими підказками TXT у записах глобального DNS-SD. Режими:
| Режим | Поведінка |
|---|---|
minimal (типовий) |
Лише основні ключі TXT; без sshPort, cliPath, tailnetDns. |
full |
Додає sshPort, cliPath, tailnetDns — використовуйте, коли клієнтам потрібні ці підказки. |
off |
Пригнічує багатоадресне передавання в LAN, не змінюючи стан увімкнення Plugin; глобальний DNS-SD усе одно може публікувати мінімальний маяк, коли discovery.wideArea.enabled має значення true. |
Коли вимикати Bonjour
Залишайте Bonjour вимкненим, коли багатоадресне оголошення в LAN непотрібне, недоступне або шкідливе — типовими випадками є сервери не з macOS, мережа мосту Docker, WSL або мережева політика, яка відкидає багатоадресний трафік mDNS. Gateway залишається доступним через опубліковану URL-адресу, SSH, Tailnet або глобальний DNS-SD; ненадійним стає лише автоматичне виявлення в LAN.
Використовуйте перевизначення через змінну середовища для проблем на рівні розгортання (це безпечно для образів Docker, файлів служб, сценаріїв запуску та одноразового налагодження — параметр зникає разом із середовищем):
OPENCLAW_DISABLE_BONJOUR=1Використовуйте конфігурацію Plugin, коли навмисно хочете вимкнути вбудований Plugin виявлення в LAN для цієї конфігурації OpenClaw:
openclaw plugins disable bonjourОсобливості Docker
Вбудований Plugin Bonjour автоматично вимикає багатоадресне оголошення в LAN у виявлених контейнерах, якщо OPENCLAW_DISABLE_BONJOUR не задано. Мережі мосту Docker зазвичай не пересилають багатоадресний трафік mDNS (224.0.0.251:5353) між контейнером і LAN, тому оголошення з контейнера рідко забезпечує роботу виявлення.
Особливості:
- Bonjour автоматично запускається на хостах macOS, а на інших платформах потребує явного ввімкнення. Якщо залишити його вимкненим, це не зупинить Gateway — буде пропущено лише багатоадресне оголошення в LAN.
- Вимкнення Bonjour не змінює
gateway.bind; Docker і надалі типово використовуєOPENCLAW_GATEWAY_BIND=lan, щоб опублікований порт хоста працював. - Вимкнення Bonjour не вимикає глобальний DNS-SD. Використовуйте глобальне виявлення або Tailnet, коли Gateway і Node перебувають не в одній LAN.
- Повторне використання того самого
OPENCLAW_CONFIG_DIRпоза Docker не зберігає політику автоматичного вимкнення контейнера. - Задавайте
OPENCLAW_DISABLE_BONJOUR=0лише для мережі хоста, macvlan або іншої мережі, де багатоадресний трафік mDNS гарантовано проходить; задайте значення1, щоб примусово вимкнути його.
Усунення проблем із вимкненим Bonjour
Якщо після налаштування Docker вузол більше не виявляє Gateway автоматично:
-
Перевірте, у якому режимі працює Gateway: автоматичному, примусово ввімкненому чи примусово вимкненому:
bash docker compose config | grep OPENCLAW_DISABLE_BONJOUR -
Перевірте доступність самого Gateway через опублікований порт:
bash curl -fsS http://127.0.0.1:18789/healthz -
Використовуйте пряму ціль, коли Bonjour вимкнено:
- Інтерфейс керування або локальні засоби:
http://127.0.0.1:18789 - Клієнти LAN:
http://<gateway-host>:18789 - Клієнти з інших мереж: MagicDNS Tailnet, IP-адреса Tailnet, тунель SSH або глобальний DNS-SD
- Інтерфейс керування або локальні засоби:
-
Якщо ви навмисно ввімкнули Plugin Bonjour у Docker і примусово активували оголошення за допомогою
OPENCLAW_DISABLE_BONJOUR=0, перевірте багатоадресне передавання з хоста:bash dns-sd -B _openclaw-gw._tcp local.Якщо перегляд не повертає результатів або журнали Gateway показують повторювані скасування сторожового механізму ciao, відновіть
OPENCLAW_DISABLE_BONJOUR=1і використовуйте прямий маршрут або маршрут через Tailnet.
Поширені режими відмови
- Bonjour не працює між мережами: використовуйте Tailnet або SSH.
- Multicast заблоковано: деякі мережі Wi-Fi вимикають mDNS.
- Оголошувач застряг на етапі перевірки/оголошення: хости із заблокованим multicast, контейнерними мостами, WSL або частими змінами інтерфейсів можуть залишити оголошувач ciao у стані без оголошення. OpenClaw повторює спробу кілька разів, а потім вимикає Bonjour для поточного процесу Gateway замість нескінченного перезапуску оголошувача.
- Мережа через міст Docker: Bonjour автоматично вимикається у виявлених контейнерах. Установлюйте
OPENCLAW_DISABLE_BONJOUR=0лише для мережі хоста, macvlan або іншої мережі з підтримкою mDNS. - Перехід у режим сну/зміни інтерфейсів: macOS може тимчасово втрачати результати mDNS; повторіть спробу.
- Перегляд працює, але розпізнавання не вдається: використовуйте прості імена машин (уникайте емодзі та розділових знаків), а потім перезапустіть Gateway. Ім’я екземпляра служби формується з імені хоста, тому надто складні імена можуть заплутати деякі засоби розпізнавання.
Екрановані імена екземплярів (\032)
Bonjour/DNS-SD часто екранує байти в іменах екземплярів служб як десяткові послідовності \DDD (пробіли перетворюються на \032). На рівні протоколу це нормально; інтерфейси мають декодувати їх для відображення (iOS використовує BonjourEscapes.decode).
Увімкнення / вимкнення / налаштування
| Параметр | Ефект |
|---|---|
openclaw plugins enable bonjour |
Вмикає вбудований Plugin виявлення в LAN на хостах, де його не ввімкнено за замовчуванням. |
openclaw plugins disable bonjour |
Вимикає multicast-оголошення в LAN шляхом вимкнення вбудованого Plugin. |
OPENCLAW_DISABLE_BONJOUR=1 (або true/yes/on) |
Вимикає multicast-оголошення в LAN без зміни конфігурації Plugin. |
OPENCLAW_DISABLE_BONJOUR=0 (або false/no/off) |
Примусово вмикає multicast-оголошення в LAN, зокрема всередині виявлених контейнерів. |
discovery.mdns.mode |
off | minimal (за замовчуванням) | full — див. режими вище. |
gateway.bind |
Керує режимом прив’язки Gateway у ~/.openclaw/openclaw.json. |
OPENCLAW_SSH_PORT |
Перевизначає порт SSH, коли оголошується sshPort (повний режим). |
OPENCLAW_TAILNET_DNS |
Публікує підказку MagicDNS у TXT, коли ввімкнено повний режим mDNS. |
OPENCLAW_CLI_PATH |
Перевизначає оголошуваний шлях CLI (повний режим). |
На хостах macOS вбудований Plugin виявлення в LAN за замовчуванням запускається автоматично. Коли Plugin Bonjour увімкнено, а OPENCLAW_DISABLE_BONJOUR не задано, Bonjour публікує оголошення на звичайних хостах і автоматично вимикається всередині виявлених контейнерів (Docker, машини Fly.io та поширені середовища виконання контейнерів).
Пов’язана документація
- Політика виявлення та вибір транспорту: Виявлення
- Сполучення Node і схвалення: Сполучення Gateway