local. là một tiện ích chỉ dành cho LAN: plugin bonjour đi kèm chịu trách nhiệm quảng bá trên LAN, tự động khởi động trên các máy chủ macOS và yêu cầu chủ động bật trên Linux, Windows cũng như các bản triển khai Gateway trong container. Cùng một beacon cũng có thể được phát hành qua miền DNS-SD diện rộng đã cấu hình để khám phá xuyên mạng. Khám phá hoạt động theo cơ chế nỗ lực tối đa và không thay thế kết nối dựa trên SSH hoặc Tailnet.
Bonjour diện rộng (DNS-SD Unicast) qua Tailscale
Nếu Node và Gateway nằm trên các mạng khác nhau, mDNS multicast không thể vượt qua ranh giới mạng. Duy trì cùng trải nghiệm khám phá bằng cách chuyển sang DNS-SD unicast (“Bonjour diện rộng”) qua Tailscale:- Chạy máy chủ DNS trên máy chủ Gateway, có thể truy cập qua Tailnet.
- Phát hành các bản ghi DNS-SD cho
_openclaw-gw._tcptrong một vùng chuyên dụng (ví dụ:openclaw.internal.). - Cấu hình split DNS của Tailscale để miền bạn chọn được phân giải qua máy chủ DNS đó cho các máy khách, bao gồm iOS.
openclaw.internal. ở trên chỉ là ví dụ — OpenClaw hỗ trợ bất kỳ miền khám phá nào. Các Node iOS/Android duyệt cả local. và miền diện rộng đã cấu hình của bạn.
Cấu hình Gateway
discovery.wideArea.domain cũng chấp nhận biến môi trường OPENCLAW_WIDE_AREA_DOMAIN làm phương án dự phòng khi chưa được đặt.
Thiết lập máy chủ DNS một lần (máy chủ Gateway, chỉ macOS)
brew install coredns) và cấu hình để:
- chỉ lắng nghe trên cổng 53 tại các giao diện Tailscale của Gateway
- phục vụ miền bạn chọn (ví dụ:
openclaw.internal.) từ~/.openclaw/dns/<domain>.db
--apply để xem trước kế hoạch (miền, đường dẫn tệp vùng, IP Tailnet đã phát hiện, cấu hình được khuyến nghị) mà không cài đặt bất kỳ thứ gì.
Xác thực từ một máy đã kết nối Tailnet:
Cài đặt DNS của Tailscale
Trong bảng điều khiển quản trị Tailscale:- Thêm một máy chủ tên trỏ đến IP Tailnet của Gateway (UDP/TCP 53).
- Thêm split DNS để miền khám phá của bạn sử dụng máy chủ tên đó.
_openclaw-gw._tcp trong miền khám phá của bạn mà không cần multicast.
Bảo mật trình lắng nghe Gateway
Cổng WS của Gateway (mặc định18789) mặc định liên kết với loopback. Để truy cập qua LAN/Tailnet, hãy liên kết rõ ràng và giữ xác thực ở trạng thái bật. Với thiết lập chỉ dành cho Tailnet, đặt gateway.bind: "tailnet" trong ~/.openclaw/openclaw.json và khởi động lại Gateway (hoặc ứng dụng thanh menu macOS).
Thành phần quảng bá
Chỉ Gateway quảng bá_openclaw-gw._tcp. Quảng bá multicast trên LAN đến từ plugin bonjour đi kèm khi được bật; việc phát hành DNS-SD diện rộng vẫn do Gateway sở hữu.
Loại dịch vụ
_openclaw-gw._tcp- beacon truyền tải Gateway, được các Node macOS/iOS/Android sử dụng.
Khóa TXT (gợi ý không bí mật)
Lưu ý bảo mật:
- Các bản ghi TXT Bonjour/mDNS không được xác thực. Máy khách không được coi TXT là thông tin định tuyến có thẩm quyền.
- Máy khách nên định tuyến bằng điểm cuối dịch vụ đã phân giải (SRV + A/AAAA). Chỉ coi
lanHost,tailnetDns,gatewayPortvàgatewayTlsSha256là gợi ý. - Tương tự, cơ chế tự động chọn đích SSH nên sử dụng máy chủ dịch vụ đã phân giải, không phải các gợi ý chỉ từ TXT.
- Ghim TLS tuyệt đối không được cho phép
gatewayTlsSha256được quảng bá ghi đè một mã ghim đã lưu trước đó. - Các Node iOS/Android nên coi kết nối trực tiếp dựa trên khám phá là chỉ dùng TLS và yêu cầu người dùng xác nhận rõ ràng trước khi tin cậy một fingerprint lần đầu.
Gỡ lỗi trên macOS
Các công cụ tích hợp sẵn:Gỡ lỗi trong nhật ký Gateway
Gateway ghi một tệp nhật ký luân phiên (được in khi khởi động dưới dạnggateway log file: ...). Tìm các dòng bonjour:, đặc biệt là:
bonjour: advertise failed ...bonjour: suppressing ciao netmask assertion ...bonjour: ... name conflict resolved/hostname conflict resolved
(2) hoặc (3) để giữ tên phiên bản dịch vụ là duy nhất. Các hậu tố này là kết quả giải quyết xung đột bình thường và không biểu thị việc giám sát OCM bị trùng lặp.
Bonjour sử dụng tên máy chủ hệ thống cho máy chủ .local được quảng bá khi đó là một nhãn DNS hợp lệ. Nếu tên máy chủ hệ thống chứa dấu cách, dấu gạch dưới hoặc ký tự khác không hợp lệ trong nhãn DNS, OpenClaw sẽ chuyển sang openclaw.local. Đặt OPENCLAW_MDNS_HOSTNAME=<name> trước khi khởi động Gateway nếu bạn cần một nhãn máy chủ rõ ràng.
Gỡ lỗi trên Node iOS
Node iOS sử dụngNWBrowser để khám phá _openclaw-gw._tcp.
Để thu thập nhật ký: Settings -> Gateway -> Advanced -> Discovery Debug Logs, sau đó Settings -> Gateway -> Advanced -> Discovery Logs -> tái hiện -> Copy. Nhật ký bao gồm các chuyển đổi trạng thái của trình duyệt và những thay đổi trong tập kết quả.
Khi nào nên bật Bonjour
Bonjour tự động khởi động khi Gateway có cấu hình trống trên các máy chủ macOS, vì ứng dụng cục bộ và các Node iOS/Android lân cận thường dựa vào cơ chế khám phá trên cùng LAN. Bật rõ ràng khi tính năng tự động khám phá trên cùng LAN hữu ích trên Linux, Windows hoặc máy chủ không phải macOS khác:discovery.mdns.mode để quyết định lượng siêu dữ liệu TXT cần phát hành; cùng chế độ đó kiểm soát các gợi ý TXT tùy chọn trong bản ghi DNS-SD diện rộng. Các chế độ:
Khi nào nên tắt Bonjour
Để Bonjour ở trạng thái tắt khi quảng bá multicast trên LAN không cần thiết, không khả dụng hoặc có hại — các trường hợp phổ biến gồm máy chủ không phải macOS, mạng cầu nối Docker, WSL hoặc chính sách mạng chặn multicast mDNS. Vẫn có thể truy cập Gateway qua URL đã phát hành, SSH, Tailnet hoặc DNS-SD diện rộng; chỉ tính năng tự động khám phá trên LAN là không đáng tin cậy. Sử dụng ghi đè bằng biến môi trường cho các sự cố theo phạm vi triển khai (an toàn cho image Docker, tệp dịch vụ, tập lệnh khởi chạy và gỡ lỗi một lần — thiết lập này biến mất khi môi trường không còn):Những điểm dễ gặp sự cố với Docker
Plugin Bonjour đi kèm tự động tắt quảng bá multicast trên LAN trong các container được phát hiện khiOPENCLAW_DISABLE_BONJOUR chưa được đặt. Mạng cầu nối Docker thường không chuyển tiếp multicast mDNS (224.0.0.251:5353) giữa container và LAN, vì vậy việc quảng bá từ container hiếm khi giúp cơ chế khám phá hoạt động.
Những điểm cần lưu ý:
- Bonjour tự động khởi động trên các máy chủ macOS và yêu cầu chủ động bật ở nơi khác. Việc để Bonjour tắt không dừng Gateway — nó chỉ bỏ qua quảng bá multicast trên LAN.
- Việc tắt Bonjour không thay đổi
gateway.bind; Docker vẫn mặc định sử dụngOPENCLAW_GATEWAY_BIND=lanđể cổng máy chủ đã phát hành hoạt động. - Việc tắt Bonjour không tắt DNS-SD diện rộng. Sử dụng khám phá diện rộng hoặc Tailnet khi Gateway và Node không ở trên cùng một LAN.
- Việc tái sử dụng cùng
OPENCLAW_CONFIG_DIRbên ngoài Docker không duy trì chính sách tự động tắt của container. - Chỉ đặt
OPENCLAW_DISABLE_BONJOUR=0cho mạng máy chủ, macvlan hoặc mạng khác mà multicast mDNS được xác nhận là có thể truyền qua; đặt thành1để buộc tắt.
Khắc phục sự cố khi Bonjour bị tắt
Nếu một Node không còn tự động khám phá Gateway sau khi thiết lập Docker:-
Xác nhận Gateway đang chạy ở chế độ tự động, buộc bật hay buộc tắt:
-
Xác nhận bản thân Gateway có thể truy cập được qua cổng đã phát hành:
-
Sử dụng đích trực tiếp khi Bonjour bị tắt:
- Giao diện điều khiển hoặc công cụ cục bộ:
http://127.0.0.1:18789 - Máy khách LAN:
http://<gateway-host>:18789 - Máy khách xuyên mạng: Tailnet MagicDNS, IP Tailnet, đường hầm SSH hoặc DNS-SD diện rộng
- Giao diện điều khiển hoặc công cụ cục bộ:
-
Nếu bạn chủ ý bật plugin Bonjour trong Docker và buộc quảng bá bằng
OPENCLAW_DISABLE_BONJOUR=0, hãy kiểm tra multicast từ máy chủ:Nếu kết quả duyệt trống hoặc nhật ký Gateway hiển thị lỗi thăm dò ciao lặp lại, hãy khôi phụcOPENCLAW_DISABLE_BONJOUR=1và sử dụng tuyến trực tiếp hoặc Tailnet.
Các chế độ lỗi phổ biến
- Bonjour không hoạt động xuyên mạng: sử dụng Tailnet hoặc SSH.
- Multicast bị chặn: một số mạng Wi-Fi vô hiệu hóa mDNS.
- Trình quảng bá bị kẹt ở trạng thái thăm dò/thông báo: máy chủ bị chặn multicast, cầu nối container, WSL hoặc giao diện mạng thay đổi liên tục có thể khiến trình phản hồi rơi vào trạng thái chưa được thông báo. Gateway vẫn khả dụng qua các tuyến trực tiếp, SSH, Tailnet hoặc DNS-SD diện rộng; hãy vô hiệu hóa LAN Bonjour bằng
discovery.mdns.mode: "off"hoặcOPENCLAW_DISABLE_BONJOUR=1khi multicast không khả dụng. - Mạng cầu nối Docker: Bonjour tự động vô hiệu hóa trong các container được phát hiện. Chỉ đặt
OPENCLAW_DISABLE_BONJOUR=0cho mạng host, macvlan hoặc mạng khác hỗ trợ mDNS. - Chế độ ngủ/giao diện mạng thay đổi liên tục: macOS có thể tạm thời làm mất các kết quả mDNS; hãy thử lại.
- Duyệt được nhưng phân giải thất bại: giữ tên máy đơn giản (tránh biểu tượng cảm xúc hoặc dấu câu), sau đó khởi động lại Gateway. Tên phiên bản dịch vụ được tạo từ tên máy chủ, vì vậy tên quá phức tạp có thể khiến một số trình phân giải bị nhầm lẫn.
Tên phiên bản đã thoát ký tự (\032)
Bonjour/DNS-SD thường thoát các byte trong tên phiên bản dịch vụ dưới dạng chuỗi thập phân \DDD (dấu cách trở thành \032). Đây là hành vi bình thường ở cấp độ giao thức; giao diện người dùng nên giải mã để hiển thị (iOS sử dụng BonjourEscapes.decode).
Bật / tắt / cấu hình
Theo mặc định, các máy chủ macOS tự động khởi động Plugin khám phá LAN đi kèm. Khi Plugin Bonjour được bật và
OPENCLAW_DISABLE_BONJOUR chưa được đặt, Bonjour sẽ quảng bá trên các máy chủ thông thường và tự động vô hiệu hóa bên trong các container được phát hiện (Docker, máy Fly.io và các môi trường chạy container phổ biến).
Tài liệu liên quan
- Chính sách khám phá và lựa chọn phương thức truyền tải: Khám phá
- Ghép nối Node + phê duyệt: Ghép nối Gateway