ssl_preread на 443/tcp читает SNI в ClientHello и проксирует сырой TCP к loopback-слушателям, оставляя терминирование TLS процессу OpenClaw. Ниже — минимальный воспроизводимый путь: топология, фрагменты stream, сертификаты и токены, объединение status и doctor и кросс-региональная сводка, нарочно отделённые от Traefik и HAProxy, frp STCP и Cloudflare Tunnel.
Зеркальные флаги OpenClaw по JP, KR, HK, SG, US West; TLS вынесен на укреплённую Linux-кромку. Разделы: топология, stream, сертификаты и токены, объединённые пробы, FAQ, шесть шагов и цитируемые тезисы. Шлюз и doctor остаются на 127.0.0.1.
1) Traefik по умолчанию ориентирован на HTTP и провоцирует двойной TLS, если режим TCP не аккуратен. 2) frp чинит исходящие хосты, но плодит токены и графы STCP. 3) Раздельные дашборды status и doctor поднимают тревогу, когда дрожат только туннели SSH.
| Шаблон | Когда уместен | Чем платите |
|---|---|---|
| Traefik L7 | Нужна липкость по cookie для управляющих HTTP-API | Больше роутеров, если не свести к чистым TCP-слушателям |
| frp STCP | Сборщики не принимают входящий TCP из интернета | Токен frps и секретные ключи на каждый прокси, требующие ротации |
| nginx stream SNI | На периметре уже работает nginx, нужны passthrough-карты | Дисциплина reload и жизненный цикл ACME на этой VM |
| Cloudflare Tunnel | Удобно отдать вход управляемому SaaS, не открывая 443 |
Ещё одна плоскость управления и свой профиль задержки |
Топология: Mac-сборщики, Linux-кромка, OpenClaw на loopback
Каждый Mac mini M4 на vpshalo запускает OpenClaw v2026.5.x с флагами --gateway-bind 127.0.0.1:18080 и --doctor-bind 127.0.0.1:18081. Туннель ssh -R или приватный VPC-канал поднимает соответствующие порты на интерфейсе Linux-кромки — например 10.42.1.17:18080 и 10.42.1.17:18081. Внешние клиенты ходят к именам gw.example и doctor.example; nginx читает только SNI в ClientHello и не расшифровывает байты.
Имена в DNS распределены по тем же гео-метро, где живут пайплайны CI. Сводка отвечает одной строкой: упала кромка, туннель к сборщику или сам OpenClaw. Журналируйте security-group, через которую nginx достаёт билдер-хоп.
Фрагменты nginx stream для маршрутизации по SNI
Подключите отдельный контекст stream { } рядом с уже работающим блоком http { }. Включите ssl_preread на публичном слушателе, разложите имена через map в пары upstream:port и поставьте щедрый proxy_timeout, потому что управляющие сессии живут часами. Перед промоушеном в продакшен обязательно прогоняйте nginx -t в CI, иначе генератор конфигов однажды положит периметр.
# /etc/nginx/stream.d/openclaw-sni.conf — подставьте имена и upstream-IP
map $ssl_preread_server_name $openclaw_upstream {
gw.example 10.42.1.17:18080;
doctor.example 10.42.1.17:18081;
default "";
}
server {
listen 443 reuseport;
proxy_pass $openclaw_upstream;
ssl_preread on;
proxy_connect_timeout 5s;
proxy_timeout 24h;
}
default отбрасывает неизвестный SNI и не светит сборщик. Никогда не коммитьте токены. Если доступ к VPC непрямой, добавьте JumpHost по сценарию из материала про Traefik.Сертификаты, токены и привязки OpenClaw v2026.5.x
В большинстве установок TLS терминирует сам шлюз OpenClaw, а nginx работает в режиме passthrough и не видит открытых байтов. Если же терминирование смещают на nginx, придётся самим вести цепочку fullchain.pem, права на приватный ключ и хуки reload. На корпоративных периметрах, где HTTP-01 блокирован фильтрами, выручает ACME DNS-01 на Linux-кромке.
Управляющие токены подгружайте через drop-in для systemd из менеджера секретов, а не из открытых файлов в /etc. Закрепляйте версию v2026.5.x по хешу контейнера или тарбола в каждом регионе vpshalo, чтобы апгрейд катился синхронно. Ротацию токенов проводите в опубликованных окнах обслуживания и сразу после неё прогоняйте объединённые пробы по обоим именам — это дешевле, чем ловить молчащий регион постфактум.
Слияние status и doctor плюс кросс-региональная сводка
Воркер на бастионе раз в минуту дёргает https://gw.example/healthz и https://doctor.example/v1/status по одному и тому же SNI-каналу. Ответы сводятся в одну строку JSON с полями region, gw_ok, doctor_ok, tls_days_left и epoch. Тревога зажигается только если обе плоскости отказали в одном пятиминутном окне.
Минутный digest сортирует регионы, выносит наверх худшую серьёзность и приклеивает git_sha. Разбор инцидента JP против US West остаётся в одной панели.
FAQ: stream против остальных входов OpenClaw
Заменяет ли stream JumpHost SSH? Нет. Stream закрывает только парадную TLS-дверь, а операторы по-прежнему ходят к сборщикам через бастион из соседних материалов.
Можно ли gateway и doctor разделять одно SNI-имя? Лучше избегать: разные имена держат map очевидным и позволяют пробам отдельно опросить каждую плоскость до слияния.
А QUIC и HTTP/3? Шаблон сознательно ограничен TCP; стек на UDP оценивайте отдельно, когда эксперименты с задержкой действительно того стоят.
Шесть шагов для выката
- 1. Заморозьте хеши OpenClaw v2026.5.x по регионам и сложите тарболы для отката.
- 2. Принудите loopback-привязки на каждом сборщике vpshalo; убедитесь через
lsof -nP -iTCP, что на публичном интерфейсе ничего не слушает. - 3. Выпустите TLS-материал для имён
gwиdoctor; reload автоматизируйте черезsystemd path. - 4. Раскатайте блок
map $ssl_preread_server_name; в CI требуйте зелёныйnginx -tдо промоушена. - 5. Сожмите security-группы так, чтобы лишь VM-кромка имела право достучаться до loopback-хопа сборщика.
- 6. Включите объединённые пробы и кросс-региональную сводку до того, как открыть доступ операторам.
Тезисы для runbook
- SNI preread в nginx stream оставляет владение TLS процессу OpenClaw на
loopback, кромка лишь рулит TCP. - Сводите JSON шлюза и JSON doctor до тревоги; кросс-региональный digest шлите только после пятиминутного тихого окна.
- Берите stream, когда nginx уже стоит на периметре; оставляйте Traefik или frp, если их фичи действительно совпадают с профилем риска.
- Любая ротация сертификата сопровождается тестом reload и немедленной валидацией объединённых проб.
stream и ssl_preread должны быть собраны в вашем nginx; следуйте указаниям Apple и вашего Linux-вендора по эксплуатации сети.
Итог. nginx stream SNI к loopback-шлюзу OpenClaw на vpshalo — узкий и управляемый вход; объединённый status/doctor сводит мультирегион в одну плоскость наблюдения. Подберите регион удалённого Mac по реальным цифрам RTT — тарифы vpshalo совпадут с регионами вашей сводки.