local. ブラウジングは、LAN 内限定の利便機能です。バンドルされた bonjour Plugin が LAN アドバタイズを担い、macOS ホストでは自動起動し、Linux、Windows、およびコンテナ化された Gateway デプロイメントではオプトインで有効になります。同じビーコンを、設定済みの広域 DNS-SD ドメイン経由で公開し、ネットワークをまたいで検出することもできます。検出はベストエフォートであり、SSH または Tailnet ベースの接続に代わるものではありません。
Tailscale 経由の広域 Bonjour(ユニキャスト DNS-SD)
Node と Gateway が異なるネットワーク上にある場合、マルチキャスト mDNS は境界を越えられません。Tailscale 経由のユニキャスト DNS-SD(「広域 Bonjour」)に切り替えることで、同じ検出 UX を維持できます。- Tailnet 経由で到達可能な DNS サーバーを Gateway ホスト上で実行します。
- 専用ゾーン(例:
openclaw.internal.)の配下で、_openclaw-gw._tcpの DNS-SD レコードを公開します。 - iOS を含むクライアントで、選択したドメインがその DNS サーバーを介して解決されるように、Tailscale のスプリット DNSを設定します。
openclaw.internal. は単なる例です。OpenClaw は任意の検出ドメインをサポートします。iOS/Android Node は、local. と設定済みの広域ドメインの両方をブラウズします。
Gateway の設定
discovery.wideArea.domain が未設定の場合は、フォールバックとして OPENCLAW_WIDE_AREA_DOMAIN 環境変数も使用できます。
DNS サーバーの初回セットアップ(Gateway ホスト、macOS のみ)
brew install coredns)をインストールし、次のように設定します。
- Gateway の Tailscale インターフェース上でのみポート 53 をリッスンする
~/.openclaw/dns/<domain>.dbから選択したドメイン(例:openclaw.internal.)を提供する
--apply なしで実行します。
Tailnet に接続されたマシンから検証します。
Tailscale の DNS 設定
Tailscale 管理コンソールで、次の操作を行います。- Gateway の Tailnet IP(UDP/TCP 53)を指すネームサーバーを追加します。
- 検出ドメインがそのネームサーバーを使用するように、スプリット DNS を追加します。
_openclaw-gw._tcp をブラウズできます。
Gateway リスナーのセキュリティ
Gateway の WS ポート(デフォルトは18789)は、デフォルトで loopback にバインドされます。LAN/Tailnet からアクセスする場合は、明示的にバインドし、認証を有効なままにしてください。Tailnet 専用のセットアップでは、~/.openclaw/openclaw.json に gateway.bind: "tailnet" を設定し、Gateway(または macOS メニューバーアプリ)を再起動します。
アドバタイズするもの
_openclaw-gw._tcp をアドバタイズするのは Gateway のみです。有効な場合、LAN マルチキャストアドバタイズはバンドルされた bonjour Plugin が行います。広域 DNS-SD の公開は引き続き Gateway が担います。
サービスタイプ
_openclaw-gw._tcp- macOS/iOS/Android Node が使用する Gateway トランスポートビーコン。
TXT キー(機密ではないヒント)
セキュリティ上の注意:
- Bonjour/mDNS TXT レコードは認証されていません。クライアントは TXT を信頼できるルーティング情報として扱ってはなりません。
- クライアントは、解決されたサービスエンドポイント(SRV + A/AAAA)を使用してルーティングする必要があります。
lanHost、tailnetDns、gatewayPort、およびgatewayTlsSha256はヒントとしてのみ扱ってください。 - SSH の自動ターゲット設定も同様に、TXT のみのヒントではなく、解決されたサービスホストを使用する必要があります。
- TLS ピンニングでは、アドバタイズされた
gatewayTlsSha256が以前に保存されたピンを上書きすることを決して許可してはなりません。 - iOS/Android Node は、検出に基づく直接接続を TLS のみとして扱い、初回のフィンガープリントを信頼する前にユーザーの明示的な確認を必須とする必要があります。
macOS でのデバッグ
組み込みツール:Gateway ログでのデバッグ
Gateway はローリングログファイルに書き込みます(起動時にgateway log file: ... として表示されます)。特に次の bonjour: 行を探してください。
bonjour: advertise failed ...bonjour: suppressing ciao netmask assertion ...bonjour: ... name conflict resolved/hostname conflict resolved
(2) や (3) などのサフィックスを付加することがあります。これらのサフィックスは通常の競合解決によるものであり、OCM による監視の重複を示すものではありません。
Bonjour は、システムのホスト名が有効な DNS ラベルである場合、アドバタイズする .local ホストにそのホスト名を使用します。システムのホスト名にスペース、アンダースコア、またはその他の無効な DNS ラベル文字が含まれている場合、OpenClaw は openclaw.local にフォールバックします。明示的なホストラベルが必要な場合は、Gateway を起動する前に OPENCLAW_MDNS_HOSTNAME=<name> を設定します。
iOS Node でのデバッグ
iOS Node はNWBrowser を使用して _openclaw-gw._tcp を検出します。
ログを取得するには、Settings -> Gateway -> Advanced -> Discovery Debug Logs を選択し、次に Settings -> Gateway -> Advanced -> Discovery Logs -> 再現 -> Copy の順に操作します。ログには、ブラウザーの状態遷移と結果セットの変更が含まれます。
Bonjour を有効にする場合
ローカルアプリや近くの iOS/Android Node は同一 LAN 内の検出を一般的に利用するため、macOS ホストで設定が空の状態から Gateway を起動すると、Bonjour は自動起動します。 Linux、Windows、またはその他の macOS 以外のホストで同一 LAN 内の自動検出が有用な場合は、明示的に有効にします。discovery.mdns.mode に基づいて決定します。同じモードが、広域 DNS-SD レコード内の任意の TXT ヒントも制御します。モード:
Bonjour を無効にする場合
LAN マルチキャストアドバタイズが不要、利用不能、または有害な場合は、Bonjour を無効のままにしてください。一般的な例として、macOS 以外のサーバー、Docker ブリッジネットワーク、WSL、または mDNS マルチキャストを破棄するネットワークポリシーがあります。Gateway には公開 URL、SSH、Tailnet、または広域 DNS-SD を介して引き続き到達できます。信頼性が低下するのは LAN の自動検出のみです。 デプロイメント固有の問題には環境変数によるオーバーライドを使用します(Docker イメージ、サービスファイル、起動スクリプト、一時的なデバッグに安全です。環境がなくなると設定も消えます)。Docker の注意点
検出されたコンテナ内でOPENCLAW_DISABLE_BONJOUR が未設定の場合、バンドルされた Bonjour Plugin は LAN マルチキャストアドバタイズを自動的に無効にします。通常、Docker ブリッジネットワークはコンテナと LAN の間で mDNS マルチキャスト(224.0.0.251:5353)を転送しないため、コンテナからアドバタイズしても検出が機能することはほとんどありません。
注意点:
- Bonjour は macOS ホストでは自動起動し、それ以外ではオプトインです。無効のままでも Gateway は停止せず、LAN マルチキャストアドバタイズのみを省略します。
- Bonjour を無効にしても
gateway.bindは変更されません。Docker のデフォルトは引き続きOPENCLAW_GATEWAY_BIND=lanであるため、公開されたホストポートは機能します。 - Bonjour を無効にしても広域 DNS-SD は無効になりません。Gateway と Node が同じ LAN 上にない場合は、広域検出または Tailnet を使用します。
- Docker の外部で同じ
OPENCLAW_CONFIG_DIRを再利用しても、コンテナの自動無効化ポリシーは保持されません。 - ホストネットワーキング、macvlan、または mDNS マルチキャストが通過することが分かっている別のネットワークでのみ
OPENCLAW_DISABLE_BONJOUR=0を設定してください。強制的に無効にするには1に設定します。
無効になった Bonjour のトラブルシューティング
Docker のセットアップ後に Node が Gateway を自動検出しなくなった場合:-
Gateway が自動、強制有効、強制無効のどのモードで実行されているか確認します。
-
公開されたポートを介して Gateway 自体に到達できることを確認します。
-
Bonjour が無効な場合は、直接ターゲットを使用します。
- Control UI またはローカルツール:
http://127.0.0.1:18789 - LAN クライアント:
http://<gateway-host>:18789 - ネットワークをまたぐクライアント:Tailnet MagicDNS、Tailnet IP、SSH トンネル、または広域 DNS-SD
- Control UI またはローカルツール:
-
Docker で Bonjour Plugin を意図的に有効にし、
OPENCLAW_DISABLE_BONJOUR=0でアドバタイズを強制した場合は、ホストからマルチキャストをテストします。ブラウズ結果が空の場合、または Gateway ログに ciao プローブの失敗が繰り返し表示される場合は、OPENCLAW_DISABLE_BONJOUR=1を復元し、直接接続または Tailnet 経路を使用します。
一般的な障害モード
- Bonjour はネットワークを越えません:Tailnet または SSH を使用してください。
- マルチキャストがブロックされている:一部の Wi-Fi ネットワークでは mDNS が無効化されています。
- アドバタイザーがプローブ中またはアナウンス中のまま停止する:マルチキャストがブロックされたホスト、コンテナブリッジ、WSL、またはインターフェースの頻繁な変化により、レスポンダーが未アナウンス状態のままになることがあります。Gateway には、直接接続、SSH、Tailnet、または広域 DNS-SD ルートを介して引き続きアクセスできます。マルチキャストを利用できない場合は、
discovery.mdns.mode: "off"またはOPENCLAW_DISABLE_BONJOUR=1を使用して LAN Bonjour を無効にしてください。 - Docker ブリッジネットワーク:検出されたコンテナ内では Bonjour が自動的に無効になります。
OPENCLAW_DISABLE_BONJOUR=0は、ホスト、macvlan、またはその他の mDNS 対応ネットワークでのみ設定してください。 - スリープやインターフェースの頻繁な変化:macOS では mDNS の結果が一時的に失われることがあります。再試行してください。
- 参照は機能するが名前解決に失敗する:マシン名は単純なものにし(絵文字や句読点を避ける)、Gateway を再起動してください。サービスインスタンス名はホスト名から生成されるため、複雑すぎる名前は一部のリゾルバーを混乱させることがあります。
エスケープされたインスタンス名(\032)
Bonjour/DNS-SD では、サービスインスタンス名のバイトが 10 進数の \DDD シーケンスとしてエスケープされることがよくあります(スペースは \032 になります)。これはプロトコルレベルでは正常です。UI では表示用にデコードする必要があります(iOS は BonjourEscapes.decode を使用します)。
有効化/無効化/設定
macOS ホストでは、同梱の LAN 検出 Plugin がデフォルトで自動起動します。Bonjour Plugin が有効で、
OPENCLAW_DISABLE_BONJOUR が未設定の場合、Bonjour は通常のホスト上で広告を行い、検出されたコンテナ(Docker、Fly.io マシン、および一般的なコンテナランタイム)内では自動的に無効になります。
関連ドキュメント
- 検出ポリシーとトランスポートの選択:検出
- Node のペアリングと承認:Gateway のペアリング