Вопрос

Как открыть Control UI OpenClaw на удалённом сервере

Три способа дотянуться до панели: SSH-туннель, Tailscale Serve и прямой bind в tailnet, не выставляя Gateway в интернет.

· 3 мин чтения

Коротко

  • Gateway по умолчанию слушает только loopback на порту 18789, поэтому Control UI снаружи недоступен.
  • Tailscale Serve даёт стабильный HTTPS-адрес внутри tailnet без смены bind и без публичного доступа из интернета.

Сверено с документацией OpenClaw 2026.9.9, 10 октября 2026.

Control UI — это веб-панель OpenClaw. По умолчанию Gateway слушает только loopback (gateway.bind: "loopback", порт 18789), и снаружи к нему не достучаться. Ниже три способа открыть панель на удалённом сервере, не выставляя Gateway в интернет.

Через openclaw dashboard и SSH-туннель

Команда отдаёт одноразовую ссылку для сопряжения с десятиминутным токеном начальной загрузки. После первого открытия браузер получает долговременные учётные данные устройства администратора, и дальше панель открывается без токена в адресе.

openclaw dashboard
openclaw dashboard --no-open
openclaw dashboard --json

--json печатает машинно-читаемый объект: browserUrl, httpUrl, wsUrl, port.

Чтобы команда открыла страницу на вашей машине, а не на сервере, поднимите SSH-туннель. Локальный порт слева, удалённый Gateway-порт справа:

ssh -N -L 18789:127.0.0.1:18789 user@gateway-host

С туннелем openclaw health и openclaw status --deep дотягиваются до удалённого Gateway по ws://127.0.0.1:18789. Через этот же адрес работают openclaw gateway status, openclaw gateway health, openclaw gateway probe и openclaw gateway call с флагом --url. Если удалённый порт нестандартный, меняйте только правую часть: ssh -N -L 18789:127.0.0.1:29443 user@gateway-host.

Tailscale Serve: HTTPS без смены bind

Tailscale Serve оставляет Gateway на loopback, а наружу выставляет HTTPS-адрес внутри вашей tailnet. Конфиг минимальный:

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

Панель откроется по https://<magicdns>/ (или по gateway.controlUi.basePath, если он задан). Для нативных клиентов из другой tailnet-ноды ws://<tailscale-ip>:18789. На сервере должен быть установлен и залогинен tailscale.

Из CLI режим включается так:

openclaw gateway --tailscale serve

Прямой bind в Tailnet: без SSH и без Tailscale Serve

Если Tailscale уже поднят и не хочется тянуть Serve, можно повесить Gateway прямо на tailnet-IP. Тогда нужен токен:

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

Control UI по незащищённому HTTP на tailnet-адресе работает, но это понижение уровня транспорта: подпись устройства не шифрует страницу и трафик. Документация рекомендует Tailscale Serve для HTTPS.

Что проверить в конфиге перед публикацией

Шаблон для loopback-инсталла:

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

Создать токен можно так: openclaw doctor --generate-gateway-token. Для пароля документация рекомендует OPENCLAW_GATEWAY_PASSWORD вместо записи в openclaw.json.

Для CLI через SSH-туннель сохраните удалённую цель отдельно:

{
  gateway: {
    mode: "remote",
    remote: {
      url: "ws://127.0.0.1:18789",
      token: "your-token",
    },
  },
}

С sshTarget клиент сам поднимает туннель и закрывает его при завершении. Без sshTarget держите туннель руками. Для доверенной локальной сети настройте transport: "direct", тогда CLI не будет пытаться открыть SSH.

Частые ошибки

  • Запустили Funnel без пароля. tailscale.mode: "funnel" откажется стартовать без режима аутентификации password, чтобы не открывать публичный доступ.
  • Включили Bonjour в полном режиме и оставили привязку на локальную сеть. В TXT-записях утекает cliPath и sshPort, упрощая разведку в сети.