Tailscale (Gateway dashboard)
OpenClaw có thể tự động cấu hình Tailscale Serve (tailnet) hoặc Funnel (public) cho Gateway dashboard và cổng WebSocket. Điều này giúp Gateway vẫn bind với loopback trong khi Tailscale cung cấp HTTPS, routing, và (với Serve) các header nhận dạng.
Các chế độ
serve: Chỉ dùng trong Tailnet quatailscale serve. Gateway vẫn ở127.0.0.1.funnel: Public HTTPS quatailscale funnel. OpenClaw yêu cầu shared password.off: Mặc định (không tự động hóa Tailscale).
Xác thực
Đặt gateway.auth.mode để kiểm soát handshake:
token(mặc định khiOPENCLAW_GATEWAY_TOKENđược set)password(shared secret quaOPENCLAW_GATEWAY_PASSWORDhoặc config)
Khi tailscale.mode = "serve" và gateway.auth.allowTailscale là true,
các request Serve proxy hợp lệ có thể xác thực qua Tailscale identity headers
(tailscale-user-login) mà không cần cung cấp token/password. OpenClaw sẽ xác minh
danh tính bằng cách resolve địa chỉ x-forwarded-for qua Tailscale
daemon local (tailscale whois) và khớp nó với header trước khi chấp nhận.
OpenClaw chỉ coi một request là Serve khi nó đến từ loopback với các
header x-forwarded-for, x-forwarded-proto, và x-forwarded-host của Tailscale.
Để yêu cầu credentials rõ ràng, đặt gateway.auth.allowTailscale: false hoặc
bắt buộc gateway.auth.mode: "password".
Ví dụ config
Chỉ dùng Tailnet (Serve)
{
gateway: {
bind: "loopback",
tailscale: { mode: "serve" },
},
}
Mở: https://<magicdns>/ (hoặc gateway.controlUi.basePath mà các bạn đã config)
Chỉ dùng Tailnet (bind trực tiếp vào Tailnet IP)
Dùng cách này khi các bạn muốn Gateway lắng nghe trực tiếp trên Tailnet IP (không dùng Serve/Funnel).
{
gateway: {
bind: "tailnet",
auth: { mode: "token", token: "your-token" },
},
}
Kết nối từ thiết bị Tailnet khác:
- Control UI:
http://<tailscale-ip>:18789/ - WebSocket:
ws://<tailscale-ip>:18789
Lưu ý: loopback (http://127.0.0.1:18789) sẽ không hoạt động ở chế độ này.
Public internet (Funnel + shared password)
{
gateway: {
bind: "loopback",
tailscale: { mode: "funnel" },
auth: { mode: "password", password: "replace-me" },
},
}
Nên dùng OPENCLAW_GATEWAY_PASSWORD thay vì commit password vào disk.
Ví dụ CLI
openclaw gateway --tailscale serve
openclaw gateway --tailscale funnel --auth password
Lưu ý
- Tailscale Serve/Funnel yêu cầu
tailscaleCLI được cài đặt và đã đăng nhập. tailscale.mode: "funnel"sẽ từ chối khởi động trừ khi auth mode làpasswordđể tránh public exposure.- Đặt
gateway.tailscale.resetOnExitnếu các bạn muốn OpenClaw hoàn tác configtailscale servehoặctailscale funnelkhi shutdown. gateway.bind: "tailnet"là bind trực tiếp vào Tailnet (không có HTTPS, không có Serve/Funnel).gateway.bind: "auto"ưu tiên loopback; dùngtailnetnếu các bạn chỉ muốn Tailnet.- Serve/Funnel chỉ expose Gateway control UI + WS. Các node kết nối qua cùng Gateway WS endpoint, nên Serve có thể hoạt động cho node access.
Điều khiển browser (Gateway từ xa + browser local)
Nếu các bạn chạy Gateway trên một máy nhưng muốn điều khiển browser trên máy khác, hãy chạy một node host trên máy có browser và giữ cả hai trên cùng tailnet. Gateway sẽ proxy các hành động browser đến node; không cần control server riêng hay Serve URL.
Tránh dùng Funnel cho browser control; coi node pairing như operator access.
Yêu cầu và giới hạn của Tailscale
- Serve yêu cầu HTTPS được bật cho tailnet của các bạn; CLI sẽ nhắc nếu thiếu.
- Serve inject Tailscale identity headers; Funnel thì không.
- Funnel yêu cầu Tailscale v1.38.3+, MagicDNS, HTTPS được bật, và funnel node attribute.
- Funnel chỉ hỗ trợ các cổng
443,8443, và10000qua TLS. - Funnel trên macOS yêu cầu phiên bản Tailscale app open-source.
Tìm hiểu thêm
- Tổng quan Tailscale Serve: https://tailscale.com/kb/1312/serve
- Lệnh
tailscale serve: https://tailscale.com/kb/1242/tailscale-serve - Tổng quan Tailscale Funnel: https://tailscale.com/kb/1223/tailscale-funnel
- Lệnh
tailscale funnel: https://tailscale.com/kb/1311/tailscale-funnel