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