Remote access
Tailscale
OpenClaw может автоматически настроить Tailscale Serve (для tailnet) или Funnel (для публичного доступа) для панели управления Gateway и порта WebSocket. При этом Gateway остаётся привязанным к интерфейсу обратной петли, а Tailscale обеспечивает HTTPS, маршрутизацию и (для Serve) заголовки идентификации.
Режимы
gateway.tailscale.mode:
| Режим | Поведение |
|---|---|
serve |
Serve только в tailnet через tailscale serve. Gateway остаётся на 127.0.0.1. |
funnel |
Публичный HTTPS через tailscale funnel. Требуется общий пароль. |
off (по умолчанию) |
Автоматизация Tailscale отключена. |
В выводе состояния и аудита для этого режима OpenClaw Serve/Funnel используется термин доступ через Tailscale. off означает, что OpenClaw не управляет Serve или Funnel; это не означает, что локальный демон Tailscale остановлен или вышел из системы.
Примеры конфигурации
Только tailnet (Serve)
{ gateway: { bind: "loopback", tailscale: { mode: "serve" }, },}Откройте: https://<magicdns>/ (или настроенный вами gateway.controlUi.basePath)
Чтобы предоставить доступ к интерфейсу управления через именованную службу Tailscale вместо имени хоста устройства, задайте для gateway.tailscale.serviceName имя службы:
{ gateway: { bind: "loopback", tailscale: { mode: "serve", serviceName: "svc:openclaw" }, },}После этого при запуске вместо имени хоста устройства отображается URL службы: https://openclaw.<tailnet-name>.ts.net/. Для Tailscale Services хост должен быть одобренным маркированным узлом в вашей tailnet — настройте тег и одобрите службу в Tailscale перед включением этой функции, иначе tailscale serve --service=... завершится ошибкой при запуске Gateway.
Только tailnet (привязка к IP-адресу Tailnet)
Используйте этот вариант, чтобы Gateway напрямую прослушивал IP-адрес Tailnet без Serve/Funnel:
{ gateway: { bind: "tailnet", auth: { mode: "token", token: "your-token" }, },}Подключение с другого устройства Tailnet:
- Интерфейс управления:
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 serveopenclaw gateway --tailscale funnel --auth passwordАутентификация
gateway.auth.mode управляет рукопожатием:
| Режим | Сценарий использования |
|---|---|
none |
Только закрытый входящий доступ |
token (по умолчанию, если задан OPENCLAW_GATEWAY_TOKEN) |
Общий токен |
password |
Общий секрет через OPENCLAW_GATEWAY_PASSWORD или конфигурацию |
trusted-proxy |
Обратный прокси с учётом идентификации; см. Аутентификация через доверенный прокси |
Заголовки идентификации Tailscale (только Serve)
Если tailscale.mode: "serve" и gateway.auth.allowTailscale имеет значение true, аутентификация интерфейса управления/WebSocket может использовать заголовки идентификации Tailscale (tailscale-user-login) вместо токена или пароля. Перед принятием запроса OpenClaw проверяет заголовок: определяет адрес x-forwarded-for запроса через локальный демон Tailscale (tailscale whois) и сопоставляет его с именем входа в заголовке. Этот способ применяется к запросу только в том случае, если он поступает с интерфейса обратной петли и содержит заголовки Tailscale x-forwarded-for, x-forwarded-proto и x-forwarded-host.
Этот процесс без токена предполагает, что хост Gateway является доверенным. Если на том же хосте может выполняться недоверенный локальный код, задайте gateway.auth.allowTailscale: false и вместо этого требуйте аутентификацию с помощью токена или пароля.
Область действия обхода:
- Применяется только к аутентификации WebSocket интерфейса управления. Конечные точки HTTP API (
/v1/*,/tools/invoke,/api/channels/*и т. д.) никогда не используют аутентификацию по заголовкам идентификации Tailscale; они всегда следуют обычному режиму HTTP-аутентификации Gateway. - Для операторских сеансов интерфейса управления, которые уже содержат идентификационные данные устройства браузера, подтверждённая идентификация Tailscale позволяет пропустить обмен начальным токеном или QR-кодом для сопряжения.
- Идентификация самого устройства не обходится: клиенты без идентификации устройства по-прежнему отклоняются, а подключения с ролью узла всё равно проходят обычные проверки сопряжения и аутентификации.
Примечания
- Для Tailscale Serve/Funnel требуется установленный CLI
tailscaleс выполненным входом. tailscale.mode: "funnel"не запускается, если режим аутентификации не равенpassword, чтобы избежать публичного доступа.gateway.tailscale.serviceNameприменяется только к режиму Serve и передаётся вtailscale serve --service=<name>. Значение должно использовать формат Tailscalesvc:<dns-label>, напримерsvc:openclaw. Tailscale требует, чтобы хосты службы были маркированными узлами, а перед публикацией службы через Serve может потребоваться её одобрение в консоли администратора.gateway.tailscale.resetOnExitотменяет конфигурациюtailscale serve/tailscale funnelпри завершении работы.gateway.tailscale.preserveFunnel: trueсохраняет внешне настроенный маршрутtailscale funnelпри перезапусках Gateway. Приmode: "serve"OpenClaw проверяетtailscale funnel statusперед повторным применением Serve и пропускает его, если маршрут Funnel уже охватывает порт Gateway. Политика Funnel под управлением OpenClaw, допускающая только пароль, остаётся неизменной.gateway.bind: "tailnet"использует прямую привязку к Tailnet (без HTTPS и Serve/Funnel) вместе с обязательным локальным127.0.0.1, если доступен IPv4-адрес Tailnet; в противном случае используется только интерфейс обратной петли.gateway.bind: "auto"предпочитает интерфейс обратной петли; используйтеtailnet, чтобы ограничить сетевой доступ Tailnet, сохранив доступ через интерфейс обратной петли на том же хосте.- Serve/Funnel предоставляют доступ только к интерфейсу управления Gateway и WS. Узлы подключаются через ту же конечную точку WS Gateway, поэтому Serve также подходит для доступа узлов.
Требования и ограничения Tailscale
- Для Serve в вашей tailnet должен быть включён HTTPS; если он отсутствует, CLI предложит включить его.
- Serve добавляет заголовки идентификации Tailscale, а Funnel — нет.
- Для Funnel требуются Tailscale v1.38.3+, MagicDNS, включённый HTTPS и атрибут узла Funnel.
- Funnel поддерживает через TLS только порты
443,8443и10000. - Для Funnel в macOS требуется вариант приложения Tailscale с открытым исходным кодом.
Управление браузером (удалённый Gateway + локальный браузер)
Чтобы запустить Gateway на одном компьютере, но управлять браузером на другом, запустите хост узла на компьютере с браузером и подключите оба компьютера к одной tailnet. Gateway проксирует действия браузера на узел; отдельный сервер управления или URL Serve не требуется.
Не используйте Funnel для управления браузером; относитесь к сопряжению узла как к операторскому доступу.
Дополнительные сведения
- Обзор 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