---
read_when:
    - macOS/iOS पर Bonjour डिस्कवरी समस्याओं की डीबगिंग
    - mDNS सेवा प्रकार, TXT रिकॉर्ड, या खोज UX बदलना
summary: Bonjour/mDNS खोज + डीबगिंग (Gateway बीकन, क्लाइंट और सामान्य विफलता प्रकार)
title: Bonjour खोज
x-i18n:
    generated_at: "2026-07-27T17:51:33Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: f43ef71b323b59362655c390a4df621c2571abbe3b2c1cd2728918c6f76d6f99
    source_path: gateway/bonjour.md
    workflow: 16
---

OpenClaw किसी सक्रिय Gateway (WebSocket एंडपॉइंट) को खोजने के लिए Bonjour (mDNS/DNS-SD) का उपयोग कर सकता है। मल्टीकास्ट `local.` ब्राउज़िंग एक **केवल-LAN सुविधा** है: बंडल किया गया `bonjour` Plugin LAN विज्ञापन का स्वामी है, जो macOS होस्ट पर अपने-आप शुरू होता है और Linux, Windows तथा कंटेनरीकृत Gateway परिनियोजनों पर ऑप्ट-इन है। यही बीकन क्रॉस-नेटवर्क खोज के लिए कॉन्फ़िगर किए गए वाइड-एरिया DNS-SD डोमेन के माध्यम से भी प्रकाशित हो सकता है। खोज सर्वोत्तम-प्रयास पर आधारित है और SSH या Tailnet-आधारित कनेक्टिविटी का स्थान **नहीं** लेती।

## Tailscale पर वाइड-एरिया Bonjour (यूनिकास्ट DNS-SD)

यदि Node और Gateway अलग-अलग नेटवर्क पर हैं, तो मल्टीकास्ट mDNS सीमा पार नहीं कर सकता। Tailscale पर **यूनिकास्ट DNS-SD** ("Wide-Area Bonjour") पर स्विच करके खोज का वही उपयोगकर्ता अनुभव बनाए रखें:

1. Gateway होस्ट पर एक DNS सर्वर चलाएँ, जिस तक Tailnet के माध्यम से पहुँचा जा सके।
2. एक समर्पित ज़ोन (उदाहरण: `openclaw.internal.`) के अंतर्गत `_openclaw-gw._tcp` के लिए DNS-SD रिकॉर्ड प्रकाशित करें।
3. Tailscale **split DNS** को कॉन्फ़िगर करें, ताकि आपका चुना हुआ डोमेन iOS सहित क्लाइंट के लिए उस DNS सर्वर के माध्यम से रिज़ॉल्व हो।

ऊपर दिया गया `openclaw.internal.` केवल एक उदाहरण है — OpenClaw किसी भी खोज डोमेन का समर्थन करता है। iOS/Android Node, `local.` और आपके कॉन्फ़िगर किए गए वाइड-एरिया डोमेन, दोनों को ब्राउज़ करते हैं।

### Gateway कॉन्फ़िगरेशन

```json5
{
  gateway: { bind: "tailnet" }, // केवल Tailnet (अनुशंसित)
  discovery: { wideArea: { enabled: true, domain: "openclaw.internal" } },
}
```

सेट न होने पर `discovery.wideArea.domain`, फ़ॉलबैक के रूप में `OPENCLAW_WIDE_AREA_DOMAIN` एनवायरनमेंट वेरिएबल को भी स्वीकार करता है।

### एक-बार का DNS सर्वर सेटअप (Gateway होस्ट, केवल macOS)

```bash
openclaw dns setup --apply
```

यह कमांड केवल macOS के लिए है और इसे Homebrew तथा चालू Tailscale कनेक्शन की आवश्यकता होती है। यह CoreDNS (`brew install coredns`) इंस्टॉल करता है और इसे इस प्रकार कॉन्फ़िगर करता है:

- केवल Gateway के Tailscale इंटरफ़ेस पर पोर्ट 53 सुनना
- `~/.openclaw/dns/<domain>.db` से आपका चुना हुआ डोमेन (उदाहरण: `openclaw.internal.`) उपलब्ध कराना

कुछ भी इंस्टॉल किए बिना योजना (डोमेन, ज़ोन फ़ाइल पथ, पता लगाया गया Tailnet IP, अनुशंसित कॉन्फ़िगरेशन) का पूर्वावलोकन करने के लिए पहले `--apply` के बिना चलाएँ।

Tailnet से कनेक्टेड मशीन से सत्यापित करें:

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

### Tailscale DNS सेटिंग्स

Tailscale एडमिन कंसोल में:

- Gateway के Tailnet IP (UDP/TCP 53) की ओर इंगित करने वाला नेमसर्वर जोड़ें।
- split DNS जोड़ें, ताकि आपका खोज डोमेन उस नेमसर्वर का उपयोग करे।

क्लाइंट द्वारा Tailnet DNS स्वीकार कर लेने के बाद, iOS Node और CLI खोज मल्टीकास्ट के बिना आपके खोज डोमेन में `_openclaw-gw._tcp` ब्राउज़ कर सकते हैं।

### Gateway लिसनर सुरक्षा

Gateway WS पोर्ट (डिफ़ॉल्ट `18789`) डिफ़ॉल्ट रूप से लूपबैक से बाइंड होता है। LAN/Tailnet पहुँच के लिए स्पष्ट रूप से बाइंड करें और प्रमाणीकरण सक्षम रखें। केवल-Tailnet सेटअप के लिए `~/.openclaw/openclaw.json` में `gateway.bind: "tailnet"` सेट करें और Gateway (या macOS मेनूबार ऐप) को पुनः आरंभ करें।

## क्या विज्ञापित होता है

केवल Gateway ही `_openclaw-gw._tcp` को विज्ञापित करता है। सक्षम होने पर LAN मल्टीकास्ट विज्ञापन बंडल किए गए `bonjour` Plugin से आता है; वाइड-एरिया DNS-SD प्रकाशन का स्वामित्व Gateway के पास रहता है।

## सेवा प्रकार

- `_openclaw-gw._tcp` - Gateway ट्रांसपोर्ट बीकन, जिसका उपयोग macOS/iOS/Android Node करते हैं।

## TXT कुंजियाँ (गैर-गोपनीय संकेत)

| कुंजी                           | मौजूद होने की स्थिति                                                                   |
| ----------------------------- | ------------------------------------------------------------------------------ |
| `role=gateway`                | हमेशा।                                                                        |
| `displayName=<friendly name>` | हमेशा।                                                                        |
| `lanHost=<hostname>.local`    | हमेशा।                                                                        |
| `gatewayPort=<port>`          | हमेशा (Gateway WS + HTTP)।                                                    |
| `transport=gateway`           | हमेशा।                                                                        |
| `gatewayTls=1`                | केवल TLS सक्षम होने पर।                                                      |
| `gatewayTlsSha256=<sha256>`   | केवल TLS सक्षम होने और फ़िंगरप्रिंट उपलब्ध होने पर।                       |
| `gatewayDirectReachable=1`    | केवल तब, जब Gateway तक सीधे पहुँचा जा सके (केवल रिले/प्रॉक्सी पथ के माध्यम से नहीं)। |
| `canvasPort=<port>`           | केवल कैनवास होस्ट सक्षम होने पर; वर्तमान में `gatewayPort` के समान।     |
| `tailnetDns=<magicdns>`       | केवल mDNS पूर्ण मोड; Tailnet उपलब्ध होने पर वैकल्पिक संकेत।                  |
| `sshPort=<port>`              | केवल पूर्ण मोड; न्यूनतम और बंद मोड में छोड़ा जाता है।                              |
| `cliPath=<path>`              | केवल पूर्ण मोड; न्यूनतम और बंद मोड में छोड़ा जाता है।                              |

सुरक्षा नोट्स:

- Bonjour/mDNS TXT रिकॉर्ड **अप्रमाणित** होते हैं। क्लाइंट को TXT को आधिकारिक रूटिंग जानकारी नहीं मानना चाहिए।
- क्लाइंट को रिज़ॉल्व किए गए सेवा एंडपॉइंट (SRV + A/AAAA) का उपयोग करके रूट करना चाहिए। `lanHost`, `tailnetDns`, `gatewayPort`, और `gatewayTlsSha256` को केवल संकेत मानें।
- इसी प्रकार SSH ऑटो-टार्गेटिंग को केवल TXT संकेतों के बजाय रिज़ॉल्व किए गए सेवा होस्ट का उपयोग करना चाहिए।
- TLS पिनिंग को कभी भी किसी विज्ञापित `gatewayTlsSha256` द्वारा पहले से संग्रहीत पिन को ओवरराइड नहीं करने देना चाहिए।
- iOS/Android Node को खोज-आधारित सीधे कनेक्शन **केवल-TLS** मानने चाहिए और पहली बार के फ़िंगरप्रिंट पर विश्वास करने से पहले उपयोगकर्ता की स्पष्ट पुष्टि आवश्यक करनी चाहिए।

## macOS पर डीबगिंग

अंतर्निहित टूल:

```bash
# इंस्टेंस ब्राउज़ करें
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 netmask assertion ...`
- `bonjour: ... name conflict resolved` / `hostname conflict resolved`

OpenClaw प्रत्येक Bonjour सेवा को एक बार शुरू करता है और प्रोबिंग, पुनः प्रयास, नाम-विरोध समाधान तथा इंटरफ़ेस-परिवर्तन पर पुनः प्रकाशन का कार्य mDNS रिस्पॉन्डर पर छोड़ देता है। इससे सामान्य नेटवर्क उतार-चढ़ाव के दौरान ओवरलैप होने वाले प्रकाशन प्रयासों से बचाव होता है। बार-बार आने वाले आंतरिक स्व-प्रोब संदेश दबा दिए जाते हैं, ताकि वे Gateway लॉग में अत्यधिक प्रविष्टियाँ न भरें।

जब एक ही होस्ट से कई OpenClaw Gateway विज्ञापन करते हैं, तो सेवा इंस्टेंस नामों को अद्वितीय रखने के लिए Bonjour `(2)` या `(3)` जैसे प्रत्यय जोड़ सकता है। ये प्रत्यय सामान्य विरोध समाधान हैं और डुप्लिकेट OCM पर्यवेक्षण का संकेत नहीं देते।

Bonjour विज्ञापित `.local` होस्ट के लिए सिस्टम होस्टनाम का उपयोग करता है, बशर्ते वह वैध DNS लेबल हो। यदि सिस्टम होस्टनाम में स्पेस, अंडरस्कोर या कोई अन्य अमान्य DNS-लेबल वर्ण है, तो OpenClaw `openclaw.local` पर फ़ॉलबैक करता है। स्पष्ट होस्ट लेबल की आवश्यकता होने पर Gateway शुरू करने से पहले `OPENCLAW_MDNS_HOSTNAME=<name>` सेट करें।

## iOS Node पर डीबगिंग

iOS Node, `_openclaw-gw._tcp` खोजने के लिए `NWBrowser` का उपयोग करता है।

लॉग कैप्चर करने के लिए: Settings -> Gateway -> Advanced -> **Discovery Debug Logs**, फिर Settings -> Gateway -> Advanced -> **Discovery Logs** -> पुनरुत्पादित करें -> **Copy**। लॉग में ब्राउज़र स्थिति संक्रमण और परिणाम-समूह परिवर्तन शामिल होते हैं।

## Bonjour कब सक्षम करें

macOS होस्ट पर खाली-कॉन्फ़िगरेशन वाले Gateway स्टार्टअप के लिए Bonjour अपने-आप शुरू होता है, क्योंकि स्थानीय ऐप और आस-पास के iOS/Android Node आमतौर पर समान-LAN खोज पर निर्भर होते हैं।

Linux, Windows या किसी अन्य गैर-macOS होस्ट पर समान-LAN ऑटो-डिस्कवरी उपयोगी होने पर इसे स्पष्ट रूप से सक्षम करें:

```bash
openclaw plugins enable bonjour
```

सक्षम होने पर, Bonjour यह तय करने के लिए `discovery.mdns.mode` का उपयोग करता है कि कितना TXT मेटाडेटा प्रकाशित करना है; यही मोड वाइड-एरिया DNS-SD रिकॉर्ड में वैकल्पिक TXT संकेतों को भी नियंत्रित करता है। मोड:

| मोड                | व्यवहार                                                                                                                                 |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `minimal` (डिफ़ॉल्ट) | केवल मुख्य TXT कुंजियाँ; `sshPort`, `cliPath`, `tailnetDns` को छोड़ देता है।                                                                            |
| `full`              | `sshPort`, `cliPath`, `tailnetDns` जोड़ता है — इसका उपयोग तब करें, जब क्लाइंट को उन संकेतों की आवश्यकता हो।                                                             |
| `off`               | Plugin की सक्षम स्थिति बदले बिना LAN मल्टीकास्ट को दबाता है; `discovery.wideArea.domain` सेट होने पर वाइड-एरिया DNS-SD अभी भी प्रकाशित हो सकता है। |

## Bonjour कब अक्षम करें

जब LAN मल्टीकास्ट विज्ञापन अनावश्यक, अनुपलब्ध या हानिकारक हो, तब Bonjour को अक्षम रखें — सामान्य मामलों में गैर-macOS सर्वर, Docker ब्रिज नेटवर्किंग, WSL या mDNS मल्टीकास्ट छोड़ने वाली नेटवर्क नीति शामिल हैं। Gateway अपने प्रकाशित URL, SSH, Tailnet या वाइड-एरिया DNS-SD के माध्यम से उपलब्ध रहता है; केवल LAN ऑटो-डिस्कवरी अविश्वसनीय होती है।

परिनियोजन-सीमित समस्याओं के लिए एनवायरनमेंट ओवरराइड का उपयोग करें (Docker इमेज, सेवा फ़ाइलों, लॉन्च स्क्रिप्ट और एकबारगी डीबगिंग के लिए सुरक्षित — एनवायरनमेंट हटने पर यह भी हट जाता है):

```bash
OPENCLAW_DISABLE_BONJOUR=1
```

जब आप उस OpenClaw कॉन्फ़िगरेशन के लिए बंडल किए गए LAN खोज Plugin को जानबूझकर बंद करना चाहते हों, तब Plugin कॉन्फ़िगरेशन का उपयोग करें:

```bash
openclaw plugins disable bonjour
```

## 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` का पुनः उपयोग करने से कंटेनर की ऑटो-अक्षम नीति बनी नहीं रहती।
- `OPENCLAW_DISABLE_BONJOUR=0` केवल होस्ट नेटवर्किंग, macvlan या किसी अन्य ऐसे नेटवर्क के लिए सेट करें, जहाँ mDNS मल्टीकास्ट का गुजरना ज्ञात हो; बलपूर्वक अक्षम करने के लिए इसे `1` पर सेट करें।

## अक्षम Bonjour की समस्या निवारण

यदि Docker सेटअप के बाद कोई Node अब Gateway को अपने-आप नहीं खोजता:

1. पुष्टि करें कि Gateway स्वचालित, बलपूर्वक-सक्षम या बलपूर्वक-अक्षम मोड में चल रहा है:

   ```bash
   docker compose config | grep OPENCLAW_DISABLE_BONJOUR
   ```

2. पुष्टि करें कि प्रकाशित पोर्ट के माध्यम से स्वयं Gateway तक पहुँचा जा सकता है:

   ```bash
   curl -fsS http://127.0.0.1:18789/healthz
   ```

3. Bonjour अक्षम होने पर प्रत्यक्ष लक्ष्य का उपयोग करें:
   - नियंत्रण UI या स्थानीय टूल: `http://127.0.0.1:18789`
   - LAN क्लाइंट: `http://<gateway-host>:18789`
   - क्रॉस-नेटवर्क क्लाइंट: Tailnet MagicDNS, Tailnet IP, SSH टनल या वाइड-एरिया DNS-SD

4. यदि आपने Docker में जानबूझकर Bonjour Plugin सक्षम किया है और `OPENCLAW_DISABLE_BONJOUR=0` के साथ विज्ञापन को बलपूर्वक सक्रिय किया है, तो होस्ट से मल्टीकास्ट का परीक्षण करें:

   ```bash
   dns-sd -B _openclaw-gw._tcp local.
   ```

   यदि ब्राउज़िंग खाली है, या 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 स्वतः अक्षम हो जाता है। केवल होस्ट, macvlan, या किसी अन्य mDNS-सक्षम नेटवर्क के लिए `OPENCLAW_DISABLE_BONJOUR=0` सेट करें।
- **स्लीप/इंटरफ़ेस में बदलाव**: macOS अस्थायी रूप से mDNS परिणाम खो सकता है; पुनः प्रयास करें।
- **ब्राउज़ करना काम करता है, लेकिन रिज़ॉल्व करना विफल होता है**: मशीन के नाम सरल रखें (इमोजी या विराम-चिह्नों से बचें), फिर Gateway पुनः आरंभ करें। सेवा इंस्टेंस का नाम होस्ट नाम से बनता है, इसलिए अत्यधिक जटिल नाम कुछ रिज़ॉल्वर को भ्रमित कर सकते हैं।

## एस्केप किए गए इंस्टेंस नाम (`\032`)

Bonjour/DNS-SD अक्सर सेवा इंस्टेंस नामों में बाइट्स को दशमलव `\DDD` अनुक्रमों के रूप में एस्केप करता है (रिक्त स्थान `\032` बन जाते हैं)। प्रोटोकॉल स्तर पर यह सामान्य है; UI को प्रदर्शन के लिए इन्हें डीकोड करना चाहिए (iOS `BonjourEscapes.decode` का उपयोग करता है)।

## सक्षम करना / अक्षम करना / कॉन्फ़िगरेशन

| सेटिंग                                              | प्रभाव                                                                            |
| ---------------------------------------------------- | --------------------------------------------------------------------------------- |
| `openclaw plugins enable bonjour`                    | उन होस्ट पर बंडल किए गए LAN खोज Plugin को सक्षम करता है, जहाँ वह डिफ़ॉल्ट रूप से सक्षम नहीं है। |
| `openclaw plugins disable bonjour`                   | बंडल किए गए Plugin को अक्षम करके LAN मल्टीकास्ट विज्ञापन को अक्षम करता है।               |
| `OPENCLAW_DISABLE_BONJOUR=1` (या `true`/`yes`/`on`)  | Plugin कॉन्फ़िगरेशन बदले बिना LAN मल्टीकास्ट विज्ञापन को अक्षम करता है।                |
| `OPENCLAW_DISABLE_BONJOUR=0` (या `false`/`no`/`off`) | पहचाने गए कंटेनरों के भीतर भी LAN मल्टीकास्ट विज्ञापन को बलपूर्वक चालू करता है।        |
| `discovery.mdns.mode`                                | `off` \| `minimal` (डिफ़ॉल्ट) \| `full` — ऊपर दिए गए मोड देखें।                         |
| `gateway.bind`                                       | `~/.openclaw/openclaw.json` में Gateway बाइंड मोड को नियंत्रित करता है।                    |
| `OPENCLAW_SSH_PORT`                                  | `sshPort` का विज्ञापन किए जाने पर SSH पोर्ट को ओवरराइड करता है (पूर्ण मोड)।                  |
| `OPENCLAW_TAILNET_DNS`                               | mDNS पूर्ण मोड सक्षम होने पर TXT में MagicDNS संकेत प्रकाशित करता है।                  |
| `OPENCLAW_CLI_PATH`                                  | विज्ञापित CLI पथ को ओवरराइड करता है (पूर्ण मोड)।                                    |

macOS होस्ट डिफ़ॉल्ट रूप से बंडल किए गए LAN खोज Plugin को स्वतः आरंभ करते हैं। जब Bonjour Plugin सक्षम हो और `OPENCLAW_DISABLE_BONJOUR` सेट न हो, तब Bonjour सामान्य होस्ट पर विज्ञापन करता है और पहचाने गए कंटेनरों (Docker, Fly.io मशीनों और सामान्य कंटेनर रनटाइम) के भीतर स्वतः अक्षम हो जाता है।

## संबंधित दस्तावेज़

- खोज नीति और ट्रांसपोर्ट चयन: [खोज](/hi/gateway/discovery)
- Node पेयरिंग + अनुमोदन: [Gateway पेयरिंग](/hi/gateway/pairing)
