Bonjour / mDNS 検出
OpenClaw は、アクティブな Gateway(WebSocket エンドポイント)を検出するために、LAN 限定の利便性機能として Bonjour(mDNS / DNS‑SD)を使用します。これはベストエフォートであり、SSH や Tailnet ベースの接続を置き換えるものではありません。 これはベストエフォートであり、SSHまたは Tailnetベースの接続を置き換えません。 これはベストエフォートであり、SSHまたは Tailnetベースの接続を置き換えません。Tailscale 経由のワイドエリア Bonjour(ユニキャスト DNS‑SD)
ノードとゲートウェイが異なるネットワーク上にある場合、マルチキャスト mDNS は境界を越えません。同じ検出 UX を維持するには、Tailscale 経由で ユニキャスト DNS‑SD (「ワイドエリア Bonjour」)に切り替えます。 同じ発見を維持するには、Tailscale上でユニキャストDNS‐SD (“Wide‐Area Bonjour”)に切り替えます。 同じ発見を維持するには、Tailscale上でユニキャストDNS‐SD (“Wide‐Area Bonjour”)に切り替えます。 高レベルの手順:- ゲートウェイ ホスト上で DNS サーバーを実行します(Tailnet 経由で到達可能)。
- 専用ゾーン配下に
_openclaw-gw._tcp向けの DNS‑SD レコードを公開します (例:openclaw.internal.)。 - Tailscale の スプリット DNS を設定し、選択したドメインがその DNS サーバーで解決されるようにします (iOS を含むクライアント)。
openclaw.internal. は単なる例です。
iOS/Android ノードは local. と、設定したワイドエリア ドメインの両方をブラウズします。
iOS/Androidノードは、local.と設定された広域ドメインの両方を参照します。
iOS/Androidノードは、local.と設定された広域ドメインの両方を参照します。
Gateway 設定(推奨)
DNS サーバーの一度きりのセットアップ(Gateway ホスト)
- ゲートウェイの Tailscale インターフェース上でのみ、ポート 53 で待ち受け
- 選択したドメイン(例:
openclaw.internal.)を~/.openclaw/dns/<domain>.dbから提供
Tailscale DNS 設定
Tailscale 管理コンソールで次を行います:- ゲートウェイの Tailnet IP(UDP/TCP 53)を指すネームサーバーを追加します。
- 検出ドメインがそのネームサーバーを使用するように、スプリット DNS を追加します。
_openclaw-gw._tcp をブラウズできます。
Gateway リスナーのセキュリティ(推奨)
Gateway の WS ポート(デフォルト18789)は、既定では loopback にバインドされます。LAN/Tailnet
アクセスの場合は、明示的にバインドし、認証を有効にしたままにしてください。 LAN/tailnet
アクセスの場合は、明示的にバインドして認証を有効にしておきます。 LAN/tailnet
アクセスの場合は、明示的にバインドして認証を有効にしておきます。
Tailnet 専用のセットアップの場合:
~/.openclaw/openclaw.json内でgateway.bind: "tailnet"を設定します。- Gateway を再起動します(または macOS のメニューバー アプリを再起動します)。
広告されるもの
_openclaw-gw._tcp を広告するのは Gateway のみです。
サービスタイプ
_openclaw-gw._tcp— ゲートウェイ転送ビーコン(macOS/iOS/Android ノードで使用)。
TXT キー(非機密のヒント)
Gateway は、UI フローを便利にするための小さな非機密ヒントを広告します:role=gatewaydisplayName=<friendly name>lanHost=<hostname>.localgatewayPort=<port>(Gateway WS + HTTP)gatewayTls=1(TLS が有効な場合のみ)gatewayTlsSha256=<sha256>(TLS が有効で、フィンガープリントが利用可能な場合のみ)canvasPort=<port>(キャンバス ホストが有効な場合のみ。デフォルト18793)sshPort=<port>(上書きされていない場合のデフォルトは 22)transport=gatewaycliPath=<path>(任意。実行可能なopenclawエントリポイントへの絶対パス)tailnetDns=<magicdns>(Tailnet が利用可能な場合の任意のヒント)
- Bonjour/mDNS の TXT レコードは 認証されていません。 クライアントは TXT を信頼できるルーティング情報として扱ってはなりません。
- クライアントは、解決されたサービスエンドポイント(SRV + A/AAAA)を使用してルーティングする必要があります。
lanHost、tailnetDns、gatewayPort、およびgatewayTlsSha256はヒントとしてのみ扱ってください。 - TLS ピンニングでは、広告された
gatewayTlsSha256が以前に保存されたピンを上書きできないようにする必要があります。 - iOS/Android ノードは、ディスカバリーベースの直接接続を TLS のみ として扱い、初回フィンガープリントを信頼する前に明示的なユーザー確認を必須とする必要があります。
macOS でのデバッグ
役立つ組み込みツール:-
インスタンスをブラウズ:
-
1 つのインスタンスを解決(
<instance>を置き換え):
Gateway ログでのデバッグ
Gateway はローテーションされるログファイルを書き込みます(起動時にgateway log file: ... として出力されます)。特に次の
bonjour: 行を確認してください: bonjour:線を探してください。特に: bonjour:線を探してください。特に:
bonjour: advertise failed ...bonjour: ... name conflict resolved/hostname conflict resolvedbonjour: watchdog detected non-announced service ...
iOS ノードでのデバッグ
iOS ノードはNWBrowser を使用して _openclaw-gw._tcp を検出します。
ログを取得するには:
- 設定 → Gateway → 詳細 → 検出デバッグログ
- 設定 → Gateway → 詳細 → 検出ログ → 再現 → コピー
一般的な失敗モード
- Bonjour はネットワークを越えない: Tailnet または SSH を使用してください。
- マルチキャストがブロックされている: 一部の Wi‑Fi ネットワークでは mDNS が無効化されています。
- スリープ / インターフェースの変動: macOS は一時的に mDNS の結果を失うことがあります。再試行してください。
- ブラウズは成功するが解決に失敗する: マシン名はシンプルに保ってください(絵文字や 句読点を避けます)。その後 Gateway を再起動します。サービス インスタンス名は ホスト名から派生するため、過度に複雑な名前は一部のリゾルバーを混乱させる可能性があります。 サービスインスタンス名はホスト名の に由来するため、過度に複雑な名前はリゾルバを混乱させる可能性があります。
エスケープされたインスタンス名(\032)
Bonjour/DNS‑SD では、サービス インスタンス名のバイトが 10 進数の \DDD
シーケンスとしてエスケープされることがよくあります(例: スペースは \032)。
- これはプロトコル レベルでは正常です。
- UI では表示用にデコードする必要があります(iOS は
BonjourEscapes.decodeを使用します)。
無効化 / 設定
OPENCLAW_DISABLE_BONJOUR=1は広告を無効化します(レガシー:OPENCLAW_DISABLE_BONJOUR)。~/.openclaw/openclaw.json内のgateway.bindは Gateway のバインド モードを制御します。OPENCLAW_SSH_PORTは TXT で広告される SSH ポートを上書きします(レガシー:OPENCLAW_SSH_PORT)。OPENCLAW_TAILNET_DNSは TXT に MagicDNS のヒントを公開します(レガシー:OPENCLAW_TAILNET_DNS)。OPENCLAW_CLI_PATHは広告される CLI パスを上書きします(レガシー:OPENCLAW_CLI_PATH)。
関連ドキュメント
- 検出ポリシーと転送選択: Discovery
- ノードのペアリングと承認: Gateway pairing