Tailscale (панель управления шлюза)

OpenClaw может автоматически настраивать Tailscale Serve (tailnet) или Funnel (публичный) для панели управления шлюза и порта WebSocket. Это держит шлюз привязанным к loopback, в то время как Tailscale предоставляет HTTPS, маршрутизацию и (для Serve) заголовки идентификации.

Режимы

  • serve: Serve только для Tailnet через tailscale serve. Шлюз остается на 127.0.0.1.
  • funnel: Публичный HTTPS через tailscale funnel. OpenClaw требует общий пароль.
  • off: По умолчанию (нет автоматизации Tailscale).

Аутентификация

Установите gateway.auth.mode для контроля рукопожатия:

  • token (по умолчанию, когда установлен OPENCLAW_GATEWAY_TOKEN)
  • password (общий секрет через OPENCLAW_GATEWAY_PASSWORD или config)

Когда tailscale.mode = "serve" и gateway.auth.allowTailscale равно true, действительные запросы Serve proxy могут аутентифицироваться через заголовки идентификации Tailscale (tailscale-user-login) без предоставления токена/пароля. OpenClaw проверяет идентичность, разрешая адрес x-forwarded-for через локальный демон Tailscale (tailscale whois) и сопоставляя его с заголовком перед принятием. OpenClaw рассматривает запрос как Serve только тогда, когда он прибывает от loopback с заголовками Tailscale x-forwarded-for, x-forwarded-proto и x-forwarded-host. Чтобы требовать явные учетные данные, установите gateway.auth.allowTailscale: false или принудительно gateway.auth.mode: "password".

Примеры конфигурации

Только Tailnet (Serve)

\{
  gateway: \{
    bind: "loopback",
    tailscale: \{ mode: "serve" \}
  \}
\}

Открыть: https://<magicdns>/ (или ваш настроенный gateway.controlUi.basePath)

Только Tailnet (привязка к IP Tailnet)

Используйте это, когда вы хотите, чтобы шлюз слушал напрямую на IP Tailnet (без Serve/Funnel).

\{
  gateway: \{
    bind: "tailnet",
    auth: \{ mode: "token", token: "your-token" \}
  \}
\}

Подключение с другого устройства Tailnet:

  • UI управления: http://<tailscale-ip>:18789/
  • WebSocket: ws://<tailscale-ip>:18789

Примечание: loopback (http://127.0.0.1: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, чтобы избежать публичного открытия.
  • Установите gateway.tailscale.resetOnExit, если вы хотите, чтобы OpenClaw отменил конфигурацию tailscale serve или tailscale funnel при завершении работы.
  • gateway.bind: "tailnet" - это прямая привязка Tailnet (без HTTPS, без Serve/Funnel).
  • gateway.bind: "auto" предпочитает loopback; используйте tailnet, если вы хотите только Tailnet.
  • Serve/Funnel открывают только UI управления шлюза + WS. Узлы подключаются через ту же конечную точку WS шлюза, поэтому Serve может работать для доступа к узлам.

Управление браузером (удаленный шлюз + локальный браузер)

Если вы запускаете шлюз на одной машине, но хотите управлять браузером на другой машине, запустите хост узла на машине браузера и держите обе на одном tailnet. Шлюз будет проксировать действия браузера на узел; не нужен отдельный сервер управления или URL Serve.

Избегайте Funnel для управления браузером; рассматривайте сопряжение узла как доступ оператора.

Предварительные условия и ограничения Tailscale

  • Serve требует включения HTTPS для вашего tailnet; CLI предложит, если он отсутствует.
  • Serve вводит заголовки идентификации Tailscale; Funnel не делает этого.
  • Funnel требует Tailscale v1.38.3+, MagicDNS, включенного HTTPS и атрибута узла funnel.
  • Funnel поддерживает только порты 443, 8443 и 10000 через TLS.
  • Funnel на macOS требует варианта приложения Tailscale с открытым исходным кодом.

Узнать больше