Gateway
Виявлення 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.
Кроки високого рівня:
- Запустіть DNS-сервер на хості gateway (доступний через Tailnet).
- Опублікуйте записи DNS-SD для
_openclaw-gw._tcpу виділеній зоні (приклад:openclaw.internal.). - Налаштуйте Tailscale split DNS, щоб вибраний домен розв’язувався через цей DNS-сервер для клієнтів (зокрема iOS).
OpenClaw підтримує будь-який домен виявлення; openclaw.internal. — лише приклад.
Вузли iOS/Android переглядають і local., і ваш налаштований wide-area домен.
Конфігурація Gateway (рекомендовано)
{ gateway: { bind: "tailnet" }, // tailnet-only (recommended) discovery: { wideArea: { enabled: true } }, // enables wide-area DNS-SD publishing}Одноразове налаштування DNS-сервера (хост gateway)
openclaw dns setup --applyЦе встановлює CoreDNS і налаштовує його так, щоб він:
- прослуховував порт 53 лише на інтерфейсах Tailscale gateway
- обслуговував вибраний домен (приклад:
openclaw.internal.) з~/.openclaw/dns/<domain>.db
Перевірте з машини, підключеної до tailnet:
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=gatewaydisplayName=<friendly name>lanHost=<hostname>.localgatewayPort=<port>(Gateway WS + HTTP)gatewayTls=1(лише коли TLS увімкнено)gatewayTlsSha256=<sha256>(лише коли TLS увімкнено і fingerprint доступний)canvasPort=<port>(лише коли хост canvas увімкнено; наразі той самий, що йgatewayPort)transport=gatewaytailnetDns=<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 dns-sd -B _openclaw-gw._tcp local. -
Розв’язати один екземпляр (замініть
<instance>):bash 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 resolvedbonjour: 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:
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 ненадійне.
Надавайте перевагу наявному перевизначенню середовища, коли проблема стосується розгортання:
OPENCLAW_DISABLE_BONJOUR=1Це вимикає багатоадресне оголошення в LAN без зміни конфігурації plugin. Це безпечно для Docker-образів, service files, скриптів запуску та одноразового налагодження, бо налаштування зникає разом із середовищем.
Використовуйте конфігурацію plugin, коли ви навмисно хочете вимкнути вбудований LAN discovery plugin для цієї конфігурації OpenClaw:
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:
-
Підтвердьте, чи Gateway працює в автоматичному, примусово ввімкненому або примусово вимкненому режимі:
bash docker compose config | grep OPENCLAW_DISABLE_BONJOUR -
Підтвердьте, що сам Gateway доступний через опублікований порт:
bash curl -fsS http://127.0.0.1:18789/healthz -
Використовуйте пряму ціль, коли Bonjour вимкнено:
- Control UI або локальні інструменти:
http://127.0.0.1:18789 - Клієнти LAN:
http://<gateway-host>:18789 - Клієнти між мережами: Tailnet MagicDNS, Tailnet IP, SSH-тунель або wide-area DNS-SD
- Control UI або локальні інструменти:
-
Якщо ви навмисно ввімкнули Bonjour plugin у Docker і примусово ввімкнули оголошення за допомогою
OPENCLAW_DISABLE_BONJOUR=0, протестуйте multicast з хоста:bash 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).
Пов’язані документи
- Політика виявлення та вибір транспорту: Виявлення
- Сполучення Node + схвалення: Сполучення Gateway