Remote access
Tailscale
OpenClaw میتواند Tailscale Serve (tailnet) یا Funnel (عمومی) را برای داشبورد Gateway و پورت WebSocket بهصورت خودکار پیکربندی کند. این کار باعث میشود Gateway همچنان به loopback متصل بماند، در حالی که Tailscale HTTPS، مسیریابی، و (برای Serve) سرآیندهای هویت را فراهم میکند.
حالتها
serve: Serve فقط برای Tailnet از طریقtailscale serve. Gateway روی127.0.0.1باقی میماند.funnel: HTTPS عمومی از طریقtailscale funnel. OpenClaw به یک گذرواژهٔ مشترک نیاز دارد.off: پیشفرض (بدون خودکارسازی Tailscale).
خروجی وضعیت و حسابرسی از در معرضگذاری Tailscale برای این حالت Serve/Funnel در OpenClaw استفاده میکند. off یعنی OpenClaw مدیریت Serve یا Funnel را انجام نمیدهد؛ به این معنا نیست که دیمون محلی Tailscale متوقف شده یا از حساب خارج شده است.
احراز هویت
برای کنترل دستدهی، gateway.auth.mode را تنظیم کنید:
none(فقط ورودی خصوصی)token(پیشفرض وقتیOPENCLAW_GATEWAY_TOKENتنظیم شده باشد)password(راز مشترک از طریقOPENCLAW_GATEWAY_PASSWORDیا پیکربندی)trusted-proxy(پراکسی معکوس آگاه از هویت؛ احراز هویت پراکسی معتمد را ببینید)
وقتی tailscale.mode = "serve" و gateway.auth.allowTailscale برابر true باشد، احراز هویت Control UI/WebSocket میتواند بدون ارائهٔ توکن/گذرواژه از سرآیندهای هویت Tailscale (tailscale-user-login) استفاده کند. OpenClaw هویت را با resolve کردن نشانی x-forwarded-for از طریق دیمون محلی Tailscale (tailscale whois) و تطبیق آن با سرآیند، پیش از پذیرش، تأیید میکند. OpenClaw فقط زمانی یک درخواست را Serve در نظر میگیرد که از loopback و همراه با سرآیندهای x-forwarded-for، x-forwarded-proto و x-forwarded-host متعلق به Tailscale برسد.
برای نشستهای اپراتور Control UI که شامل هویت دستگاه مرورگر هستند، این مسیر Serve تأییدشده همچنین رفتوبرگشت جفتسازی دستگاه را رد میکند. این مسیر هویت دستگاه مرورگر را دور نمیزند: کلاینتهای بدون دستگاه همچنان رد میشوند، و اتصالهای WebSocket با نقش node یا غیر Control UI همچنان بررسیهای عادی جفتسازی و احراز هویت را دنبال میکنند.
نقاط پایانی HTTP API (برای مثال /v1/*، /tools/invoke و /api/channels/*) از احراز هویت مبتنی بر سرآیند هویت Tailscale استفاده نمیکنند. آنها همچنان حالت عادی احراز هویت HTTP در gateway را دنبال میکنند: احراز هویت با راز مشترک بهصورت پیشفرض، یا یک راهاندازی none برای trusted-proxy / private-ingress که عمداً پیکربندی شده باشد.
این جریان بدون توکن فرض میکند میزبان gateway معتمد است. اگر ممکن است کد محلی نامطمئن روی همان میزبان اجرا شود، gateway.auth.allowTailscale را غیرفعال کنید و بهجای آن احراز هویت با توکن/گذرواژه را الزامی کنید.
برای الزامی کردن اعتبارنامههای صریح مبتنی بر راز مشترک، gateway.auth.allowTailscale: false را تنظیم کنید و از gateway.auth.mode: "token" یا "password" استفاده کنید.
نمونههای پیکربندی
فقط Tailnet (Serve)
{
gateway: {
bind: "loopback",
tailscale: { mode: "serve" },
},
}
باز کردن: https://<magicdns>/ (یا gateway.controlUi.basePath پیکربندیشدهٔ شما)
فقط Tailnet (اتصال به IP Tailnet)
وقتی میخواهید Gateway مستقیماً روی IP Tailnet گوش کند (بدون Serve/Funnel)، از این حالت استفاده کنید.
{
gateway: {
bind: "tailnet",
auth: { mode: "token", token: "your-token" },
},
}
اتصال از یک دستگاه Tailnet دیگر:
- Control UI:
http://<tailscale-ip>:18789/ - WebSocket:
ws://<tailscale-ip>:18789
اینترنت عمومی (Funnel + گذرواژهٔ مشترک)
{
gateway: {
bind: "loopback",
tailscale: { mode: "funnel" },
auth: { mode: "password", password: "replace-me" },
},
}
بهجای ثبت گذرواژه روی دیسک، OPENCLAW_GATEWAY_PASSWORD را ترجیح دهید.
نمونههای CLI
openclaw gateway --tailscale serve
openclaw gateway --tailscale funnel --auth password
نکتهها
- Tailscale Serve/Funnel نیاز دارد CLI
tailscaleنصب شده و وارد حساب شده باشد. tailscale.mode: "funnel"برای جلوگیری از در معرضگذاری عمومی، مگر اینکه حالت احراز هویتpasswordباشد، از شروع به کار خودداری میکند.- اگر میخواهید OpenClaw هنگام خاموششدن پیکربندی
tailscale serveیاtailscale funnelرا برگرداند،gateway.tailscale.resetOnExitرا تنظیم کنید. gateway.bind: "tailnet"یک اتصال مستقیم Tailnet است (بدون HTTPS، بدون Serve/Funnel).gateway.bind: "auto" loopback را ترجیح میدهد؛ اگر فقط Tailnet میخواهید، ازtailnetاستفاده کنید.- Serve/Funnel فقط رابط کنترل Gateway + WS را در معرض قرار میدهند. Nodeها از طریق همان نقطهٔ پایانی WS در Gateway وصل میشوند، بنابراین Serve میتواند برای دسترسی node هم کار کند.
کنترل مرورگر (Gateway راهدور + مرورگر محلی)
اگر Gateway را روی یک ماشین اجرا میکنید اما میخواهید مرورگری را روی ماشین دیگری کنترل کنید، روی ماشین مرورگر یک میزبان node اجرا کنید و هر دو را روی یک tailnet نگه دارید. Gateway کنشهای مرورگر را به node پراکسی میکند؛ به سرور کنترل جداگانه یا URL Serve جداگانه نیاز نیست.
برای کنترل مرورگر از Funnel پرهیز کنید؛ با جفتسازی node مانند دسترسی اپراتور برخورد کنید.
پیشنیازها + محدودیتهای Tailscale
- Serve نیاز دارد HTTPS برای tailnet شما فعال باشد؛ اگر موجود نباشد، CLI درخواست میدهد.
- Serve سرآیندهای هویت Tailscale را تزریق میکند؛ Funnel این کار را نمیکند.
- Funnel به Tailscale v1.38.3+، MagicDNS، HTTPS فعال، و یک ویژگی node از نوع funnel نیاز دارد.
- Funnel فقط از پورتهای
443،8443و10000روی TLS پشتیبانی میکند. - Funnel روی macOS به گونهٔ متنباز برنامهٔ Tailscale نیاز دارد.
بیشتر بیاموزید
- نمای کلی Tailscale Serve: https://tailscale.com/kb/1312/serve
- فرمان
tailscale serve: https://tailscale.com/kb/1242/tailscale-serve - نمای کلی Tailscale Funnel: https://tailscale.com/kb/1223/tailscale-funnel
- فرمان
tailscale funnel: https://tailscale.com/kb/1311/tailscale-funnel