umnybot: tg+rustdesk поддомены через основной NPM — DNS, Basic Auth ACL, LE-серты

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
dttb
2026-06-11 23:40:57 +03:00
parent a1e8fd4312
commit bf83c01324
131 changed files with 8271 additions and 3 deletions

View File

@@ -45,6 +45,71 @@ SSL-сертификат самоподписанный — браузер ру
### Failsafe / локальное восстановление
Если SSH-ключи потеряются и LuCI недоступен — нужен физический доступ к роутеру: failsafe-mode через reset-кнопку при загрузке, IP `192.168.1.1` (статика на ноуте) → telnet/web.
## UniFi Cloud Key Gen2 Plus (UCK G2 Plus) — `Benelyuks`
| Параметр | Значение |
|---|---|
| Hostname | `Benelyuks` |
| LAN IP | `192.168.1.199` |
| MAC | `70:a7:41:79:ef:29` |
| Модель | UCK G2 Plus (kernel `3.18.44-ui-qcom`, Qualcomm SoC) |
| Firmware | UnifiOS v5.0.12 |
| Network app | v10.0.162 |
| Logo | "Бенелюкс" |
| Cloud | `unifi.ui.com` (требует Ubiquiti SSO) |
| Adopted devices | USW-Pro-24-PoE, USW-Lite-16-PoE, USW-Lite-8-PoE, US-8-60W, U6-Pro21, ещё 2 на 70:a7:41:* |
| SSH | `root / OL260380eg!@` (включён через UI Control Plane → 2026-06-05) |
| Web UI | https://192.168.1.199 (только из LAN или через NetBird-туннель) |
### Как зайти через NetBird (для удалённого админства)
С Mac, два терминала:
```bash
# вкладка 1 (туннель в фоне, оставить висеть)
ssh -L 8443:192.168.1.199:443 -i ~/.ssh/id_ed25519 root@100.70.207.97 -N
# браузер
open https://localhost:8443
```
Для SSH на UCK — двухступенчатый туннель (ProxyJump через busybox-Cudy ломается по MTU):
```bash
ssh -fN -L 19999:192.168.1.199:22 -i ~/.ssh/id_ed25519 root@100.70.207.97
ssh -p 19999 root@localhost # пароль OL260380eg!@
```
### Известная проблема: NTP не работает
Провайдер «Умные сети» режет исходящий UDP/123 — UCK не может синхронизировать время через NTP-pool. После любого ребута часы остаются «вчерашними», cloud `unifi.ui.com` помечает консоль Offline (mutual-TLS keepalive отвергается как stale).
**Workaround**: после каждого ребута заходить SSH и выставлять время руками:
```bash
TARGET=$(date -u "+%Y-%m-%d %H:%M:%S")
ssh -p 19999 root@localhost "date -u -s '$TARGET'; hwclock -w"
```
**Долгосрочный фикс** (не сделан): включить NTP-сервер на Cudy (он сам сходится через openwrt pool за счёт того что 0.openwrt.pool.ntp.org разрешён dnsmasq) и в Network → System → NTP на UCK прописать `192.168.1.1` вместо публичного пула.
### Известная проблема: правила firewall ломают fw4 после ребута
В OpenWrt 24.10.3 / nftables v1.1.1 файлы в `/etc/nftables.d/*.nft` со старым синтаксисом (`chain xxx { type ... hook ... }`) **ломают весь fw4** — он не создаёт `forward`/`dstnat` chains, и LAN остаётся без интернета. См. [[../../decisions/2026-06-05-benelux-blackout-fw4-recovery]].
**Правило**: новые firewall-правила добавлять только через **UCI** (`uci add firewall rule/redirect/zone/forwarding`). Бот Алекс уже делает правильно — через `nft insert rule` runtime.
## Веб-доступ к сервисам коробки (через NPM Олега 10.0.0.195)
KasmVNC-приложения на ZimaOS (VM 100 pve-147, `10.0.0.190`), опубликованы 2026-06-11:
| URL | Backend | Защита |
|---|---|---|
| https://tg.umnybot.ru | 10.0.0.190:3000 (linuxserver-telegram) | Basic Auth |
| https://rustdesk.umnybot.ru | 10.0.0.190:3005 (linuxserver-rustdesk) | Basic Auth |
- **Basic Auth**: `alex` / `Umny-xck8TjTXBE` (NPM Access List `umnybot-kasm`, id 1) — у самих KasmVNC-контейнеров своей авторизации НЕТ, без ACL наружу не выставлять
- DNS: A-записи `tg`/`rustdesk``176.62.183.186` (Spaceweb)
- LE-серты NPM id 121/122, до 2026-09-09, авто-renew
- NPM самой коробки (LXC 101, `10.0.0.207:81`): `it5870@yandex.ru` / `1qaz!QAZ` — при переезде коробки к клиенту хосты продублировать туда
## Контекст
- См. [[README]] — общая схема объекта (Cudy + Unifi-сегмент)
- См. [[../../decisions/2026-05-20-benelux-compromise]] — история смены пароля и hardening после инцидента

View File

@@ -0,0 +1,133 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<style>
@page { size: A4; margin: 18mm 16mm 16mm 16mm; }
* { box-sizing: border-box; }
body {
font-family: -apple-system, "Helvetica Neue", "Segoe UI", Roboto, sans-serif;
color: #2f3a44; font-size: 10.7pt; line-height: 1.62; margin: 0;
-webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.doc-tag { font-size: 8.5pt; letter-spacing: .22em; text-transform: uppercase; color: #b08d57; font-weight: 600; }
h1 { font-size: 21pt; color: #243039; margin: 4px 0 2px; line-height: 1.18; font-weight: 700; letter-spacing: -.2px; }
.sub { color: #6a7681; font-size: 10.5pt; margin: 0 0 14px; }
.rule { height: 2px; background: linear-gradient(90deg, #b08d57 0%, #d8c39a 60%, #ffffff 100%); border: 0; margin: 12px 0 18px; }
h2 { font-size: 13.5pt; color: #243039; margin: 22px 0 8px; font-weight: 700; }
h2 .num { display: inline-block; width: 26px; height: 26px; line-height: 26px; text-align: center;
background: #243039; color: #fff; border-radius: 50%; font-size: 12pt; margin-right: 9px; vertical-align: -3px; }
p { margin: 7px 0; }
.lead { color: #3a464f; }
.nets { margin: 10px 0; padding: 0; list-style: none; }
.nets li { padding: 7px 0 7px 16px; border-left: 3px solid #b08d57; margin-bottom: 7px; background: #faf8f4; }
.nets b { color: #243039; }
.benefits { margin: 8px 0; padding: 0; list-style: none; }
.benefits li { margin: 6px 0; padding-left: 2px; }
.emo { font-size: 12pt; margin-right: 6px; }
.card { background: #f7f5f1; border: 1px solid #e7e0d3; border-radius: 8px; padding: 14px 18px; margin: 12px 0; }
.card h3 { margin: 2px 0 6px; font-size: 11.6pt; color: #243039; }
.muted { color: #6a7681; }
.price-box { border: 1.5px solid #b08d57; border-radius: 8px; padding: 4px 18px 10px; margin: 14px 0; background: #fffdf9; }
.price-box .ph { color: #b08d57; font-size: 9pt; letter-spacing: .14em; text-transform: uppercase; font-weight: 600; margin: 10px 0 2px; }
.price-row { display: flex; justify-content: space-between; align-items: baseline; padding: 8px 0; border-bottom: 1px dashed #e2d8c4; }
.price-row:last-child { border-bottom: 0; }
.price-row .name { font-weight: 600; color: #2f3a44; }
.price-row .name small { display:block; font-weight: 400; color: #828d96; font-size: 8.8pt; }
.price-row .val { font-weight: 700; color: #243039; white-space: nowrap; font-size: 11.4pt; }
.start { background: #eef3f0; border-left: 3px solid #4b8b6e; padding: 10px 14px; border-radius: 4px; margin: 14px 0; }
.cta { margin-top: 16px; padding-top: 12px; border-top: 1px solid #e7e0d3; }
.sign { margin-top: 14px; color: #2f3a44; }
.sign b { color: #243039; }
strong { color: #243039; }
</style>
</head>
<body>
<div class="doc-tag">Коммерческое предложение</div>
<h1>Безопасный Wi-Fi и «Умный домашний сервер»</h1>
<p class="sub">Подготовлено персонально для Александра</p>
<hr class="rule">
<p class="lead"><strong>Уважаемый Александр!</strong></p>
<p class="lead">Подготовил для вас предложение из двух частей: сначала — как сделать ваш Wi-Fi
безопаснее и удобнее, а затем коротко расскажу про умного помощника, который у вас уже начал работать.</p>
<h2><span class="num">1</span>Три отдельных Wi-Fi вместо одного</h2>
<p>Сейчас вы, ваши гости и персонал заходите в <strong>один</strong> Wi-Fi с одним паролем.
Это значит, что любой, кому вы дали пароль, попадает в ту же сеть, где ваши камеры,
умный дом, компьютеры и охрана — технически он их «видит».</p>
<p>Предлагаю аккуратно разделить на <strong>три отдельных Wi-Fi:</strong></p>
<ul class="nets">
<li><b>Ваш (хозяйский)</b> — полный доступ ко всему, как сейчас.</li>
<li><b>Для персонала</b> — только интернет, без доступа к вашим устройствам и дому.</li>
<li><b>Для гостей</b> — только интернет, со своим паролем, который меняется за секунду.</li>
</ul>
<p><strong>Что это даёт:</strong></p>
<ul class="benefits">
<li><span class="emo">🔒</span><strong>Безопасность.</strong> Чужой или заражённый телефон больше не дотянется до ваших камер, умного дома и личных компьютеров.</li>
<li><span class="emo">😌</span><strong>Удобство.</strong> Гостям — отдельный простой пароль, не нужно давать ваш главный.</li>
<li><span class="emo">🎛</span><strong>Контроль.</strong> Сменили пароль гостям, когда захотели — ваш и персонала не трогая.</li>
</ul>
<p class="muted">Ваш дом, умный дом и охрана продолжат работать как прежде — ничего не ломаем,
всё делается без отключения дома.</p>
<h2><span class="num">2</span>«Умный домашний сервер» — консьерж и личное облако в одной коробке</h2>
<p>Отдельно хочу показать то, что у вас <strong>уже начало работать</strong>. Это небольшое устройство
у вас дома, которое объединяет двух помощников:</p>
<div class="card">
<h3>🧠 Консьерж «Алекс»</h3>
<p style="margin:4px 0">Умный ассистент прямо в Telegram. Вы пишете обычными словами — он понимает и делает:</p>
<ul class="benefits" style="margin:4px 0">
<li>«Какой Wi-Fi в гостиной?», «Кто сейчас в гостевой сети?» — ответит понятным языком.</li>
<li>«Смени пароль для гостей», «Перезапусти интернет» — сделает <strong>только после вашего подтверждения</strong>, нажатием кнопки.</li>
<li>«Распечатай документ», «Всё ли в порядке с сетью?» — поможет и присмотрит за безопасностью, предупредит, если что-то не так.</li>
</ul>
</div>
<div class="card">
<h3>☁️ Личное облако</h3>
<p style="margin:4px 0">Ваше собственное хранилище для документов, фотографий и важных файлов:</p>
<ul class="benefits" style="margin:4px 0">
<li>Всё хранится <strong>у вас дома</strong>, а не в чужом облаке за границей.</li>
<li>«Найди договор», «Сколько места осталось?» — Алекс найдёт и подскажет.</li>
<li>Доступ можно открыть семье.</li>
</ul>
</div>
<p><strong>Чем хорош формат «в коробке»:</strong> всё своё, дома, приватно, и один понятный
помощник ко всему — без приложений, настроек и техники. Просто пишете в Telegram.</p>
<div class="start">
<strong>Это только начало.</strong> Сейчас «Алекс» работает у вас в тестовом режиме — это самый старт
проекта, можно попробовать вживую. Если понравится, развиваем дальше: подключение камер и умного дома
к голосу, семейные сценарии, напоминания — по вашим пожеланиям.
</div>
<div class="price-box">
<div class="ph">При желании — сервер можно приобрести в собственность</div>
<div class="price-row">
<div class="name">Сервер «под ключ»<small>разово, зависит от объёма хранилища</small></div>
<div class="val">от 35 000 ₽</div>
</div>
<div class="price-row">
<div class="name">Обслуживание и безопасность<small>присмотр за безопасностью, обновления, резервные копии, приоритетная поддержка</small></div>
<div class="val">2 900 ₽/мес</div>
</div>
<div class="price-row">
<div class="name">Либо — без ежемесячной платы<small>поддержка по отдельным обращениям, когда понадобится</small></div>
<div class="val">по запросу</div>
</div>
</div>
<div class="cta">
<p><strong>Предлагаю созвониться или встретиться</strong> — покажу «Алекса» вживую и подберём
удобное время для настройки Wi-Fi. Всё займёт недолго.</p>
<div class="sign">С уважением,<br><b>Олег</b></div>
</div>
</body>
</html>

View File

@@ -65,8 +65,9 @@ aliases: [КП Александр, Умный домашний сервер, п
При желании **сервер можно приобрести в собственность** с абонентским обслуживанием — это поддержка, обновления и постоянный присмотр за безопасностью вашей сети.
- Сервер (устройство «под ключ»): **[указать стоимость]**
- Абонентское обслуживание: **[указать ₽/мес — поддержка, обновления, мониторинг безопасности]**
- **Сервер «под ключ»: от 35 000 ₽** — разово, зависит от объёма хранилища.
- **Обслуживание и безопасность: 2 900 ₽/мес** (или 29 000 ₽/год — два месяца в подарок): круглосуточный присмотр за безопасностью сети, обновления, резервные копии, приоритетная поддержка и работа консьержа «Алекс».
- Либо **без ежемесячной платы** — поддержка по отдельным обращениям, когда понадобится.
---
@@ -79,7 +80,7 @@ aliases: [КП Александр, Умный домашний сервер, п
## Заметки для Олега (не для клиента)
- **Заполнить цены** до отправки: стоимость коробки + абонплата/мес. Не выдумывал — твоё решение.
- **Цены проставлены** (рекомендация 2026-06-01): коробка от 35 000 ₽; обслуживание 2 900 ₽/мес ИЛИ поддержка по запросу. Абонплату позиционируем как «безопасность+спокойствие», не «аренда ИИ» (затраты на ИИ для 1 дома — копейки). Меняются в одну правку.
- **Последовательность реализации:** согласие Александра → мы внедряем сегментацию (Cudy + UniFi, операция на 139 устройствах — делаем мы, не бот) → учим Алекса управлять гостевой сетью (сменить PSK, список клиентов, статус — инструменты с кнопкой подтверждения, как `alex-fix`).
- **Что в пилоте реально готово** (можно показывать без стеснения): TG-консьерж, управление UniFi/роутером/печатью, security-watchdog с алертами, ZimaOS-NAS (поиск/место/список). Веб-дашборд `alex.umnybot.ru` — отложен.
- **Название:** «Умный домашний сервер» (твоё). Альтернативы для размышления: «Домашний ИИ-сервер», «Умная коробка», бренд по домену — `Umnybot Home`.

Binary file not shown.