Files
knowledge-base/projects/dttb/ai-assistant-pilot/credentials.md

29 KiB
Raw Blame History

date, type, tags, status
date type tags status
2026-05-31 project
ai-assistant
alexandr
umnybot
credentials
secrets
openclaw
omniroute
active

🔐 AI-ассистент «umnybot» — инфра и креды (пилот Александра)

⚠️ КОНФИДЕНЦИАЛЬНО. Продукт «консьерж в коробке». См. PROMPT (тех-задание) и память project_alexandr_assistant. Все секреты также лежат на коробке в /opt/assistant/.env (chmod 600).

Автономизация 2026-06-17 (проксирование + агент + gitea)

После переезда (см. ../proxmox-pve-147) коробка отвязана от домашней инфры Олега:

  • NPM коробки (LXC 101, теперь 192.168.1.221:81, it5870@yandex.ru/1qaz!QAZ) — бэкенды всех 8 хостов перенаправлены на новые IP: omni→192.168.1.154:20128 (LXC102 OmniRoute), swarm→192.168.1.71:3456 (LXC103), git→192.168.1.96:3000 (LXC104), cloud:7080/kino:32400/dom:8123/alex:18790/tg:3000192.168.1.190 (ZimaOS, ждёт BIOS-фикс). Все cert=0 (HTTP) — для публичного доступа нужен ещё DNS→WAN Александра + форвард 80/443 на .221 + LE на NPM коробки.
  • Агент (openclaw LXC102): удалён провайдер maxcc (http://10.0.0.179:8319/v1 — домашний CLIProxy Олега + ключ sk-clawdbot-proxy), бэкап /root/.openclaw/openclaw.json.bak-alexclean. Остался автономный провайдер omniroute (primary omniroute/cx/gpt-5.5, fallbacks omniroute+openrouter). alex-nas.sh192.168.1.190. Других ссылок на 10.0.0.x в агенте нет.
  • Gitea коробки (LXC104 git.umnybot.ru, единственный юзер benelux=admin): из benelux/knowledge-base вычищены перекрёстные упоминания др. объектов (НИИКН/ММФБ/Главторг/Знаменское — peer-ID/IP/NetBird-mesh в compromise.md и README), commit 49716a0. Push только через Gitea (HTTP+token; прямой file://-push режется pre-receive). В postgres агента чужих данных НЕТ (RAG/история чисты).

Коробка (хост + контейнер)

Параметр Значение
Хост Proxmox pve (pve-147), 192.168.1.247 (сеть Александра; было 10.0.0.147 — переезд 2026-06-17), root / 1qaz!QAZ
Контейнер LXC 102 «assistant», Debian 12, IP 192.168.1.154 (DHCP; было 10.0.0.163), NetBird 100.70.186.192
root LXC 102 j5DS1JSPKewKQw6i7mTK (уникальный; Mac-ключ ai@mac-20260112 в authorized_keys)
Стек Docker (overlayfs) + Node 22; openclaw 2026.5.27; OmniRoute 3.8.7; Postgres16/pgvector
Доступ ssh -i ~/.ssh/id_ed25519 root@100.70.186.192 (LXC102 по NetBird) → sshpass -p '1qaz!QAZ' ssh root@192.168.1.247pct exec 102 -- bash. Хост сам без NetBird (джамп через LXC102)

OmniRoute (LLM-роутер)

Параметр Значение
Сервис systemd omniroute.service, слушает 0.0.0.0:20128
Дашборд https://omni.umnybot.ru (через NPM, LE) или http://10.0.0.163:20128
Пароль дашборда A30Y7aan8dCKf9 (Settings → Security можно сменить)
API-ключ (для openclaw) ork_VQo75huaEVGzhdfD4QlrL2XaxTmNKPTD
Конфиг/секреты /root/.omniroute/.env (STORAGE_ENCRYPTION_KEY + СВЕЖИЕ JWT_SECRET/API_KEY_SECRET — перегенерены перед выходом наружу), storage.sqlite
Старт сервера node /usr/lib/node_modules/omniroute/app/server.js (PORT=20128, HOSTNAME=0.0.0.0)
Провайдеры Kiro подключён (GitHub device-flow, аккаунт kiro1@umnybot.ru) — но новый аккаунт троттлит (429 AWS CodeWhisperer). Олег добавляет 2-й провайдер через дашборд-GUI
Сброс пароля omniroute-reset-password (интерактивный, нужен expect для pipe)

openclaw (мозг + каналы)

Параметр Значение
Версия 2026.5.27 (глоб. npm), конфиг /root/.openclaw/openclaw.json
Gateway systemd openclaw-gateway.service (openclaw gateway run), loopback 127.0.0.1:18789
Канал Telegram @alex_umny_bot (connected, polling)
Дефолт-модель пока openai/gpt-5.5 (без провайдера) → переключить на omniroute/<provider>/<model>
Провайдер omniroute openclaw models auth paste-api-key (baseUrl http://127.0.0.1:20128/v1, key ork_VQo…)

Telegram

Параметр Значение
Бот @alex_umny_bot «Консьерж Бот», id 8601326674
Токен 8601326674:AAEJwbyXGEgEEiIwmfZVdYbG2SxpyMkmDiA
Audit chat_id 1292155421 (Олег, @it5870)

Postgres + pgvector

127.0.0.1:5432 (Docker assistant-postgres, pgvector/pgvector:pg16) — user assistant / c2e193fb341120471917f720a1c6eeea / db assistant. Compose: /opt/assistant/docker-compose.yml.

Домен umnybot.ru (Spaceweb)

Параметр Значение
Регистратор/DNS Spaceweb, панель vps.sweb.ru, логин it5870yand / 1qaz!QAZ
API POST https://api.sweb.ru/domains/dns (методы editMain/editMx/editTxt, action:add)
⚠️ Проверка DNS только через DoH (curl https://1.1.1.1/dns-query?name=...&type=...) — dig из dttb-сети режется домашним :53-перехватом (ложно-пусто). action:add РАБОТАЕТ
Записи omni A→176.62.183.186; @ MX→mail.dttb.ru (10); @ TXT SPF v=spf1 ip4:176.62.183.186 ~all; dkim._domainkey (2048); _dmarc
Поддомены план omni. = дашборд OmniRoute; alex. = веб ассистента Александра; <client>. на будущих

Почта (на Mailcow dttb, VM 107)

Параметр Значение
Ящик ассистента assistant@umnybot.ru / KQcZnxkB5sMNiVYo
Catch-all @umnybot.ruassistant@umnybot.ru (любой адрес, удобно под регистрацию аккаунтов)
Вебмейл https://mail.dttb.ru (SOGo)
IMAP/SMTP mail.dttb.ru:993 / mail.dttb.ru:587
Mailcow 10.0.0.107, admin admin/1qaz!QAZ, API dttb-mailcow-api-2026 (с 10.0.0.0/24)
rspamd whitelist github.com, sgmail.github.com, sendgrid.net для umnybot.ru (новый домен резался, для приёма GitHub-кодов)

Codex/OpenAI ящики (мульти-аккаунт, 2026-05-31)

8 ящиков на umnybot.ru, общий пароль 1BU5zqB9NxC84h: codex1@umnybot.rucodex8@umnybot.ru (quota 512MB, real-боксы, не catch-all). Вебмейл https://mail.dttb.ru (логин любым codexN@umnybot.ru / пароль). Коды можно тянуть по IMAP mail.dttb.ru:993. ⚠️ OpenAI требует телефон при регистрации — реальный потолок числа аккаунтов.

OmniRoute коробки (2026-06-01): подключено 2 Codex-аккаунта (oauth, is_active=1, test_status=active) — пул для cx/gpt-5.5: OmniRoute сам обходит лимит одного через второй (ёмкость + failover). Также kiro active (запас, в fallback openclaw не стоит). Проверено: gpt-5.5 отвечает через пул. openclaw primary omniroute/cx/gpt-5.5, fallback → openrouter free + cx/gpt-5.4-mini. Больше одновременных пользователей → добавляй ещё Codex-учётки в дашборд OmniRoute, подхватятся в пул автоматически.

Аккаунты провайдеров

Сервис Логин Заметка
GitHub (для Kiro) kiro1@umnybot.ru пароль задал Олег — здесь не записан, спросить у Олега. Зарегистрирован через catch-all (код пришёл в assistant@)
Kiro (AWS) через GitHub-логин выше device-flow, профиль arn:aws:codewhisperer:us-east-1:.... Новый аккаунт троттлит

NetBird (доступ коробки к сети Александра)

Параметр Значение
Setup-key (Benelux) 26C84D9A-B71B-474D-BC41-8FAC2C4C6399 (reusable, до 2027-05-31)
Группа Benelux d8e5s1jl0ubs73f3g7vg (туда добавлен Cudy «OpenWrt Benilux»), политика «Benelux Access»
Коробка в NetBird alex-assistant = 100.70.186.192 (userspace-режим, без TUN — работает; TUN прописан в /etc/pve/lxc/102.conf, активируется при pct reboot 102)
Цель достать Cudy Александра 100.70.207.97 (ping ~62мс) → jump на Mac (aleksandrgrigorev/gav1971@)/устройства
Управление NetBird api.netbird.io, токен nbp_… в projects/dttb/credentials.md
⚠️ Безопасность Default-политика NetBird = All↔All → коробка достаёт и др. сети Олега. Для продукта — Александра в ОТДЕЛЬНЫЙ NetBird (изоляция + автономность).

Инструменты Алекса — управление устройствами Александра (2026-05-31)

Алекс ходит в сеть Александра: коробка → NetBird → Cudy (100.70.207.97) → LAN. Прямой роут в 192.168.1.0/24 нельзя (коллизия с Знаменское/НИИКН в NetBird) → всё джампом через Cudy. Обёрнуто в скрипты на коробке (/opt/assistant/), Алекс зовёт их через exec под хард-гейтом (exec-policy: security=allowlist, ask=on-miss — read-инструменты в allowlist бегут свободно, запись/новое → кнопка approval в TG, см. ниже). Проверено в живом диалоге (TG): «какие точки wifi по комнатам» → Алекс сам зовёт alex-unifi.sh.

Подтверждение write-действий (Этап 4) — ХАРД-ГЕЙТ, ПОДТВЕРЖДЁН 2026-05-31: exec-approvals.jsondefaults {security:"allowlist", ask:"on-miss", askFallback:"deny"} + agents."*".allowlist[] с glob'ами read-инструментов (/opt/assistant/alex-router.sh*, alex-unifi.sh*, alex-security.sh*, alex-print.sh*). alex-fix.sh НЕ в allowlist → при попытке агента выполнить openclaw показывает Олегу в Telegram кнопки [Allow Once] [Allow Always] [Deny] (+ текст-команды /approve <id> allow-once|allow-always|deny), команда висит pending до решения. Живой тест в TG прошёл — кнопка появилась на alex-fix.sh restart-podkop. Агент физически не обойдёт. Гибкость сохранена: незнакомую команду агент не теряет — спрашивает кнопкой (Allow Once). SOUL объясняет действие до запуска (без дубля текстового «да» — кнопка сама спрашивает). Бэкстоп — авто-аудит каждого ВЫПОЛНЕННОГО write-действия Олегу. Добавить read-инструмент: openclaw approvals allowlist add "/opt/assistant/<script>*". ⚠️ НЕ жать «Allow Always» на alex-fix (запомнит → перестанет спрашивать).

Скрипт Что делает
alex-router.sh [status|devices|printer|dns] Cudy: статус обхода (awg show awg0), DHCP-аренды, пинг принтера, FakeIP-DNS. read-only
alex-unifi.sh [list|check <ip>] UniFi: точки/свитчи по комнатам + онлайн-проверка пингом. read-only
alex-print.sh (текст на stdin) Печать на HP M775, кириллица через paps→CUPS
alex-fix.sh [restart-podkop|reboot-ap <ip>|test] write-действия (перезапуск обхода / перезагрузка Wi-Fi точки). Авто-аудит Олегу в TG на каждое. reboot-ap через device-SSH ktf8b@<ip> пароль TlbbdJoVADiXGDrcpnNq3q
alex-security.sh аудит безопасности сети (см. ниже «Защита сети»)
alex-nas.sh [status|find <q>|list [папка]|usage] Домашний NAS ZimaOS (10.0.0.190): место, поиск файлов (кириллица через python), содержимое папок. read-only, в allowlist

UniFi (Cloud Key Gen2+ 192.168.1.199)

  • Доступ: SSH через CudyDROPBEAR_PASSWORD='1qaz!QAZ!QAZ' dbclient -y root@192.168.1.199 (sshpass на Cudy нет; dropbear dbclient берёт пароль из env).
  • ⚠️ Локальный UniFi-API залочен SSO (/api/auth/login = 403). Данные тянем из MongoDB контроллера: mongo --quiet --port 27117 ace --eval "db.device.find({},{name:1,ip:1,model:1,_id:0}).forEach(printjson)". Поле state пустое → онлайн проверяем пингом точки с Cudy.
  • 13×UAP6MP по комнатам + 7 свитчей, см. benelux-topology.

Принтер (HP LaserJet M775 192.168.1.148)

  • 9100/515 закрыты, открыт только IPP/631 (+AirPrint).
  • Печать: CUPS на коробке (apt: cups cups-client cups-filters paps), очередь alex = ipp://100.70.207.97:6310/ipp/print (IPP Everywhere, lpadmin -m everywhere).
  • Коробка достаёт принтер через DNAT на Cudy: 100.70.207.97:6310 (NetBird) → 192.168.1.148:631. Персистентно: /etc/nftables.d/30-alex-printer.nft (dstnat + masquerade только для saddr 100.70.186.192; fw4 check ОК, fw4 reload применён).
  • Кириллица: paps --font='DejaVu Sans Mono 11' → PostScript → CUPS. Хелпер /opt/assistant/alex-print.sh. Тест-лист напечатан (job completed).

Защита сети — Алекс-сторож (2026-05-31)

Алекс защищает сеть Александра от повторения инцидента ../../decisions/2026-05-20-benelux-compromise (WAN-SSH брут → спам-релей). Детект + алерт (превенция уже стоит: nft incident-20260520 + key-only).

  • Аудит: /opt/assistant/alex-security.sh (на коробке) → /root/.alex-seccheck.sh (на Cudy, read-only). Чек-лист под вектор инцидента: WAN-SSH закрыт (правило incident-20260520-no-ssh-from-wan), нет Allow-SSH-WAN, PasswordAuth=off, чужие SSH-сессии (не 100.70./192.168.1.), исходящий SMTP 25/465/587, посторонний cron, скрытые executable в /tmp, левые SSH-ключи (белый список: mac-20260112 / claude-code@code-server / alex-assistant), LA≥3.
  • Сторож: /opt/assistant/alex-secwatch.sh + cron коробки */15 → при FLAG алерт Олегу в TG (TELEGRAM_AUDIT_CHAT_ID=1292155421 из .env), дедуп по md5 набора угроз, «отбой» когда чисто. Канал проверен (tg=200, «🛡️ Алекс-сторож на посту»).
  • Авто-лечение: если флаг = открытый WAN-SSH, сторож САМ возвращает nft-блок (nft insert ... input iifname eth0 dport 22 drop) до алерта + помечает «закрыл автоматически». Проверено боевым тестом (удалил handle из incident_block_in → сторож восстановил → count=1). Расширять авто-heal на cron/ключи НЕ стоит (риск ложного авто-удаления) — там только алерт.
  • ⚠️ ssh в скриптах — с -n (или запуск из cron/файла, не pipe): ssh без -n в скрипте, поданном в bash через pipe, съедает остаток скрипта со stdin.
  • On-demand в TG: «нас не ломают?» → Алекс сам зовёт проверку, объясняет спокойно. Проверено.
  • Статус: всё чисто, ~150 WAN-SSH брутов отбито (nft counter растёт — защита держит вектор).

ZimaOS NAS — интеграция с Алексом (2026-06-01)

«AI-NAS»: Алекс = интерфейс к домашнему NAS семьи.

  • VM 100 «Zima» на pve-147, 10.0.0.190 (8 ГБ, autoboot). Веб http://10.0.0.190 / https://zima.umnybot.ru. Веб/API логин: admin / App5870w (сменён 2026-06-01, публичная панель). SSH (Linux): admin / 1qaz!QAZ — ОТДЕЛЬНЫЙ, только LAN/NetBird (не публичный), его юзает alex-nas; root SSH запрещён, у admin есть sudo. API JWT POST /v1/users/login. SMB(445/139) + NFS(2049) + ttyd(7681).
  • Хранилище /DATA (114G, ~83G свободно). HDD 1.8TB /dev/sdb ещё НЕ проброшен в ZimaOS (на будущее — disk-passthrough). Папки: Documents/Gallery/Downloads/Backup (777-доступ).
  • Доступ Алекса: sshpass admin@10.0.0.190 (ключ не положить — home=/DATA root-owned, .ssh не создать). Инструмент alex-nas.sh (в allowlist, read-only).
  • ⚠️ Кириллический поиск: find -iname НЕ case-fold'ит кириллицу даже на en_US.UTF-8C.UTF-8 не помог). Решение — список файлов с ZimaOS → фильтр через python3 .lower() на коробке (Unicode-aware). В alex-nas.sh так и сделано.
  • Проверено в TG: «сколько места на NAS, найди договор» → Алекс отвечает.
  • Домен zima.umnybot.ru (2026-06-01): A→176.62.183.186 (Spaceweb editMain add), основной NPM 10.0.0.195 proxyhost id31http://10.0.0.190:80, LE cert id116 (до 30 авг 2026, websocket+force-SSL). Работает публично (200), серт LE valid. ⚠️ Грабли NPM v2.14: cert-create принимает только meta:{} (НЕ email/agree/dns_challenge — «additional properties»). На NPM коробки zima пока НЕ продублирован (отложено с внешним доступом).
  • БЕЗОПАСНОСТЬ (закрыто 2026-06-01): веб-пароль ZimaOS сменён на сильный App5870w. CasaOS хранит пароль как чистый MD5 в /var/lib/casaos/db/user.db таблица o_users (файл root:644 → правка echo PASS | sudo -S sqlite3 ... "UPDATE o_users SET password='<md5>' WHERE username='admin'"). API/CLI смены пароля НЕ нашлось (Bearer-токен отвергается 401, casaos-cli user только list, zimaos-user -ru опасен). Проверено: старый пароль отвергнут, новый логинится. Публичная панель больше не на 1qaz!QAZ. SSH (Linux) остался 1qaz!QAZ — но не публичен (LAN/NetBird), для продакшна тоже сменить.
  • Дальше (roadmap AI-NAS): RAG по содержимому документов (parse+index в pgvector); SMB-шара для загрузки файлов семьёй с телефонов/Mac; управление приложениями ZimaOS (через API+approval); passthrough HDD 1.8TB. Тестовые сэмплы в /DATA/Documents (Договор-аренды-2026, wifi-инструкция) — удалить перед передачей.

Антошка стережёт Алекса — внешний мониторинг пилота (2026-05-31)

Антошка (openclaw LXC 137, 10.0.0.239 / NetBird 100.70.167.54, бот-токен 8020760639:AAH-Ra0nayJnFgjvSVAagAtZgSb46onBpB4) следит за коробкой Алекса, лечит и алертит Олега. Второй слой поверх Restart=on-failure самих сервисов.

  • Скрипт: /root/antoshka-watch-alex.sh на LXC 137, cron */3.
  • Путь (с 2026-06-17, после переезда): LXC 137 → NetBird → LXC102 100.70.186.192 по ключу (root@openclaw добавлен в authorized_keys 102) → проверки/лечение сервисов прямо внутри 102 (systemctl, curl localhost:20128). Хост 192.168.1.247 без NetBird → если LXC102 недоступен, авто-старт контейнера невозможен, только алерт. Старый путь (ssh root@10.0.0.147pct exec 102) мёртв. Бэкап старого скрипта: /root/antoshka-watch-alex.sh.bak-20260617.
  • Проверяет: контейнер 102 running (иначе pct start 102); openclaw-gateway active (иначе restart); omniroute active + HTTP :20128 отвечает (иначе restart); диск <90% (иначе только алерт, сам не чистит). Перепроверка через 6с — не ловить штатный рестарт.
  • Алерт от имени Антошки Олегу (chat 1292155421), дедуп md5 + «отбой». Проверено боевым тестом: stop openclaw-gateway → Антошка поймал, перезапустил (active), прислал алерт.
  • Переезд учтён (2026-06-17): скрипт переписан под NetBird→LXC102 (см. выше). Алекс автономен сам (Restart=on-failure); Антошка — второй слой + алерт Олегу, опционален.

NPM коробки — автономный reverse-proxy (LXC 101, настроен 2026-05-31)

Для автономности при переезде к клиенту коробка раздаёт свои домены САМА — через свой NPM (LXC 101 pve-147), не завися от основного NPM Олега.

Параметр Значение
NPM коробки LXC 101 «npm» (pve-147), 10.0.0.207, порты 80/81/443. Админка http://10.0.0.207:81, логин it5870@yandex.ru / 1qaz!QAZ
Proxy host id1 omni.umnybot.ruhttp://10.0.0.163:20128 (OmniRoute), websocket + force-SSL
Cert id1 omni.umnybot.ru — скопирован с основного NPM (LE до 2026-08-29, provider=other → коробка его НЕ авто-renew)
Проверка локально curl --resolve omni.umnybot.ru:443:10.0.0.207 → серт валиден (LE trusted), проксирует в OmniRoute (307). Публично пока на основном NPM (один 443 на дом Олега)

При переезде к клиенту (Александр):

  1. DNS omni.umnybot.ru (+ др. поддомены) → публичный IP клиента (Cudy WAN, напр. 45.143.21.60).
  2. Роутер клиента (Cudy) форвардит 443 + 80 → NPM коробки (его IP в LAN клиента).
  3. Пере-выпустить серт как LE-managed на NPM коробки (HTTP-01 заработает — публичные 80/443 теперь приходят на коробку) → авто-renew. Либо DNS-01.
  • Cloudflare Tunnel (Этап 5, без проброса/белого IP): cloudflared установлен /usr/local/bin/cloudflared. Тест 2026-05-31 из РФ-сети коробки: подключается к CF только по --protocol http2 (QUIC/7844 троттлится РФ-DPI: «datagram manager failure», UDP-буфер не растёт), регистрируется на московский edge dme01. НО free quick-tunnel (trycloudflare) флапает на обслуживании — 530 origin unregistered и с коробки, и с Mac. Может быть нестабильность РФ-канала ИЛИ известная флакость trycloudflare. Продакшн named-tunnel не тестирован (нужен CF-аккаунт + umnybot.ru на CF — у CF стабильный routing, может работать где quick не смог). ⚠️ Для РФ-коробки CF Tunnel РИСКОВАН — альтернатива надёжнее: VPS reverse-tunnelоробка→Finland VPS swtest/vps-znam→публично, исходящий из РФ стабилен, Олег владеет VPS).

Старое (убрать при передаче): основной NPM 10.0.0.195 proxyhost id30 omni→10.0.0.163:20128, cert id115 — пока обслуживает публичный omni.umnybot.ru.

🌐 Публичный доступ — VPS-шлюз через NetBird (2026-06-17, РАБОТАЕТ)

Решение: WAN Александра динамический (proto=dhcp, аренда 24ч) → DNS на него вешать нельзя. Прямой проброс на Cudy откатан. Публичный доступ — через статичный VPS-шлюз по NetBird (это и была изначальная задумка: DNS почти всех *.umnybot.ru смотрит на VPS).

Архитектура: DNS → VPS 158.255.0.139 (NPM, LE-серты) → NetBird → NPM коробки (LXC101, 100.70.90.103) → внутренние бэкенды.

Узел Значение
VPS-шлюз 158.255.0.139 (vm-nano, Ubuntu 22.04), root / Kw_0kkksW5, NetBird 100.70.127.23
NPM на VPS jc21 в Docker (/opt/npm), админка http://158.255.0.139:81 (⚠️ :81 публичен), логин admin@umnybot.ru / App5870w
NPM коробки (LXC101) теперь в NetBird: 100.70.90.103 (alex-npm.netbird.cloud), setup-key Benelux. VPS бьёт сюда, NPM коробки роутит внутрь (cloud→105:8082, alex→105:3001, omni→102:20128)
LXC 105 «alex-apps» filebrowser (облако, :8082, admin/App5870w) + Homepage (дашборд, :3001), /data на HDD

Публично сейчас (2026-06-17, финал):

  • umnybot.ru → SwarmClaw (LXC103 192.168.1.71:3456, через NPM коробки id9). Открыто.
  • pve.umnybot.ru → Proxmox UI (host 192.168.1.247:8006) за Basic Auth на VPS NPM: oleg / Pve!Umny5870wX (access-list pve-basic-auth id1), потом обычный логин Proxmox. Серт LE id18. ⚠️ root-пароль Proxmox слабый (1qaz!QAZ) — сменить и/или включить 2FA в Proxmox (Basic Auth — только заслонка от брутфорса).

DDNS НЕ нужен — DNS на статичный VPS, динамика WAN неважна.

Остальное — internal (по NetBird/LAN, не публично): omni (OmniRoute 102:20128), cloud (filebrowser 105:8082), alex (Homepage 105:3001), git (Gitea 104:3000). Снято с VPS NPM: эти + 8 доменов ZimaOS (zima/tg/rustdesk/plex/ha/oc/qbit/term) + ai→10.0.0.239 (домашний openclaw Олега, не коробка).

Сервисы на коробке: SwarmClaw (103:3456), OmniRoute (102:20128), Gitea (104:3000), filebrowser (105:8082), Homepage (105:3001), Proxmox UI (host:8006), бот Алекс (102, Telegram). VM100 ZimaOS — stopped (не используется, заменён Docker-апками на 105).

🏗️ Полная карта с диаграммой — architecture.

Статус (2026-05-31)

Этап 1 почти закрыт. Тракт TG→openclaw→OmniRoute→Kiro-роутинг проверен (429 = достучались). Блокер: рабочая модель (новый Kiro троттлит → Олег подключает 2-й провайдер). Дальше: openclaw model=omniroute/* + fallback → тест «привет» в TG.