Files
knowledge-base/projects/dttb/ai-assistant-pilot/credentials.md
dttb a7fac84f6e Алекс (пилот): доступ к UniFi (Cloud Key→mongo) + печать на HP M775 (CUPS+IPP DNAT)
- alex-router.sh / alex-unifi.sh / alex-print.sh на коробке
- UniFi через Cudy→dbclient→mongo ace (API залочен SSO)
- печать CUPS Everywhere через DNAT Cudy 6310→148:631, персистентно nftables.d
- проверено в TG: Алекс сам зовёт инструменты

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 21:09:08 +03:00

131 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
date: 2026-05-31
type: project
tags: [ai-assistant, alexandr, umnybot, credentials, secrets, openclaw, omniroute]
status: active
---
# 🔐 AI-ассистент «umnybot» — инфра и креды (пилот Александра)
> ⚠️ **КОНФИДЕНЦИАЛЬНО.** Продукт «консьерж в коробке». См. [[PROMPT]] (тех-задание) и память `project_alexandr_assistant`.
> Все секреты также лежат на коробке в `/opt/assistant/.env` (chmod 600).
## Коробка (хост + контейнер)
| Параметр | Значение |
|---|---|
| Хост | Proxmox `pve` (pve-147), **10.0.0.147**, root / `1qaz!QAZ` |
| Контейнер | **LXC 102 «assistant»**, Debian 12, IP **10.0.0.163** |
| root LXC 102 | `j5DS1JSPKewKQw6i7mTK` (уникальный; Mac-ключ `ai@mac-20260112` в authorized_keys) |
| Стек | Docker (overlayfs) + Node 22; openclaw 2026.5.27; OmniRoute 3.8.7; Postgres16/pgvector |
| Доступ | `sshpass -p '1qaz!QAZ' ssh root@10.0.0.147``pct exec 102 -- bash` (или `ssh root@10.0.0.163` по Mac-ключу) |
## 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.ru``assistant@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.ru``codex8@umnybot.ru` (quota 512MB, real-боксы, не catch-all). Вебмейл https://mail.dttb.ru (логин любым `codexN@umnybot.ru` / пароль). Коды можно тянуть по IMAP `mail.dttb.ru:993`. ⚠️ OpenAI требует телефон при регистрации — реальный потолок числа аккаунтов.
## Аккаунты провайдеров
| Сервис | Логин | Заметка |
|---|---|---|
| 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` = yolo). Проверено в живом диалоге (TG): «какие точки wifi по комнатам» → Алекс сам зовёт `alex-unifi.sh`.
| Скрипт | Что делает |
|---|---|
| `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 |
### UniFi (Cloud Key Gen2+ `192.168.1.199`)
- Доступ: **SSH через Cudy**`DROPBEAR_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).
## NPM (reverse proxy)
| Параметр | Значение |
|---|---|
| Текущий | основной NPM **10.0.0.195** (it5870@yandex.ru/`1qaz!QAZ`): proxyhost **id30** `omni.umnybot.ru``10.0.0.163:20128`, cert **id115** (LE до 2026-08-29), websocket-upgrade вкл |
| План | перенести на **NPM коробки** (LXC 101 pve-147, 10.0.0.207) для автономности; ограничение — публичный 443 один на дом, при передаче коробки к клиенту его роутер сразу на NPM коробки |
## Статус (2026-05-31)
Этап 1 почти закрыт. Тракт TG→openclaw→OmniRoute→Kiro-роутинг проверен (429 = достучались). Блокер: рабочая модель (новый Kiro троттлит → Олег подключает 2-й провайдер). Дальше: openclaw model=omniroute/* + fallback → тест «привет» в TG.