Коротко
- 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, упрощая разведку в сети.