OpenClawSkills
GitHub
Gateway / Operations • 5分で読める

Bonjour(mDNS)による発見

Bonjour/mDNS の発見とデバッグ(Gateway ビーコン、クライアント、よくある障害)

OpenClaw は Bonjour(mDNS / DNS-SD)を、稼働中の Gateway(WebSocket エンドポイント)を見つけるためのLAN 専用の便利機能として利用します。ベストエフォートであり、SSH や tailnet ベースの接続を置き換えるものではありません。

Tutorial.step

Tailscale 上の Wide-Area Bonjour(ユニキャスト DNS-SD)

ノードと Gateway が別ネットワークにある場合、マルチキャスト mDNS は境界を越えません。Tailscale 上で ユニキャスト DNS‑SD(“Wide-Area Bonjour”)に切り替えることで、同じ発見 UX を維持できます。

High-level steps:

  1. Gateway ホスト上で DNS サーバーを動かす(tailnet 経由で到達可能にする)。
  2. 専用ゾーン配下で _openclaw-gw._tcp の DNS‑SD レコードを公開する(例:openclaw.internal.)。
  3. Tailscale の Split DNS を設定し、選んだドメインをその DNS サーバーで解決する(iOS を含む)。

OpenClaw は任意の discovery ドメインをサポートします。openclaw.internal. は例です。

iOS/Android ノードは local. と設定した wide-area ドメインをブラウズします。

Tutorial.step

Gateway config (recommended)

Json5
{
  gateway: { bind: "tailnet" }, // tailnet-only (recommended)
  discovery: { wideArea: { enabled: true } }, // enables wide-area DNS-SD publishing
}
Tutorial.step

DNS サーバーの一回限りセットアップ(Gateway ホスト)

Bash
openclaw dns setup --apply

これは CoreDNS をインストールし、次のように設定します:

  • Gateway の Tailscale インターフェースでのみ 53 番ポートを待ち受ける
  • ~/.openclaw/dns/<domain>.db から選んだドメインを提供する(例:openclaw.internal.)

tailnet 接続済みマシンから検証:

Bash
dns-sd -B _openclaw-gw._tcp openclaw.internal.
dig @<TAILNET_IPV4> -p 53 _openclaw-gw._tcp.openclaw.internal PTR +short
Tutorial.step

Tailscale DNS settings

Tailscale 管理コンソールで:

  • Gateway の tailnet IP(UDP/TCP 53)を指すネームサーバーを追加する。
  • discovery ドメインがそのネームサーバーを使うように Split DNS を追加する。

クライアントが tailnet DNS を受け入れると、iOS ノードはマルチキャストなしで discovery ドメイン内の _openclaw-gw._tcp をブラウズできます。

Tutorial.step

Gateway リスナーのセキュリティ(推奨)

Gateway の WS ポート(デフォルト 18789)は既定で loopback にバインドされます。LAN/tailnet で使う場合は明示的にバインドし、認証を有効にしたままにしてください。

tailnet 専用構成の場合:

  • gateway.bind: "tailnet" に ~/.openclaw/openclaw.json を設定する。
  • Gateway を再起動する(または macOS のメニューバーアプリを再起動する)。
Tutorial.step

アドバタイズ内容

アドバタイズされるのは _openclaw-gw._tcp(Gateway)のみです。

Tutorial.step

サービス種別

  • _openclaw-gw._tcp — Gateway のトランスポートビーコン(macOS/iOS/Android ノードで使用)。
Tutorial.step

TXT キー(非秘密ヒント)

UI フローを便利にするため、Gateway は小さな非秘密ヒントを公開します:

  • role=gateway
  • <code>displayName=<friendly name>'</code>
  • <code>lanHost=<hostname>.local</code>
  • <code>gatewayPort=<port>'</code>(Gateway WS + HTTP)
  • gatewayTls=1(TLS 有効時のみ)
  • <code>gatewayTlsSha256=<sha256>'</code>(TLS 有効かつ指紋が利用可能な場合のみ)
  • <code>canvasPort=<port>'</code>(canvas host 有効時のみ。デフォルト <code>18793</code>)
  • <code>sshPort=<port>'</code>(上書きがなければ 22)
  • transport=gateway
  • <code>cliPath=<path>'</code>(任意。実行可能な <code>openclaw</code> エントリポイントの絶対パス)
  • <code>tailnetDns=<magicdns>'</code>(tailnet 利用時の任意ヒント)
Tutorial.step

macOS でのデバッグ

便利な組み込みツール:

インスタンスをブラウズ:

Bash
dns-sd -B _openclaw-gw._tcp local.

インスタンスを解決(&lt;instance&gt; を置換):

Bash
dns-sd -L "<instance>" _openclaw-gw._tcp local.

ブラウズはできるのに解決できない場合、多くは LAN ポリシーや mDNS リゾルバの問題です。

Tutorial.step

Gateway ログでのデバッグ

Gateway はローテーションログを書き込みます(起動時に gateway log file: ... と表示)。bonjour: 行を探し、特に次を確認してください:

  • bonjour: advertise failed ...
  • bonjour: ... name conflict resolved / hostname conflict resolved
  • bonjour: watchdog detected non-announced service ...
Tutorial.step

iOS ノードでのデバッグ

iOS ノードは NWBrowser を使って _openclaw-gw._tcp を発見します。

ログ取得:

  • 設定 → Gateway → 詳細 → 発見デバッグログ
  • 設定 → Gateway → 詳細 → 発見ログ → 再現 → コピー

ログにはブラウザの状態遷移と結果セットの変更が含まれます。

Tutorial.step

よくある障害パターン

  • Bonjour はネットワークを越えない: tailnet か SSH を使う。
  • マルチキャストがブロック: 一部の Wi‑Fi は mDNS を無効化しています。
  • スリープ/インターフェース変動: macOS が一時的に mDNS 結果を落とすことがあります。再試行してください。
  • ブラウズ OK だが解決失敗: ホスト名を単純に(絵文字/記号を避ける)して Gateway を再起動してください。サービスインスタンス名はホスト名由来で、複雑すぎると一部のリゾルバが混乱します。
Tutorial.step

エスケープされたインスタンス名(`\032`)

Bonjour/DNS-SD はサービスインスタンス名のバイトを十進の \DDD シーケンスとしてエスケープすることがあります(例:スペースは \032)。

  • これはプロトコル上は正常です。
  • 表示用に UI 側でデコードしてください(iOS は BonjourEscapes.decode を使用)。
Tutorial.step

Disabling / configuration

  • OPENCLAW_DISABLE_BONJOUR=1 disables advertising.
  • ~/.openclaw/openclaw.json の ~/.openclaw/openclaw.json が Gateway の bind モードを制御します。
  • OPENCLAW_SSH_PORT で TXT に公開する SSH ポートを上書きします。
  • OPENCLAW_TAILNET_DNS で TXT に MagicDNS ヒントを公開します。
  • OPENCLAW_CLI_PATH で公開する CLI パスを上書きします。
Tutorial.step

関連ドキュメント