Режими
gateway.tailscale.mode:
У виводі стану та аудиту для цього режиму Serve/Funnel в OpenClaw використовується назва доступність через Tailscale.
off означає, що OpenClaw не керує Serve або Funnel; це не означає, що локальний демон Tailscale зупинено або з нього вийшли.
Приклади конфігурації
Лише tailnet (Serve)
https://<magicdns>/ (або налаштований вами gateway.controlUi.basePath)
Щоб опублікувати інтерфейс керування через іменовану службу Tailscale замість імені хоста пристрою, задайте для gateway.tailscale.serviceName назву служби:
https://openclaw.<tailnet-name>.ts.net/ замість імені хоста пристрою. Для служб Tailscale хост має бути схваленим позначеним тегом вузлом у вашій tailnet — налаштуйте тег і схваліть службу в Tailscale, перш ніж вмикати цю можливість, інакше команда tailscale serve --service=... завершиться помилкою під час запуску Gateway.
Лише tailnet (прив’язка до IP-адреси Tailnet)
Скористайтеся цим варіантом, щоб Gateway прослуховував безпосередньо IP-адресу Tailnet без Serve/Funnel:- Інтерфейс керування:
http://<tailscale-ip>:18789/ - WebSocket:
ws://<tailscale-ip>:18789
За наявності придатної для прив’язки IPv4-адреси Tailnet Gateway також використовує
http://127.0.0.1:18789 для автентифікованих клієнтів на тому самому хості. Якщо під час запуску адреса Tailnet недоступна, використовується лише local loopback; перезапустіть Gateway після появи доступу до Tailscale, щоб додати прямий доступ через Tailnet. Жоден із цих шляхів не надає доступу з локальної мережі або публічного доступу.Публічний інтернет (Funnel + спільний пароль)
OPENCLAW_GATEWAY_PASSWORD замість збереження пароля на диску.
Приклади CLI
Автентифікація
gateway.auth.mode керує встановленням з’єднання:
Заголовки ідентифікації Tailscale (лише Serve)
Коли заданоtailscale.mode: "serve" і gateway.auth.allowTailscale має значення true, для автентифікації інтерфейсу керування/WebSocket можна використовувати заголовки ідентифікації Tailscale (tailscale-user-login) замість токена або пароля. Перед прийняттям запиту OpenClaw перевіряє заголовок: визначає адресу x-forwarded-for запиту через локальний демон Tailscale (tailscale whois) і зіставляє її з логіном у заголовку. Запит відповідає вимогам цього шляху, лише якщо він надходить із local loopback і містить заголовки 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. Політика OpenClaw для керованого Funnel, що дозволяє лише пароль, не змінюється.gateway.bind: "tailnet"використовує пряму прив’язку до Tailnet (без HTTPS і Serve/Funnel), а також обов’язкову локальну адресу127.0.0.1, коли доступна IPv4-адреса Tailnet; інакше використовується лише local loopback.gateway.bind: "auto"надає перевагу local loopback; використовуйтеtailnet, щоб обмежити мережеву доступність Tailnet, зберігаючи доступ через local loopback із того самого хоста.- Serve/Funnel надають доступ лише до інтерфейсу керування Gateway та WS. Вузли підключаються через ту саму кінцеву точку WS Gateway, тому Serve також забезпечує доступ для вузлів.
Передумови й обмеження Tailscale
- Serve потребує ввімкненого HTTPS для вашої tailnet; якщо його немає, 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