291 Commits

Author SHA1 Message Date
ede8e5f4d0 code-server auto-sync 2026-06-28T06:05:01+00:00 2026-06-28 06:05:01 +00:00
73ea32fa72 code-server auto-sync 2026-06-28T00:05:02+00:00 2026-06-28 00:05:02 +00:00
root
3298ebfe71 auto-backup claude-memory 2026-06-28_00:00 2026-06-28 00:00:46 +00:00
ea66be0c84 code-server auto-sync 2026-06-27T23:05:01+00:00 2026-06-27 23:05:01 +00:00
dttb
4d92eaca2e Merge branch 'main' of https://git.dttb.ru/oleg/knowledge-base 2026-06-28 02:01:02 +03:00
dttb
3f71986097 NPM: диск LXC 103 вырос 8G->16G; заметка про thin-пул 94.91%
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 02:01:01 +03:00
dcbd18f7f9 code-server auto-sync 2026-06-27T22:55:01+00:00 2026-06-27 22:55:01 +00:00
dttb
658049ef50 Merge branch 'main' of https://git.dttb.ru/oleg/knowledge-base 2026-06-28 01:54:36 +03:00
dttb
42d1b4ad85 NPM: troubleshooting disk-full LXC 103 (git push 500), защита логов
Корень падения git push по HTTPS: диск NPM 100% забит логами host-22
(trust_forwarded_proto warning флуд). Truncate + cron npm-log-cap (>200M).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 01:54:23 +03:00
8f1b609e56 code-server auto-sync 2026-06-27T22:50:02+00:00 2026-06-27 22:50:02 +00:00
dttb
ddb904ca21 Merge branch 'main' of https://git.dttb.ru/oleg/knowledge-base 2026-06-28 01:43:39 +03:00
dttb
58fd3fa17a mailcow dttb: спам-фикс, SSL, апдейт 2026-05c, BIMI+подпись, Roundcube, сбор почты
- фикс входящего спама: No-SNAT на OpenWrt (видел все письма как 10.0.0.1)
- SSL mail-портов: cert из NPM + cron-синхрон на Proxmox
- апдейт mailcow 2026-01 -> 2026-05c; урок: forward-zone unbound обязателен (RKN режет рекурсию)
- логотип UI, BIMI-SVG (Tiny PS) + хостинг, HTML-подпись
- Roundcube на /rc (bind-mount, public_html)
- внешний сбор почты Яндексом (IMAP/POP3)
- snippets: sync-mailcow-cert.sh, dttb-mail-branding/

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 01:43:19 +03:00
01036fe2d9 code-server auto-sync 2026-06-27T19:15:02+00:00 2026-06-27 19:15:02 +00:00
dttb
b7bd90ae87 Homepage: группа 'OpenWrt роутеры' (все 10) + Sergey/Lipki остаются в Клиентах
- workflow-скан vault → 10 OpenWrt-роутеров, ping по NetBird (7 UP, 3 down: Olivier/Переделки/Красногорск)
- Sergey/Lipki = клиенты с подкопом, дублируются в обеих группах (правка Олега)
- итого 8 групп / 45 сервисов

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 22:12:11 +03:00
29842b2806 code-server auto-sync 2026-06-26T21:50:02+00:00 2026-06-26 21:50:02 +00:00
dttb
ead03fcf9f Homepage 2-я итерация: glances хоста, доска клиентов (NetBird), закладки, watchdog
- группа 'Хост Proxmox': 6 glances-виджетов (CPU/RAM/темпы/диски/сеть) с pve-хоста :61208
- LXC 145 в NetBird 100.70.113.28 → доска клиентов (ping НИИКН/ММФБ/Бужарово/Знаменское/Главторг/Sergey/Lipki)
- bookmarks.yaml (NetBird/Spaceweb/Hostkey/claude.ai usage)
- netbird-watchdog */5; находка: jobs.cfg пуст (нет бэкапов) — отдельная задача

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 00:49:50 +03:00
0f2f005f38 code-server auto-sync 2026-06-26T21:35:01+00:00 2026-06-26 21:35:01 +00:00
dttb
4010fbd235 Homepage: перенос на 10.0.0.148 — был конфликт IP на .145 (502/refused)
.145 оказался занят чужим устройством (MAC ac:ba:c0:39:82:64): pve резолвил в контейнер,
а NPM и NetBird-клиенты — в чужого → 502 на dash.dttb.ru. Перенесли на свободный .148
(проверено ARP), NPM forward_host обновлён, HOMEPAGE_ALLOWED_HOSTS поправлен.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 00:32:48 +03:00
67002f5dc2 code-server auto-sync 2026-06-26T21:25:02+00:00 2026-06-26 21:25:02 +00:00
dttb
3fe379f12c Homepage дашборд на dash.dttb.ru (LXC 145): live-виджеты Proxmox/NPM/Gitea/NC, Basic Auth
- LXC 145 homepage, Docker, 22 сервиса в 5 группах
- read-only доступы: PVEAuditor токен, Gitea PAT, NC app-password
- грабли: docker.io SNI-блок РКН (зеркало Яндекса), split-DNS hosts, NPM+authentik forward-auth
- authentik forward-auth отложен (localhost в authorize) → пока NPM Basic Auth

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 00:23:13 +03:00
9c11b205ec code-server auto-sync 2026-06-26T16:20:02+00:00 2026-06-26 16:20:02 +00:00
dttb
d39ddb989d authentik SSO/IdP на auth.dttb.ru (LXC 144): пилот OIDC Open WebUI+Gitea, обязательная 2FA
- LXC 144 Debian12/Docker, server+worker+postgres (2026.5.3, без Redis)
- NPM #41 auth.dttb.ru, LE cert id133, публичная A-запись Spaceweb
- OIDC: Open WebUI (chat) + Gitea (git, ROOT_URL→https)
- 2FA обязательна на IdP (TOTP/WebAuthn force-enroll)
- принцип «2FA через нужную дверь» (OIDC, не forward-auth)
- критичную инфру не трогали; остался ручной enrollment Олега

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 19:17:10 +03:00
15ecf46a4a code-server auto-sync 2026-06-26T14:20:02+00:00 2026-06-26 14:20:02 +00:00
dttb
12705f148f German: веб-дашборд Hermes на german.dttb.ru (NPM #40, LE id130)
Подняли родную панель hermes dashboard на LXC 141 за NPM с basic_auth.
Грабля: флаг --insecure отключает cookie-gate (включает легаси _SESSION_TOKEN)
→ login ok, но всё внутри 401. Фикс: бинд 0.0.0.0 БЕЗ --insecure.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 17:15:32 +03:00
dttb
14249577bc Бенелюкс: сторож восстановления обхода (Этап 1) — мониторинг+автолечение на LXC137, боевой тест пройден 2026-06-26 17:15:32 +03:00
80a93d6355 auto-sync from MEMORY.md (2026-06-25 15:57) 2026-06-25 15:57:57 +00:00
ad553f55f9 code-server auto-sync 2026-06-25T15:30:02+00:00 2026-06-25 15:30:02 +00:00
36ab747d3d code-server auto-sync 2026-06-25T15:25:02+00:00 2026-06-25 15:25:02 +00:00
0fa253e614 code-server auto-sync 2026-06-25T14:40:02+00:00 2026-06-25 14:40:02 +00:00
0e17414dae НИИКН: ПК DESKTOP-35C8VMI — владелец Настя (научный сотрудник) 2026-06-25 14:30:30 +00:00
87f6da4edb НИИКН: онбординг нового ПК DESKTOP-35C8VMI (NetBird 100.70.250.72 + RustDesk 132920982); привязка к аккаунту — TODO 2026-06-25 14:29:29 +00:00
8736841c52 netbird-claude-install: обновлён setup-key (истёк 2026-05-21 → новый до 2026-07-25) 2026-06-25 14:08:32 +00:00
4007be2fd6 code-server auto-sync 2026-06-25T14:00:02+00:00 2026-06-25 14:00:02 +00:00
4385db3b8a auto-sync from MEMORY.md (2026-06-24 11:47) 2026-06-24 11:47:40 +00:00
f4ef7e485a code-server auto-sync 2026-06-23T20:15:02+00:00 2026-06-23 20:15:02 +00:00
dttb
f86e6df508 Бужарово TR3000: грабля LuCI awg0 'Unsupported' = нет uqr.js (зависимость luci-proto-amneziawg при ручном переносе)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 23:13:26 +03:00
4089e60259 code-server auto-sync 2026-06-23T19:40:01+00:00 2026-06-23 19:40:01 +00:00
dttb
60644c4e57 Бужарово TR3000: LAN проверен — пул .100-.238, IPv6 на LAN отключён (анти-утечка FakeIP)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 22:37:01 +03:00
1a8041398c code-server auto-sync 2026-06-23T19:35:01+00:00 2026-06-23 19:35:01 +00:00
dttb
82a4f311bc Бужарово TR3000: чеклист установки на объекте + источник amneziawg-пакетов (домашний роутер)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 22:33:50 +03:00
0a530ad82e code-server auto-sync 2026-06-23T19:00:01+00:00 2026-06-23 19:00:01 +00:00
dttb
866c393dad Бужарово TR3000-шлюз: статик-лизы Server1C+кассы, проброс RDP 3389, миграция настроек со старого WR6500H
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 21:58:47 +03:00
dttb
67c28bb27d podkop-reference: iPhone «видео стопорится» = Ограничение отслеживания IP
Уточнил граблю «клиент обходит DNS роутера»: на iPhone первым делом выключать
Wi-Fi → Ограничение отслеживания IP-адреса (default-on в iOS, шифрованный DNS
мимо роутера, бьёт приложения, не только Safari). Дом 2026-06-23: iPhone
Надежды, Instagram-видео «играет и стопорится» при здоровом туннеле — лечилось
этим, не роутером.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 21:58:47 +03:00
731c23c8cf code-server auto-sync 2026-06-23T17:20:02+00:00 2026-06-23 17:20:02 +00:00
dttb
81833de405 Бужарово роутер: веб-терминал LuCI (ttyd) — url_override на NetBird-IP
ttyd writable и работает, но окно терминала было «не активно»: LuCI открывали
на 192.168.1.1, а этот адрес коллизит с НИИКН/Переделки в NetBird → iframe
терминала на 192.168.1.1:7681 уходил не туда. Фикс: url_override=
http://100.70.113.251:7681 (стабильный NetBird-IP). Рекомендация — открывать
роутер по NetBird-IP, а не 192.168.1.1.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 20:17:02 +03:00
c948083691 code-server auto-sync 2026-06-23T17:10:02+00:00 2026-06-23 17:10:02 +00:00
dttb
ae23321d10 Бужарово роутер: переименован Severny-Les, подключён к NetBird
- hostname Severni_Les → Severny-Les (корректная латиница).
- NetBird: 100.70.113.251 (severny-les-113-251.netbird.cloud), Claude-Diag,
  --disable-dns; firewall-зона nbird (wt0: input ACCEPT, forward REJECT) —
  без неё SSH на NetBird-IP = refused. Прямой доступ ssh root@100.70.113.251.
- Также зафиксирован фикс DoH: dns_server=1.1.1.1/dns-query (без https://,
  иначе баг парсера диагностики podkop) — из прошлой правки.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 20:06:37 +03:00
ba34434f2b code-server auto-sync 2026-06-23T16:50:02+00:00 2026-06-23 16:50:02 +00:00
dttb
0c957bfa34 Бужарово podkop: DoH по IP (1.1.1.1/dns-query) вместо хостнейма dns.google
Диагностика podkop краснела на «Основной DNS»: при dns_server=8.8.8.8 podkop
подставляет каноничный DoH-URL https://dns.google/dns-query (хостнейм), а его
надо резолвить через bootstrap по :53 — за домашним хайджеком хрупко. Фикс:
dns_server='https://1.1.1.1/dns-query' (url_get_host=IP → bootstrap не нужен,
sing-box стучит прямо на 1.1.1.1:443). Диагностика зелёная, обход стабилен.
Поправлены podkop-router.md, podkop-reference §5 и §9.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 19:46:06 +03:00
8e411df486 code-server auto-sync 2026-06-23T16:40:02+00:00 2026-06-23 16:40:02 +00:00
dttb
c9b1d73bde Бужарово: podkop-роутер Severni Les (Cudy TR3000) — заработал на DoH
- Новый роутер обхода для стройрынка: Финляндия awg0, podkop 0.7.19, lists meta/youtube/telegram.
- Корень «обход не работал» (telegram/youtube 000 при живом туннеле): роутер стоит
  WAN'ом за домашним catch-all :53-хайджеком → восходящий резолв sing-box перехватывался,
  возвращался домашний FakeIP → sing-box звонил на FakeIP → timeout. Фикс: dns_type=doh
  (резолвер по 443 минует :53-хайджек). Версия sing-box / dns_server были ни при чём.
- Также: download_lists_via_proxy=1/main (rule-set'ы через туннель.
- podkop-reference §5: добавлена грабля «podkop за чужим DNS-хайджеком → DoH»;
  §9 inventory: добавлен Severni Les, HomeLab обновлён на awg2.
- Новый файл projects/buzharovo/podkop-router.md + линк из README.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
MSG
)
2026-06-23 19:38:02 +03:00
f6bae7cbac code-server auto-sync 2026-06-23T15:55:02+00:00 2026-06-23 15:55:02 +00:00
dttb
3d71b56ae3 Домашний роутер: awg2 (Финляндия) рабочий — корень был rp_filter, не протокол
- Корень «awg2 не ходил»: строгий rp_filter=1 на интерфейсе дропал transport
  из туннеля (handshake жив, транзит 0%). awg0 работал на rp_filter=2 (loose).
  При заведении финского awg2 строка rp_filter=2 не была добавлена (для awg0 была).
- Фикс на роутере: net.ipv4.conf.awg2.rp_filter=2 в /etc/sysctl.conf
  + hotplug 99-awg-rpfilter (loose на все awg* при ifup). podkop → awg2.
- podkop-reference §5: добавлена грабля rp_filter (handshake-есть-транзита-нет).
- Снято неверное «awg2 сломан / OpenWrt не тянет AWG 1.5» — сервер/протокол исправны.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 18:50:55 +03:00
9fb19f4122 code-server auto-sync 2026-06-23T11:00:02+00:00 2026-06-23 11:00:02 +00:00
dttb
098b1fe421 manual sync 2026-06-23 13:58:02 +03:00
dttb
b8bef27825 Хардинг финского VPS: SSH key-only (awg-fi), ufw 22+41624, fail2ban; панель переведена на ключ
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 13:56:51 +03:00
984ae0b008 code-server auto-sync 2026-06-23T10:45:01+00:00 2026-06-23 10:45:01 +00:00
dttb
80c86871f8 Amnezia panel: финский VPS (AWG2, port 41624) заведён в панель — адаптация app-установки + клиент Олега виден
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 13:44:49 +03:00
0dd8099154 code-server auto-sync 2026-06-23T10:15:01+00:00 2026-06-23 10:15:01 +00:00
dttb
a63b4476eb Amnezia Web Panel: LXC 143 — control-plane VPN-нод (NetBird-only), HOSTKEY Finland хаб; persistence data.json через bind-mount
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 13:00:25 +03:00
01930b0fbf code-server auto-sync 2026-06-22T12:05:02+00:00 2026-06-22 12:05:02 +00:00
dttb
9c7c3fc23e Решение: podkop для Бужарово — Cudy TR3000 во главе (Вариант B), WR6500H→AP; роутер опознан, разведка + миграция
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 15:01:36 +03:00
d6df733d08 code-server auto-sync 2026-06-22T03:10:02+00:00 2026-06-22 03:10:02 +00:00
dttb
0b4a87c1f0 Open WebUI: способности — веб-поиск, code interpreter, RAG по базе (193 файла, cron-синк) + модель «Ассистент Олега»
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 06:07:54 +03:00
bac7a0992d code-server auto-sync 2026-06-22T02:20:01+00:00 2026-06-22 02:20:01 +00:00
dttb
993bc95f05 Open WebUI: дефолт cc/claude-opus-4-8 + фикс 0 моделей (ключ OmniRoute = пустой)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 05:19:04 +03:00
0da0350341 code-server auto-sync 2026-06-22T02:05:02+00:00 2026-06-22 02:05:02 +00:00
dttb
96d16306ca Open WebUI на home lab: LXC 142 → chat.dttb.ru поверх OmniRoute (NPM id39, LE id129)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 05:00:27 +03:00
2f1b26501f code-server auto-sync 2026-06-22T00:05:01+00:00 2026-06-22 00:05:01 +00:00
root
4d856ced85 auto-backup claude-memory 2026-06-22_00:00 2026-06-22 00:00:46 +00:00
d9b01031e0 code-server auto-sync 2026-06-21T21:45:02+00:00 2026-06-21 21:45:02 +00:00
dttb
e5084e8d1c Принтер Александра: IP сменился .148→.147 (DHCP), CUPS перенацелен напрямую, IP зафиксированы; принтер чинён 2026-06-21 2026-06-22 00:44:30 +03:00
3d53a8db09 code-server auto-sync 2026-06-21T21:40:02+00:00 2026-06-21 21:40:02 +00:00
dttb
742e44bf18 podkop: грабля 'роутер ходит, LAN-клиенты нет' (залип FakeIP/tproxy форварда) — Бенелюкс 2026-06-21, висли агенты swarmclaw; фикс = restart podkop+cache 2026-06-22 00:39:16 +03:00
b7bf217f94 code-server auto-sync 2026-06-21T21:25:01+00:00 2026-06-21 21:25:01 +00:00
dttb
026c69e061 German: api_max_retries 6→1 + fallback cx/gpt-5.5 первым (фикс 9-мин зависаний при капе Max); OmniRoute 3.8.29 + чистка db_backups 2026-06-22 00:24:46 +03:00
4e0d14a20f code-server auto-sync 2026-06-21T06:05:01+00:00 2026-06-21 06:05:01 +00:00
de012fc782 code-server auto-sync 2026-06-20T16:20:02+00:00 2026-06-20 16:20:02 +00:00
dttb
2ab09babeb German Hermes: handoff по 400 out-of-usage (cc/* OmniRoute) — корень=маршрутизация ключа на перегруженный аккаунт + burst-пики Max; фиксы (привязка к batlaew + retry-патч) и что осталось (Extra usage/разгрузка SwarmClaw)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 19:19:59 +03:00
6a694e0d86 code-server auto-sync 2026-06-20T12:25:02+00:00 2026-06-20 12:25:02 +00:00
dttb
1d607b2cae Свежий бэклог открытых задач (авто-скан decisions+projects+память) — точка входа для Cowork
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 15:22:06 +03:00
bc5772805d code-server auto-sync 2026-06-19T12:05:01+00:00 2026-06-19 12:05:01 +00:00
root
459293567e auto-backup claude-memory 2026-06-19_12:00 2026-06-19 12:00:45 +00:00
358640fe2b code-server auto-sync 2026-06-19T11:00:02+00:00 2026-06-19 11:00:02 +00:00
dttb
d05eb4d647 German fallback → cc/sonnet-4-6 → cx/gpt-5.5 (Kiro-креды в OmniRoute сдохли); пометка про kr/* в omniroute 2026-06-19 13:55:54 +03:00
a926949c9f code-server auto-sync 2026-06-18T20:40:01+00:00 2026-06-18 20:40:01 +00:00
dttb
b1f6c50651 pve-147: VM 100 ZimaOS удалена (qm destroy, ~83G освобождено); German доступ на LXC102; пароль pve исправлен (1qaz!QAZ, j5DS мёртв) 2026-06-18 23:39:34 +03:00
7177efcf3e code-server auto-sync 2026-06-18T20:10:01+00:00 2026-06-18 20:10:01 +00:00
dttb
857009616b Бенелюкс: добавлен SSH-ключ ассистента German (LXC 141) на Cudy 2026-06-18 23:07:34 +03:00
b1eb62e2a1 code-server auto-sync 2026-06-18T19:55:01+00:00 2026-06-18 19:55:01 +00:00
dttb
38d7b1a168 German: вернул Opus 4.8 (400 был транзиентным окном Max, не лимитом — проверено curl) 2026-06-18 22:54:05 +03:00
77f5403eb7 code-server auto-sync 2026-06-18T19:50:02+00:00 2026-06-18 19:50:02 +00:00
dttb
4ff5e73142 German: подключён к NetBird (100.70.99.82, Claude-Diag); apt-репо вместо GitHub install.sh + --disable-dns 2026-06-18 22:49:57 +03:00
25ffa0b416 code-server auto-sync 2026-06-18T19:25:02+00:00 2026-06-18 19:25:02 +00:00
dttb
055b3fe35c German: primary на kr/sonnet-4.5 (cc/opus Max флапает 400, fallback не ловит); фикс задвоения Telegram 2026-06-18 22:22:34 +03:00
ed66833563 code-server auto-sync 2026-06-18T19:15:02+00:00 2026-06-18 19:15:02 +00:00
dttb
125564d055 German: модель → kr/claude-sonnet-4.5 (Max-квота cc/opus исчерпана); live раунд-трип подтверждён
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 22:14:26 +03:00
a44c582751 code-server auto-sync 2026-06-18T19:10:01+00:00 2026-06-18 19:10:01 +00:00
dttb
55bf07a266 German: Hermes Agent личный ассистент Олега на LXC 141 (Telegram + KB-доступ)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 22:09:09 +03:00
876adcd7c2 code-server auto-sync 2026-06-18T10:50:02+00:00 2026-06-18 10:50:02 +00:00
Александр Батлаев
ff481ccf62 podkop: агент-runbook для автономного обхода блокировок (миссия+доступ+триаж+инвентарь)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 13:48:01 +03:00
aa281683d5 code-server auto-sync 2026-06-17T19:10:01+00:00 2026-06-17 19:10:01 +00:00
dttb
c65d2409fe Александр: pve.umnybot.ru публично за Basic Auth (Proxmox UI), доки обновлены 2026-06-17 22:08:10 +03:00
93f585039c code-server auto-sync 2026-06-17T18:35:02+00:00 2026-06-17 18:35:02 +00:00
dttb
cc72a71c7d Александр: финал публичного доступа (только umnybot.ru→SwarmClaw) + полная architecture.md с диаграммой 2026-06-17 21:31:52 +03:00
9b78dcf5a1 code-server auto-sync 2026-06-17T18:30:02+00:00 2026-06-17 18:30:02 +00:00
dttb
0bb13ae6b6 Александр: чистка VPS NPM — убраны 8 ZimaOS-доменов + публичные cloud/alex; осталось umnybot.ru(swarm)+omni 2026-06-17 21:26:49 +03:00
0284916a65 code-server auto-sync 2026-06-17T18:15:02+00:00 2026-06-17 18:15:02 +00:00
dttb
010f44f34f Александр: umnybot.ru (корень) -> SwarmClaw публично через VPS+NetBird 2026-06-17 21:10:58 +03:00
92b8e360cc code-server auto-sync 2026-06-17T18:10:02+00:00 2026-06-17 18:10:02 +00:00
dttb
8eb1915617 Александр: публичный доступ через VPS-шлюз+NetBird (WAN динамический); cloud/alex наружу, NetBird на NPM коробки 2026-06-17 21:05:48 +03:00
927921679a code-server auto-sync 2026-06-17T16:15:02+00:00 2026-06-17 16:15:02 +00:00
dttb
25ca390669 Антошка-сторож: переписан под переезд коробки (LXC137→NetBird→LXC102) 2026-06-17 19:12:07 +03:00
32660e227e code-server auto-sync 2026-06-17T16:00:02+00:00 2026-06-17 16:00:02 +00:00
dttb
f361f7bd6e коробка Александра 2026-06-17: автономизация (NPM бэкенды, удалён maxcc, gitea scrub) + ZimaOS заблокирован VT-x/CMOS 2026-06-17 18:56:51 +03:00
c9273c1b4c code-server auto-sync 2026-06-17T14:45:02+00:00 2026-06-17 14:45:02 +00:00
dttb
1444b3ad00 niikn: диагноз лагов WiFi — деградация powerline-бэкбона Deco P9 (root .124 ОК, сателлиты 5-15% потерь) 2026-06-17 17:44:53 +03:00
5ab587adab code-server auto-sync 2026-06-17T13:25:02+00:00 2026-06-17 13:25:02 +00:00
dttb
decb126195 коробка Александра: переезд pve-147 на сеть 192.168.1.0/24 (хост .247 static+резерв, контейнеры DHCP) 2026-06-17 16:22:53 +03:00
427fa0a2aa code-server auto-sync 2026-06-17T12:50:01+00:00 2026-06-17 12:50:01 +00:00
dttb
b3f0c50adb podkop: Benelux обход проверен (TG/WA ОК); грабли download_lists_via_proxy=1 ломает sing-box + фикс list_update через github в обход 2026-06-17 15:48:57 +03:00
179ae00297 code-server auto-sync 2026-06-16T20:35:01+00:00 2026-06-16 20:35:01 +00:00
dttb
dccf3c7ace openwrt-4/Оливье: статус конца сессии 2026-06-03 — роутер недоступен, гео-вердикт (5/6 FR), ExpressVPN kill-switch + policy-route приставки, открытые пункты
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:43:41 +03:00
309d75e5c7 code-server auto-sync 2026-06-15T13:20:01+00:00 2026-06-15 13:20:01 +00:00
dttb
35d58a687a unifi: adoption свитча+U7-LR; фикс system_ip override + DNS unifi, host-mode откатан
- U7-LR не виделся = битый порт 5 свитча (PoE есть, линк down) -> порт 8
- stuck 'Принятие' = Docker bridge отдавал внутренний IP -> system_ip=10.0.0.196
- DNS unifi->10.0.0.196 на OpenWrt для автообнаружения
- host networking сломал mongo-URI кэш + автодетект IP, откатан на bridge
- USG физически не в сети (0 следов в БД)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-15 16:18:31 +03:00
28b136cc8b code-server auto-sync 2026-06-15T10:30:01+00:00 2026-06-15 10:30:01 +00:00
dttb
51dcea50b2 unifi: контроллер UniFi на LXC 140 (10.0.0.196) + домен unifi.dttb.ru
- Docker-стек mongo:4.4 + linuxserver/unifi-network-application
- MongoDB 4.4 принудительно: хост Xeon X5672 без AVX, 5.0+ падает Illegal instruction
- образ с docker.io (ghcr.io виснет из РФ), rootfs на work (local-lvm 90%)
- NPM #36 + Let's Encrypt (DNS через Spaceweb, один editMain add)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-15 13:29:13 +03:00
a84a9a5b50 code-server auto-sync 2026-06-14T06:05:01+00:00 2026-06-14 06:05:01 +00:00
0751392caf code-server auto-sync 2026-06-12T18:05:01+00:00 2026-06-12 18:05:01 +00:00
dttb
79e1c2aef5 swarmclaw: drag&drop откачен (не доехал), Дирижёру вернул manage_platform (создание агентов снова работает)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 21:00:35 +03:00
8bf6fb730c code-server auto-sync 2026-06-11T23:40:02+00:00 2026-06-11 23:40:02 +00:00
dttb
c5522790c5 swarmclaw: ACCESS_KEY сменён на стандартный пароль Олега (вход swarm.dttb.ru)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 02:35:21 +03:00
ca11cfda98 code-server auto-sync 2026-06-11T22:40:02+00:00 2026-06-11 22:40:02 +00:00
dttb
bc7b7223a9 swarmclaw: drag&drop картинок в чат (патч chat-input.tsx + dragdrop.patch для re-apply), vision-канал проверен
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 01:38:32 +03:00
1faa21eede code-server auto-sync 2026-06-11T21:50:01+00:00 2026-06-11 21:50:01 +00:00
dttb
1afaab27e6 swarmclaw: настоящий корень тесноты контекста = жирные схемы 24 tools (33K/запрос); урезка до 9 = 3K (x11)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 00:47:19 +03:00
55d6d4f61e code-server auto-sync 2026-06-11T21:40:02+00:00 2026-06-11 21:40:02 +00:00
dttb
dcf0ba6308 swarmclaw: фикс окна контекста агента (8192 fallback -> 200K патч), claude-cli не нужен
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 00:36:06 +03:00
a0be4f33e5 code-server auto-sync 2026-06-11T21:00:01+00:00 2026-06-11 21:00:01 +00:00
dttb
72d92daabe umnybot: Basic Auth пароль для tg/rustdesk сменён на выбранный Олегом
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 23:56:07 +03:00
12f6ceb60e code-server auto-sync 2026-06-11T20:45:02+00:00 2026-06-11 20:45:02 +00:00
dttb
bf83c01324 umnybot: tg+rustdesk поддомены через основной NPM — DNS, Basic Auth ACL, LE-серты
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 23:41:07 +03:00
a1e8fd4312 code-server auto-sync 2026-06-11T15:25:02+00:00 2026-06-11 15:25:02 +00:00
dttb
0230894e49 niikn: Опыт финально в RAR5 — независимые N-NNN.rar + тома partN.rar для гигантов; уроки про zip UTF-8 флаг 2026-06-11 18:23:04 +03:00
6e87be6e00 code-server auto-sync 2026-06-11T14:25:02+00:00 2026-06-11 14:25:02 +00:00
dttb
60713ff7a6 niikn: Опыт перепакован v2 — независимые zip ≤95МБ, тома только для 278 файлов-гигантов 2026-06-11 17:20:45 +03:00
437ba231ad code-server auto-sync 2026-06-11T08:50:02+00:00 2026-06-11 08:50:02 +00:00
dttb
e8b73d375a niikn: папка Опыт (Закупка Соловки) нарезана в тома до 100 МБ, ссылка kqH46Jrjnb4ri3q 2026-06-11 11:46:02 +03:00
564d73418a code-server auto-sync 2026-06-10T09:40:01+00:00 2026-06-10 09:40:01 +00:00
dttb
b93af4b175 swarmclaw: openclaw-управление агентом — tools openclaw_nodes/workspace включены, грабля gatewayProfileId (ломает chat)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 12:36:41 +03:00
b593bbc52d code-server auto-sync 2026-06-10T08:55:02+00:00 2026-06-10 08:55:02 +00:00
dttb
922c7dc27e netbird: сохранён полный reusable setup-key для swarmclaw (для переподключения/новых хостов)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 11:50:58 +03:00
40078e533c code-server auto-sync 2026-06-10T00:05:01+00:00 2026-06-10 00:05:01 +00:00
root
0b2c049ab9 auto-backup claude-memory 2026-06-10_00:00 2026-06-10 00:00:43 +00:00
a06ed4ce54 code-server auto-sync 2026-06-09T22:45:02+00:00 2026-06-09 22:45:02 +00:00
dttb
b8e1ca914f swarmclaw: NetBird для агентов по IP (magic-DNS .netbird.cloud не резолвится из-за wildcard dttb.ru); инструкция в systemPrompt
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 01:43:18 +03:00
55c9302b44 code-server auto-sync 2026-06-09T22:40:01+00:00 2026-06-09 22:40:01 +00:00
dttb
b26c41668b omniroute.md: восстановлена правка 3.8.16 + ExecStart dist/server.js (откатил auto-backup claude-memory)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 01:36:06 +03:00
34563e6ab4 code-server auto-sync 2026-06-09T22:30:02+00:00 2026-06-09 22:30:02 +00:00
dttb
a842f2e1aa swarmclaw: подключён к NetBird (100.70.95.183), агенты дотягиваются до 100.70.x; setup-key в credentials, inventory
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 01:29:53 +03:00
8fec84557d code-server auto-sync 2026-06-09T12:05:02+00:00 2026-06-09 12:05:02 +00:00
root
ceb16dab77 auto-backup claude-memory 2026-06-09_12:00 2026-06-09 12:00:50 +00:00
1c0c12b280 code-server auto-sync 2026-06-09T10:20:01+00:00 2026-06-09 10:20:01 +00:00
dttb
5371b6aa36 swarmclaw: фикс чатов на iPad/Safari (NPM proxy_buffering off для SSE-стрима)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 13:15:16 +03:00
4d7e9c3879 code-server auto-sync 2026-06-09T07:50:02+00:00 2026-06-09 07:50:02 +00:00
dttb
3d1c5b8ad2 omniroute: обновлён 3.8.7->3.8.16 (ложная out-of-usage была багом версии), ExecStart путь app->dist; агенты swarmclaw на Opus
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 10:47:34 +03:00
8555e4b38b code-server auto-sync 2026-06-08T20:50:02+00:00 2026-06-08 20:50:02 +00:00
dttb
2f8c19cfcc swarmclaw: vault залит в Knowledge-раздел (189 entries, авто-цитаты) + daily ре-синк
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 23:47:47 +03:00
2d25a6d438 code-server auto-sync 2026-06-08T20:45:02+00:00 2026-06-08 20:45:02 +00:00
dttb
edc6c14a22 swarmclaw: подключена база знаний (vault в workspace агентов + kb-pull cron), агенты ищут по базе
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 23:41:12 +03:00
2ae8a96a5d code-server auto-sync 2026-06-08T20:30:01+00:00 2026-06-08 20:30:01 +00:00
dttb
dba3beb648 swarmclaw: оба агента на OmniRoute/Opus (фикс default через БД), грабли claude-cli фоллбек/Session not found/gateway health
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 23:27:55 +03:00
279e366318 code-server auto-sync 2026-06-08T20:15:02+00:00 2026-06-08 20:15:02 +00:00
dttb
bd63ccd920 swarmclaw: агент заработал (dummy-credential для OmniRoute), грабли apiKey/Chrome-кэш, Assistant удалён
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 23:10:51 +03:00
41e0125570 code-server auto-sync 2026-06-08T19:35:02+00:00 2026-06-08 19:35:02 +00:00
dttb
6fa63a944d swarmclaw: HTTPS готов — LE cert для swarm.dttb.ru (id 118), ssl_forced
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 22:32:54 +03:00
dttb
b55b33b73b swarmclaw: деплой LXC 135 (оркестратор над openclaw) + домен swarm.dttb.ru
- LXC 135 Debian/Docker, SwarmClaw 24/7, провайдер OmniRoute, агент Opus 4.8
- gateway-связка с openclaw 137 (device paired, connect ok)
- NPM host swarm.dttb.ru -> 10.0.0.135:3456 (WSS), DNS A-запись в SpaceWeb
- обновлены proxmox-inventory, network-topology, npm-proxy-hosts

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 22:32:04 +03:00
199dfedf02 code-server auto-sync 2026-06-08T11:05:01+00:00 2026-06-08 11:05:01 +00:00
dttb
ed40441cbd dttb/openwrt-router: podkop 0.7.14→0.7.19 на 10.0.0.1 (Cudy TR3000); грабля status='not running' при живом sing-box, лечение зависшего sing-box killall+restart, проверка фейкапа через 127.0.0.42
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 14:00:17 +03:00
b94c71c44b code-server auto-sync 2026-06-07T06:10:01+00:00 2026-06-07 06:10:01 +00:00
0402fe0212 code-server auto-sync 2026-06-07T06:05:01+00:00 2026-06-07 06:05:01 +00:00
12be5964d8 code-server auto-sync 2026-06-05T12:20:01+00:00 2026-06-05 12:20:01 +00:00
Антошка (LXC 137)
baba17f2d2 lipki: add TP-Link Deco P9 mesh section (6 nodes via OUI 6c:5a:b0) 2026-06-05 12:15:05 +00:00
f8a0d80a17 code-server auto-sync 2026-06-04T00:05:02+00:00 2026-06-04 00:05:02 +00:00
root
0d1000918d auto-backup claude-memory 2026-06-04_00:00 2026-06-04 00:00:43 +00:00
d1602ef1c6 code-server auto-sync 2026-06-03T20:55:02+00:00 2026-06-03 20:55:02 +00:00
dttb
3b7f080a27 охотхозяйство: пароли камер (DS-I400/App5870w, EZVIZ-коды), юзер NVR partner, актуализация Orange Pi .147
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 23:54:06 +03:00
c0da0510a5 code-server auto-sync 2026-06-03T12:50:02+00:00 2026-06-03 12:50:02 +00:00
dttb
bff135926c openwrt-4/Оливье: шаблон письма клиенту (FR+RU) — что настроили, вариация с роутером провайдера, что можно улучшить
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:49:31 +03:00
3578efb96b code-server auto-sync 2026-06-03T12:00:02+00:00 2026-06-03 12:00:02 +00:00
dttb
23301445e7 openwrt-4/Оливье: выезд 2026-06-03 — extroot-fix, LAN→192.168.10.1, LuCI по NetBird, awg0→FR (AWG1.5 ок), Canal+ user_domains, IPv6 off; NetBird IP→100.70.194.241 + бэкап конфига
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 14:57:43 +03:00
5dd8b50af0 auto-sync from MEMORY.md (2026-06-02 13:26) 2026-06-02 13:26:39 +00:00
39ce04c457 code-server auto-sync 2026-06-02T12:20:01+00:00 2026-06-02 12:20:01 +00:00
dttb
f4fab70c64 openwrt-4/Оливье: FR-нода HOSTKEY Paris + AmneziaWG :44221, креды, готовый awg0-конфиг Cudy, рунбук Canal+, хендофф для code-server
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 15:19:17 +03:00
9e5d829240 code-server auto-sync 2026-06-01T19:00:01+00:00 2026-06-01 19:00:01 +00:00
dttb
b3a91986f8 Алекс: 2-й Codex-аккаунт в OmniRoute (пул cx/gpt-5.5, проверено)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 21:56:08 +03:00
d8051fecd2 code-server auto-sync 2026-06-01T18:40:01+00:00 2026-06-01 18:40:01 +00:00
dttb
eff0fa2596 Антошка: самолечение — двухслойный watchdog + алерт
- antoshka-watch-self.sh (cron */5 в LXC 137): gateway/порт/DNS/getMe/crash-loop -> рестарт + алерт
- antoshka-host-watchdog.sh (cron */5 на pve): контейнер лёг -> pct start + алерт
- поверх systemd Restart=always + lingering; боевой тест ОК

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 21:39:05 +03:00
d066726fe8 Remote Control с iPhone/iPad: изолированный Max-конфиг + systemd-сервис на LXC 132
- Убрано авто-открытие вкладки Claude Code в code-server (auto-run-command)
- decisions/2026-06-01-claude-remote-control-mobile.md
2026-06-01 12:38:15 +00:00
80624c9982 code-server auto-sync 2026-06-01T10:40:01+00:00 2026-06-01 10:40:01 +00:00
dttb
7bd229e387 Бенелюкс: концепция сегментации Wi-Fi (хозяева/персонал/гости)
UniFi VLAN + firewall на Cudy; персонал=только интернет, внедрение отложено

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 13:37:29 +03:00
1b56bb9be8 code-server auto-sync 2026-06-01T09:31:34+00:00 2026-06-01 09:31:34 +00:00
dttb
a66174bbad ZimaOS веб-пароль -> App5870w (выбор Олега)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 12:26:31 +03:00
c03049b933 code-server auto-sync 2026-06-01T09:00:02+00:00 2026-06-01 09:00:02 +00:00
dttb
d1886cf75f ZimaOS веб-пароль сменён на сильный (закрыт публичный риск)
- CasaOS хранит пароль как чистый MD5 в /var/lib/casaos/db/user.db o_users
- смена через sudo sqlite3 UPDATE (API/CLI смены нет); старый отвергнут, новый ок
- alex-nas цел (SSH Linux отдельный, не менялся)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 11:58:42 +03:00
03d861aafc code-server auto-sync 2026-06-01T08:10:01+00:00 2026-06-01 08:10:01 +00:00
dttb
b4f98b15d5 zima.umnybot.ru -> ZimaOS веб (основной NPM + LE cert id116)
- A-запись Spaceweb, proxyhost id31 -> 10.0.0.190:80, force-SSL, websocket
- NPM v2.14 cert-create: только meta:{} (грабли)
- ФЛАГ безопасности: ZimaOS-админка в открытом инете с слабым паролем

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 11:08:16 +03:00
437c940546 code-server auto-sync 2026-06-01T07:35:02+00:00 2026-06-01 07:35:02 +00:00
dttb
845e8193a7 ZimaOS NAS интегрирован с Алексом
- alex-nas.sh: место / поиск файлов (кириллица через python) / папки / usage
- доступ sshpass admin@10.0.0.190, в allowlist (read-only)
- проверено в TG: «место на NAS, найди договор» → Алекс отвечает

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 10:31:16 +03:00
df1edeae6d code-server auto-sync 2026-05-31T20:05:02+00:00 2026-05-31 20:05:02 +00:00
dttb
8959ca2cbf CF Tunnel: тест из РФ — http2 подключается, но quick-tunnel флапает (530); риск, нужен named-test или VPS-туннель
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 23:03:56 +03:00
ea861f00a4 code-server auto-sync 2026-05-31T19:50:02+00:00 2026-05-31 19:50:02 +00:00
dttb
d136b7358b NPM коробки автономен: omni.umnybot.ru на LXC 101
- proxy host omni->OmniRoute (websocket+force-SSL), cert перенесён с основного NPM
- проверено локально: серт LE valid, проксирует (307); коробка раздаёт домен сама
- handover: DNS+роутер клиента 443/80 -> NPM коробки, пере-выпуск LE; иначе CF Tunnel

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 22:47:37 +03:00
60b8f43251 code-server auto-sync 2026-05-31T19:35:02+00:00 2026-05-31 19:35:02 +00:00
dttb
83a73e0d3a Антошка стережёт Алекса: мониторинг + лечение + алерт пилота
- antoshka-watch-alex.sh на LXC 137, cron */3
- проверяет контейнер/gateway/omniroute/диск, лечит restart/pct start
- алерт Олегу от имени Антошки, дедуп; боевой тест пройден

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 22:30:02 +03:00
2d1821f585 code-server auto-sync 2026-05-31T19:20:01+00:00 2026-05-31 19:20:01 +00:00
dttb
8b7010ea0a Алекс: хард-гейт approval ВКЛЮЧЁН и подтверждён в Telegram
- exec-policy allowlist + ask on-miss: read-инструменты свободно, write -> кнопка [Allow Once][Deny]
- живой тест в TG прошёл (кнопка на alex-fix.sh restart-podkop)
- SOUL облегчён (объясняет + кнопка, без дубля "да?"); гибкость сохранена (ask on-miss)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 22:19:24 +03:00
1903f5591e code-server auto-sync 2026-05-31T18:55:02+00:00 2026-05-31 18:55:02 +00:00
dttb
f757b4afd1 Алекс: исследован хард-гейт approval (allowlist), откат на yolo до живого TG-теста
- allowlist read-tools + exec-policy allowlist/on-miss: чтение свободно, write блокируется
- 2 вопроса (Telegram-кнопка approval не проверена; allowlist лишает гибкости) -> yolo
- механизм и allowlist-записи задокументированы для финализации в Этап 9

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 21:52:55 +03:00
b71a2216f9 code-server auto-sync 2026-05-31T18:40:01+00:00 2026-05-31 18:40:01 +00:00
dttb
dd0a498fbe Алекс Этап 4: write-действия + подтверждение + авто-лечение сети
- alex-fix.sh (restart-podkop / reboot-ap) с авто-аудитом Олегу в TG
- гейт подтверждения = двухшаговое правило в SOUL.md (проверено: спрашивает)
- авто-лечение в watchdog: WAN-SSH дыра -> сам закрывает + алерт (боевой тест ОК)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 21:39:36 +03:00
4f348d1784 code-server auto-sync 2026-05-31T18:25:02+00:00 2026-05-31 18:25:02 +00:00
dttb
2f939c9400 Алекс-защитник: сторож сети против WAN-SSH/спам-атак
- alex-security.sh (аудит Cudy под вектор инцидента 2026-05-20)
- alex-secwatch.sh + cron */15 -> алерт Олегу в TG при угрозе
- on-demand "нас не ломают?" проверено; всё чисто, ~150 брутов отбито

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 21:20:25 +03:00
744fe7dfc1 code-server auto-sync 2026-05-31T18:10:02+00:00 2026-05-31 18:10:02 +00:00
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
234ba782d9 code-server auto-sync 2026-05-31T16:20:01+00:00 2026-05-31 16:20:01 +00:00
dttb
a54ef6e14b AI-ассистент umnybot: NetBird Benelux setup-key + коробка в mesh (100.70.186.192), достаёт Cudy Александра
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 19:17:10 +03:00
0892943e3e code-server auto-sync 2026-05-31T10:30:02+00:00 2026-05-31 10:30:02 +00:00
dttb
8de53f6432 AI-ассистент umnybot: 8 codex-ящиков для мульти-аккаунта OpenAI
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 13:26:15 +03:00
666f3667db code-server auto-sync 2026-05-31T09:35:01+00:00 2026-05-31 09:35:02 +00:00
dttb
9f7eba70d9 AI-ассистент umnybot: креды и инфра пилота (коробка/OmniRoute/TG/домен/почта)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 12:34:47 +03:00
483d1be3c4 code-server auto-sync 2026-05-31T06:05:01+00:00 2026-05-31 06:05:01 +00:00
kb-audit-bot
9f48dc7ac0 kb-audit-bot: auto-apply drift 2026-05-31
+ VMID 131 (VM ubuntu, stopped)

Skipped (too complex for auto-apply):
  VMID 139 (LXC severny-les, running) — требует ручной правки (running → новая секция)
2026-05-31 06:00:21 +00:00
24a010ef42 code-server auto-sync 2026-05-29T18:05:02+00:00 2026-05-29 18:05:02 +00:00
root
7df3e7865b auto-backup claude-memory 2026-05-29_18:00 2026-05-29 18:00:41 +00:00
7ee313e289 code-server auto-sync 2026-05-29T10:35:01+00:00 2026-05-29 10:35:01 +00:00
dttb
d97e7a4a03 podkop: канонический справочник (модель/списки/грабли/инвентарь)
Свёл разрозненные знания о podkop в один single-source-of-truth: snippets/podkop-reference.md.
Главное — семантика inside/outside (причина НИИКН-косяка), каталог листов + decision guide,
правильный конфиг, каталог граблей (busybox ip -br, слетающие overrides, fwmark vs NetBird,
cache.db lock, disable_quic, MTU), инвентарь podkop по объектам. Линки из runbook + CLAUDE.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:31:58 +03:00
0ef00a36e9 code-server auto-sync 2026-05-29T10:25:01+00:00 2026-05-29 10:25:01 +00:00
dttb
5949452bcf niikn: КОРНЕВОЙ фикс — убрал russia_outside из podkop (ломал РФ-сайты)
russia_outside = РФ-сайты для доступа из-за границы; для офиса в РФ он фейкапил
gosuslugi/ozon/ЕИС/nspd и гнал в финский выход → гео-блок. Убран — РФ-сайты резолвятся
реально (проверено sing-box 127.0.0.42), overrides больше не нужны, цикл слётов разорван.
Инсайт Олега про inside/outside. Watchdog niikn-podkop-watchdog на pve-niikn сторожит откат.
Заодно: исправлены перепутанные chat_id (Олег=1292155421, Максим=437242345).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:24:04 +03:00
ea74cdec8c code-server auto-sync 2026-05-29T09:55:01+00:00 2026-05-29 09:55:01 +00:00
dttb
4552ef0109 niikn: восстановил слетевшие gov-overrides (ЕИС/zakupki, gosuslugi, sev, rosreestr, culture, economy)
ЕИС (zakupki.gov.ru) был FakeIP→Финляндия из-за слетевшего override; восстановил все 6 — проверено 200 с maul-pc и pve-niikn.
lk.zakupki.gov.ru = ГОСТ-TLS (alert 40 с обоих путей) — Yandex Browser+КриптоПро, маршрут не лечит.
podkop проверен: туннель Финляндия жив, заблокированные (youtube/instagram/whatsapp) работают.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 12:52:57 +03:00
49eed9542d code-server auto-sync 2026-05-29T09:35:02+00:00 2026-05-29 09:35:02 +00:00
dttb
4a836e1060 niikn: фикс diadoc (NetBird route 46.17.203.0/24 → LionART) + ozon (DNS override → прямой MTS)
diadoc.ru: MTS WAN чёрная дыра к Контуру (TCP timeout) → маршрут через pve-LionART как nspd/zakupki. Проверено 200 с офисного ПК.
ozon.ru: russia_outside FakeIP'ил → Финляндия → гео-блок; override /ozon.ru/ → реальный IP → прямой MTS.
Находки: awg0 жив (ложная тревога из-за busybox ip -br); gosuslugi.ru снова FakeIP'ится.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 12:33:03 +03:00
dttb
bf565f1392 mmfb/lionart-1c: SSH + фикс efsaveragent + накопленный backlog vault-а
Сегодня (mmfb / LionART 1C):
- projects/mmfb/lionart-1c.md — новый файл: VM 100 на pve LionART
  (WIN-70M2VEJIKEF, 10.253.1.240, Win Server 2022, 1С+SQL+Effector Saver),
  SSH-доступ claude/Kl@udeD1ag!2026 заведён, RDP под Администратор + 2FA.
- projects/mmfb/proxmox-inventory.md — hostname WIN-70M2VEJIKEF в VM 100.
- decisions/2026-05-28-mmfb-effector-saver-locked-admin.md — диагноз
  цикла 7038 (SCM-пароль разъехался с .\Администратор) + lockout учётки,
  и пошаговое решение (disable службы → ADSI unlock → LogonUser-проверка
  → sc.exe config password= → start auto).

Накопившийся backlog (без отдельной правки в эту сессию):
- decisions/: buzharovo (recon, migration-plan, 1c-licensing), sergey
  (instagram iPhone fakeip), amneziavpn macOS v1/v2 incompat, benelux
  compromise 2026-05-20, glavtorg autologon off, omni domain+update.
- projects/: benilux README, buzharovo README+server1c, dttb
  (nextcloud-talk-bot, npm-proxy-hosts, proxmox-inventory, vpn-clients),
  glavtorg, sergey README, projects/_index.
- claude-memory/: benelux, omniroute.
- snippets/mac-dictation/groq-dictate.sh.
- notes/claude/: ~80 авто-сохранённых транскриптов сессий за май.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 12:33:03 +03:00
e994661bd7 code-server auto-sync 2026-05-28T10:30:03+00:00 2026-05-28 10:30:03 +00:00
dttb
cfe44d886c niikn/maul-pc: настроен RustDesk, ID 439312650, permanent password
10.0.0.244 (недоступно из НИИКН) → remot.dttb.ru:21116. Добавлены api-server, approve-mode=password.
Permanent password через Scheduled Task с InteractiveToken в сессии Максима (подтверждение метода из [[feedback_rustdesk_password_via_ssh]]).
Creds сохранены на хосте C:\\Users\\Public\\rustdesk-credentials.txt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 13:27:59 +03:00
5f87025ed7 code-server auto-sync 2026-05-28T10:15:02+00:00 2026-05-28 10:15:02 +00:00
dttb
d6c82aa5d8 niikn: добавил maul-pc.md — рабочий ПК Максима Мауля (DESKTOP-IC5A0K2)
Онбординг 2026-05-28 через netbird-claude-install.ps1: NetBird уже был в группе NIIKN,
доустановили claude/Kl@udeD1ag!2026 + OpenSSH + WinRM + Mac-ключ. SSH по ключу работает.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 13:13:04 +03:00
393e6a05bf code-server auto-sync 2026-05-28T10:10:03+00:00 2026-05-28 10:10:03 +00:00
dttb
d85906f18c netbird-claude-install: пропуск перерегистрации + Mac-ключ в admin_authorized_keys
- Skip 'netbird up --setup-key' если хост уже Connected к tenant (иначе создаётся дубль peer)
- Залить публичный ed25519-ключ Mac в C:\\ProgramData\\ssh\\administrators_authorized_keys + правильные ACL (SYSTEM+Administrators)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 13:07:25 +03:00
5548d7d987 code-server auto-sync 2026-05-27T00:05:02+00:00 2026-05-27 00:05:02 +00:00
root
ea741fbfee auto-backup claude-memory 2026-05-27_00:00 2026-05-27 00:00:44 +00:00
768a23fc8c auto-sync from MEMORY.md (2026-05-26 18:44) 2026-05-26 18:44:32 +00:00
35202bc348 auto-sync from MEMORY.md (2026-05-26 18:44) 2026-05-26 18:44:07 +00:00
e51c6310f0 code-server auto-sync 2026-05-26T16:20:02+00:00 2026-05-26 16:20:02 +00:00
3f634037d9 auto-sync from MEMORY.md (2026-05-26 14:35) 2026-05-26 14:35:55 +00:00
82e95310c2 code-server auto-sync 2026-05-26T14:35:01+00:00 2026-05-26 14:35:01 +00:00
Claude Auto-Sync
f727f6f977 auto-sync from MEMORY.md (2026-05-26 14:21) 2026-05-26 14:31:16 +00:00
Claude Auto-Sync
6d729dc8c7 auto-sync from MEMORY.md (2026-05-26 13:13) 2026-05-26 14:31:16 +00:00
bf5e24491b code-server auto-sync 2026-05-24T06:05:04+00:00 2026-05-24 06:05:04 +00:00
57a026ed45 code-server auto-sync 2026-05-17T06:05:01+00:00 2026-05-17 06:05:01 +00:00
kb-audit-bot
ae5eb91280 kb-audit-bot: auto-apply drift 2026-05-17
+ VMID 128 (LXC profi-parser, stopped)

Skipped (too complex for auto-apply):
  VMID 131 (VM ubuntu, running) — требует ручной правки (running → новая секция)
  VMID 139 (LXC severny-les, running) — требует ручной правки (running → новая секция)
2026-05-17 06:01:27 +00:00
368a14107d code-server auto-sync 2026-05-10T06:05:02+00:00 2026-05-10 06:05:02 +00:00
97841320f2 code-server auto-sync 2026-05-07T07:10:01+00:00 2026-05-07 07:10:01 +00:00
dttb
d00d856513 projects: вынес Бужарово в отдельную папку buzharovo/
Server1C — это самостоятельный объект (организация в Бужарово), не часть
домашней инфраструктуры dttb. Переношу projects/dttb/server1c.md →
projects/buzharovo/server1c.md, добавляю README.md как точку входа,
обновляю обратные ссылки.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 10:05:44 +03:00
329a280cb3 code-server auto-sync 2026-05-07T07:05:01+00:00 2026-05-07 07:05:01 +00:00
dttb
6dabc7749c Бужарово 1С: рецепт rmngr-loop после грязного ребута
Симптом: rmngr держит >100% ядра в idle, rac не отвечает, локальные пользователи жалуются на тормоза. Полный ребут сервера НЕ помогает. Лечится Restart-Service '1C:Enterprise 8.3 Server Agent (x86-64)'.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 10:03:07 +03:00
d82531ec58 code-server auto-sync 2026-05-06T13:55:02+00:00 2026-05-06 13:55:02 +00:00
dttb
47394e668e Phase 9 (улучшения автоматизации):
A. kb-autosync.sh переписан: pull → regenerate index → commit → push.
   После каждого push с Mac индекс objects-map.json и _index.md
   обновляются автоматически на code-server (LXC 132).

B. kb-objects-map.py + kb-objects-audit.py добавлены в воскресный
   weekly cron на LXC 132 — health-check автогенерируется раз в неделю.

C. Чистка битых wiki-ссылок (score 84 → 9):
   - notes/govru-diagnosis → projects/niikn/govru-quickfix-playbook (2)
   - claude-memory/podkop → 2026-04-17-peredelki-podkop-stability-fix
   - [[../snippets/clients/]] → snippets/clients/ (текстом, 2)
   - [[feedback_*]] (user memory) → backtick-cited (2)
   - [[../znamenskoye/]] → [[../znamenskoye/README]] (4)

   Скрипт kb-objects-audit.py улучшен: regex теперь требует [[...]] с
   двойной скобкой (не одной), исключает audit/ и CLAUDE.md (placeholder
   и autogen).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:52:16 +03:00
94aae3ca26 code-server auto-sync 2026-05-06T13:50:01+00:00 2026-05-06 13:50:01 +00:00
dttb
1748562756 Decision: сводка по перестройке KB-поиска (8 фаз)
Один артефакт-агрегатор: метрики до/после, грабли, отложенное, ссылки
на все промежуточные decisions/snippets. Чтобы не прыгать по разным
файлам — единая точка входа для повторного чтения.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:46:05 +03:00
dttb
f0b7feadc1 Phase 7: kb-objects-audit + первый weekly report (score 84)
Новый скрипт scripts/kb-objects-audit.py — еженедельный health-check vault'а:
1. Каждый projects/<dir>/README.md имеет валидный frontmatter (type/status/aliases)
2. Каждый онлайн-netbird-пир привязан к проекту через aliases или собственную карточку
3. Битые wiki-ссылки [[...]] не указывают в небытие

Output: audit/YYYY-MM-DD-objects-audit.md со score (меньше = лучше).

Первый запуск 2026-05-06: score=84
- 12/12 проектов с frontmatter ✓
- 3 online orphan-пира (DESKTOP-2IOQS54 Saransk, DESKTOP-AGBMLPN Helsinki, DESKTOP-HL0BB05 Lipetsk)
- 26 битых wiki-ссылок выявлено

Phase 6: dreaming включён (cron 0 3 * * *), recall promote'нул 17/39, weekly cron на promote.
Phase 8: на 137 — minScore=0.4 в memorySearch.query, IDENTITY.md разводит двух Максимок,
INFRASTRUCTURE.md переписан как навигатор по vault'у (не дубль).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:39:45 +03:00
dttb
d4433bd0a8 Phase 4: обогатить frontmatter проектов + 6 новых stub'ов
Существующие проекты получили frontmatter с aliases для FTS / objects-map:
  niikn  — Cloud-NIIKN New niikn.com, pve-niikn, Kripto-ARM, M.Maul
  dttb   — Work Server dttb, code-server, rustdeskserver, MacBook-Pro, ...
  glavtorg, krasnogorsk, zelenograd — добавлен frontmatter с aliases

Создано 6 новых README:
  projects/znamenskoye/README.md  — был отсутствующий index 3-х объектов
  projects/mmfb/README.md         — был отсутствующий index ММФБ + LionART
  projects/sergey/README.md       — stub OpenWrt_Sergey (Одинцово)
  projects/benilux/README.md      — stub OpenWrt Benilux (Истра)
  projects/vishnevyy-sad/README.md — stub Константин (Москва)
  projects/openwrt-4/README.md    — stub анонимный OpenWrt_4

Обновлён scripts/kb-objects-map.py: exact-match вместо substring (избегает FP
вроде alias 'cloud' ⊂ 'Cloud-NIIKN New niikn.com'). Aliases теперь должны
содержать полные имена пиров как в netbird-inventory.

Метрика: с 38 orphan-пиров до 14. Остаток — реально неклассифицированные
клиентские машины без явной привязки к проекту (Денис Тихая, DESKTOP-2IOQS54
и др.) — задача для отдельного шага обогащения.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:25:44 +03:00
dttb
b16ecdae37 Phase 3: scripts/kb-objects-map.py + audit/objects-map.json + projects/_index.md
Авто-генератор реестра: парсит netbird-inventory + frontmatter каждого проекта,
выводит JSON для бота и человекочитаемый index с wiki-ссылками.

Пока 16 проектов / 38 orphan-пиров без своих карточек — выявленные дыры станут
input для Фазы 4 (stub-генератора). Скрипт идемпотентный, без deps (pure stdlib),
запуск: cd ~/knowledge-base && python3 scripts/kb-objects-map.py

Парсер обрабатывает offline-таблицу netbird (другой порядок колонок), normalize
ye→e уравнивает Знаменское/Znamenskoe. Source of truth — frontmatter каждого
проекта; добавление aliases/owner/region там сразу подхватится при следующем run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:17:05 +03:00
dttb
b411e3b308 Phase 5.2: архивировать audit/ старее текущей недели в audit/archive/
Перенесены 18 файлов 2026-04-* (drift, creds, dns, npm, health, proposed) в audit/archive/.
В audit/ остались только свежие 2026-05-03-* + health-latest.json.

Цель — снизить шум в FTS Максимки. В openclaw 2026.5.2 нет excludePaths
для memorySearch, поэтому файлы продолжают индексироваться, но в подкаталоге
их легче чистить вручную и видно структуру.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:12:27 +03:00
dttb
cda539b9a1 Phase 5.1 (часть 2): docce ссылку и aliases — после удаления video-surveillance-report
Должно было войти в предыдущий коммит, но git add был пропущен.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:06:59 +03:00
dttb
bac376992d Phase 5.1: слить дубли видеонаблюдения — оставить videonablyudenie-znam как canonical
- удалён projects/dttb/video-surveillance-report.md (старая неполная копия от 2026-03-13, без секции AgentDVR ЧОП)
- canonical videonablyudenie-znam.md обогащён aliases для FTS (видеонаблюдение Знаменское, камеры Охотхозяйство, AgentDVR ЧОП, swtest video)
- projects/dttb/README.md убрана ссылка на удалённый файл

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:04:45 +03:00
dttb
f7d06c0a35 Phase 2 webhook: snippet и decision (Mac→openclaw FTS лаг 15м → 11с)
Развёрнут push-webhook от Gitea на kb-pull-webhook.service на LXC 137 + auto-reindex FTS в kb-pull.sh после нового HEAD. Грабли: gitea webhook.ALLOWED_HOST_LIST по дефолту режет private IP; flock -n теряет двойные push, заменён на -w 180.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:01:45 +03:00
dttb
843b9780c8 Phase 2 final smoke - flock -w 180 2026-05-06 15:56:25 +03:00
dttb
24fe1d3f88 smoke webhook real push timing 2026-05-06 15:35:39 +03:00
dttb
1ae613b2bd smoke webhook delivery Phase 2 2026-05-06 15:32:20 +03:00
root
d754de8378 auto-backup claude-memory 2026-05-06_12:00 2026-05-06 12:00:52 +00:00
dttb
80fd8ca7bf Липки: карточка объекта (клиент Антон, Cudy TR3000 100.70.35.234, белый WAN 5.101.135.71) + рецепт Gitea→openclaw kb-pull webhook
Закрывает причину #1 путаницы Максимки на запросах вида "OpenWRT Липки": слово "Липки" во всём vault встречалось только одной строкой в netbird-inventory, FTS вытаскивал НИИКН по статистике слова "OpenWRT".

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 14:03:36 +03:00
dttb
bf845e2dcb kb: OmniRoute Opus audit — cc/claude-opus-4-7 main, разница со старым CLIProxy 8317 2026-05-06 13:42:22 +03:00
d9c00c31e0 code-server auto-sync 2026-05-06T10:30:01+00:00 2026-05-06 10:30:01 +00:00
f6bf12ccf9 code-server auto-sync 2026-05-06T10:25:01+00:00 2026-05-06 10:25:01 +00:00
dttb
3220238c67 fix Apple ID TJ + Opus 4.7: добавлены статус, snippet IPRoyal gost-relay, decision openclaw на cc/claude-opus-4-7, обновлён omniroute reference 2026-05-06 12:24:17 +03:00
dttb
265d99b378 Mac dictation: Hammerspoon + Groq Whisper решение
- decisions/2026-05-05-mac-dictation-groq-hammerspoon.md: полный план,
  грабли с раскладкой, fallback на whisper-cpp, восстановление на новом Mac
- notes/ru-geoblocked-services.md: реестр CDN с RU-блоком
  (cdn.spokenly, dl.wisprflow и пр.) + принципы обхода
- snippets/mac-dictation/: рабочая версия скриптов и init.lua

Триггер — одиночный Fn, Groq cloud first → tiny local fallback,
вставка через hs.eventtap.event keycode 9 (минует ru-keymap warnings).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 16:27:17 +03:00
dttb
89fbfec1b8 decision Apple ID TJ: добавлен альтернативный путь через покупку US Adidas-аккаунта + смена региона 2026-05-04 19:45:34 +03:00
dttb
ea077e6b0e notes(claude): транскрипты сессий 2026-05-04 (НИИКН gov.ru fixes, НСПД, Стародубцева) 2026-05-04 13:40:21 +03:00
dttb
2a03207385 playbook НИИКН: добавлен economy.gov.ru override (для fgistp.economy.gov.ru / Минэк ФГИС ТП) 2026-05-04 13:33:44 +03:00
1025 changed files with 66412 additions and 364 deletions

View File

@@ -47,6 +47,14 @@
- Домены NPM: смотри `projects/dttb/npm-proxy-hosts.md`
- Карта сети: смотри `projects/dttb/network-topology.md`
## Podkop (обход РКН на OpenWrt — почти все объекты)
**Канонический справочник:** `snippets/podkop-reference.md` (модель, списки, конфиг, грабли, инвентарь). Диагностика «не работает»: `snippets/podkop-fakeip-diagnostics.md`.
Кардинальные правила (за них уже наступали на грабли):
- Объект **в РФ** (выход туннеля зарубежный) → списки `russia_inside` / точечные `meta`/`youtube`/`telegram`. **НИКОГДА `russia_outside`** (это РФ-сайты для тех, кто ЗА границей — сломает gosuslugi/ozon/ЕИС).
- РФ-сайт «Доступ ограничен» + FakeIP → убирать лишний **список**, а не лепить per-domain override (overrides слетают при реконфиге podkop).
- Фейкапится ли домен: `ssh root@<router> 'nslookup ДОМЕН 127.0.0.42'` (198.18.x = ушёл в туннель).
- busybox `ip -br` не работает; `disable_quic=1` обязателен; awg0 в firewall WAN-зоне.
## Как работать
- Перед правкой — читай текущее состояние файла
- Не предлагай решения, которые уже описаны в `decisions/`

View File

@@ -0,0 +1,37 @@
---
date: 2026-05-06
type: audit
source: scripts/kb-objects-audit.py
tags: [audit, objects, frontmatter, links]
score: 6
---
# KB objects audit — 2026-05-06
**Score (меньше = лучше): `6`**
- Проектов с frontmatter: **12/12** (0 проблем)
- NetBird online-пиров без проектной карточки: **3**
- Битых wiki-ссылок `[[...]]`: **0**
## Frontmatter в projects/
✅ все проекты имеют валидный frontmatter
## Online netbird-пиры без проектной карточки
Эти пиры онлайн в NetBird, но не привязаны ни к одной projects/-странице.
Бот не сможет ответить «найди X» осмысленно — нет файла или alias.
Лечение: либо создать stub в `projects/<slug>/README.md` (см. `projects/lipki/` как образец),
либо добавить имя пира как полную строку в `aliases` подходящего проекта.
| NetBird-имя | IP | OS | Город |
|---|---|---|---|
| `DESKTOP-2IOQS54` | 100.70.82.83 | Windows 10 | Saransk |
| `DESKTOP-AGBMLPN` | 100.70.0.106 | Windows 11 | Helsinki |
| `DESKTOP-HL0BB05` | 100.70.235.80 | Windows 11 | Lipetsk |
## Битые wiki-ссылки
✅ битых ссылок не найдено

View File

@@ -0,0 +1,47 @@
---
date: 2026-05-10
type: audit
source: kb-audit-creds.py
tags: [audit, creds, reachability]
---
# Credentials reachability — 2026-05-10
Ping-проверка URL из [[../projects/dttb/credentials|credentials.md]].
Проверяется только reachability (HTTP status), не реальный логин.
- Всего URL: **20**
- ✓ Reachable: 17 / ⚠ Questionable: 3 / ❌ Unreachable: 0
## ⚠ Нестандартный ответ
| URL | Status | Detail |
|---|---|---|
| `https://remot.dttb.ru/swagger/index.html` | 404 | Not Found |
| `https://api.netbird.io` | 404 | Not Found |
| `https://api.netbird.io/api/setup-keys` | 404 | Not Found |
## ✓ Все ответили нормально
| URL | Status | Категория |
|---|---|---|
| `https://10.0.0.250:8006` | 200 | ✓ reachable |
| `https://pve.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.189:3000` | 200 | ✓ reachable |
| `http://git.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.195:81` | 200 | ✓ reachable |
| `https://npm.dttb.ru` | 200 | ✓ reachable |
| `https://remot.dttb.ru/_admin` | 200 | ✓ reachable |
| `https://dttb.ru` | 200 | ✓ reachable |
| `https://dttb.ru/remote.php/dav/files/admin` | 401 | ✓ auth-required (сервер жив) |
| `https://vps.sweb.ru` | 200 | ✓ reachable |
| `https://api.sweb.ru/domains/dns` | 200 | ✓ reachable |
| `https://mail.niikn.com` | 200 | ✓ reachable |
| `http://192.168.1.22:81` | 200 | ✓ reachable |
| `https://edit.telegra.ph/auth/f1tfgzYpPpGlAr7cYHRzSeH59fYuNVB2V3fbCdypDc` | 200 | ✓ reachable |
| `https://api.telegra.ph/createPage` | 200 | ✓ reachable |
| `https://api.telegra.ph/editPage` | 200 | ✓ reachable |
| `https://telegra.ph/Nastrojka-VPN-04-24-2` | 200 | ✓ reachable |
---
*Автоматически через `scripts/kb-audit-creds.py`.*

View File

@@ -0,0 +1,81 @@
---
date: 2026-05-10
type: audit
source: kb-audit-dns.py
tags: [audit, dns]
---
# DNS resolve audit — 2026-05-10
Резолвим все домены из NPM через публичный DNS (8.8.8.8) и локальный роутер (10.0.0.1).
- Всего доменов: **22**
- NXDOMAIN на 8.8.8.8: 2 / пустой ответ локально: 1 / split-horizon: 20
## ❌ NXDOMAIN / не резолвится на 8.8.8.8 (публичный DNS)
| Домен | Локальный IP |
|---|---|
| `itilegent.ru` | (тоже нет) |
| `vpn.dttb.ru` | 10.0.0.195 |
## ⚠ Split-horizon — разные IP снаружи и внутри
Это нормально для *.dttb.ru (внешний Let's Encrypt IP vs локальный 10.0.0.195). Но неожиданный split может быть багом.
| Домен | Публичный (8.8.8.8) | Локальный (10.0.0.1) |
|---|---|---|
| `ai.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bit.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bitrix24.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `git.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `home.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ip.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `link.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `mail.dttb.ru` | 176.62.183.186 | 10.0.0.107 |
| `matrix.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `npm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `office.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `plex.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `porteiner.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `pve.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rec.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `remot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `router.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `z.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
## ⚠ Пустой локальный резолв (роутер не знает)
- `itilegent.ru` (публичный: -)
## Полная таблица резолва
| Домен | 8.8.8.8 | 10.0.0.1 |
|---|---|---|
| `ai.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bit.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bitrix24.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `git.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `home.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ip.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `itilegent.ru` | — | — |
| `link.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `mail.dttb.ru` | 176.62.183.186 | 10.0.0.107 |
| `matrix.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `npm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `office.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `plex.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `porteiner.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `pve.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rec.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `remot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `router.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `vpn.dttb.ru` | — | 10.0.0.195 |
| `z.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
---
*Автоматически через `scripts/kb-audit-dns.py`.*

73
audit/2026-05-10-drift.md Normal file
View File

@@ -0,0 +1,73 @@
---
date: 2026-05-10
type: audit
source: kb-audit.py
tags: [audit, drift, infrastructure]
---
# KB drift audit — 2026-05-10
Сравнение живого `pct list` / `qm list` с [[../projects/dttb/proxmox-inventory|proxmox-inventory.md]]
- Живых гостей Proxmox: **40**
- Упомянуто в inventory: **38**
- В обоих: 37 / только в live: 3 / отсутствуют в live: 0
- Известны как удалённые: 1 (в `## 🗑️ Удалённые`)
## ⚠ В Proxmox есть, в inventory НЕТ (надо добавить)
| VMID | Type | Status | Name |
|---|---|---|---|
| 128 | LXC | running | profi-parser |
| 131 | VM | running | ubuntu |
| 139 | LXC | running | severny-les |
## ✓ Удалённые хосты (задокументированы): 135
## Полный живой список
| VMID | Type | Status | Name |
|---|---|---|---|
| 100 | VM | stopped | NV |
| 101 | LXC | stopped | n8n |
| 102 | LXC | stopped | SMB |
| 103 | LXC | running | NPM |
| 104 | VM | running | Agent-DVR |
| 105 | VM | stopped | Nextcloud-AIO-dttb.ru |
| 106 | VM | running | pbs |
| 107 | VM | running | Mailcow |
| 108 | LXC | running | zabbix |
| 109 | VM | stopped | itilelegent |
| 110 | VM | stopped | Cloud |
| 111 | VM | running | WinServer2025 |
| 112 | VM | stopped | cloud-dttb |
| 113 | LXC | running | VaultWarden |
| 114 | LXC | running | LinkWarden |
| 115 | LXC | running | watchyourlan |
| 116 | LXC | running | rustdeskserver |
| 117 | LXC | stopped | motioneye |
| 118 | LXC | stopped | plex |
| 119 | LXC | stopped | myspeed |
| 120 | VM | stopped | 7 |
| 121 | LXC | stopped | docker-windows |
| 122 | LXC | stopped | qbittorrent |
| 123 | LXC | stopped | proxmox-local |
| 124 | VM | stopped | Matrix |
| 125 | VM | stopped | datacentr |
| 126 | LXC | stopped | debian |
| 127 | VM | running | haos-17.0 |
| 128 | LXC | running | profi-parser |
| 129 | VM | running | profi-parser-vm |
| 130 | VM | stopped | Zima-OS |
| 131 | VM | running | ubuntu |
| 132 | LXC | running | code-server |
| 133 | VM | running | s1c-buzharovo |
| 134 | LXC | running | ZnamSecurityBot |
| 136 | LXC | running | gitea |
| 137 | LXC | running | openclaw |
| 138 | LXC | stopped | vpn-proxy |
| 139 | LXC | running | severny-les |
| 250 | VM | running | Nextcloud-AIO |
---
*Автоматически сгенерировано `scripts/kb-audit.py`. Применять правки — вручную после ревью.*

202
audit/2026-05-10-health.md Normal file
View File

@@ -0,0 +1,202 @@
---
date: 2026-05-10
type: audit
source: kb-health.py
score: 785
tags: [audit, health, metric]
---
# KB health — 2026-05-10
**Score (меньше = лучше): `785`**
Проверено файлов: 848
## Разбивка
| Категория | Кол-во | Вес | Штраф |
|---|---:|---:|---:|
| broken_wikilinks | 4 | 10 | 40 |
| broken_paths | 48 | 10 | 480 |
| missing_frontmatter | 21 | 3 | 63 |
| orphan_files | 51 | 2 | 102 |
| undated_todos | 70 | 1 | 70 |
| duplicate_basenames | 6 | 5 | 30 |
| **ИТОГО** | | | **785** |
## Битые wikilinks
| Откуда | `[[таргет]]` |
|---|---|
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 0]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 1]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 2]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 3]]` |
## Битые relative-пути
| Откуда | Путь |
|---|---|
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/reference_groq_api.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_win11_unattended_upgrade.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_nspd_blocks_mts.md` |
| `notes/claude/2026-04-21-200915-охотхозяйство-с-openwrt-на-orange-pi-нужно-настрои.md` | `projects/dttb/vps-swtest.md` |
| `notes/claude/2026-04-24-194555-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-20-113423-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `decisions/2026-04-28-rustdesk-lejianwen-pro-migration.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/rustdesk.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-30-221054-найди-инфу-вчера-оксане-делали-доступ-через-рустде.md` | `projects/niikn/office-pc.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/proxmox-inventory.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-29-231939-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/happ-routing-roscomvpn.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/apple-id-us-on-russia.md` |
| `notes/claude/2026-05-04-100627-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/znamenskoye/network-topology-diagram.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/mmfb/mikrotik.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/niikn/mikrotik.md` |
| `notes/claude/2026-04-24-165527-новый-клиент-ммфб-юрий-витальевич-нужно-подключить.md` | `projects/mmfb/yuri-vitalievich.md` |
| `notes/claude/2026-04-29-160010-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/clients/yaroslav-happ-setup.md` |
| `notes/claude/2026-05-04-085317-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/dttb/network-topology-diagram.md` |
| `notes/claude/2026-04-29-071329-на-компе-юрия-продолжим-проверь-он-сети.md` | `projects/mmfb/otchet-yuri-2026-04.md` |
| `notes/claude/2026-04-21-203517-дай-мне-команду-в-сшел-виндовс-установка-нетбирд-и.md` | `/Users/ai/.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag.md` |
| `notes/claude/2026-04-29-150044-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/vpn-clients.md` |
| `notes/claude/2026-04-29-223542-создадим-еще-одного-пользователя-подключение-к-vpn.md` | `snippets/clients/sergey-znamenskoye-happ-setup.md` |
| `notes/claude/2026-04-28-134112-можешь-найти-кп-мичуринец.md` | `projects/dttb/znamenskoye-network-topology.md` |
| `notes/claude/2026-04-28-134112-можешь-найти-кп-мичуринец.md` | `claude-memory/benelux-topology.md` |
| `notes/claude/2026-04-25-001105-на-сервере-glavtorg-можешь-запустить-виртулку-с-ам.md` | `projects/glavtorg/README.md` |
| `notes/claude/2026-04-24-230658-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-193827-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-193827-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `projects/dttb/vpn-clients.md` |
| `notes/claude/2026-04-29-180420-создадим-еще-одного-пользователя-подключение-к-vpn.md` | `snippets/clients/sergey-znamenskoye-happ-setup.md` |
| `notes/claude/2026-04-20-101023-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/niikn/openwrt-bypass.md` |
| `notes/claude/2026-04-24-194414-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-194414-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/apple-id-us-on-russia.md` |
| `notes/claude/2026-05-04-124829-в-ниикн-нспд.md` | `projects/niikn/govru-quickfix-playbook.md` |
| `notes/claude/2026-04-28-132949-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/rustdesk.md` |
| `notes/claude/2026-04-29-163821-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/amnezia-split-tunnel-ru.md` |
| `notes/claude/2026-04-29-151943-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/clients/yaroslav-happ-setup.md` |
| `notes/claude/2026-04-29-151943-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/vpn-clients.md` |
| `notes/claude/2026-04-29-151943-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-05-04-093928-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/niikn/network-topology-diagram.md` |
| `notes/claude/2026-04-24-202451-новый-клиент-ммфб-юрий-витальевич-нужно-подключить.md` | `projects/mmfb/yuri-vitalievich.md` |
| `notes/claude/2026-04-29-001915-на-компе-юрия-продолжим-проверь-он-сети.md` | `projects/mmfb/yuri-vitalievich.md` |
| `notes/claude/2026-04-21-154602-охотхозяйство-с-openwrt-на-orange-pi-нужно-настрои.md` | `decisions/2026-04-21-znamenskoye-ohothozyistvo-wg-backup-channel.md` |
| `notes/claude/2026-04-21-154602-охотхозяйство-с-openwrt-на-orange-pi-нужно-настрои.md` | `claude-memory/znamenskoye-ohothozyistvo.md` |
## Без frontmatter (21)
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `notes/ru-geoblocked-services.md`
- `projects/dttb/znamenskoye-log.md`
- `projects/niikn/office-pc.md`
- `projects/niikn/kripto-arm.md`
- `projects/mmfb/yuri-vitalievich.md`
- `projects/mmfb/otchet-yuri-2026-04.md`
- `projects/dttb/graphify-out/GRAPH_REPORT.md`
- `snippets/happ-vpn-client-instruction.md`
- `snippets/invoice-template.md`
- `snippets/assets/happ-routing-roscomvpn/README-upstream.md`
- `claude-memory/servicedesk-dttb.md`
- `claude-memory/benelux.md`
- `claude-memory/nextcloud-dttb.md`
- `claude-memory/nvr-fix.md`
- `claude-memory/videonablyudenie.md`
- `claude-memory/znamenskoe-home.md`
- `claude-memory/niikn-nextcloud.md`
- `claude-memory/krasnogorsk.md`
- `claude-memory/mas-niikn.md`
- `claude-memory/MEMORY.md`
## Orphan — без бэклинков (51)
_Эти файлы никто не упоминает через `[[..]]`. Кандидаты на удаление или добавление ссылок._
- `decisions/2026-04-30-niikn-culture-gov-fakeip-fix.md`
- `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md`
- `decisions/2026-04-28-netbird-watchdog-lxc-132-137.md`
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `decisions/2026-05-06-kb-search-overhaul.md`
- `decisions/2026-04-28-niikn-uookn-sev-gov-fakeip-fix.md`
- `decisions/2026-05-04-niikn-nspd-via-netbird-lionart.md`
- `notes/ru-geoblocked-services.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/niikn/office-pc.md`
- `projects/niikn/mailcow.md`
- `projects/niikn/NIIKN-Infrastructure.md`
- `projects/niikn/groupfolders-migration.md`
- `projects/niikn/credentials.md`
- `projects/niikn/changelog.md`
- `projects/niikn/matrix.md`
- `projects/niikn/clawdbot-niikn.md`
- `projects/niikn/proxmox.md`
- `projects/niikn/NIIKN-ChangeLog.md`
- `projects/niikn/npm.md`
- `projects/niikn/openwrt-bypass.md`
- `projects/niikn/network-topology-diagram.md`
- `projects/niikn/NC-Talk-Setup.md`
- `projects/niikn/domofon.md`
- `projects/niikn/vpn.md`
- `projects/mmfb/mikrotik.md`
- `projects/dttb/graphify-out/GRAPH_REPORT.md`
- `snippets/happ-routing-roscomvpn.md`
- `snippets/invoice-template.md`
- `snippets/clients/oksana-niikn-rustdesk.md`
- ... +21 ещё
## TODO без даты (70 шт в 10 файлах)
- `decisions/2026-04-30-rustdesk-pre-prod-audit.md` — 13 шт
- `projects/lipki/README.md` — 11 шт
- `templates/vpn-client.md` — 7 шт
- `decisions/2026-04-29-rustdesk-client-deployment-package.md` — 6 шт
- `projects/openwrt-4/README.md` — 6 шт
- `projects/benilux/README.md` — 6 шт
- `projects/sergey/README.md` — 6 шт
- `projects/dttb/vpn-clients.md` — 5 шт
- `projects/vishnevyy-sad/README.md` — 5 шт
- `claude-memory/mas-niikn.md` — 5 шт
## Дубликаты имён (6)
- `README.md`:
- `README.md`
- `decisions/README.md`
- `notes/README.md`
- `projects/znamenskoye/README.md`
- `projects/openwrt-4/README.md`
- `projects/dttb/README.md`
- `projects/glavtorg/README.md`
- `projects/benilux/README.md`
- `projects/vishnevyy-sad/README.md`
- `projects/sergey/README.md`
- `projects/niikn/README.md`
- `projects/lipki/README.md`
- `projects/krasnogorsk/README.md`
- `projects/mmfb/README.md`
- `projects/buzharovo/README.md`
- `projects/zelenograd/README.md`
- `projects/dttb/nextcloud-talk-bot/README.md`
- `snippets/README.md`
- `snippets/mac-dictation/README.md`
- `scripts/README.md`
- `nextcloud.md`:
- `projects/nextcloud.md`
- `projects/dttb/nextcloud.md`
- `network-topology-diagram.md`:
- `projects/znamenskoye/network-topology-diagram.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/niikn/network-topology-diagram.md`
- `proxmox-inventory.md`:
- `projects/dttb/proxmox-inventory.md`
- `projects/mmfb/proxmox-inventory.md`
- `credentials.md`:
- `projects/dttb/credentials.md`
- `projects/niikn/credentials.md`
- `mikrotik.md`:
- `projects/niikn/mikrotik.md`
- `projects/mmfb/mikrotik.md`
---
*Генерируется `scripts/kb-health.py`. JSON-версия в `audit/health-latest.json` для agent-loop.*

View File

@@ -0,0 +1,62 @@
---
date: 2026-05-10
type: audit
source: kb-audit-npm.py
tags: [audit, drift, npm]
---
# NPM drift audit — 2026-05-10
Сверка [[../projects/dttb/npm-proxy-hosts|npm-proxy-hosts.md]] с NPM API (https://npm.dttb.ru).
- Живых proxy hosts: **22**
- В KB: **20**
- Совпадений: 20 / новых: 2 / удалённых из NPM: 0 / с изменениями: 3
## ⚠ Новые hosts (в NPM есть, в KB нет)
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
## 🔄 Изменения (ID совпадает, но что-то сменилось)
### #12 `bitrix24.dttb.ru`
- backend: KB=`10.0.0.223:8080` → live=`10.0.0.224:8080`
### #14 `remot.dttb.ru`
- backend: KB=`10.0.0.43:21114` → live=`10.0.0.244:21114`
### #22 `git.dttb.ru`
- ssl: KB=✗ → live=✓
## Полный живой список
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 1 | `dttb.ru` | `10.0.0.230:11001` | ✓ | on |
| 2 | `office.dttb.ru` | `10.0.0.169:8080` | ✓ | on |
| 3 | `itilegent.ru` | `10.0.0.223:8080` | ✓ | on |
| 4 | `npm.dttb.ru` | `10.0.0.195:81` | ✓ | on |
| 5 | `porteiner.dttb.ru` | `10.0.0.10:9443` | ✓ | on |
| 6 | `pve.dttb.ru` | `10.0.0.250:8006` | ✓ | on |
| 9 | `ai.dttb.ru` | `10.0.0.179:8080` | ✓ | on |
| 10 | `bit.dttb.ru` | `10.0.0.217:8080` | ✓ | on |
| 11 | `link.dttb.ru` | `10.0.0.184:3000` | ✓ | on |
| 12 | `bitrix24.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 13 | `ip.dttb.ru` | `10.0.0.112:8840` | ✓ | on |
| 14 | `remot.dttb.ru` | `10.0.0.244:21114` | ✓ | on |
| 15 | `plex.dttb.ru` | `10.0.0.200:32400` | ✓ | on |
| 16 | `home.dttb.ru` | `10.0.0.155:8123` | ✓ | on |
| 17 | `z.dttb.ru` | `10.0.0.220:80` | ✓ | on |
| 21 | `rec.dttb.ru` | `10.0.0.227:8091` | ✓ | on |
| 22 | `git.dttb.ru` | `10.0.0.189:3000` | ✓ | on |
| 23 | `matrix.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 25 | `mail.dttb.ru` | `10.0.0.107:443` | ✓ | on |
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
| 28 | `bot.dttb.ru` | `10.0.0.239:18789` | ✓ | on |
---
*Автоматически через `scripts/kb-audit-npm.py`.*

View File

@@ -0,0 +1,37 @@
---
date: 2026-05-10
type: audit
source: scripts/kb-objects-audit.py
tags: [audit, objects, frontmatter, links]
score: 6
---
# KB objects audit — 2026-05-10
**Score (меньше = лучше): `6`**
- Проектов с frontmatter: **13/13** (0 проблем)
- NetBird online-пиров без проектной карточки: **3**
- Битых wiki-ссылок `[[...]]`: **0**
## Frontmatter в projects/
✅ все проекты имеют валидный frontmatter
## Online netbird-пиры без проектной карточки
Эти пиры онлайн в NetBird, но не привязаны ни к одной projects/-странице.
Бот не сможет ответить «найди X» осмысленно — нет файла или alias.
Лечение: либо создать stub в `projects/<slug>/README.md` (см. `projects/lipki/` как образец),
либо добавить имя пира как полную строку в `aliases` подходящего проекта.
| NetBird-имя | IP | OS | Город |
|---|---|---|---|
| `DESKTOP-2IOQS54` | 100.70.82.83 | Windows 10 | Saransk |
| `DESKTOP-AGBMLPN` | 100.70.0.106 | Windows 11 | Helsinki |
| `DESKTOP-HL0BB05` | 100.70.235.80 | Windows 11 | Lipetsk |
## Битые wiki-ссылки
✅ битых ссылок не найдено

View File

@@ -0,0 +1,13 @@
---
date: 2026-05-10
type: audit-proposed
source: kb-audit-propose.sh (Opus 4.7)
tags: [audit, proposed, inventory]
---
# Предложенные правки inventory — 2026-05-10
Сгенерировано Claude Opus на основе [[2026-05-10-drift|drift-отчёта]].
**Правки НЕ применены.** Ревью — ты. Apply — вручную.

View File

@@ -0,0 +1,47 @@
---
date: 2026-05-17
type: audit
source: kb-audit-creds.py
tags: [audit, creds, reachability]
---
# Credentials reachability — 2026-05-17
Ping-проверка URL из [[../projects/dttb/credentials|credentials.md]].
Проверяется только reachability (HTTP status), не реальный логин.
- Всего URL: **20**
- ✓ Reachable: 17 / ⚠ Questionable: 3 / ❌ Unreachable: 0
## ⚠ Нестандартный ответ
| URL | Status | Detail |
|---|---|---|
| `https://remot.dttb.ru/swagger/index.html` | 404 | Not Found |
| `https://api.netbird.io` | 404 | Not Found |
| `https://api.netbird.io/api/setup-keys` | 404 | Not Found |
## ✓ Все ответили нормально
| URL | Status | Категория |
|---|---|---|
| `https://10.0.0.250:8006` | 200 | ✓ reachable |
| `https://pve.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.189:3000` | 200 | ✓ reachable |
| `http://git.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.195:81` | 200 | ✓ reachable |
| `https://npm.dttb.ru` | 200 | ✓ reachable |
| `https://remot.dttb.ru/_admin` | 200 | ✓ reachable |
| `https://dttb.ru` | 200 | ✓ reachable |
| `https://dttb.ru/remote.php/dav/files/admin` | 401 | ✓ auth-required (сервер жив) |
| `https://vps.sweb.ru` | 200 | ✓ reachable |
| `https://api.sweb.ru/domains/dns` | 200 | ✓ reachable |
| `https://mail.niikn.com` | 200 | ✓ reachable |
| `http://192.168.1.22:81` | 200 | ✓ reachable |
| `https://edit.telegra.ph/auth/f1tfgzYpPpGlAr7cYHRzSeH59fYuNVB2V3fbCdypDc` | 200 | ✓ reachable |
| `https://api.telegra.ph/createPage` | 200 | ✓ reachable |
| `https://api.telegra.ph/editPage` | 200 | ✓ reachable |
| `https://telegra.ph/Nastrojka-VPN-04-24-2` | 200 | ✓ reachable |
---
*Автоматически через `scripts/kb-audit-creds.py`.*

View File

@@ -0,0 +1,75 @@
---
date: 2026-05-17
type: audit
source: kb-audit-dns.py
tags: [audit, dns]
---
# DNS resolve audit — 2026-05-17
Резолвим все домены из NPM через публичный DNS (8.8.8.8) и локальный роутер (10.0.0.1).
- Всего доменов: **22**
- NXDOMAIN на 8.8.8.8: 2 / пустой ответ локально: 22 / split-horizon: 0
## ❌ NXDOMAIN / не резолвится на 8.8.8.8 (публичный DNS)
| Домен | Локальный IP |
|---|---|
| `itilegent.ru` | (тоже нет) |
| `vpn.dttb.ru` | (тоже нет) |
## ⚠ Пустой локальный резолв (роутер не знает)
- `ai.dttb.ru` (публичный: 176.62.183.186)
- `bit.dttb.ru` (публичный: 176.62.183.186)
- `bitrix24.dttb.ru` (публичный: 176.62.183.186)
- `bot.dttb.ru` (публичный: 176.62.183.186)
- `dttb.ru` (публичный: 176.62.183.186)
- `git.dttb.ru` (публичный: 176.62.183.186)
- `home.dttb.ru` (публичный: 176.62.183.186)
- `ip.dttb.ru` (публичный: 176.62.183.186)
- `itilegent.ru` (публичный: -)
- `link.dttb.ru` (публичный: 176.62.183.186)
- `mail.dttb.ru` (публичный: 176.62.183.186)
- `matrix.dttb.ru` (публичный: 176.62.183.186)
- `npm.dttb.ru` (публичный: 176.62.183.186)
- `office.dttb.ru` (публичный: 176.62.183.186)
- `plex.dttb.ru` (публичный: 176.62.183.186)
- `porteiner.dttb.ru` (публичный: 176.62.183.186)
- `pve.dttb.ru` (публичный: 176.62.183.186)
- `rec.dttb.ru` (публичный: 176.62.183.186)
- `remot.dttb.ru` (публичный: 176.62.183.186)
- `router.dttb.ru` (публичный: 176.62.183.186)
- `vpn.dttb.ru` (публичный: -)
- `z.dttb.ru` (публичный: 176.62.183.186)
## Полная таблица резолва
| Домен | 8.8.8.8 | 10.0.0.1 |
|---|---|---|
| `ai.dttb.ru` | 176.62.183.186 | — |
| `bit.dttb.ru` | 176.62.183.186 | — |
| `bitrix24.dttb.ru` | 176.62.183.186 | — |
| `bot.dttb.ru` | 176.62.183.186 | — |
| `dttb.ru` | 176.62.183.186 | — |
| `git.dttb.ru` | 176.62.183.186 | — |
| `home.dttb.ru` | 176.62.183.186 | — |
| `ip.dttb.ru` | 176.62.183.186 | — |
| `itilegent.ru` | — | — |
| `link.dttb.ru` | 176.62.183.186 | — |
| `mail.dttb.ru` | 176.62.183.186 | — |
| `matrix.dttb.ru` | 176.62.183.186 | — |
| `npm.dttb.ru` | 176.62.183.186 | — |
| `office.dttb.ru` | 176.62.183.186 | — |
| `plex.dttb.ru` | 176.62.183.186 | — |
| `porteiner.dttb.ru` | 176.62.183.186 | — |
| `pve.dttb.ru` | 176.62.183.186 | — |
| `rec.dttb.ru` | 176.62.183.186 | — |
| `remot.dttb.ru` | 176.62.183.186 | — |
| `router.dttb.ru` | 176.62.183.186 | — |
| `vpn.dttb.ru` | — | — |
| `z.dttb.ru` | 176.62.183.186 | — |
---
*Автоматически через `scripts/kb-audit-dns.py`.*

73
audit/2026-05-17-drift.md Normal file
View File

@@ -0,0 +1,73 @@
---
date: 2026-05-17
type: audit
source: kb-audit.py
tags: [audit, drift, infrastructure]
---
# KB drift audit — 2026-05-17
Сравнение живого `pct list` / `qm list` с [[../projects/dttb/proxmox-inventory|proxmox-inventory.md]]
- Живых гостей Proxmox: **40**
- Упомянуто в inventory: **38**
- В обоих: 37 / только в live: 3 / отсутствуют в live: 0
- Известны как удалённые: 1 (в `## 🗑️ Удалённые`)
## ⚠ В Proxmox есть, в inventory НЕТ (надо добавить)
| VMID | Type | Status | Name |
|---|---|---|---|
| 128 | LXC | stopped | profi-parser |
| 131 | VM | running | ubuntu |
| 139 | LXC | running | severny-les |
## ✓ Удалённые хосты (задокументированы): 135
## Полный живой список
| VMID | Type | Status | Name |
|---|---|---|---|
| 100 | VM | stopped | NV |
| 101 | LXC | stopped | n8n |
| 102 | LXC | stopped | SMB |
| 103 | LXC | running | NPM |
| 104 | VM | stopped | Agent-DVR |
| 105 | VM | stopped | Nextcloud-AIO-dttb.ru |
| 106 | VM | running | pbs |
| 107 | VM | stopped | Mailcow |
| 108 | LXC | stopped | zabbix |
| 109 | VM | stopped | itilelegent |
| 110 | VM | stopped | Cloud |
| 111 | VM | running | WinServer2025 |
| 112 | VM | stopped | cloud-dttb |
| 113 | LXC | running | VaultWarden |
| 114 | LXC | running | LinkWarden |
| 115 | LXC | running | watchyourlan |
| 116 | LXC | running | rustdeskserver |
| 117 | LXC | stopped | motioneye |
| 118 | LXC | stopped | plex |
| 119 | LXC | stopped | myspeed |
| 120 | VM | stopped | 7 |
| 121 | LXC | stopped | docker-windows |
| 122 | LXC | stopped | qbittorrent |
| 123 | LXC | stopped | proxmox-local |
| 124 | VM | stopped | Matrix |
| 125 | VM | stopped | datacentr |
| 126 | LXC | stopped | debian |
| 127 | VM | running | haos-17.0 |
| 128 | LXC | stopped | profi-parser |
| 129 | VM | stopped | profi-parser-vm |
| 130 | VM | stopped | Zima-OS |
| 131 | VM | running | ubuntu |
| 132 | LXC | running | code-server |
| 133 | VM | running | s1c-buzharovo |
| 134 | LXC | stopped | ZnamSecurityBot |
| 136 | LXC | running | gitea |
| 137 | LXC | running | openclaw |
| 138 | LXC | stopped | vpn-proxy |
| 139 | LXC | running | severny-les |
| 250 | VM | running | Nextcloud-AIO |
---
*Автоматически сгенерировано `scripts/kb-audit.py`. Применять правки — вручную после ревью.*

202
audit/2026-05-17-health.md Normal file
View File

@@ -0,0 +1,202 @@
---
date: 2026-05-17
type: audit
source: kb-health.py
score: 785
tags: [audit, health, metric]
---
# KB health — 2026-05-17
**Score (меньше = лучше): `785`**
Проверено файлов: 855
## Разбивка
| Категория | Кол-во | Вес | Штраф |
|---|---:|---:|---:|
| broken_wikilinks | 4 | 10 | 40 |
| broken_paths | 48 | 10 | 480 |
| missing_frontmatter | 21 | 3 | 63 |
| orphan_files | 51 | 2 | 102 |
| undated_todos | 70 | 1 | 70 |
| duplicate_basenames | 6 | 5 | 30 |
| **ИТОГО** | | | **785** |
## Битые wikilinks
| Откуда | `[[таргет]]` |
|---|---|
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 0]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 1]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 2]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 3]]` |
## Битые relative-пути
| Откуда | Путь |
|---|---|
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/reference_groq_api.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_win11_unattended_upgrade.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_nspd_blocks_mts.md` |
| `notes/claude/2026-04-21-200915-охотхозяйство-с-openwrt-на-orange-pi-нужно-настрои.md` | `projects/dttb/vps-swtest.md` |
| `notes/claude/2026-04-24-194555-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-20-113423-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `decisions/2026-04-28-rustdesk-lejianwen-pro-migration.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/rustdesk.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-30-221054-найди-инфу-вчера-оксане-делали-доступ-через-рустде.md` | `projects/niikn/office-pc.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/proxmox-inventory.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-29-231939-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/happ-routing-roscomvpn.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/apple-id-us-on-russia.md` |
| `notes/claude/2026-05-04-100627-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/znamenskoye/network-topology-diagram.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/mmfb/mikrotik.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/niikn/mikrotik.md` |
| `notes/claude/2026-04-24-165527-новый-клиент-ммфб-юрий-витальевич-нужно-подключить.md` | `projects/mmfb/yuri-vitalievich.md` |
| `notes/claude/2026-04-29-160010-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/clients/yaroslav-happ-setup.md` |
| `notes/claude/2026-05-04-085317-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/dttb/network-topology-diagram.md` |
| `notes/claude/2026-04-29-071329-на-компе-юрия-продолжим-проверь-он-сети.md` | `projects/mmfb/otchet-yuri-2026-04.md` |
| `notes/claude/2026-04-21-203517-дай-мне-команду-в-сшел-виндовс-установка-нетбирд-и.md` | `/Users/ai/.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag.md` |
| `notes/claude/2026-04-29-150044-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/vpn-clients.md` |
| `notes/claude/2026-04-29-223542-создадим-еще-одного-пользователя-подключение-к-vpn.md` | `snippets/clients/sergey-znamenskoye-happ-setup.md` |
| `notes/claude/2026-04-28-134112-можешь-найти-кп-мичуринец.md` | `projects/dttb/znamenskoye-network-topology.md` |
| `notes/claude/2026-04-28-134112-можешь-найти-кп-мичуринец.md` | `claude-memory/benelux-topology.md` |
| `notes/claude/2026-04-25-001105-на-сервере-glavtorg-можешь-запустить-виртулку-с-ам.md` | `projects/glavtorg/README.md` |
| `notes/claude/2026-04-24-230658-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-193827-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-193827-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `projects/dttb/vpn-clients.md` |
| `notes/claude/2026-04-29-180420-создадим-еще-одного-пользователя-подключение-к-vpn.md` | `snippets/clients/sergey-znamenskoye-happ-setup.md` |
| `notes/claude/2026-04-20-101023-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/niikn/openwrt-bypass.md` |
| `notes/claude/2026-04-24-194414-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-194414-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/apple-id-us-on-russia.md` |
| `notes/claude/2026-05-04-124829-в-ниикн-нспд.md` | `projects/niikn/govru-quickfix-playbook.md` |
| `notes/claude/2026-04-28-132949-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/rustdesk.md` |
| `notes/claude/2026-04-29-163821-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/amnezia-split-tunnel-ru.md` |
| `notes/claude/2026-04-29-151943-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/clients/yaroslav-happ-setup.md` |
| `notes/claude/2026-04-29-151943-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/vpn-clients.md` |
| `notes/claude/2026-04-29-151943-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-05-04-093928-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/niikn/network-topology-diagram.md` |
| `notes/claude/2026-04-24-202451-новый-клиент-ммфб-юрий-витальевич-нужно-подключить.md` | `projects/mmfb/yuri-vitalievich.md` |
| `notes/claude/2026-04-29-001915-на-компе-юрия-продолжим-проверь-он-сети.md` | `projects/mmfb/yuri-vitalievich.md` |
| `notes/claude/2026-04-21-154602-охотхозяйство-с-openwrt-на-orange-pi-нужно-настрои.md` | `decisions/2026-04-21-znamenskoye-ohothozyistvo-wg-backup-channel.md` |
| `notes/claude/2026-04-21-154602-охотхозяйство-с-openwrt-на-orange-pi-нужно-настрои.md` | `claude-memory/znamenskoye-ohothozyistvo.md` |
## Без frontmatter (21)
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `notes/ru-geoblocked-services.md`
- `projects/dttb/znamenskoye-log.md`
- `projects/niikn/office-pc.md`
- `projects/niikn/kripto-arm.md`
- `projects/mmfb/yuri-vitalievich.md`
- `projects/mmfb/otchet-yuri-2026-04.md`
- `projects/dttb/graphify-out/GRAPH_REPORT.md`
- `snippets/happ-vpn-client-instruction.md`
- `snippets/invoice-template.md`
- `snippets/assets/happ-routing-roscomvpn/README-upstream.md`
- `claude-memory/servicedesk-dttb.md`
- `claude-memory/benelux.md`
- `claude-memory/nextcloud-dttb.md`
- `claude-memory/nvr-fix.md`
- `claude-memory/videonablyudenie.md`
- `claude-memory/znamenskoe-home.md`
- `claude-memory/niikn-nextcloud.md`
- `claude-memory/krasnogorsk.md`
- `claude-memory/mas-niikn.md`
- `claude-memory/MEMORY.md`
## Orphan — без бэклинков (51)
_Эти файлы никто не упоминает через `[[..]]`. Кандидаты на удаление или добавление ссылок._
- `decisions/2026-04-30-niikn-culture-gov-fakeip-fix.md`
- `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md`
- `decisions/2026-04-28-netbird-watchdog-lxc-132-137.md`
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `decisions/2026-05-06-kb-search-overhaul.md`
- `decisions/2026-04-28-niikn-uookn-sev-gov-fakeip-fix.md`
- `decisions/2026-05-04-niikn-nspd-via-netbird-lionart.md`
- `notes/ru-geoblocked-services.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/niikn/office-pc.md`
- `projects/niikn/mailcow.md`
- `projects/niikn/NIIKN-Infrastructure.md`
- `projects/niikn/groupfolders-migration.md`
- `projects/niikn/credentials.md`
- `projects/niikn/changelog.md`
- `projects/niikn/matrix.md`
- `projects/niikn/clawdbot-niikn.md`
- `projects/niikn/proxmox.md`
- `projects/niikn/NIIKN-ChangeLog.md`
- `projects/niikn/npm.md`
- `projects/niikn/openwrt-bypass.md`
- `projects/niikn/network-topology-diagram.md`
- `projects/niikn/NC-Talk-Setup.md`
- `projects/niikn/domofon.md`
- `projects/niikn/vpn.md`
- `projects/mmfb/mikrotik.md`
- `projects/dttb/graphify-out/GRAPH_REPORT.md`
- `snippets/happ-routing-roscomvpn.md`
- `snippets/invoice-template.md`
- `snippets/clients/oksana-niikn-rustdesk.md`
- ... +21 ещё
## TODO без даты (70 шт в 10 файлах)
- `decisions/2026-04-30-rustdesk-pre-prod-audit.md` — 13 шт
- `projects/lipki/README.md` — 11 шт
- `templates/vpn-client.md` — 7 шт
- `decisions/2026-04-29-rustdesk-client-deployment-package.md` — 6 шт
- `projects/openwrt-4/README.md` — 6 шт
- `projects/benilux/README.md` — 6 шт
- `projects/sergey/README.md` — 6 шт
- `projects/dttb/vpn-clients.md` — 5 шт
- `projects/vishnevyy-sad/README.md` — 5 шт
- `claude-memory/mas-niikn.md` — 5 шт
## Дубликаты имён (6)
- `README.md`:
- `README.md`
- `decisions/README.md`
- `notes/README.md`
- `projects/znamenskoye/README.md`
- `projects/openwrt-4/README.md`
- `projects/dttb/README.md`
- `projects/glavtorg/README.md`
- `projects/benilux/README.md`
- `projects/vishnevyy-sad/README.md`
- `projects/sergey/README.md`
- `projects/niikn/README.md`
- `projects/lipki/README.md`
- `projects/krasnogorsk/README.md`
- `projects/mmfb/README.md`
- `projects/buzharovo/README.md`
- `projects/zelenograd/README.md`
- `projects/dttb/nextcloud-talk-bot/README.md`
- `snippets/README.md`
- `snippets/mac-dictation/README.md`
- `scripts/README.md`
- `nextcloud.md`:
- `projects/nextcloud.md`
- `projects/dttb/nextcloud.md`
- `network-topology-diagram.md`:
- `projects/znamenskoye/network-topology-diagram.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/niikn/network-topology-diagram.md`
- `proxmox-inventory.md`:
- `projects/dttb/proxmox-inventory.md`
- `projects/mmfb/proxmox-inventory.md`
- `credentials.md`:
- `projects/dttb/credentials.md`
- `projects/niikn/credentials.md`
- `mikrotik.md`:
- `projects/niikn/mikrotik.md`
- `projects/mmfb/mikrotik.md`
---
*Генерируется `scripts/kb-health.py`. JSON-версия в `audit/health-latest.json` для agent-loop.*

View File

@@ -0,0 +1,62 @@
---
date: 2026-05-17
type: audit
source: kb-audit-npm.py
tags: [audit, drift, npm]
---
# NPM drift audit — 2026-05-17
Сверка [[../projects/dttb/npm-proxy-hosts|npm-proxy-hosts.md]] с NPM API (https://npm.dttb.ru).
- Живых proxy hosts: **22**
- В KB: **20**
- Совпадений: 20 / новых: 2 / удалённых из NPM: 0 / с изменениями: 3
## ⚠ Новые hosts (в NPM есть, в KB нет)
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
## 🔄 Изменения (ID совпадает, но что-то сменилось)
### #12 `bitrix24.dttb.ru`
- backend: KB=`10.0.0.223:8080` → live=`10.0.0.224:8080`
### #14 `remot.dttb.ru`
- backend: KB=`10.0.0.43:21114` → live=`10.0.0.244:21114`
### #22 `git.dttb.ru`
- ssl: KB=✗ → live=✓
## Полный живой список
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 1 | `dttb.ru` | `10.0.0.230:11001` | ✓ | on |
| 2 | `office.dttb.ru` | `10.0.0.169:8080` | ✓ | on |
| 3 | `itilegent.ru` | `10.0.0.223:8080` | ✓ | on |
| 4 | `npm.dttb.ru` | `10.0.0.195:81` | ✓ | on |
| 5 | `porteiner.dttb.ru` | `10.0.0.10:9443` | ✓ | on |
| 6 | `pve.dttb.ru` | `10.0.0.250:8006` | ✓ | on |
| 9 | `ai.dttb.ru` | `10.0.0.179:8080` | ✓ | on |
| 10 | `bit.dttb.ru` | `10.0.0.217:8080` | ✓ | on |
| 11 | `link.dttb.ru` | `10.0.0.184:3000` | ✓ | on |
| 12 | `bitrix24.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 13 | `ip.dttb.ru` | `10.0.0.112:8840` | ✓ | on |
| 14 | `remot.dttb.ru` | `10.0.0.244:21114` | ✓ | on |
| 15 | `plex.dttb.ru` | `10.0.0.200:32400` | ✓ | on |
| 16 | `home.dttb.ru` | `10.0.0.155:8123` | ✓ | on |
| 17 | `z.dttb.ru` | `10.0.0.220:80` | ✓ | on |
| 21 | `rec.dttb.ru` | `10.0.0.227:8091` | ✓ | on |
| 22 | `git.dttb.ru` | `10.0.0.189:3000` | ✓ | on |
| 23 | `matrix.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 25 | `mail.dttb.ru` | `10.0.0.107:443` | ✓ | on |
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
| 28 | `bot.dttb.ru` | `10.0.0.239:18789` | ✓ | on |
---
*Автоматически через `scripts/kb-audit-npm.py`.*

View File

@@ -0,0 +1,37 @@
---
date: 2026-05-17
type: audit
source: scripts/kb-objects-audit.py
tags: [audit, objects, frontmatter, links]
score: 6
---
# KB objects audit — 2026-05-17
**Score (меньше = лучше): `6`**
- Проектов с frontmatter: **13/13** (0 проблем)
- NetBird online-пиров без проектной карточки: **3**
- Битых wiki-ссылок `[[...]]`: **0**
## Frontmatter в projects/
✅ все проекты имеют валидный frontmatter
## Online netbird-пиры без проектной карточки
Эти пиры онлайн в NetBird, но не привязаны ни к одной projects/-странице.
Бот не сможет ответить «найди X» осмысленно — нет файла или alias.
Лечение: либо создать stub в `projects/<slug>/README.md` (см. `projects/lipki/` как образец),
либо добавить имя пира как полную строку в `aliases` подходящего проекта.
| NetBird-имя | IP | OS | Город |
|---|---|---|---|
| `DESKTOP-2IOQS54` | 100.70.82.83 | Windows 10 | Saransk |
| `DESKTOP-AGBMLPN` | 100.70.0.106 | Windows 11 | Helsinki |
| `DESKTOP-HL0BB05` | 100.70.235.80 | Windows 11 | Lipetsk |
## Битые wiki-ссылки
✅ битых ссылок не найдено

View File

@@ -0,0 +1,185 @@
---
date: 2026-05-17
type: audit-proposed
source: kb-audit-propose.sh (Opus 4.7)
tags: [audit, proposed, inventory]
---
# Предложенные правки inventory — 2026-05-17
Сгенерировано Claude Opus на основе [[2026-05-17-drift|drift-отчёта]].
**Правки НЕ применены.** Ревью — ты. Apply — вручную.
## 1. Резюме
В Proxmox появились 3 гостя, отсутствующих в inventory (LXC 128 profi-parser — спорно, VM 131 ubuntu, LXC 139 severny-les). Также обнаружены расхождения статусов (Mailcow, ZnamSecurityBot, vpn-proxy стали stopped) и переименования удалённых VM 129/133, которые снова live.
---
## 2. Конкретные правки
### 2.1. VM 107 — Mailcow: статус running → stopped
Перенести из секции "🟢 Запущенные VM" в таблицу "🔴 Остановленные VM":
```diff
- ### VM 107 — Mailcow
- | Параметр | Значение |
- |----------|----------|
- | Статус | 🟢 running |
- | CPU | 4 vCPU |
- | RAM | 8 GB |
- | Диск | 60 GB |
- | IP | 10.0.0.107 |
- | NPM домен | mail.dttb.ru |
- | Назначение | Почтовый сервер dttb.ru |
```
Добавить строку в таблицу остановленных VM:
```diff
+ | 107 | Mailcow | 4 | 8 GB | 60 GB | Почтовый сервер dttb.ru (mail.dttb.ru) |
```
---
### 2.2. VM 131 — ubuntu: добавить (новый, running)
Добавить в секцию "🟢 Запущенные VM":
```diff
+ ### VM 131 — ubuntu
+ | Параметр | Значение |
+ |----------|----------|
+ | Статус | 🟢 running |
+ | Назначение | Ubuntu (уточнить) |
```
---
### 2.3. VM 129 — profi-parser-vm: обновить в "Удалённые"
VM 129 жива (stopped) и переименована. Убрать из "Удалённые", добавить в остановленные VM:
```diff
## 🗑️ Удалённые (история)
- | 129 | Clawdbot | ~апрель 2026 | Данные перенесены на code-server (132) в `/root/backup-lxc129/`, IP 10.0.0.206 освобождён |
```
```diff
## 🔴 Остановленные VM (QEMU)
+ | 129 | profi-parser-vm | — | — | — | Парсер profi (бывш. Clawdbot) |
```
---
### 2.4. VM 133 — s1c-buzharovo: обновить в "Удалённые"
VM 133 жива (running) и переименована. Убрать из "Удалённые", добавить в запущенные VM:
```diff
## 🗑️ Удалённые (история)
- | 133 | clawdbot-1 | ~апрель 2026 | Функционал мигрирован на openclaw (137) |
```
```diff
+ ### VM 133 — s1c-buzharovo
+ | Параметр | Значение |
+ |----------|----------|
+ | Статус | 🟢 running |
+ | Назначение | 1С Бужарово (уточнить) |
```
---
### 2.5. LXC 134 — ZnamSecurityBot: статус running → stopped
Убрать из секции "🟢 Запущенные LXC", добавить строку в "🔴 Остановленные LXC":
```diff
- ### LXC 134 — ZnamSecurityBot
- | Параметр | Значение |
- |----------|----------|
- | Статус | 🟢 running |
- | IP | 10.0.0.238 |
- | Tags | ai, assistant, community-script |
- | Назначение | ZnamSecurity Telegram-бот |
```
```diff
## 🔴 Остановленные LXC
+ | 134 | ZnamSecurityBot | ZnamSecurity Telegram-бот |
```
---
### 2.6. LXC 138 — vpn-proxy: статус running → stopped
Убрать из секции "🟢 Запущенные LXC", добавить строку в "🔴 Остановленные LXC":
```diff
- ### LXC 138 — vpn-proxy
- | Параметр | Значение |
- |----------|----------|
- | Статус | 🟢 running |
- | IP | 10.0.0.141 (LAN) / 100.70.161.29 (NetBird) |
- | Назначение | VPN-proxy (детали уточнить) |
```
```diff
## 🔴 Остановленные LXC
+ | 138 | vpn-proxy | VPN-proxy |
```
---
### 2.7. LXC 139 — severny-les: добавить (новый, running)
Добавить в секцию "🟢 Запущенные LXC":
```diff
+ ### LXC 139 — severny-les
+ | Параметр | Значение |
+ |----------|----------|
+ | Статус | 🟢 running |
+ | Назначение | Северный лес (уточнить) |
```
---
### 2.8. Обновить сводную таблицу
```diff
- | QEMU VM | 15 | 5 | 10 |
- | LXC | 21 | 11 | 10 |
- | **Итого** | **36** | **16** | **20** |
+ | QEMU VM | 17 | 5 | 12 |
+ | LXC | 22 | 9 | 13 |
+ | **Итого** | **39** | **14** | **25** |
```
*(17 VM: +131, +129 из удалённых, +133 из удалённых; 22 LXC: +139; running: 5 VM (106,111,127,131,133,250=6 на самом деле... пересчитаю)*
Корректный пересчёт:
- VM running: 106, 111, 127, 131, 133, 250 = **6**
- VM stopped: 100, 104, 105, 107, 109, 110, 112, 120, 124, 125, 129, 130 = **12**
- LXC running: 103, 113, 114, 115, 116, 132, 136, 137, 139 = **9**
- LXC stopped: 101, 102, 108, 117, 118, 119, 121, 122, 123, 126, 128, 134, 138 = **13**
```diff
+ | QEMU VM | 18 | 6 | 12 |
+ | LXC | 22 | 9 | 13 |
+ | **Итого** | **40** | **15** | **25** |
```
---
## 3. Предупреждения
1. **LXC 128 (profi-parser)** — drift-отчёт говорит что его нет в inventory, но он уже есть в таблице остановленных LXC. Возможно ложное срабатывание скрипта аудита. Правка не требуется.
2. **VM 129 и 133** — в inventory записаны как удалённые (Clawdbot, clawdbot-1), но live показывает их с другими именами (profi-parser-vm, s1c-buzharovo). Похоже VMID были переиспользованы. Историю стоит сохранить комментарием.
3. **VM 131 (ubuntu), LXC 139 (severny-les)** — нет данных об IP, ресурсах, назначении. Потребуется уточнение вручную (`pct config 139`, `qm config 131`).
4. **Дата обновления** в шапке файла: сменить `2026-04-17``2026-05-17`.

View File

@@ -0,0 +1,52 @@
---
date: 2026-05-24
type: audit
source: kb-audit-creds.py
tags: [audit, creds, reachability]
---
# Credentials reachability — 2026-05-24
Ping-проверка URL из [[../projects/dttb/credentials|credentials.md]].
Проверяется только reachability (HTTP status), не реальный логин.
- Всего URL: **20**
- ✓ Reachable: 15 / ⚠ Questionable: 3 / ❌ Unreachable: 2
## ❌ Недоступные (проверить: сервер упал? URL поменялся?)
| URL | Status | Detail | Контекст |
|---|---|---|---|
| `http://10.0.0.189:3000` | FAIL | [Errno 113] No route to host | --------- ---------- URL http://10.0.0.189:30 |
| `http://git.dttb.ru` | 502 | Bad Gateway | RL http://10.0.0.189:3000 / http://git.dttb.ru |
## ⚠ Нестандартный ответ
| URL | Status | Detail |
|---|---|---|
| `https://remot.dttb.ru/swagger/index.html` | 404 | Not Found |
| `https://api.netbird.io` | 404 | Not Found |
| `https://api.netbird.io/api/setup-keys` | 404 | Not Found |
## ✓ Все ответили нормально
| URL | Status | Категория |
|---|---|---|
| `https://10.0.0.250:8006` | 200 | ✓ reachable |
| `https://pve.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.195:81` | 200 | ✓ reachable |
| `https://npm.dttb.ru` | 200 | ✓ reachable |
| `https://remot.dttb.ru/_admin` | 200 | ✓ reachable |
| `https://dttb.ru` | 200 | ✓ reachable |
| `https://dttb.ru/remote.php/dav/files/admin` | 401 | ✓ auth-required (сервер жив) |
| `https://vps.sweb.ru` | 200 | ✓ reachable |
| `https://api.sweb.ru/domains/dns` | 200 | ✓ reachable |
| `https://mail.niikn.com` | 200 | ✓ reachable |
| `http://192.168.1.22:81` | 200 | ✓ reachable |
| `https://edit.telegra.ph/auth/f1tfgzYpPpGlAr7cYHRzSeH59fYuNVB2V3fbCdypDc` | 200 | ✓ reachable |
| `https://api.telegra.ph/createPage` | 200 | ✓ reachable |
| `https://api.telegra.ph/editPage` | 200 | ✓ reachable |
| `https://telegra.ph/Nastrojka-VPN-04-24-2` | 200 | ✓ reachable |
---
*Автоматически через `scripts/kb-audit-creds.py`.*

View File

@@ -0,0 +1,81 @@
---
date: 2026-05-24
type: audit
source: kb-audit-dns.py
tags: [audit, dns]
---
# DNS resolve audit — 2026-05-24
Резолвим все домены из NPM через публичный DNS (8.8.8.8) и локальный роутер (10.0.0.1).
- Всего доменов: **22**
- NXDOMAIN на 8.8.8.8: 2 / пустой ответ локально: 1 / split-horizon: 20
## ❌ NXDOMAIN / не резолвится на 8.8.8.8 (публичный DNS)
| Домен | Локальный IP |
|---|---|
| `itilegent.ru` | (тоже нет) |
| `vpn.dttb.ru` | 10.0.0.195 |
## ⚠ Split-horizon — разные IP снаружи и внутри
Это нормально для *.dttb.ru (внешний Let's Encrypt IP vs локальный 10.0.0.195). Но неожиданный split может быть багом.
| Домен | Публичный (8.8.8.8) | Локальный (10.0.0.1) |
|---|---|---|
| `ai.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bit.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bitrix24.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `git.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `home.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ip.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `link.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `mail.dttb.ru` | 176.62.183.186 | 10.0.0.107 |
| `matrix.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `npm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `office.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `plex.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `porteiner.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `pve.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rec.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `remot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `router.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `z.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
## ⚠ Пустой локальный резолв (роутер не знает)
- `itilegent.ru` (публичный: -)
## Полная таблица резолва
| Домен | 8.8.8.8 | 10.0.0.1 |
|---|---|---|
| `ai.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bit.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bitrix24.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `git.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `home.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ip.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `itilegent.ru` | — | — |
| `link.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `mail.dttb.ru` | 176.62.183.186 | 10.0.0.107 |
| `matrix.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `npm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `office.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `plex.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `porteiner.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `pve.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rec.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `remot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `router.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `vpn.dttb.ru` | — | 10.0.0.195 |
| `z.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
---
*Автоматически через `scripts/kb-audit-dns.py`.*

72
audit/2026-05-24-drift.md Normal file
View File

@@ -0,0 +1,72 @@
---
date: 2026-05-24
type: audit
source: kb-audit.py
tags: [audit, drift, infrastructure]
---
# KB drift audit — 2026-05-24
Сравнение живого `pct list` / `qm list` с [[../projects/dttb/proxmox-inventory|proxmox-inventory.md]]
- Живых гостей Proxmox: **40**
- Упомянуто в inventory: **39**
- В обоих: 38 / только в live: 2 / отсутствуют в live: 0
- Известны как удалённые: 1 (в `## 🗑️ Удалённые`)
## ⚠ В Proxmox есть, в inventory НЕТ (надо добавить)
| VMID | Type | Status | Name |
|---|---|---|---|
| 131 | VM | running | ubuntu |
| 139 | LXC | running | severny-les |
## ✓ Удалённые хосты (задокументированы): 135
## Полный живой список
| VMID | Type | Status | Name |
|---|---|---|---|
| 100 | VM | stopped | NV |
| 101 | LXC | stopped | n8n |
| 102 | LXC | stopped | SMB |
| 103 | LXC | running | NPM |
| 104 | VM | stopped | Agent-DVR |
| 105 | VM | stopped | Nextcloud-AIO-dttb.ru |
| 106 | VM | running | pbs |
| 107 | VM | stopped | Mailcow |
| 108 | LXC | stopped | zabbix |
| 109 | VM | stopped | itilelegent |
| 110 | VM | stopped | Cloud |
| 111 | VM | running | WinServer2025 |
| 112 | VM | stopped | cloud-dttb |
| 113 | LXC | running | VaultWarden |
| 114 | LXC | running | LinkWarden |
| 115 | LXC | running | watchyourlan |
| 116 | LXC | running | rustdeskserver |
| 117 | LXC | stopped | motioneye |
| 118 | LXC | stopped | plex |
| 119 | LXC | stopped | myspeed |
| 120 | VM | stopped | 7 |
| 121 | LXC | stopped | docker-windows |
| 122 | LXC | stopped | qbittorrent |
| 123 | LXC | stopped | proxmox-local |
| 124 | VM | stopped | Matrix |
| 125 | VM | stopped | datacentr |
| 126 | LXC | stopped | debian |
| 127 | VM | stopped | haos-17.0 |
| 128 | LXC | stopped | profi-parser |
| 129 | VM | stopped | profi-parser-vm |
| 130 | VM | stopped | Zima-OS |
| 131 | VM | running | ubuntu |
| 132 | LXC | running | code-server |
| 133 | VM | running | s1c-buzharovo |
| 134 | LXC | stopped | ZnamSecurityBot |
| 136 | LXC | running | gitea |
| 137 | LXC | running | openclaw |
| 138 | LXC | stopped | vpn-proxy |
| 139 | LXC | running | severny-les |
| 250 | VM | running | Nextcloud-AIO |
---
*Автоматически сгенерировано `scripts/kb-audit.py`. Применять правки — вручную после ревью.*

202
audit/2026-05-24-health.md Normal file
View File

@@ -0,0 +1,202 @@
---
date: 2026-05-24
type: audit
source: kb-health.py
score: 785
tags: [audit, health, metric]
---
# KB health — 2026-05-24
**Score (меньше = лучше): `785`**
Проверено файлов: 862
## Разбивка
| Категория | Кол-во | Вес | Штраф |
|---|---:|---:|---:|
| broken_wikilinks | 4 | 10 | 40 |
| broken_paths | 48 | 10 | 480 |
| missing_frontmatter | 21 | 3 | 63 |
| orphan_files | 51 | 2 | 102 |
| undated_todos | 70 | 1 | 70 |
| duplicate_basenames | 6 | 5 | 30 |
| **ИТОГО** | | | **785** |
## Битые wikilinks
| Откуда | `[[таргет]]` |
|---|---|
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 0]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 1]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 2]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 3]]` |
## Битые relative-пути
| Откуда | Путь |
|---|---|
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/reference_groq_api.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_win11_unattended_upgrade.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_nspd_blocks_mts.md` |
| `notes/claude/2026-04-21-200915-охотхозяйство-с-openwrt-на-orange-pi-нужно-настрои.md` | `projects/dttb/vps-swtest.md` |
| `notes/claude/2026-04-24-194555-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-20-113423-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `decisions/2026-04-28-rustdesk-lejianwen-pro-migration.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/rustdesk.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-30-221054-найди-инфу-вчера-оксане-делали-доступ-через-рустде.md` | `projects/niikn/office-pc.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/proxmox-inventory.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-29-231939-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/happ-routing-roscomvpn.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/apple-id-us-on-russia.md` |
| `notes/claude/2026-05-04-100627-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/znamenskoye/network-topology-diagram.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/mmfb/mikrotik.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/niikn/mikrotik.md` |
| `notes/claude/2026-04-24-165527-новый-клиент-ммфб-юрий-витальевич-нужно-подключить.md` | `projects/mmfb/yuri-vitalievich.md` |
| `notes/claude/2026-04-29-160010-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/clients/yaroslav-happ-setup.md` |
| `notes/claude/2026-05-04-085317-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/dttb/network-topology-diagram.md` |
| `notes/claude/2026-04-29-071329-на-компе-юрия-продолжим-проверь-он-сети.md` | `projects/mmfb/otchet-yuri-2026-04.md` |
| `notes/claude/2026-04-21-203517-дай-мне-команду-в-сшел-виндовс-установка-нетбирд-и.md` | `/Users/ai/.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag.md` |
| `notes/claude/2026-04-29-150044-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/vpn-clients.md` |
| `notes/claude/2026-04-29-223542-создадим-еще-одного-пользователя-подключение-к-vpn.md` | `snippets/clients/sergey-znamenskoye-happ-setup.md` |
| `notes/claude/2026-04-28-134112-можешь-найти-кп-мичуринец.md` | `projects/dttb/znamenskoye-network-topology.md` |
| `notes/claude/2026-04-28-134112-можешь-найти-кп-мичуринец.md` | `claude-memory/benelux-topology.md` |
| `notes/claude/2026-04-25-001105-на-сервере-glavtorg-можешь-запустить-виртулку-с-ам.md` | `projects/glavtorg/README.md` |
| `notes/claude/2026-04-24-230658-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-193827-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-193827-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `projects/dttb/vpn-clients.md` |
| `notes/claude/2026-04-29-180420-создадим-еще-одного-пользователя-подключение-к-vpn.md` | `snippets/clients/sergey-znamenskoye-happ-setup.md` |
| `notes/claude/2026-04-20-101023-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/niikn/openwrt-bypass.md` |
| `notes/claude/2026-04-24-194414-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-194414-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/apple-id-us-on-russia.md` |
| `notes/claude/2026-05-04-124829-в-ниикн-нспд.md` | `projects/niikn/govru-quickfix-playbook.md` |
| `notes/claude/2026-04-28-132949-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/rustdesk.md` |
| `notes/claude/2026-04-29-163821-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/amnezia-split-tunnel-ru.md` |
| `notes/claude/2026-04-29-151943-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/clients/yaroslav-happ-setup.md` |
| `notes/claude/2026-04-29-151943-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/vpn-clients.md` |
| `notes/claude/2026-04-29-151943-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-05-04-093928-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/niikn/network-topology-diagram.md` |
| `notes/claude/2026-04-24-202451-новый-клиент-ммфб-юрий-витальевич-нужно-подключить.md` | `projects/mmfb/yuri-vitalievich.md` |
| `notes/claude/2026-04-29-001915-на-компе-юрия-продолжим-проверь-он-сети.md` | `projects/mmfb/yuri-vitalievich.md` |
| `notes/claude/2026-04-21-154602-охотхозяйство-с-openwrt-на-orange-pi-нужно-настрои.md` | `decisions/2026-04-21-znamenskoye-ohothozyistvo-wg-backup-channel.md` |
| `notes/claude/2026-04-21-154602-охотхозяйство-с-openwrt-на-orange-pi-нужно-настрои.md` | `claude-memory/znamenskoye-ohothozyistvo.md` |
## Без frontmatter (21)
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `notes/ru-geoblocked-services.md`
- `projects/dttb/znamenskoye-log.md`
- `projects/niikn/office-pc.md`
- `projects/niikn/kripto-arm.md`
- `projects/mmfb/yuri-vitalievich.md`
- `projects/mmfb/otchet-yuri-2026-04.md`
- `projects/dttb/graphify-out/GRAPH_REPORT.md`
- `snippets/happ-vpn-client-instruction.md`
- `snippets/invoice-template.md`
- `snippets/assets/happ-routing-roscomvpn/README-upstream.md`
- `claude-memory/servicedesk-dttb.md`
- `claude-memory/benelux.md`
- `claude-memory/nextcloud-dttb.md`
- `claude-memory/nvr-fix.md`
- `claude-memory/videonablyudenie.md`
- `claude-memory/znamenskoe-home.md`
- `claude-memory/niikn-nextcloud.md`
- `claude-memory/krasnogorsk.md`
- `claude-memory/mas-niikn.md`
- `claude-memory/MEMORY.md`
## Orphan — без бэклинков (51)
_Эти файлы никто не упоминает через `[[..]]`. Кандидаты на удаление или добавление ссылок._
- `decisions/2026-04-30-niikn-culture-gov-fakeip-fix.md`
- `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md`
- `decisions/2026-04-28-netbird-watchdog-lxc-132-137.md`
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `decisions/2026-05-06-kb-search-overhaul.md`
- `decisions/2026-04-28-niikn-uookn-sev-gov-fakeip-fix.md`
- `decisions/2026-05-04-niikn-nspd-via-netbird-lionart.md`
- `notes/ru-geoblocked-services.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/niikn/office-pc.md`
- `projects/niikn/mailcow.md`
- `projects/niikn/NIIKN-Infrastructure.md`
- `projects/niikn/groupfolders-migration.md`
- `projects/niikn/credentials.md`
- `projects/niikn/changelog.md`
- `projects/niikn/matrix.md`
- `projects/niikn/clawdbot-niikn.md`
- `projects/niikn/proxmox.md`
- `projects/niikn/NIIKN-ChangeLog.md`
- `projects/niikn/npm.md`
- `projects/niikn/openwrt-bypass.md`
- `projects/niikn/network-topology-diagram.md`
- `projects/niikn/NC-Talk-Setup.md`
- `projects/niikn/domofon.md`
- `projects/niikn/vpn.md`
- `projects/mmfb/mikrotik.md`
- `projects/dttb/graphify-out/GRAPH_REPORT.md`
- `snippets/happ-routing-roscomvpn.md`
- `snippets/invoice-template.md`
- `snippets/clients/oksana-niikn-rustdesk.md`
- ... +21 ещё
## TODO без даты (70 шт в 10 файлах)
- `decisions/2026-04-30-rustdesk-pre-prod-audit.md` — 13 шт
- `projects/lipki/README.md` — 11 шт
- `templates/vpn-client.md` — 7 шт
- `decisions/2026-04-29-rustdesk-client-deployment-package.md` — 6 шт
- `projects/openwrt-4/README.md` — 6 шт
- `projects/benilux/README.md` — 6 шт
- `projects/sergey/README.md` — 6 шт
- `projects/dttb/vpn-clients.md` — 5 шт
- `projects/vishnevyy-sad/README.md` — 5 шт
- `claude-memory/mas-niikn.md` — 5 шт
## Дубликаты имён (6)
- `README.md`:
- `README.md`
- `decisions/README.md`
- `notes/README.md`
- `projects/znamenskoye/README.md`
- `projects/openwrt-4/README.md`
- `projects/dttb/README.md`
- `projects/glavtorg/README.md`
- `projects/benilux/README.md`
- `projects/vishnevyy-sad/README.md`
- `projects/sergey/README.md`
- `projects/niikn/README.md`
- `projects/lipki/README.md`
- `projects/krasnogorsk/README.md`
- `projects/mmfb/README.md`
- `projects/buzharovo/README.md`
- `projects/zelenograd/README.md`
- `projects/dttb/nextcloud-talk-bot/README.md`
- `snippets/README.md`
- `snippets/mac-dictation/README.md`
- `scripts/README.md`
- `nextcloud.md`:
- `projects/nextcloud.md`
- `projects/dttb/nextcloud.md`
- `network-topology-diagram.md`:
- `projects/znamenskoye/network-topology-diagram.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/niikn/network-topology-diagram.md`
- `proxmox-inventory.md`:
- `projects/dttb/proxmox-inventory.md`
- `projects/mmfb/proxmox-inventory.md`
- `credentials.md`:
- `projects/dttb/credentials.md`
- `projects/niikn/credentials.md`
- `mikrotik.md`:
- `projects/niikn/mikrotik.md`
- `projects/mmfb/mikrotik.md`
---
*Генерируется `scripts/kb-health.py`. JSON-версия в `audit/health-latest.json` для agent-loop.*

View File

@@ -0,0 +1,62 @@
---
date: 2026-05-24
type: audit
source: kb-audit-npm.py
tags: [audit, drift, npm]
---
# NPM drift audit — 2026-05-24
Сверка [[../projects/dttb/npm-proxy-hosts|npm-proxy-hosts.md]] с NPM API (https://npm.dttb.ru).
- Живых proxy hosts: **22**
- В KB: **20**
- Совпадений: 20 / новых: 2 / удалённых из NPM: 0 / с изменениями: 3
## ⚠ Новые hosts (в NPM есть, в KB нет)
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
## 🔄 Изменения (ID совпадает, но что-то сменилось)
### #12 `bitrix24.dttb.ru`
- backend: KB=`10.0.0.223:8080` → live=`10.0.0.224:8080`
### #14 `remot.dttb.ru`
- backend: KB=`10.0.0.43:21114` → live=`10.0.0.244:21114`
### #22 `git.dttb.ru`
- ssl: KB=✗ → live=✓
## Полный живой список
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 1 | `dttb.ru` | `10.0.0.230:11001` | ✓ | on |
| 2 | `office.dttb.ru` | `10.0.0.169:8080` | ✓ | on |
| 3 | `itilegent.ru` | `10.0.0.223:8080` | ✓ | on |
| 4 | `npm.dttb.ru` | `10.0.0.195:81` | ✓ | on |
| 5 | `porteiner.dttb.ru` | `10.0.0.10:9443` | ✓ | on |
| 6 | `pve.dttb.ru` | `10.0.0.250:8006` | ✓ | on |
| 9 | `ai.dttb.ru` | `10.0.0.179:8080` | ✓ | on |
| 10 | `bit.dttb.ru` | `10.0.0.217:8080` | ✓ | on |
| 11 | `link.dttb.ru` | `10.0.0.184:3000` | ✓ | on |
| 12 | `bitrix24.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 13 | `ip.dttb.ru` | `10.0.0.112:8840` | ✓ | on |
| 14 | `remot.dttb.ru` | `10.0.0.244:21114` | ✓ | on |
| 15 | `plex.dttb.ru` | `10.0.0.200:32400` | ✓ | on |
| 16 | `home.dttb.ru` | `10.0.0.155:8123` | ✓ | on |
| 17 | `z.dttb.ru` | `10.0.0.220:80` | ✓ | on |
| 21 | `rec.dttb.ru` | `10.0.0.227:8091` | ✓ | on |
| 22 | `git.dttb.ru` | `10.0.0.189:3000` | ✓ | on |
| 23 | `matrix.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 25 | `mail.dttb.ru` | `10.0.0.107:443` | ✓ | on |
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
| 28 | `bot.dttb.ru` | `10.0.0.239:18789` | ✓ | on |
---
*Автоматически через `scripts/kb-audit-npm.py`.*

View File

@@ -0,0 +1,37 @@
---
date: 2026-05-24
type: audit
source: scripts/kb-objects-audit.py
tags: [audit, objects, frontmatter, links]
score: 6
---
# KB objects audit — 2026-05-24
**Score (меньше = лучше): `6`**
- Проектов с frontmatter: **13/13** (0 проблем)
- NetBird online-пиров без проектной карточки: **3**
- Битых wiki-ссылок `[[...]]`: **0**
## Frontmatter в projects/
✅ все проекты имеют валидный frontmatter
## Online netbird-пиры без проектной карточки
Эти пиры онлайн в NetBird, но не привязаны ни к одной projects/-странице.
Бот не сможет ответить «найди X» осмысленно — нет файла или alias.
Лечение: либо создать stub в `projects/<slug>/README.md` (см. `projects/lipki/` как образец),
либо добавить имя пира как полную строку в `aliases` подходящего проекта.
| NetBird-имя | IP | OS | Город |
|---|---|---|---|
| `DESKTOP-2IOQS54` | 100.70.82.83 | Windows 10 | Saransk |
| `DESKTOP-AGBMLPN` | 100.70.0.106 | Windows 11 | Helsinki |
| `DESKTOP-HL0BB05` | 100.70.235.80 | Windows 11 | Lipetsk |
## Битые wiki-ссылки
✅ битых ссылок не найдено

View File

@@ -0,0 +1,13 @@
---
date: 2026-05-24
type: audit-proposed
source: kb-audit-propose.sh (Opus 4.7)
tags: [audit, proposed, inventory]
---
# Предложенные правки inventory — 2026-05-24
Сгенерировано Claude Opus на основе [[2026-05-24-drift|drift-отчёта]].
**Правки НЕ применены.** Ревью — ты. Apply — вручную.

View File

@@ -0,0 +1,47 @@
---
date: 2026-05-31
type: audit
source: kb-audit-creds.py
tags: [audit, creds, reachability]
---
# Credentials reachability — 2026-05-31
Ping-проверка URL из [[../projects/dttb/credentials|credentials.md]].
Проверяется только reachability (HTTP status), не реальный логин.
- Всего URL: **20**
- ✓ Reachable: 17 / ⚠ Questionable: 3 / ❌ Unreachable: 0
## ⚠ Нестандартный ответ
| URL | Status | Detail |
|---|---|---|
| `https://remot.dttb.ru/swagger/index.html` | 404 | Not Found |
| `https://api.netbird.io` | 404 | Not Found |
| `https://api.netbird.io/api/setup-keys` | 404 | Not Found |
## ✓ Все ответили нормально
| URL | Status | Категория |
|---|---|---|
| `https://10.0.0.250:8006` | 200 | ✓ reachable |
| `https://pve.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.189:3000` | 200 | ✓ reachable |
| `http://git.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.195:81` | 200 | ✓ reachable |
| `https://npm.dttb.ru` | 200 | ✓ reachable |
| `https://remot.dttb.ru/_admin` | 200 | ✓ reachable |
| `https://dttb.ru` | 200 | ✓ reachable |
| `https://dttb.ru/remote.php/dav/files/admin` | 401 | ✓ auth-required (сервер жив) |
| `https://vps.sweb.ru` | 200 | ✓ reachable |
| `https://api.sweb.ru/domains/dns` | 200 | ✓ reachable |
| `https://mail.niikn.com` | 200 | ✓ reachable |
| `http://192.168.1.22:81` | 200 | ✓ reachable |
| `https://edit.telegra.ph/auth/f1tfgzYpPpGlAr7cYHRzSeH59fYuNVB2V3fbCdypDc` | 200 | ✓ reachable |
| `https://api.telegra.ph/createPage` | 200 | ✓ reachable |
| `https://api.telegra.ph/editPage` | 200 | ✓ reachable |
| `https://telegra.ph/Nastrojka-VPN-04-24-2` | 200 | ✓ reachable |
---
*Автоматически через `scripts/kb-audit-creds.py`.*

View File

@@ -0,0 +1,83 @@
---
date: 2026-05-31
type: audit
source: kb-audit-dns.py
tags: [audit, dns]
---
# DNS resolve audit — 2026-05-31
Резолвим все домены из NPM через публичный DNS (8.8.8.8) и локальный роутер (10.0.0.1).
- Всего доменов: **23**
- NXDOMAIN на 8.8.8.8: 2 / пустой ответ локально: 1 / split-horizon: 21
## ❌ NXDOMAIN / не резолвится на 8.8.8.8 (публичный DNS)
| Домен | Локальный IP |
|---|---|
| `itilegent.ru` | (тоже нет) |
| `vpn.dttb.ru` | 10.0.0.195 |
## ⚠ Split-horizon — разные IP снаружи и внутри
Это нормально для *.dttb.ru (внешний Let's Encrypt IP vs локальный 10.0.0.195). Но неожиданный split может быть багом.
| Домен | Публичный (8.8.8.8) | Локальный (10.0.0.1) |
|---|---|---|
| `ai.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bit.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bitrix24.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `git.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `home.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ip.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `link.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `mail.dttb.ru` | 176.62.183.186 | 10.0.0.107 |
| `matrix.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `npm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `office.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `omni.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `plex.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `porteiner.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `pve.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rec.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `remot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `router.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `z.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
## ⚠ Пустой локальный резолв (роутер не знает)
- `itilegent.ru` (публичный: -)
## Полная таблица резолва
| Домен | 8.8.8.8 | 10.0.0.1 |
|---|---|---|
| `ai.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bit.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bitrix24.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `git.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `home.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ip.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `itilegent.ru` | — | — |
| `link.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `mail.dttb.ru` | 176.62.183.186 | 10.0.0.107 |
| `matrix.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `npm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `office.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `omni.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `plex.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `porteiner.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `pve.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rec.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `remot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `router.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `vpn.dttb.ru` | — | 10.0.0.195 |
| `z.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
---
*Автоматически через `scripts/kb-audit-dns.py`.*

72
audit/2026-05-31-drift.md Normal file
View File

@@ -0,0 +1,72 @@
---
date: 2026-05-31
type: audit
source: kb-audit.py
tags: [audit, drift, infrastructure]
---
# KB drift audit — 2026-05-31
Сравнение живого `pct list` / `qm list` с [[../projects/dttb/proxmox-inventory|proxmox-inventory.md]]
- Живых гостей Proxmox: **40**
- Упомянуто в inventory: **39**
- В обоих: 38 / только в live: 2 / отсутствуют в live: 0
- Известны как удалённые: 1 (в `## 🗑️ Удалённые`)
## ⚠ В Proxmox есть, в inventory НЕТ (надо добавить)
| VMID | Type | Status | Name |
|---|---|---|---|
| 131 | VM | stopped | ubuntu |
| 139 | LXC | running | severny-les |
## ✓ Удалённые хосты (задокументированы): 135
## Полный живой список
| VMID | Type | Status | Name |
|---|---|---|---|
| 100 | VM | stopped | NV |
| 101 | LXC | stopped | n8n |
| 102 | LXC | stopped | SMB |
| 103 | LXC | running | NPM |
| 104 | VM | stopped | Agent-DVR |
| 105 | VM | stopped | Nextcloud-AIO-dttb.ru |
| 106 | VM | running | pbs |
| 107 | VM | running | Mailcow |
| 108 | LXC | stopped | zabbix |
| 109 | VM | stopped | itilelegent |
| 110 | VM | stopped | Cloud |
| 111 | VM | running | WinServer2025 |
| 112 | VM | running | cloud-dttb |
| 113 | LXC | running | VaultWarden |
| 114 | LXC | running | LinkWarden |
| 115 | LXC | running | watchyourlan |
| 116 | LXC | running | rustdeskserver |
| 117 | LXC | running | motioneye |
| 118 | LXC | stopped | plex |
| 119 | LXC | running | myspeed |
| 120 | VM | stopped | 7 |
| 121 | LXC | stopped | docker-windows |
| 122 | LXC | stopped | qbittorrent |
| 123 | LXC | stopped | proxmox-local |
| 124 | VM | stopped | Matrix |
| 125 | VM | stopped | datacentr |
| 126 | LXC | running | debian |
| 127 | VM | running | haos-17.0 |
| 128 | LXC | stopped | profi-parser |
| 129 | VM | stopped | profi-parser-vm |
| 130 | VM | stopped | Zima-OS |
| 131 | VM | stopped | ubuntu |
| 132 | LXC | running | code-server |
| 133 | VM | stopped | s1c-buzharovo |
| 134 | LXC | running | ZnamSecurityBot |
| 136 | LXC | running | gitea |
| 137 | LXC | running | openclaw |
| 138 | LXC | running | vpn-proxy |
| 139 | LXC | running | severny-les |
| 250 | VM | running | Nextcloud-AIO |
---
*Автоматически сгенерировано `scripts/kb-audit.py`. Применять правки — вручную после ревью.*

221
audit/2026-05-31-health.md Normal file
View File

@@ -0,0 +1,221 @@
---
date: 2026-05-31
type: audit
source: kb-health.py
score: 1181
tags: [audit, health, metric]
---
# KB health — 2026-05-31
**Score (меньше = лучше): `1181`**
Проверено файлов: 1132
## Разбивка
| Категория | Кол-во | Вес | Штраф |
|---|---:|---:|---:|
| broken_wikilinks | 14 | 10 | 140 |
| broken_paths | 76 | 10 | 760 |
| missing_frontmatter | 21 | 3 | 63 |
| orphan_files | 54 | 2 | 108 |
| undated_todos | 80 | 1 | 80 |
| duplicate_basenames | 6 | 5 | 30 |
| **ИТОГО** | | | **1181** |
## Битые wikilinks
| Откуда | `[[таргет]]` |
|---|---|
| `decisions/2026-05-26-omni-domain-and-update.md` | `[[feedback_spaceweb_dns_desync]]` |
| `decisions/2026-05-23-glavtorg-autologon-off.md` | `[[feedback_vmware_workstation_session]]` |
| `projects/dttb/finland-hostkey-vps.md` | `[[../../claude-memory/finland-vps-security]]` |
| `projects/niikn/maul-pc.md` | `[[project_niikn_maxim_assistant]]` |
| `projects/niikn/maul-pc.md` | `[[../../snippets/netbird-claude-install.ps1]]` |
| `projects/niikn/maul-pc.md` | `[[../../snippets/clients/]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 0]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 1]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 2]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 3]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_busybox_ip_br_flag\]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_iphone_breaks_fakeip\]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring]]` |
| `snippets/podkop-fakeip-diagnostics.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_openclaw_crash_loop]]` |
## Битые relative-пути
| Откуда | Путь |
|---|---|
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/reference_groq_api.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_win11_unattended_upgrade.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_nspd_blocks_mts.md` |
| `notes/claude/2026-04-21-200915-охотхозяйство-с-openwrt-на-orange-pi-нужно-настрои.md` | `projects/dttb/vps-swtest.md` |
| `notes/claude/2026-05-21-102751-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-amnezia-reinstall.md` |
| `notes/claude/2026-04-24-194555-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-20-113423-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `decisions/2026-04-28-rustdesk-lejianwen-pro-migration.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/rustdesk.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-30-221054-найди-инфу-вчера-оксане-делали-доступ-через-рустде.md` | `projects/niikn/office-pc.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/proxmox-inventory.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-29-231939-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/happ-routing-roscomvpn.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/apple-id-us-on-russia.md` |
| `notes/claude/2026-05-04-100627-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/znamenskoye/network-topology-diagram.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/mmfb/mikrotik.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/niikn/mikrotik.md` |
| `notes/claude/2026-04-24-165527-новый-клиент-ммфб-юрий-витальевич-нужно-подключить.md` | `projects/mmfb/yuri-vitalievich.md` |
| `notes/claude/2026-05-06-210824-superwhisper-можешь-проверить-не-работает.md` | `../knowledge-base/decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` |
| `notes/claude/2026-05-20-195902-давай-проверим-openvrt-benelux.md` | `decisions/2026-05-20-benelux-compromise.md` |
| `notes/claude/2026-05-28-131315-нужно-в-нетбирд-найти-и-настроить-подключение-к-эт.md` | `projects/niikn/maul-pc.md` |
| `notes/claude/2026-04-29-160010-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/clients/yaroslav-happ-setup.md` |
| `notes/claude/2026-05-04-085317-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/dttb/network-topology-diagram.md` |
| `notes/claude/2026-05-21-104248-давай-проверим-openvrt-benelux.md` | `projects/benilux/credentials.md` |
| `notes/claude/2026-04-29-071329-на-компе-юрия-продолжим-проверь-он-сети.md` | `projects/mmfb/otchet-yuri-2026-04.md` |
| `notes/claude/2026-05-23-133737-еще-клиент-ярослав-сервера-1с-главторг-жалуется-чт.md` | `projects/glavtorg/instruction-yaroslav-autologon.md` |
| `notes/claude/2026-05-27-191956-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-power-recovery.md` |
| `notes/claude/2026-04-21-203517-дай-мне-команду-в-сшел-виндовс-установка-нетбирд-и.md` | `/Users/ai/.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag.md` |
| `notes/claude/2026-05-28-215219-102531240-администратор-ol260380eg-нужно-подключит.md` | `projects/mmfb/lionart-1c.md` |
| `notes/claude/2026-05-26-111148-нужно-на-omni-робуте-установить-ему-домен-у-тебя-е.md` | `memory/feedback_antigravity_onboarding.md` |
| `notes/claude/2026-05-26-111148-нужно-на-omni-робуте-установить-ему-домен-у-тебя-е.md` | `memory/MEMORY.md` |
| `notes/claude/2026-04-29-150044-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/vpn-clients.md` |
| `notes/claude/2026-04-29-223542-создадим-еще-одного-пользователя-подключение-к-vpn.md` | `snippets/clients/sergey-znamenskoye-happ-setup.md` |
| `notes/claude/2026-05-20-204621-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-amnezia-reinstall.md` |
| `notes/claude/2026-05-20-190402-давай-проверим-openvrt-benelux.md` | `projects/benilux/README.md` |
| `notes/claude/2026-05-20-190402-давай-проверим-openvrt-benelux.md` | `decisions/2026-05-20-benelux-compromise.md` |
| `notes/claude/2026-04-28-134112-можешь-найти-кп-мичуринец.md` | `projects/dttb/znamenskoye-network-topology.md` |
| `notes/claude/2026-04-28-134112-можешь-найти-кп-мичуринец.md` | `claude-memory/benelux-topology.md` |
| `notes/claude/2026-04-25-001105-на-сервере-glavtorg-можешь-запустить-виртулку-с-ам.md` | `projects/glavtorg/README.md` |
| `notes/claude/2026-05-23-123133-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-amnezia-reinstall.md` |
| `notes/claude/2026-04-24-230658-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-193827-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-193827-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `projects/dttb/vpn-clients.md` |
| `notes/claude/2026-05-20-200220-давай-проверим-openvrt-benelux.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-05-27-102650-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-amnezia-reinstall.md` |
| `notes/claude/2026-04-29-180420-создадим-еще-одного-пользователя-подключение-к-vpn.md` | `snippets/clients/sergey-znamenskoye-happ-setup.md` |
| ... | +26 ещё |
## Без frontmatter (21)
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `notes/ru-geoblocked-services.md`
- `projects/dttb/znamenskoye-log.md`
- `projects/niikn/office-pc.md`
- `projects/niikn/kripto-arm.md`
- `projects/mmfb/yuri-vitalievich.md`
- `projects/mmfb/otchet-yuri-2026-04.md`
- `projects/dttb/graphify-out/GRAPH_REPORT.md`
- `snippets/happ-vpn-client-instruction.md`
- `snippets/invoice-template.md`
- `snippets/assets/happ-routing-roscomvpn/README-upstream.md`
- `claude-memory/servicedesk-dttb.md`
- `claude-memory/benelux.md`
- `claude-memory/nextcloud-dttb.md`
- `claude-memory/nvr-fix.md`
- `claude-memory/videonablyudenie.md`
- `claude-memory/znamenskoe-home.md`
- `claude-memory/niikn-nextcloud.md`
- `claude-memory/krasnogorsk.md`
- `claude-memory/mas-niikn.md`
- `claude-memory/MEMORY.md`
## Orphan — без бэклинков (54)
_Эти файлы никто не упоминает через `[[..]]`. Кандидаты на удаление или добавление ссылок._
- `decisions/2026-05-14-buzharovo-watchdog-public-only.md`
- `decisions/2026-04-30-niikn-culture-gov-fakeip-fix.md`
- `decisions/2026-05-26-server-upgrade-z6-g4.md`
- `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md`
- `decisions/2026-05-26-omni-domain-and-update.md`
- `decisions/2026-04-28-netbird-watchdog-lxc-132-137.md`
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `decisions/2026-05-23-glavtorg-autologon-off.md`
- `decisions/2026-05-08-buzharovo-1c-licensing-options.md`
- `decisions/2026-05-06-kb-search-overhaul.md`
- `decisions/2026-04-28-niikn-uookn-sev-gov-fakeip-fix.md`
- `notes/ru-geoblocked-services.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/glavtorg/instruction-yaroslav-autologon.md`
- `projects/benilux/credentials.md`
- `projects/niikn/mailcow.md`
- `projects/niikn/NIIKN-Infrastructure.md`
- `projects/niikn/maul-pc.md`
- `projects/niikn/groupfolders-migration.md`
- `projects/niikn/credentials.md`
- `projects/niikn/changelog.md`
- `projects/niikn/matrix.md`
- `projects/niikn/proxmox.md`
- `projects/niikn/NIIKN-ChangeLog.md`
- `projects/niikn/npm.md`
- `projects/niikn/network-topology-diagram.md`
- `projects/niikn/NC-Talk-Setup.md`
- `projects/niikn/domofon.md`
- `projects/niikn/vpn.md`
- `projects/mmfb/mikrotik.md`
- ... +24 ещё
## TODO без даты (80 шт в 13 файлах)
- `decisions/2026-04-30-rustdesk-pre-prod-audit.md` — 13 шт
- `projects/lipki/README.md` — 11 шт
- `templates/vpn-client.md` — 7 шт
- `decisions/2026-05-26-server-upgrade-z6-g4.md` — 6 шт
- `decisions/2026-04-29-rustdesk-client-deployment-package.md` — 6 шт
- `projects/openwrt-4/README.md` — 6 шт
- `projects/buzharovo/severny-les-bot.md` — 6 шт
- `projects/dttb/vpn-clients.md` — 5 шт
- `projects/vishnevyy-sad/README.md` — 5 шт
- `claude-memory/mas-niikn.md` — 5 шт
- `decisions/2026-05-20-benelux-compromise.md` — 4 шт
- `projects/sergey/README.md` — 3 шт
- `projects/peredelki/README.md` — 3 шт
## Дубликаты имён (6)
- `README.md`:
- `README.md`
- `decisions/README.md`
- `notes/README.md`
- `projects/znamenskoye/README.md`
- `projects/openwrt-4/README.md`
- `projects/dttb/README.md`
- `projects/glavtorg/README.md`
- `projects/benilux/README.md`
- `projects/vishnevyy-sad/README.md`
- `projects/sergey/README.md`
- `projects/niikn/README.md`
- `projects/lipki/README.md`
- `projects/krasnogorsk/README.md`
- `projects/mmfb/README.md`
- `projects/buzharovo/README.md`
- `projects/peredelki/README.md`
- `projects/zelenograd/README.md`
- `projects/dttb/nextcloud-talk-bot/README.md`
- `snippets/README.md`
- `snippets/mac-dictation/README.md`
- `scripts/README.md`
- `nextcloud.md`:
- `projects/nextcloud.md`
- `projects/dttb/nextcloud.md`
- `network-topology-diagram.md`:
- `projects/znamenskoye/network-topology-diagram.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/niikn/network-topology-diagram.md`
- `proxmox-inventory.md`:
- `projects/dttb/proxmox-inventory.md`
- `projects/mmfb/proxmox-inventory.md`
- `credentials.md`:
- `projects/dttb/credentials.md`
- `projects/benilux/credentials.md`
- `projects/niikn/credentials.md`
- `projects/peredelki/credentials.md`
- `mikrotik.md`:
- `projects/niikn/mikrotik.md`
- `projects/mmfb/mikrotik.md`
---
*Генерируется `scripts/kb-health.py`. JSON-версия в `audit/health-latest.json` для agent-loop.*

View File

@@ -0,0 +1,63 @@
---
date: 2026-05-31
type: audit
source: kb-audit-npm.py
tags: [audit, drift, npm]
---
# NPM drift audit — 2026-05-31
Сверка [[../projects/dttb/npm-proxy-hosts|npm-proxy-hosts.md]] с NPM API (https://npm.dttb.ru).
- Живых proxy hosts: **23**
- В KB: **21**
- Совпадений: 21 / новых: 2 / удалённых из NPM: 0 / с изменениями: 3
## ⚠ Новые hosts (в NPM есть, в KB нет)
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
## 🔄 Изменения (ID совпадает, но что-то сменилось)
### #12 `bitrix24.dttb.ru`
- backend: KB=`10.0.0.223:8080` → live=`10.0.0.224:8080`
### #14 `remot.dttb.ru`
- backend: KB=`10.0.0.43:21114` → live=`10.0.0.244:21114`
### #22 `git.dttb.ru`
- ssl: KB=✗ → live=✓
## Полный живой список
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 1 | `dttb.ru` | `10.0.0.230:11001` | ✓ | on |
| 2 | `office.dttb.ru` | `10.0.0.169:8080` | ✓ | on |
| 3 | `itilegent.ru` | `10.0.0.223:8080` | ✓ | on |
| 4 | `npm.dttb.ru` | `10.0.0.195:81` | ✓ | on |
| 5 | `porteiner.dttb.ru` | `10.0.0.10:9443` | ✓ | on |
| 6 | `pve.dttb.ru` | `10.0.0.250:8006` | ✓ | on |
| 9 | `ai.dttb.ru` | `10.0.0.179:8080` | ✓ | on |
| 10 | `bit.dttb.ru` | `10.0.0.217:8080` | ✓ | on |
| 11 | `link.dttb.ru` | `10.0.0.184:3000` | ✓ | on |
| 12 | `bitrix24.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 13 | `ip.dttb.ru` | `10.0.0.112:8840` | ✓ | on |
| 14 | `remot.dttb.ru` | `10.0.0.244:21114` | ✓ | on |
| 15 | `plex.dttb.ru` | `10.0.0.200:32400` | ✓ | on |
| 16 | `home.dttb.ru` | `10.0.0.155:8123` | ✓ | on |
| 17 | `z.dttb.ru` | `10.0.0.220:80` | ✓ | on |
| 21 | `rec.dttb.ru` | `10.0.0.227:8091` | ✓ | on |
| 22 | `git.dttb.ru` | `10.0.0.189:3000` | ✓ | on |
| 23 | `matrix.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 25 | `mail.dttb.ru` | `10.0.0.107:443` | ✓ | on |
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
| 28 | `bot.dttb.ru` | `10.0.0.239:18789` | ✓ | on |
| 29 | `omni.dttb.ru` | `10.0.0.179:20128` | ✓ | on |
---
*Автоматически через `scripts/kb-audit-npm.py`.*

View File

@@ -0,0 +1,47 @@
---
date: 2026-05-31
type: audit
source: scripts/kb-objects-audit.py
tags: [audit, objects, frontmatter, links]
score: 39
---
# KB objects audit — 2026-05-31
**Score (меньше = лучше): `39`**
- Проектов с frontmatter: **14/14** (0 проблем)
- NetBird online-пиров без проектной карточки: **3**
- Битых wiki-ссылок `[[...]]`: **11**
## Frontmatter в projects/
✅ все проекты имеют валидный frontmatter
## Online netbird-пиры без проектной карточки
Эти пиры онлайн в NetBird, но не привязаны ни к одной projects/-странице.
Бот не сможет ответить «найди X» осмысленно — нет файла или alias.
Лечение: либо создать stub в `projects/<slug>/README.md` (см. `projects/lipki/` как образец),
либо добавить имя пира как полную строку в `aliases` подходящего проекта.
| NetBird-имя | IP | OS | Город |
|---|---|---|---|
| `DESKTOP-2IOQS54` | 100.70.82.83 | Windows 10 | Saransk |
| `DESKTOP-AGBMLPN` | 100.70.0.106 | Windows 11 | Helsinki |
| `DESKTOP-HL0BB05` | 100.70.235.80 | Windows 11 | Lipetsk |
## Битые wiki-ссылки
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_busybox_ip_br_flag\|памятка]]` → нет такого файла
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_iphone_breaks_fakeip\|памятка]]` → нет такого файла
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring|памятка: корень vs band-aid]]` → нет такого файла
- [snippets/podkop-fakeip-diagnostics.md](snippets/podkop-fakeip-diagnostics.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_openclaw_crash_loop|памятку про sing-box crash-loop]]` → нет такого файла
- [decisions/2026-05-26-omni-domain-and-update.md](decisions/2026-05-26-omni-domain-and-update.md) — `[[feedback_spaceweb_dns_desync]]` → нет такого файла
- [decisions/2026-05-23-glavtorg-autologon-off.md](decisions/2026-05-23-glavtorg-autologon-off.md) — `[[feedback_vmware_workstation_session]]` → нет такого файла
- [projects/dttb/finland-hostkey-vps.md](projects/dttb/finland-hostkey-vps.md) — `[[../../claude-memory/finland-vps-security]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[project_niikn_maxim_assistant|Максима Мауля]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[../../snippets/netbird-claude-install.ps1]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[rustdesk\|lejianwen-pro LXC 116]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[../../snippets/clients/|метод]]` → нет такого файла

View File

@@ -0,0 +1,41 @@
---
date: 2026-05-31
type: audit-proposed
source: kb-audit-propose.sh (Opus 4.7)
tags: [audit, proposed, inventory]
---
# Предложенные правки inventory — 2026-05-31
Сгенерировано Claude Opus на основе [[2026-05-31-drift|drift-отчёта]].
**Правки НЕ применены.** Ревью — ты. Apply — вручную.
План записан в `/root/.claude/plans/swift-tinkering-ladybug.md`. Кратко:
## 1. Резюме
В Proxmox добавился `LXC 139 severny-les`, а VMIDs **129 и 133** (раньше Clawdbot/clawdbot-1 в разделе «🗑️ Удалённые») **переиспользованы** под новые VM `profi-parser-vm` и `s1c-buzharovo`. Сводка/счётчики устарели и расходятся с телом таблиц.
## 2. Блоки правок
**A. Шапка** — дату обновления → 2026-05-31.
**B. Сводка** — пересчёт:
- VM: 15→**18** (5/13)
- LXC: 21→**22** (11/11)
- Итого: 36→**40** (16/24)
**C. Остановленные VM** — добавить две строки (129 `profi-parser-vm`, 133 `s1c-buzharovo`) с пометкой «VMID переиспользован».
**D. Запущенные LXC** — добавить блок `### LXC 139 — severny-les` (только статус + плейсхолдер «уточнить» для IP/CPU/RAM — данных в отчёте нет).
**E. Раздел «🗑️ Удалённые»** — к строкам 129/133 дописать **жирным**, что VMID переиспользованы (иначе кто-то решит, что они свободны).
Полные diff-блоки — в плане.
## 3. Предупреждения
- **VM 131 `ubuntu`** — drift-скрипт ошибочно пометил как «отсутствует». На деле он уже есть в inventory с пометкой «(новый, уточнить)». Править не нужно, но парсер `kb-audit.py` стоит починить.
- **CPU/RAM/диск/IP для 129, 133, 139** в drift-отчёте отсутствуют — в плане стоят плейсхолдеры. Перед коммитом дёрнуть `qm config 129/133` и `pct config 139` на pve.
- **`profi-parser-vm` (VM 129) vs `profi-parser` (LXC 128)** — похоже на миграцию парсера с LXC на VM, стоит уточнить.
- **`s1c-buzharovo` (VM 133)** — имя похоже на «1С buzharovo». Уже есть VM 111 (бывшая 1С, теперь Parsec) — возможно, это отдельное окружение 1С. Не утверждаю без подтверждения.
- Сводка и тело таблиц расходились ещё **до** drift'а — текущий пересчёт это попутно чинит.

View File

@@ -0,0 +1,52 @@
---
date: 2026-06-07
type: audit
source: kb-audit-creds.py
tags: [audit, creds, reachability]
---
# Credentials reachability — 2026-06-07
Ping-проверка URL из [[../projects/dttb/credentials|credentials.md]].
Проверяется только reachability (HTTP status), не реальный логин.
- Всего URL: **20**
- ✓ Reachable: 10 / ⚠ Questionable: 1 / ❌ Unreachable: 9
## ❌ Недоступные (проверить: сервер упал? URL поменялся?)
| URL | Status | Detail | Контекст |
|---|---|---|---|
| `https://vps.sweb.ru` | FAIL | timed out | --------- ---------- URL https://vps.sweb.ru |
| `https://api.sweb.ru/domains/dns` | FAIL | timed out | ароль `1qaz!QAZ` API `https://api.sweb.ru/ |
| `https://mail.niikn.com` | FAIL | timed out | --------- ---------- URL https://mail.niikn.c |
| `https://edit.telegra.ph/auth/f1tfgzYpPpGlAr7cYHRzSeH59fYuNVB2V3fbCdypDc` | FAIL | [Errno 104] Connection reset by peer | Auth URL (вход в редактор) https://edit.telegra. |
| `https://api.telegra.ph/createPage` | FAIL | [Errno 104] Connection reset by peer | тся. Создание страницы: `POST https://api.telegra. |
| `https://api.telegra.ph/editPage` | FAIL | [Errno 104] Connection reset by peer | _token. Редактирование: `POST https://api.telegra. |
| `https://telegra.ph/Nastrojka-VPN-04-24-2` | FAIL | [Errno 104] Connection reset by peer | `. **Созданные страницы:** - https://telegra.ph/N |
| `https://api.netbird.io` | FAIL | timed out | C0AAXjN21NPvM` API URL `https://api.netbird. |
| `https://api.netbird.io/api/setup-keys` | FAIL | timed out | it":0,"ephemeral":false}' \ https://api.netbird. |
## ⚠ Нестандартный ответ
| URL | Status | Detail |
|---|---|---|
| `https://remot.dttb.ru/swagger/index.html` | 404 | Not Found |
## ✓ Все ответили нормально
| URL | Status | Категория |
|---|---|---|
| `https://10.0.0.250:8006` | 200 | ✓ reachable |
| `https://pve.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.189:3000` | 200 | ✓ reachable |
| `http://git.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.195:81` | 200 | ✓ reachable |
| `https://npm.dttb.ru` | 200 | ✓ reachable |
| `https://remot.dttb.ru/_admin` | 200 | ✓ reachable |
| `https://dttb.ru` | 200 | ✓ reachable |
| `https://dttb.ru/remote.php/dav/files/admin` | 401 | ✓ auth-required (сервер жив) |
| `http://192.168.1.22:81` | 200 | ✓ reachable |
---
*Автоматически через `scripts/kb-audit-creds.py`.*

View File

@@ -0,0 +1,56 @@
---
date: 2026-06-07
type: audit
source: kb-audit-dns.py
tags: [audit, dns]
---
# DNS resolve audit — 2026-06-07
Резолвим все домены из NPM через публичный DNS (8.8.8.8) и локальный роутер (10.0.0.1).
- Всего доменов: **25**
- NXDOMAIN на 8.8.8.8: 1 / пустой ответ локально: 1 / split-horizon: 0
## ❌ NXDOMAIN / не резолвится на 8.8.8.8 (публичный DNS)
| Домен | Локальный IP |
|---|---|
| `itilegent.ru` | (тоже нет) |
## ⚠ Пустой локальный резолв (роутер не знает)
- `itilegent.ru` (публичный: -)
## Полная таблица резолва
| Домен | 8.8.8.8 | 10.0.0.1 |
|---|---|---|
| `ai.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `bit.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `bitrix24.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `bot.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `git.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `home.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `ip.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `itilegent.ru` | — | — |
| `link.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `mail.dttb.ru` | 10.0.0.107 | 10.0.0.107 |
| `matrix.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `npm.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `office.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `omni.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `omni.umnybot.ru` | 176.62.183.186 | 176.62.183.186 |
| `plex.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `porteiner.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `pve.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `rec.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `remot.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `router.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `vpn.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `z.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
| `zima.umnybot.ru` | 176.62.183.186 | 176.62.183.186 |
---
*Автоматически через `scripts/kb-audit-dns.py`.*

71
audit/2026-06-07-drift.md Normal file
View File

@@ -0,0 +1,71 @@
---
date: 2026-06-07
type: audit
source: kb-audit.py
tags: [audit, drift, infrastructure]
---
# KB drift audit — 2026-06-07
Сравнение живого `pct list` / `qm list` с [[../projects/dttb/proxmox-inventory|proxmox-inventory.md]]
- Живых гостей Proxmox: **40**
- Упомянуто в inventory: **40**
- В обоих: 39 / только в live: 1 / отсутствуют в live: 0
- Известны как удалённые: 1 (в `## 🗑️ Удалённые`)
## ⚠ В Proxmox есть, в inventory НЕТ (надо добавить)
| VMID | Type | Status | Name |
|---|---|---|---|
| 139 | LXC | running | severny-les |
## ✓ Удалённые хосты (задокументированы): 135
## Полный живой список
| VMID | Type | Status | Name |
|---|---|---|---|
| 100 | VM | stopped | NV |
| 101 | LXC | stopped | n8n |
| 102 | LXC | stopped | SMB |
| 103 | LXC | running | NPM |
| 104 | VM | stopped | Agent-DVR |
| 105 | VM | stopped | Nextcloud-AIO-dttb.ru |
| 106 | VM | running | pbs |
| 107 | VM | running | Mailcow |
| 108 | LXC | stopped | zabbix |
| 109 | VM | stopped | itilelegent |
| 110 | VM | stopped | Cloud |
| 111 | VM | running | WinServer2025 |
| 112 | VM | running | cloud-dttb |
| 113 | LXC | running | VaultWarden |
| 114 | LXC | running | LinkWarden |
| 115 | LXC | running | watchyourlan |
| 116 | LXC | running | rustdeskserver |
| 117 | LXC | running | motioneye |
| 118 | LXC | stopped | plex |
| 119 | LXC | running | myspeed |
| 120 | VM | stopped | 7 |
| 121 | LXC | stopped | docker-windows |
| 122 | LXC | stopped | qbittorrent |
| 123 | LXC | stopped | proxmox-local |
| 124 | VM | stopped | Matrix |
| 125 | VM | stopped | datacentr |
| 126 | LXC | stopped | debian |
| 127 | VM | running | haos-17.0 |
| 128 | LXC | stopped | profi-parser |
| 129 | VM | stopped | profi-parser-vm |
| 130 | VM | stopped | Zima-OS |
| 131 | VM | stopped | ubuntu |
| 132 | LXC | running | code-server |
| 133 | VM | stopped | s1c-buzharovo |
| 134 | LXC | running | ZnamSecurityBot |
| 136 | LXC | running | gitea |
| 137 | LXC | running | openclaw |
| 138 | LXC | stopped | vpn-proxy |
| 139 | LXC | running | severny-les |
| 250 | VM | running | Nextcloud-AIO |
---
*Автоматически сгенерировано `scripts/kb-audit.py`. Применять правки — вручную после ревью.*

233
audit/2026-06-07-health.md Normal file
View File

@@ -0,0 +1,233 @@
---
date: 2026-06-07
type: audit
source: kb-health.py
score: 1720
tags: [audit, health, metric]
---
# KB health — 2026-06-07
**Score (меньше = лучше): `1720`**
Проверено файлов: 1282
## Разбивка
| Категория | Кол-во | Вес | Штраф |
|---|---:|---:|---:|
| broken_wikilinks | 16 | 10 | 160 |
| broken_paths | 96 | 10 | 960 |
| missing_frontmatter | 22 | 3 | 66 |
| orphan_files | 58 | 2 | 116 |
| undated_todos | 388 | 1 | 388 |
| duplicate_basenames | 6 | 5 | 30 |
| **ИТОГО** | | | **1720** |
## Битые wikilinks
| Откуда | `[[таргет]]` |
|---|---|
| `decisions/2026-05-26-omni-domain-and-update.md` | `[[feedback_spaceweb_dns_desync]]` |
| `decisions/2026-05-23-glavtorg-autologon-off.md` | `[[feedback_vmware_workstation_session]]` |
| `projects/openwrt-4/credentials.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag]]` |
| `projects/dttb/finland-hostkey-vps.md` | `[[../../claude-memory/finland-vps-security]]` |
| `projects/benilux/kp-alexandr-umny-server.md` | `[[../../claude-memory/project_alexandr_assistant]]` |
| `projects/niikn/maul-pc.md` | `[[project_niikn_maxim_assistant]]` |
| `projects/niikn/maul-pc.md` | `[[../../snippets/netbird-claude-install.ps1]]` |
| `projects/niikn/maul-pc.md` | `[[../../snippets/clients/]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 0]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 1]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 2]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 3]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_busybox_ip_br_flag\]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_iphone_breaks_fakeip\]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring]]` |
| `snippets/podkop-fakeip-diagnostics.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_openclaw_crash_loop]]` |
## Битые relative-пути
| Откуда | Путь |
|---|---|
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/reference_groq_api.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_win11_unattended_upgrade.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_nspd_blocks_mts.md` |
| `notes/claude/2026-04-21-200915-охотхозяйство-с-openwrt-на-orange-pi-нужно-настрои.md` | `projects/dttb/vps-swtest.md` |
| `notes/claude/2026-05-21-102751-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-amnezia-reinstall.md` |
| `notes/claude/2026-04-24-194555-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-20-113423-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `decisions/2026-04-28-rustdesk-lejianwen-pro-migration.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/rustdesk.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-30-221054-найди-инфу-вчера-оксане-делали-доступ-через-рустде.md` | `projects/niikn/office-pc.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/proxmox-inventory.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-05-29-234117-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-pve-147.md` |
| `notes/claude/2026-05-29-234117-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-inventory.md` |
| `notes/claude/2026-04-29-231939-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/happ-routing-roscomvpn.md` |
| `notes/claude/2026-05-30-105828-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-pve-147.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/apple-id-us-on-russia.md` |
| `notes/claude/2026-05-04-100627-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/znamenskoye/network-topology-diagram.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/mmfb/mikrotik.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/niikn/mikrotik.md` |
| `notes/claude/2026-04-24-165527-новый-клиент-ммфб-юрий-витальевич-нужно-подключить.md` | `projects/mmfb/yuri-vitalievich.md` |
| `notes/claude/2026-05-06-210824-superwhisper-можешь-проверить-не-работает.md` | `../knowledge-base/decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` |
| `notes/claude/2026-05-20-195902-давай-проверим-openvrt-benelux.md` | `decisions/2026-05-20-benelux-compromise.md` |
| `notes/claude/2026-05-28-131315-нужно-в-нетбирд-найти-и-настроить-подключение-к-эт.md` | `projects/niikn/maul-pc.md` |
| `notes/claude/2026-04-29-160010-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/clients/yaroslav-happ-setup.md` |
| `notes/claude/2026-05-04-085317-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/dttb/network-topology-diagram.md` |
| `notes/claude/2026-05-21-104248-давай-проверим-openvrt-benelux.md` | `projects/benilux/credentials.md` |
| `notes/claude/2026-04-29-071329-на-компе-юрия-продолжим-проверь-он-сети.md` | `projects/mmfb/otchet-yuri-2026-04.md` |
| `notes/claude/2026-05-23-133737-еще-клиент-ярослав-сервера-1с-главторг-жалуется-чт.md` | `projects/glavtorg/instruction-yaroslav-autologon.md` |
| `notes/claude/2026-05-27-191956-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-power-recovery.md` |
| `notes/claude/2026-04-21-203517-дай-мне-команду-в-сшел-виндовс-установка-нетбирд-и.md` | `/Users/ai/.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag.md` |
| `notes/claude/2026-05-28-215219-102531240-администратор-ol260380eg-нужно-подключит.md` | `projects/mmfb/lionart-1c.md` |
| `notes/claude/2026-05-26-111148-нужно-на-omni-робуте-установить-ему-домен-у-тебя-е.md` | `memory/feedback_antigravity_onboarding.md` |
| `notes/claude/2026-05-26-111148-нужно-на-omni-робуте-установить-ему-домен-у-тебя-е.md` | `memory/MEMORY.md` |
| `notes/claude/2026-06-02-001742-есть-клиент-француз-у-него-есть-cudy-tr3000-с-podk.md` | `projects/openwrt-4/canal-plus-setup-runbook.md` |
| `notes/claude/2026-04-29-150044-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/vpn-clients.md` |
| `notes/claude/2026-04-29-223542-создадим-еще-одного-пользователя-подключение-к-vpn.md` | `snippets/clients/sergey-znamenskoye-happ-setup.md` |
| `notes/claude/2026-05-30-002747-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-pve-147.md` |
| `notes/claude/2026-05-20-204621-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-amnezia-reinstall.md` |
| `notes/claude/2026-05-30-003032-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-pve-147.md` |
| `notes/claude/2026-05-20-190402-давай-проверим-openvrt-benelux.md` | `projects/benilux/README.md` |
| `notes/claude/2026-05-20-190402-давай-проверим-openvrt-benelux.md` | `decisions/2026-05-20-benelux-compromise.md` |
| `notes/claude/2026-04-28-134112-можешь-найти-кп-мичуринец.md` | `projects/dttb/znamenskoye-network-topology.md` |
| `notes/claude/2026-04-28-134112-можешь-найти-кп-мичуринец.md` | `claude-memory/benelux-topology.md` |
| `notes/claude/2026-04-25-001105-на-сервере-glavtorg-можешь-запустить-виртулку-с-ам.md` | `projects/glavtorg/README.md` |
| `notes/claude/2026-05-23-123133-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-amnezia-reinstall.md` |
| ... | +46 ещё |
## Без frontmatter (22)
- `decisions/2026-06-01-claude-remote-control-mobile.md`
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `notes/ru-geoblocked-services.md`
- `projects/dttb/znamenskoye-log.md`
- `projects/niikn/office-pc.md`
- `projects/niikn/kripto-arm.md`
- `projects/mmfb/yuri-vitalievich.md`
- `projects/mmfb/otchet-yuri-2026-04.md`
- `projects/dttb/graphify-out/GRAPH_REPORT.md`
- `snippets/happ-vpn-client-instruction.md`
- `snippets/invoice-template.md`
- `snippets/assets/happ-routing-roscomvpn/README-upstream.md`
- `claude-memory/servicedesk-dttb.md`
- `claude-memory/benelux.md`
- `claude-memory/nextcloud-dttb.md`
- `claude-memory/nvr-fix.md`
- `claude-memory/videonablyudenie.md`
- `claude-memory/znamenskoe-home.md`
- `claude-memory/niikn-nextcloud.md`
- `claude-memory/krasnogorsk.md`
- `claude-memory/mas-niikn.md`
- `claude-memory/MEMORY.md`
## Orphan — без бэклинков (58)
_Эти файлы никто не упоминает через `[[..]]`. Кандидаты на удаление или добавление ссылок._
- `decisions/2026-05-14-buzharovo-watchdog-public-only.md`
- `decisions/2026-04-30-niikn-culture-gov-fakeip-fix.md`
- `decisions/2026-06-01-claude-remote-control-mobile.md`
- `decisions/2026-05-26-server-upgrade-z6-g4.md`
- `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md`
- `decisions/2026-05-26-omni-domain-and-update.md`
- `decisions/2026-04-28-netbird-watchdog-lxc-132-137.md`
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `decisions/2026-05-23-glavtorg-autologon-off.md`
- `decisions/2026-05-08-buzharovo-1c-licensing-options.md`
- `decisions/2026-05-06-kb-search-overhaul.md`
- `decisions/2026-04-28-niikn-uookn-sev-gov-fakeip-fix.md`
- `notes/ru-geoblocked-services.md`
- `projects/openwrt-4/session-handoff-2026-06-02.md`
- `projects/openwrt-4/client-letter.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/glavtorg/instruction-yaroslav-autologon.md`
- `projects/benilux/kp-alexandr-umny-server.md`
- `projects/benilux/credentials.md`
- `projects/niikn/mailcow.md`
- `projects/niikn/NIIKN-Infrastructure.md`
- `projects/niikn/maul-pc.md`
- `projects/niikn/groupfolders-migration.md`
- `projects/niikn/credentials.md`
- `projects/niikn/changelog.md`
- `projects/niikn/matrix.md`
- `projects/niikn/proxmox.md`
- `projects/niikn/NIIKN-ChangeLog.md`
- `projects/niikn/npm.md`
- `projects/niikn/network-topology-diagram.md`
- ... +28 ещё
## TODO без даты (388 шт в 76 файлах)
- `decisions/2026-04-30-rustdesk-pre-prod-audit.md` — 13 шт
- `projects/lipki/README.md` — 11 шт
- `templates/vpn-client.md` — 7 шт
- `decisions/2026-05-26-server-upgrade-z6-g4.md` — 6 шт
- `decisions/2026-04-29-rustdesk-client-deployment-package.md` — 6 шт
- `projects/buzharovo/severny-les-bot.md` — 6 шт
- `notes/claude/2026-05-30-223109-session.md` — 5 шт
- `notes/claude/2026-05-31-230412-session.md` — 5 шт
- `notes/claude/2026-06-01-115908-session.md` — 5 шт
- `notes/claude/2026-05-31-212135-session.md` — 5 шт
- `notes/claude/2026-05-31-150934-session.md` — 5 шт
- `notes/claude/2026-05-30-143711-session.md` — 5 шт
- `notes/claude/2026-05-31-232509-session.md` — 5 шт
- `notes/claude/2026-05-31-183858-session.md` — 5 шт
- `notes/claude/2026-05-30-140307-session.md` — 5 шт
- `notes/claude/2026-05-31-153910-session.md` — 5 шт
- `notes/claude/2026-05-31-125729-session.md` — 5 шт
- `notes/claude/2026-05-31-111053-session.md` — 5 шт
- `notes/claude/2026-05-31-194441-session.md` — 5 шт
- `notes/claude/2026-06-01-213930-session.md` — 5 шт
## Дубликаты имён (6)
- `README.md`:
- `README.md`
- `decisions/README.md`
- `notes/README.md`
- `projects/znamenskoye/README.md`
- `projects/openwrt-4/README.md`
- `projects/dttb/README.md`
- `projects/glavtorg/README.md`
- `projects/benilux/README.md`
- `projects/vishnevyy-sad/README.md`
- `projects/sergey/README.md`
- `projects/niikn/README.md`
- `projects/lipki/README.md`
- `projects/krasnogorsk/README.md`
- `projects/mmfb/README.md`
- `projects/buzharovo/README.md`
- `projects/peredelki/README.md`
- `projects/zelenograd/README.md`
- `projects/dttb/nextcloud-talk-bot/README.md`
- `snippets/README.md`
- `snippets/mac-dictation/README.md`
- `scripts/README.md`
- `nextcloud.md`:
- `projects/nextcloud.md`
- `projects/dttb/nextcloud.md`
- `network-topology-diagram.md`:
- `projects/znamenskoye/network-topology-diagram.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/niikn/network-topology-diagram.md`
- `credentials.md`:
- `projects/openwrt-4/credentials.md`
- `projects/dttb/credentials.md`
- `projects/benilux/credentials.md`
- `projects/niikn/credentials.md`
- `projects/peredelki/credentials.md`
- `projects/dttb/ai-assistant-pilot/credentials.md`
- `proxmox-inventory.md`:
- `projects/dttb/proxmox-inventory.md`
- `projects/mmfb/proxmox-inventory.md`
- `mikrotik.md`:
- `projects/niikn/mikrotik.md`
- `projects/mmfb/mikrotik.md`
---
*Генерируется `scripts/kb-health.py`. JSON-версия в `audit/health-latest.json` для agent-loop.*

View File

@@ -0,0 +1,67 @@
---
date: 2026-06-07
type: audit
source: kb-audit-npm.py
tags: [audit, drift, npm]
---
# NPM drift audit — 2026-06-07
Сверка [[../projects/dttb/npm-proxy-hosts|npm-proxy-hosts.md]] с NPM API (https://npm.dttb.ru).
- Живых proxy hosts: **25**
- В KB: **21**
- Совпадений: 21 / новых: 4 / удалённых из NPM: 0 / с изменениями: 3
## ⚠ Новые hosts (в NPM есть, в KB нет)
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
| 30 | `omni.umnybot.ru` | `10.0.0.163:20128` | ✓ | on |
| 31 | `zima.umnybot.ru` | `10.0.0.190:80` | ✓ | on |
## 🔄 Изменения (ID совпадает, но что-то сменилось)
### #12 `bitrix24.dttb.ru`
- backend: KB=`10.0.0.223:8080` → live=`10.0.0.224:8080`
### #14 `remot.dttb.ru`
- backend: KB=`10.0.0.43:21114` → live=`10.0.0.244:21114`
### #22 `git.dttb.ru`
- ssl: KB=✗ → live=✓
## Полный живой список
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 1 | `dttb.ru` | `10.0.0.230:11001` | ✓ | on |
| 2 | `office.dttb.ru` | `10.0.0.169:8080` | ✓ | on |
| 3 | `itilegent.ru` | `10.0.0.223:8080` | ✓ | on |
| 4 | `npm.dttb.ru` | `10.0.0.195:81` | ✓ | on |
| 5 | `porteiner.dttb.ru` | `10.0.0.10:9443` | ✓ | on |
| 6 | `pve.dttb.ru` | `10.0.0.250:8006` | ✓ | on |
| 9 | `ai.dttb.ru` | `10.0.0.179:8080` | ✓ | on |
| 10 | `bit.dttb.ru` | `10.0.0.217:8080` | ✓ | on |
| 11 | `link.dttb.ru` | `10.0.0.184:3000` | ✓ | on |
| 12 | `bitrix24.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 13 | `ip.dttb.ru` | `10.0.0.112:8840` | ✓ | on |
| 14 | `remot.dttb.ru` | `10.0.0.244:21114` | ✓ | on |
| 15 | `plex.dttb.ru` | `10.0.0.200:32400` | ✓ | on |
| 16 | `home.dttb.ru` | `10.0.0.155:8123` | ✓ | on |
| 17 | `z.dttb.ru` | `10.0.0.220:80` | ✓ | on |
| 21 | `rec.dttb.ru` | `10.0.0.227:8091` | ✓ | on |
| 22 | `git.dttb.ru` | `10.0.0.189:3000` | ✓ | on |
| 23 | `matrix.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 25 | `mail.dttb.ru` | `10.0.0.107:443` | ✓ | on |
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
| 28 | `bot.dttb.ru` | `10.0.0.239:18789` | ✓ | on |
| 29 | `omni.dttb.ru` | `10.0.0.179:20128` | ✓ | on |
| 30 | `omni.umnybot.ru` | `10.0.0.163:20128` | ✓ | on |
| 31 | `zima.umnybot.ru` | `10.0.0.190:80` | ✓ | on |
---
*Автоматически через `scripts/kb-audit-npm.py`.*

View File

@@ -0,0 +1,49 @@
---
date: 2026-06-07
type: audit
source: scripts/kb-objects-audit.py
tags: [audit, objects, frontmatter, links]
score: 45
---
# KB objects audit — 2026-06-07
**Score (меньше = лучше): `45`**
- Проектов с frontmatter: **14/14** (0 проблем)
- NetBird online-пиров без проектной карточки: **3**
- Битых wiki-ссылок `[[...]]`: **13**
## Frontmatter в projects/
✅ все проекты имеют валидный frontmatter
## Online netbird-пиры без проектной карточки
Эти пиры онлайн в NetBird, но не привязаны ни к одной projects/-странице.
Бот не сможет ответить «найди X» осмысленно — нет файла или alias.
Лечение: либо создать stub в `projects/<slug>/README.md` (см. `projects/lipki/` как образец),
либо добавить имя пира как полную строку в `aliases` подходящего проекта.
| NetBird-имя | IP | OS | Город |
|---|---|---|---|
| `DESKTOP-2IOQS54` | 100.70.82.83 | Windows 10 | Saransk |
| `DESKTOP-AGBMLPN` | 100.70.0.106 | Windows 11 | Helsinki |
| `DESKTOP-HL0BB05` | 100.70.235.80 | Windows 11 | Lipetsk |
## Битые wiki-ссылки
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_busybox_ip_br_flag\|памятка]]` → нет такого файла
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_iphone_breaks_fakeip\|памятка]]` → нет такого файла
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring|памятка: корень vs band-aid]]` → нет такого файла
- [snippets/podkop-fakeip-diagnostics.md](snippets/podkop-fakeip-diagnostics.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_openclaw_crash_loop|памятку про sing-box crash-loop]]` → нет такого файла
- [decisions/2026-05-26-omni-domain-and-update.md](decisions/2026-05-26-omni-domain-and-update.md) — `[[feedback_spaceweb_dns_desync]]` → нет такого файла
- [decisions/2026-05-23-glavtorg-autologon-off.md](decisions/2026-05-23-glavtorg-autologon-off.md) — `[[feedback_vmware_workstation_session]]` → нет такого файла
- [projects/openwrt-4/credentials.md](projects/openwrt-4/credentials.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag|памятка]]` → нет такого файла
- [projects/dttb/finland-hostkey-vps.md](projects/dttb/finland-hostkey-vps.md) — `[[../../claude-memory/finland-vps-security]]` → нет такого файла
- [projects/benilux/kp-alexandr-umny-server.md](projects/benilux/kp-alexandr-umny-server.md) — `[[../../claude-memory/project_alexandr_assistant]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[project_niikn_maxim_assistant|Максима Мауля]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[../../snippets/netbird-claude-install.ps1]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[rustdesk\|lejianwen-pro LXC 116]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[../../snippets/clients/|метод]]` → нет такого файла

View File

@@ -0,0 +1,123 @@
---
date: 2026-06-07
type: audit-proposed
source: kb-audit-propose.sh (Opus 4.7)
tags: [audit, proposed, inventory]
---
# Предложенные правки inventory — 2026-06-07
Сгенерировано Claude Opus на основе [[2026-06-07-drift|drift-отчёта]].
**Правки НЕ применены.** Ревью — ты. Apply — вручную.
## 1. Краткое резюме
Аудит формально нашёл один drift (LXC 139 `severny-les` есть в Proxmox, нет в inventory), но прямое сравнение живого списка из отчёта с inventory выявило ещё **6 расхождений по статусу/идентичности**: 4 хоста стоят с неверным статусом (112/117/119/138), а VMID **129 и 133 переиспользованы** под новые гости (`profi-parser-vm`, `s1c-buzharovo`), хотя в inventory числятся как удалённые `Clawdbot`/`clawdbot-1`. Аудит-скрипт их не поймал, т.к. проверяет только наличие VMID в тексте, а не статус/имя.
---
## 2. Конкретные правки
### A. Добавить LXC 139 (главный drift из отчёта)
В раздел **🟢 Запущенные LXC**:
```diff
+### LXC 139 — severny-les
+| Параметр | Значение |
+|----------|----------|
+| Статус | 🟢 running |
+| IP | (уточнить — нет в отчёте) |
+| Назначение | (уточнить — нет в отчёте) |
```
### B. Статус живой ≠ inventory: 112 cloud-dttb (running)
Удалить из таблицы **🔴 Остановленные VM**:
```diff
-| 112 | cloud-dttb | 8 | 16 GB | 80 GB | — |
```
Добавить в **🟢 Запущенные VM**:
```diff
+### VM 112 — cloud-dttb
+| Параметр | Значение |
+|----------|----------|
+| Статус | 🟢 running |
+| CPU | 8 | RAM | 16 GB | Диск | 80 GB |
+| Назначение | (уточнить) |
```
### C. Статус: 117 motioneye и 119 myspeed (live running)
Удалить из таблицы **🔴 Остановленные LXC**:
```diff
-| 117 | motioneye | MotionEye NVR |
-| 119 | myspeed | Speed test мониторинг |
```
Добавить в **🟢 Запущенные LXC** (myspeed уже имеет IP 10.0.0.113? — нет, это watchyourlan; IP не брать):
```diff
+### LXC 117 — motioneye
+| Статус | 🟢 running | Назначение | MotionEye NVR |
+
+### LXC 119 — myspeed
+| Статус | 🟢 running | Назначение | Speed test мониторинг |
```
### D. Статус: 138 vpn-proxy (live stopped)
Удалить блок из **🟢 Запущенные LXC**:
```diff
-### LXC 138 — vpn-proxy
-| Статус | 🟢 running |
-| IP | 10.0.0.141 (LAN) / 100.70.161.29 (NetBird) |
-| Назначение | VPN-proxy (детали уточнить) |
```
Добавить в **🔴 Остановленные LXC** (IP/NetBird можно сохранить в примечании):
```diff
+| 138 | vpn-proxy | VPN-proxy (LAN 10.0.0.141 / NetBird 100.70.161.29) |
```
### E. Переиспользование VMID 129 → profi-parser-vm
Сейчас 129 в **🗑️ Удалённые** = `Clawdbot`. Живой 129 = `profi-parser-vm` (VM, stopped).
Добавить в **🔴 Остановленные VM**:
```diff
+| 129 | profi-parser-vm | — | — | — | VM-вариант profi-parser (пара к LXC 128) |
```
Поправить строку истории (VMID освобождён ранее, теперь занят заново):
```diff
-| 129 | Clawdbot | ~апрель 2026 | Данные перенесены на code-server (132) ... IP 10.0.0.206 освобождён |
+| 129 | Clawdbot (старый) | ~апрель 2026 | Перенесён на code-server (132); **VMID 129 переиспользован под `profi-parser-vm`** |
```
### F. Переиспользование VMID 133 → s1c-buzharovo
Сейчас 133 в **🗑️ Удалённые** = `clawdbot-1`. Живой 133 = `s1c-buzharovo` (VM, stopped).
Добавить в **🔴 Остановленные VM**:
```diff
+| 133 | s1c-buzharovo | — | — | — | 1С-сервер Бужарово (уточнить) |
```
Поправить строку истории:
```diff
-| 133 | clawdbot-1 | ~апрель 2026 | Функционал мигрирован на openclaw (137) |
+| 133 | clawdbot-1 (старый) | ~апрель 2026 | Мигрирован на openclaw (137); **VMID 133 переиспользован под `s1c-buzharovo`** |
```
### G. Пересчёт сводки и даты
После правок главной ноды (250) живых гостей = 40 (18 VM / 22 LXC):
```diff
-| QEMU VM | 15 | 5 | 10 |
-| LXC | 21 | 11 | 10 |
-| **Итого** | **36** | **16** | **20** |
+| QEMU VM | 18 | 6 | 12 |
+| LXC | 22 | 12 | 10 |
+| **Итого** | **40** | **18** | **22** |
-> Последнее обновление: 2026-05-27 ...
+> Последнее обновление: 2026-06-07 (drift-аудит: +139, статусы 112/117/119/138, реюз VMID 129/133)
```
---
## 3. Предупреждения (неоднозначное)
- **VMID 129 и 133 переиспользованы** — критично. Перед фиксацией подтверди живьём: `qm config 129` / `qm config 133`. Возможно, старые `Clawdbot`/`clawdbot-1` были удалены, а номера переназначены новым гостям. Имена `profi-parser-vm` / `s1c-buzharovo` и назначение «1С Бужарово» — мои предположения по имени, в отчёте назначения нет.
- **Аудит недооценил drift**: `kb-audit.py` сверяет только наличие VMID, не статус и не имя. Расхождения BF найдены ручным сравнением живого списка (он есть в отчёте) с inventory — не выдуманы.
- **139 severny-les**: в отчёте только VMID/тип/статус/имя. IP, ресурсы, назначение — НЕТ. Оставил `(уточнить)`, не выдумывал.
- **IP/ресурсы для 112/117/119**: в отчёте отсутствуют, в блоках не заполнял.
- **Вторая нода 10.0.0.147** ([[proxmox-pve-147]], VM 100 ZimaOS / LXC 101 NPM) drift-отчётом НЕ покрыта (отчёт по ноде .250). Её записи не трогать — иначе пересечётся с VM 100 `NV` / LXC 101 `n8n` главной ноды.
- В текущем inventory уже есть внутреннее расхождение (сводка «10 stopped VM», а в таблице 11) — правка G его заодно устраняет.
Файл не правил — это только предложения к ревью.

View File

@@ -0,0 +1,47 @@
---
date: 2026-06-14
type: audit
source: kb-audit-creds.py
tags: [audit, creds, reachability]
---
# Credentials reachability — 2026-06-14
Ping-проверка URL из [[../projects/dttb/credentials|credentials.md]].
Проверяется только reachability (HTTP status), не реальный логин.
- Всего URL: **20**
- ✓ Reachable: 17 / ⚠ Questionable: 3 / ❌ Unreachable: 0
## ⚠ Нестандартный ответ
| URL | Status | Detail |
|---|---|---|
| `https://remot.dttb.ru/swagger/index.html` | 404 | Not Found |
| `https://api.netbird.io` | 404 | Not Found |
| `https://api.netbird.io/api/setup-keys` | 404 | Not Found |
## ✓ Все ответили нормально
| URL | Status | Категория |
|---|---|---|
| `https://10.0.0.250:8006` | 200 | ✓ reachable |
| `https://pve.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.189:3000` | 200 | ✓ reachable |
| `http://git.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.195:81` | 200 | ✓ reachable |
| `https://npm.dttb.ru` | 200 | ✓ reachable |
| `https://remot.dttb.ru/_admin` | 200 | ✓ reachable |
| `https://dttb.ru` | 200 | ✓ reachable |
| `https://dttb.ru/remote.php/dav/files/admin` | 401 | ✓ auth-required (сервер жив) |
| `https://vps.sweb.ru` | 200 | ✓ reachable |
| `https://api.sweb.ru/domains/dns` | 200 | ✓ reachable |
| `https://mail.niikn.com` | 200 | ✓ reachable |
| `http://192.168.1.22:81` | 200 | ✓ reachable |
| `https://edit.telegra.ph/auth/f1tfgzYpPpGlAr7cYHRzSeH59fYuNVB2V3fbCdypDc` | 200 | ✓ reachable |
| `https://api.telegra.ph/createPage` | 200 | ✓ reachable |
| `https://api.telegra.ph/editPage` | 200 | ✓ reachable |
| `https://telegra.ph/Nastrojka-VPN-04-24-2` | 200 | ✓ reachable |
---
*Автоматически через `scripts/kb-audit-creds.py`.*

View File

@@ -0,0 +1,90 @@
---
date: 2026-06-14
type: audit
source: kb-audit-dns.py
tags: [audit, dns]
---
# DNS resolve audit — 2026-06-14
Резолвим все домены из NPM через публичный DNS (8.8.8.8) и локальный роутер (10.0.0.1).
- Всего доменов: **29**
- NXDOMAIN на 8.8.8.8: 2 / пустой ответ локально: 1 / split-horizon: 22
## ❌ NXDOMAIN / не резолвится на 8.8.8.8 (публичный DNS)
| Домен | Локальный IP |
|---|---|
| `itilegent.ru` | (тоже нет) |
| `vpn.dttb.ru` | 10.0.0.195 |
## ⚠ Split-horizon — разные IP снаружи и внутри
Это нормально для *.dttb.ru (внешний Let's Encrypt IP vs локальный 10.0.0.195). Но неожиданный split может быть багом.
| Домен | Публичный (8.8.8.8) | Локальный (10.0.0.1) |
|---|---|---|
| `ai.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bit.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bitrix24.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `git.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `home.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ip.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `link.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `mail.dttb.ru` | 176.62.183.186 | 10.0.0.107 |
| `matrix.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `npm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `office.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `omni.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `plex.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `porteiner.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `pve.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rec.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `remot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `router.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `swarm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `z.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
## ⚠ Пустой локальный резолв (роутер не знает)
- `itilegent.ru` (публичный: -)
## Полная таблица резолва
| Домен | 8.8.8.8 | 10.0.0.1 |
|---|---|---|
| `ai.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ai.umnybot.ru` | 176.62.183.186 | 176.62.183.186 |
| `bit.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bitrix24.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `git.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `home.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ip.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `itilegent.ru` | — | — |
| `link.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `mail.dttb.ru` | 176.62.183.186 | 10.0.0.107 |
| `matrix.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `npm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `office.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `omni.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `omni.umnybot.ru` | 176.62.183.186 | 176.62.183.186 |
| `plex.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `porteiner.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `pve.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rec.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `remot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `router.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rustdesk.umnybot.ru` | 176.62.183.186 | 176.62.183.186 |
| `swarm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `tg.umnybot.ru` | 176.62.183.186 | 176.62.183.186 |
| `vpn.dttb.ru` | — | 10.0.0.195 |
| `z.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `zima.umnybot.ru` | 176.62.183.186 | 176.62.183.186 |
---
*Автоматически через `scripts/kb-audit-dns.py`.*

70
audit/2026-06-14-drift.md Normal file
View File

@@ -0,0 +1,70 @@
---
date: 2026-06-14
type: audit
source: kb-audit.py
tags: [audit, drift, infrastructure]
---
# KB drift audit — 2026-06-14
Сравнение живого `pct list` / `qm list` с [[../projects/dttb/proxmox-inventory|proxmox-inventory.md]]
- Живых гостей Proxmox: **41**
- Упомянуто в inventory: **40**
- В обоих: 40 / только в live: 1 / отсутствуют в live: 0
- Известны как удалённые: 0 (в `## 🗑️ Удалённые`)
## ⚠ В Proxmox есть, в inventory НЕТ (надо добавить)
| VMID | Type | Status | Name |
|---|---|---|---|
| 139 | LXC | running | severny-les |
## Полный живой список
| VMID | Type | Status | Name |
|---|---|---|---|
| 100 | VM | stopped | NV |
| 101 | LXC | stopped | n8n |
| 102 | LXC | stopped | SMB |
| 103 | LXC | running | NPM |
| 104 | VM | stopped | Agent-DVR |
| 105 | VM | stopped | Nextcloud-AIO-dttb.ru |
| 106 | VM | running | pbs |
| 107 | VM | running | Mailcow |
| 108 | LXC | stopped | zabbix |
| 109 | VM | stopped | itilelegent |
| 110 | VM | stopped | Cloud |
| 111 | VM | running | WinServer2025 |
| 112 | VM | running | cloud-dttb |
| 113 | LXC | running | VaultWarden |
| 114 | LXC | running | LinkWarden |
| 115 | LXC | running | watchyourlan |
| 116 | LXC | running | rustdeskserver |
| 117 | LXC | stopped | motioneye |
| 118 | LXC | stopped | plex |
| 119 | LXC | running | myspeed |
| 120 | VM | stopped | 7 |
| 121 | LXC | stopped | docker-windows |
| 122 | LXC | stopped | qbittorrent |
| 123 | LXC | stopped | proxmox-local |
| 124 | VM | stopped | Matrix |
| 125 | VM | stopped | datacentr |
| 126 | LXC | stopped | debian |
| 127 | VM | running | haos-17.0 |
| 128 | LXC | stopped | profi-parser |
| 129 | VM | stopped | profi-parser-vm |
| 130 | VM | stopped | Zima-OS |
| 131 | VM | stopped | ubuntu |
| 132 | LXC | running | code-server |
| 133 | VM | stopped | s1c-buzharovo |
| 134 | LXC | stopped | ZnamSecurityBot |
| 135 | LXC | running | swarmclaw |
| 136 | LXC | running | gitea |
| 137 | LXC | running | openclaw |
| 138 | LXC | stopped | vpn-proxy |
| 139 | LXC | running | severny-les |
| 250 | VM | running | Nextcloud-AIO |
---
*Автоматически сгенерировано `scripts/kb-audit.py`. Применять правки — вручную после ревью.*

236
audit/2026-06-14-health.md Normal file
View File

@@ -0,0 +1,236 @@
---
date: 2026-06-14
type: audit
source: kb-health.py
score: 2043
tags: [audit, health, metric]
---
# KB health — 2026-06-14
**Score (меньше = лучше): `2043`**
Проверено файлов: 1416
## Разбивка
| Категория | Кол-во | Вес | Штраф |
|---|---:|---:|---:|
| broken_wikilinks | 18 | 10 | 180 |
| broken_paths | 117 | 10 | 1170 |
| missing_frontmatter | 23 | 3 | 69 |
| orphan_files | 60 | 2 | 120 |
| undated_todos | 474 | 1 | 474 |
| duplicate_basenames | 6 | 5 | 30 |
| **ИТОГО** | | | **2043** |
## Битые wikilinks
| Откуда | `[[таргет]]` |
|---|---|
| `decisions/2026-06-08-swarmclaw-lxc135-deploy.md` | `[[../snippets/spaceweb-dns-api]]` |
| `decisions/2026-05-26-omni-domain-and-update.md` | `[[feedback_spaceweb_dns_desync]]` |
| `decisions/2026-06-04-lipki-deco-p9-powerline-degradation.md` | `[[../claude-memory/feedback_lipki_deco_powerline]]` |
| `decisions/2026-05-23-glavtorg-autologon-off.md` | `[[feedback_vmware_workstation_session]]` |
| `projects/openwrt-4/credentials.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag]]` |
| `projects/dttb/finland-hostkey-vps.md` | `[[../../claude-memory/finland-vps-security]]` |
| `projects/benilux/kp-alexandr-umny-server.md` | `[[../../claude-memory/project_alexandr_assistant]]` |
| `projects/niikn/maul-pc.md` | `[[project_niikn_maxim_assistant]]` |
| `projects/niikn/maul-pc.md` | `[[../../snippets/netbird-claude-install.ps1]]` |
| `projects/niikn/maul-pc.md` | `[[../../snippets/clients/]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 0]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 1]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 2]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 3]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_busybox_ip_br_flag\]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_iphone_breaks_fakeip\]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring]]` |
| `snippets/podkop-fakeip-diagnostics.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_openclaw_crash_loop]]` |
## Битые relative-пути
| Откуда | Путь |
|---|---|
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/reference_groq_api.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_win11_unattended_upgrade.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_nspd_blocks_mts.md` |
| `notes/claude/2026-04-21-200915-охотхозяйство-с-openwrt-на-orange-pi-нужно-настрои.md` | `projects/dttb/vps-swtest.md` |
| `notes/claude/2026-05-21-102751-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-amnezia-reinstall.md` |
| `notes/claude/2026-04-24-194555-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-20-113423-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `decisions/2026-04-28-rustdesk-lejianwen-pro-migration.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/rustdesk.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-30-221054-найди-инфу-вчера-оксане-делали-доступ-через-рустде.md` | `projects/niikn/office-pc.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/proxmox-inventory.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-05-29-234117-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-pve-147.md` |
| `notes/claude/2026-05-29-234117-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-inventory.md` |
| `notes/claude/2026-04-29-231939-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/happ-routing-roscomvpn.md` |
| `notes/claude/2026-05-30-105828-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-pve-147.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/apple-id-us-on-russia.md` |
| `notes/claude/2026-05-04-100627-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/znamenskoye/network-topology-diagram.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/mmfb/mikrotik.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/niikn/mikrotik.md` |
| `notes/claude/2026-04-24-165527-новый-клиент-ммфб-юрий-витальевич-нужно-подключить.md` | `projects/mmfb/yuri-vitalievich.md` |
| `notes/claude/2026-05-06-210824-superwhisper-можешь-проверить-не-работает.md` | `../knowledge-base/decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` |
| `notes/claude/2026-05-20-195902-давай-проверим-openvrt-benelux.md` | `decisions/2026-05-20-benelux-compromise.md` |
| `notes/claude/2026-05-28-131315-нужно-в-нетбирд-найти-и-настроить-подключение-к-эт.md` | `projects/niikn/maul-pc.md` |
| `notes/claude/2026-04-29-160010-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/clients/yaroslav-happ-setup.md` |
| `notes/claude/2026-05-04-085317-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/dttb/network-topology-diagram.md` |
| `notes/claude/2026-05-21-104248-давай-проверим-openvrt-benelux.md` | `projects/benilux/credentials.md` |
| `notes/claude/2026-06-05-123547-давай-проверим-openvrt-benelux.md` | `decisions/2026-06-05-benelux-blackout-fw4-recovery.md` |
| `notes/claude/2026-04-29-071329-на-компе-юрия-продолжим-проверь-он-сети.md` | `projects/mmfb/otchet-yuri-2026-04.md` |
| `notes/claude/2026-05-23-133737-еще-клиент-ярослав-сервера-1с-главторг-жалуется-чт.md` | `projects/glavtorg/instruction-yaroslav-autologon.md` |
| `notes/claude/2026-05-27-191956-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-power-recovery.md` |
| `notes/claude/2026-04-21-203517-дай-мне-команду-в-сшел-виндовс-установка-нетбирд-и.md` | `/Users/ai/.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag.md` |
| `notes/claude/2026-05-28-215219-102531240-администратор-ol260380eg-нужно-подключит.md` | `projects/mmfb/lionart-1c.md` |
| `notes/claude/2026-05-26-111148-нужно-на-omni-робуте-установить-ему-домен-у-тебя-е.md` | `memory/feedback_antigravity_onboarding.md` |
| `notes/claude/2026-05-26-111148-нужно-на-omni-робуте-установить-ему-домен-у-тебя-е.md` | `memory/MEMORY.md` |
| `notes/claude/2026-06-02-001742-есть-клиент-француз-у-него-есть-cudy-tr3000-с-podk.md` | `projects/openwrt-4/canal-plus-setup-runbook.md` |
| `notes/claude/2026-06-08-213054-найди-аналог-openclaw-для-меня-нужен-аркестратор-и.md` | `decisions/2026-06-08-swarmclaw-lxc135-deploy.md` |
| `notes/claude/2026-04-29-150044-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/vpn-clients.md` |
| `notes/claude/2026-04-29-223542-создадим-еще-одного-пользователя-подключение-к-vpn.md` | `snippets/clients/sergey-znamenskoye-happ-setup.md` |
| `notes/claude/2026-05-30-002747-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-pve-147.md` |
| `notes/claude/2026-05-20-204621-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-amnezia-reinstall.md` |
| `notes/claude/2026-05-30-003032-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-pve-147.md` |
| `notes/claude/2026-05-20-190402-давай-проверим-openvrt-benelux.md` | `projects/benilux/README.md` |
| `notes/claude/2026-05-20-190402-давай-проверим-openvrt-benelux.md` | `decisions/2026-05-20-benelux-compromise.md` |
| `notes/claude/2026-04-28-134112-можешь-найти-кп-мичуринец.md` | `projects/dttb/znamenskoye-network-topology.md` |
| `notes/claude/2026-04-28-134112-можешь-найти-кп-мичуринец.md` | `claude-memory/benelux-topology.md` |
| ... | +67 ещё |
## Без frontmatter (23)
- `decisions/2026-06-01-claude-remote-control-mobile.md`
- `decisions/2026-06-11-niikn-opyt-arhiv-100mb.md`
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `notes/ru-geoblocked-services.md`
- `projects/dttb/znamenskoye-log.md`
- `projects/niikn/office-pc.md`
- `projects/niikn/kripto-arm.md`
- `projects/mmfb/yuri-vitalievich.md`
- `projects/mmfb/otchet-yuri-2026-04.md`
- `projects/dttb/graphify-out/GRAPH_REPORT.md`
- `snippets/happ-vpn-client-instruction.md`
- `snippets/invoice-template.md`
- `snippets/assets/happ-routing-roscomvpn/README-upstream.md`
- `claude-memory/servicedesk-dttb.md`
- `claude-memory/benelux.md`
- `claude-memory/nextcloud-dttb.md`
- `claude-memory/nvr-fix.md`
- `claude-memory/videonablyudenie.md`
- `claude-memory/znamenskoe-home.md`
- `claude-memory/niikn-nextcloud.md`
- `claude-memory/krasnogorsk.md`
- `claude-memory/mas-niikn.md`
- `claude-memory/MEMORY.md`
## Orphan — без бэклинков (60)
_Эти файлы никто не упоминает через `[[..]]`. Кандидаты на удаление или добавление ссылок._
- `decisions/2026-05-14-buzharovo-watchdog-public-only.md`
- `decisions/2026-04-30-niikn-culture-gov-fakeip-fix.md`
- `decisions/2026-06-01-claude-remote-control-mobile.md`
- `decisions/2026-05-26-server-upgrade-z6-g4.md`
- `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md`
- `decisions/2026-05-26-omni-domain-and-update.md`
- `decisions/2026-06-11-niikn-opyt-arhiv-100mb.md`
- `decisions/2026-06-04-deapple-migration-roadmap.md`
- `decisions/2026-04-28-netbird-watchdog-lxc-132-137.md`
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `decisions/2026-05-23-glavtorg-autologon-off.md`
- `decisions/2026-06-08-finland-vless-happ-dns-diag.md`
- `decisions/2026-05-08-buzharovo-1c-licensing-options.md`
- `decisions/2026-05-06-kb-search-overhaul.md`
- `decisions/2026-04-28-niikn-uookn-sev-gov-fakeip-fix.md`
- `notes/ru-geoblocked-services.md`
- `projects/openwrt-4/session-handoff-2026-06-02.md`
- `projects/openwrt-4/client-letter.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/glavtorg/instruction-yaroslav-autologon.md`
- `projects/benilux/kp-alexandr-umny-server.md`
- `projects/niikn/mailcow.md`
- `projects/niikn/NIIKN-Infrastructure.md`
- `projects/niikn/maul-pc.md`
- `projects/niikn/groupfolders-migration.md`
- `projects/niikn/credentials.md`
- `projects/niikn/changelog.md`
- `projects/niikn/matrix.md`
- `projects/niikn/proxmox.md`
- `projects/niikn/NIIKN-ChangeLog.md`
- ... +30 ещё
## TODO без даты (474 шт в 92 файлах)
- `decisions/2026-06-04-deapple-migration-roadmap.md` — 13 шт
- `decisions/2026-04-30-rustdesk-pre-prod-audit.md` — 13 шт
- `projects/lipki/README.md` — 11 шт
- `templates/vpn-client.md` — 7 шт
- `decisions/2026-05-26-server-upgrade-z6-g4.md` — 6 шт
- `decisions/2026-04-29-rustdesk-client-deployment-package.md` — 6 шт
- `projects/buzharovo/severny-les-bot.md` — 6 шт
- `notes/claude/2026-05-30-223109-session.md` — 5 шт
- `notes/claude/2026-05-31-230412-session.md` — 5 шт
- `notes/claude/2026-06-01-115908-session.md` — 5 шт
- `notes/claude/2026-05-31-212135-session.md` — 5 шт
- `notes/claude/2026-05-31-150934-session.md` — 5 шт
- `notes/claude/2026-05-30-143711-session.md` — 5 шт
- `notes/claude/2026-05-31-232509-session.md` — 5 шт
- `notes/claude/2026-06-08-161105-session.md` — 5 шт
- `notes/claude/2026-06-07-235211-session.md` — 5 шт
- `notes/claude/2026-06-08-160130-session.md` — 5 шт
- `notes/claude/2026-06-08-002741-session.md` — 5 шт
- `notes/claude/2026-05-31-183858-session.md` — 5 шт
- `notes/claude/2026-05-30-140307-session.md` — 5 шт
## Дубликаты имён (6)
- `README.md`:
- `README.md`
- `decisions/README.md`
- `notes/README.md`
- `projects/znamenskoye/README.md`
- `projects/openwrt-4/README.md`
- `projects/dttb/README.md`
- `projects/glavtorg/README.md`
- `projects/benilux/README.md`
- `projects/vishnevyy-sad/README.md`
- `projects/sergey/README.md`
- `projects/niikn/README.md`
- `projects/lipki/README.md`
- `projects/krasnogorsk/README.md`
- `projects/mmfb/README.md`
- `projects/buzharovo/README.md`
- `projects/peredelki/README.md`
- `projects/zelenograd/README.md`
- `projects/dttb/nextcloud-talk-bot/README.md`
- `snippets/README.md`
- `snippets/mac-dictation/README.md`
- `scripts/README.md`
- `nextcloud.md`:
- `projects/nextcloud.md`
- `projects/dttb/nextcloud.md`
- `network-topology-diagram.md`:
- `projects/znamenskoye/network-topology-diagram.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/niikn/network-topology-diagram.md`
- `credentials.md`:
- `projects/openwrt-4/credentials.md`
- `projects/dttb/credentials.md`
- `projects/benilux/credentials.md`
- `projects/niikn/credentials.md`
- `projects/peredelki/credentials.md`
- `projects/dttb/ai-assistant-pilot/credentials.md`
- `proxmox-inventory.md`:
- `projects/dttb/proxmox-inventory.md`
- `projects/mmfb/proxmox-inventory.md`
- `mikrotik.md`:
- `projects/niikn/mikrotik.md`
- `projects/mmfb/mikrotik.md`
---
*Генерируется `scripts/kb-health.py`. JSON-версия в `audit/health-latest.json` для agent-loop.*

View File

@@ -0,0 +1,70 @@
---
date: 2026-06-14
type: audit
source: kb-audit-npm.py
tags: [audit, drift, npm]
---
# NPM drift audit — 2026-06-14
Сверка [[../projects/dttb/npm-proxy-hosts|npm-proxy-hosts.md]] с NPM API (https://npm.dttb.ru).
- Живых proxy hosts: **29**
- В KB: **26**
- Совпадений: 26 / новых: 3 / удалённых из NPM: 0 / с изменениями: 3
## ⚠ Новые hosts (в NPM есть, в KB нет)
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
| 35 | `ai.umnybot.ru` | `10.0.0.239:9119` | ✓ | on |
## 🔄 Изменения (ID совпадает, но что-то сменилось)
### #12 `bitrix24.dttb.ru`
- backend: KB=`10.0.0.223:8080` → live=`10.0.0.224:8080`
### #14 `remot.dttb.ru`
- backend: KB=`10.0.0.43:21114` → live=`10.0.0.244:21114`
### #22 `git.dttb.ru`
- ssl: KB=✗ → live=✓
## Полный живой список
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 1 | `dttb.ru` | `10.0.0.230:11001` | ✓ | on |
| 2 | `office.dttb.ru` | `10.0.0.169:8080` | ✓ | on |
| 3 | `itilegent.ru` | `10.0.0.223:8080` | ✓ | on |
| 4 | `npm.dttb.ru` | `10.0.0.195:81` | ✓ | on |
| 5 | `porteiner.dttb.ru` | `10.0.0.10:9443` | ✓ | on |
| 6 | `pve.dttb.ru` | `10.0.0.250:8006` | ✓ | on |
| 9 | `ai.dttb.ru` | `10.0.0.179:8080` | ✓ | on |
| 10 | `bit.dttb.ru` | `10.0.0.217:8080` | ✓ | on |
| 11 | `link.dttb.ru` | `10.0.0.184:3000` | ✓ | on |
| 12 | `bitrix24.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 13 | `ip.dttb.ru` | `10.0.0.112:8840` | ✓ | on |
| 14 | `remot.dttb.ru` | `10.0.0.244:21114` | ✓ | on |
| 15 | `plex.dttb.ru` | `10.0.0.200:32400` | ✓ | on |
| 16 | `home.dttb.ru` | `10.0.0.155:8123` | ✓ | on |
| 17 | `z.dttb.ru` | `10.0.0.220:80` | ✓ | on |
| 21 | `rec.dttb.ru` | `10.0.0.227:8091` | ✓ | on |
| 22 | `git.dttb.ru` | `10.0.0.189:3000` | ✓ | on |
| 23 | `matrix.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 25 | `mail.dttb.ru` | `10.0.0.107:443` | ✓ | on |
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
| 28 | `bot.dttb.ru` | `10.0.0.239:18789` | ✓ | on |
| 29 | `omni.dttb.ru` | `10.0.0.179:20128` | ✓ | on |
| 30 | `omni.umnybot.ru` | `10.0.0.163:20128` | ✓ | on |
| 31 | `zima.umnybot.ru` | `10.0.0.190:80` | ✓ | on |
| 32 | `swarm.dttb.ru` | `10.0.0.135:3456` | ✓ | on |
| 33 | `tg.umnybot.ru` | `10.0.0.190:3000` | ✓ | on |
| 34 | `rustdesk.umnybot.ru` | `10.0.0.190:3005` | ✓ | on |
| 35 | `ai.umnybot.ru` | `10.0.0.239:9119` | ✓ | on |
---
*Автоматически через `scripts/kb-audit-npm.py`.*

View File

@@ -0,0 +1,51 @@
---
date: 2026-06-14
type: audit
source: scripts/kb-objects-audit.py
tags: [audit, objects, frontmatter, links]
score: 51
---
# KB objects audit — 2026-06-14
**Score (меньше = лучше): `51`**
- Проектов с frontmatter: **14/14** (0 проблем)
- NetBird online-пиров без проектной карточки: **3**
- Битых wiki-ссылок `[[...]]`: **15**
## Frontmatter в projects/
✅ все проекты имеют валидный frontmatter
## Online netbird-пиры без проектной карточки
Эти пиры онлайн в NetBird, но не привязаны ни к одной projects/-странице.
Бот не сможет ответить «найди X» осмысленно — нет файла или alias.
Лечение: либо создать stub в `projects/<slug>/README.md` (см. `projects/lipki/` как образец),
либо добавить имя пира как полную строку в `aliases` подходящего проекта.
| NetBird-имя | IP | OS | Город |
|---|---|---|---|
| `DESKTOP-2IOQS54` | 100.70.82.83 | Windows 10 | Saransk |
| `DESKTOP-AGBMLPN` | 100.70.0.106 | Windows 11 | Helsinki |
| `DESKTOP-HL0BB05` | 100.70.235.80 | Windows 11 | Lipetsk |
## Битые wiki-ссылки
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_busybox_ip_br_flag\|памятка]]` → нет такого файла
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_iphone_breaks_fakeip\|памятка]]` → нет такого файла
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring|памятка: корень vs band-aid]]` → нет такого файла
- [snippets/podkop-fakeip-diagnostics.md](snippets/podkop-fakeip-diagnostics.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_openclaw_crash_loop|памятку про sing-box crash-loop]]` → нет такого файла
- [decisions/2026-06-08-swarmclaw-lxc135-deploy.md](decisions/2026-06-08-swarmclaw-lxc135-deploy.md) — `[[../snippets/spaceweb-dns-api]]` → нет такого файла
- [decisions/2026-05-26-omni-domain-and-update.md](decisions/2026-05-26-omni-domain-and-update.md) — `[[feedback_spaceweb_dns_desync]]` → нет такого файла
- [decisions/2026-06-04-lipki-deco-p9-powerline-degradation.md](decisions/2026-06-04-lipki-deco-p9-powerline-degradation.md) — `[[../claude-memory/feedback_lipki_deco_powerline]]` → нет такого файла
- [decisions/2026-05-23-glavtorg-autologon-off.md](decisions/2026-05-23-glavtorg-autologon-off.md) — `[[feedback_vmware_workstation_session]]` → нет такого файла
- [projects/openwrt-4/credentials.md](projects/openwrt-4/credentials.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag|памятка]]` → нет такого файла
- [projects/dttb/finland-hostkey-vps.md](projects/dttb/finland-hostkey-vps.md) — `[[../../claude-memory/finland-vps-security]]` → нет такого файла
- [projects/benilux/kp-alexandr-umny-server.md](projects/benilux/kp-alexandr-umny-server.md) — `[[../../claude-memory/project_alexandr_assistant]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[project_niikn_maxim_assistant|Максима Мауля]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[../../snippets/netbird-claude-install.ps1]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[rustdesk\|lejianwen-pro LXC 116]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[../../snippets/clients/|метод]]` → нет такого файла

View File

@@ -0,0 +1,120 @@
---
date: 2026-06-14
type: audit-proposed
source: kb-audit-propose.sh (Opus 4.7)
tags: [audit, proposed, inventory]
---
# Предложенные правки inventory — 2026-06-14
Сгенерировано Claude Opus на основе [[2026-06-14-drift|drift-отчёта]].
**Правки НЕ применены.** Ревью — ты. Apply — вручную.
## 1. Резюме
Drift минимальный по составу (скрипт нашёл 1 «лишнего» гостя — LXC 139 `severny-les`, его нет в inventory), но при ручной сверке полного живого списка вылезли **4 расхождения по статусам** (112, 119 — стали running; 134, 138 — стали stopped) и **2 конфликта переиспользования VMID** (129 и 133 числятся в «Удалённых», но live показывает на этих ID новые гостей). Сводная таблица и счётчики тоже устарели (37 → 41).
## 2. Конкретные правки
### A. Добавить LXC 139 `severny-les` (главная находка скрипта)
В раздел `## 🟢 Запущенные LXC`:
```diff
+### LXC 139 — severny-les
+| Параметр | Значение |
+|----------|----------|
+| Статус | 🟢 running |
+| IP | (уточнить) |
+| Назначение | (уточнить) |
```
В drift-отчёте есть только VMID/type/status/name — IP и назначение неизвестны, оставлены заглушки.
### B. Статус-дрифт VM 112 `cloud-dttb`: stopped → running
Удалить строку из `## 🔴 Остановленные VM`:
```diff
-| 112 | cloud-dttb | 8 | 16 GB | 80 GB | — |
```
Добавить блок в `## 🟢 Запущенные VM`:
```diff
+### VM 112 — cloud-dttb
+| Параметр | Значение |
+|----------|----------|
+| Статус | 🟢 running |
+| Назначение | — |
```
### C. Статус-дрифт LXC 119 `myspeed`: stopped → running
Удалить из `## 🔴 Остановленные LXC`:
```diff
-| 119 | myspeed | Speed test мониторинг |
```
Добавить в `## 🟢 Запущенные LXC`:
```diff
+### LXC 119 — myspeed
+| Параметр | Значение |
+|----------|----------|
+| Статус | 🟢 running |
+| Назначение | Speed test мониторинг |
```
### D. Статус-дрифт LXC 134 `ZnamSecurityBot`: running → stopped
Удалить блок из `## 🟢 Запущенные LXC` (весь блок «LXC 134 — ZnamSecurityBot»).
Добавить строку в `## 🔴 Остановленные LXC`:
```diff
+| 134 | ZnamSecurityBot | ZnamSecurity Telegram-бот |
```
### E. Статус-дрифт LXC 138 `vpn-proxy`: running → stopped
Удалить блок из `## 🟢 Запущенные LXC` (весь блок «LXC 138 — vpn-proxy»).
Добавить строку в `## 🔴 Остановленные LXC`:
```diff
+| 138 | vpn-proxy | VPN-proxy (детали уточнить) |
```
### F. Конфликт VMID 129 — переиспользован
Live: `129 VM stopped profi-parser-vm`. В inventory 129 числится в «🗑️ Удалённые» как `Clawdbot`.
Добавить в `## 🔴 Остановленные VM`:
```diff
+| 129 | profi-parser-vm | — | — | — | (новый, уточнить) |
```
И поправить историческую запись (ID переиспользован под новую VM):
```diff
-| 129 | Clawdbot | ~апрель 2026 | Данные перенесены ... IP 10.0.0.206 освобождён |
+| 129 | Clawdbot | ~апрель 2026 | Удалён; VMID 129 переиспользован под profi-parser-vm |
```
### G. Конфликт VMID 133 — переиспользован
Live: `133 VM stopped s1c-buzharovo`. В inventory 133 числится в «🗑️ Удалённые» как `clawdbot-1`.
Добавить в `## 🔴 Остановленные VM`:
```diff
+| 133 | s1c-buzharovo | — | — | — | (новый, уточнить) |
```
Поправить историческую запись:
```diff
-| 133 | clawdbot-1 | ~апрель 2026 | Функционал мигрирован на openclaw (137) |
+| 133 | clawdbot-1 | ~апрель 2026 | Удалён; VMID 133 переиспользован под s1c-buzharovo |
```
### H. Пересчитать сводную таблицу (по факту live = 41 гость)
```diff
-| QEMU VM | 15 | 5 | 10 |
-| LXC | 22 | 12 | 10 |
-| **Итого** | **37** | **17** | **20** |
+| QEMU VM | 18 | 6 | 12 |
+| LXC | 23 | 11 | 12 |
+| **Итого** | **41** | **17** | **24** |
```
(VM: running 106,107,111,112,127,250 = 6; LXC running 103,113,114,115,116,119,132,135,136,137,139 = 11.)
### I. Обновить дату
```diff
-> Последнее обновление: 2026-06-08 (добавлен LXC 135 swarmclaw)
+> Последнее обновление: 2026-06-14 (drift-аудит: +LXC 139; статусы 112/119/134/138; VMID 129/133 переиспользованы)
```
## 3. Предупреждения / неоднозначности
- **Нет данных в отчёте** для IP/назначения у: 139 `severny-les`, 129 `profi-parser-vm`, 133 `s1c-buzharovo`. Я оставил «уточнить» — заполнять вручную, не выдумывать.
- **Статус-дрифты (BE) скрипт НЕ флагал** — он сверяет только присутствие/тип, не статус. Найдено вручную по «Полному живому списку» отчёта. Статус — вещь динамическая (могли просто запустить/остановить); прежде чем двигать блоки, убедись что это устойчивое состояние, а не разовый запуск.
- **VMID 135**: в «Удалённых» есть `whisper-bot (135)`, а live/активный inventory — `swarmclaw (135)`. Это уже корректно отражено в активном разделе; запись в истории трогать не обязательно (просто факт переиспользования ID).
- **Второй нода 10.0.0.147**: в шапке упомянуты VM 100 / LXC 101 на standalone-ноде. В live-списке 100=`NV`, 101=`n8n` — это ID основной ноды. Drift-отчёт сверяет только основную ноду, расхождение по второй ноде здесь не оценивается.
- Блоки B и F (oба VM с минимумом полей) даны в сокращённом виде — CPU/RAM/диск в отчёте отсутствуют.

View File

@@ -0,0 +1,52 @@
---
date: 2026-06-21
type: audit
source: kb-audit-creds.py
tags: [audit, creds, reachability]
---
# Credentials reachability — 2026-06-21
Ping-проверка URL из [[../projects/dttb/credentials|credentials.md]].
Проверяется только reachability (HTTP status), не реальный логин.
- Всего URL: **20**
- ✓ Reachable: 15 / ⚠ Questionable: 3 / ❌ Unreachable: 2
## ❌ Недоступные (проверить: сервер упал? URL поменялся?)
| URL | Status | Detail | Контекст |
|---|---|---|---|
| `https://vps.sweb.ru` | FAIL | [Errno 104] Connection reset by peer | --------- ---------- URL https://vps.sweb.ru |
| `https://api.sweb.ru/domains/dns` | FAIL | [Errno 104] Connection reset by peer | ароль `1qaz!QAZ` API `https://api.sweb.ru/ |
## ⚠ Нестандартный ответ
| URL | Status | Detail |
|---|---|---|
| `https://remot.dttb.ru/swagger/index.html` | 404 | Not Found |
| `https://api.netbird.io` | 404 | Not Found |
| `https://api.netbird.io/api/setup-keys` | 404 | Not Found |
## ✓ Все ответили нормально
| URL | Status | Категория |
|---|---|---|
| `https://10.0.0.250:8006` | 200 | ✓ reachable |
| `https://pve.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.189:3000` | 200 | ✓ reachable |
| `http://git.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.195:81` | 200 | ✓ reachable |
| `https://npm.dttb.ru` | 200 | ✓ reachable |
| `https://remot.dttb.ru/_admin` | 200 | ✓ reachable |
| `https://dttb.ru` | 200 | ✓ reachable |
| `https://dttb.ru/remote.php/dav/files/admin` | 401 | ✓ auth-required (сервер жив) |
| `https://mail.niikn.com` | 200 | ✓ reachable |
| `http://192.168.1.22:81` | 200 | ✓ reachable |
| `https://edit.telegra.ph/auth/f1tfgzYpPpGlAr7cYHRzSeH59fYuNVB2V3fbCdypDc` | 200 | ✓ reachable |
| `https://api.telegra.ph/createPage` | 200 | ✓ reachable |
| `https://api.telegra.ph/editPage` | 200 | ✓ reachable |
| `https://telegra.ph/Nastrojka-VPN-04-24-2` | 200 | ✓ reachable |
---
*Автоматически через `scripts/kb-audit-creds.py`.*

View File

@@ -0,0 +1,93 @@
---
date: 2026-06-21
type: audit
source: kb-audit-dns.py
tags: [audit, dns]
---
# DNS resolve audit — 2026-06-21
Резолвим все домены из NPM через публичный DNS (8.8.8.8) и локальный роутер (10.0.0.1).
- Всего доменов: **31**
- NXDOMAIN на 8.8.8.8: 2 / пустой ответ локально: 1 / split-horizon: 23
## ❌ NXDOMAIN / не резолвится на 8.8.8.8 (публичный DNS)
| Домен | Локальный IP |
|---|---|
| `itilegent.ru` | (тоже нет) |
| `vpn.dttb.ru` | 10.0.0.195 |
## ⚠ Split-horizon — разные IP снаружи и внутри
Это нормально для *.dttb.ru (внешний Let's Encrypt IP vs локальный 10.0.0.195). Но неожиданный split может быть багом.
| Домен | Публичный (8.8.8.8) | Локальный (10.0.0.1) |
|---|---|---|
| `ai.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bit.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bitrix24.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `git.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `home.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ip.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `link.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `mail.dttb.ru` | 176.62.183.186 | 10.0.0.107 |
| `matrix.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `npm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `office.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `omni.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `plex.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `porteiner.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `pve.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rec.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `remot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `router.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `swarm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `unifi.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `z.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
## ⚠ Пустой локальный резолв (роутер не знает)
- `itilegent.ru` (публичный: -)
## Полная таблица резолва
| Домен | 8.8.8.8 | 10.0.0.1 |
|---|---|---|
| `ai.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ai.umnybot.ru` | 158.255.0.139 | 158.255.0.139 |
| `bit.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bitrix24.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `git.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `home.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ip.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `itilegent.ru` | — | — |
| `link.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `mail.dttb.ru` | 176.62.183.186 | 10.0.0.107 |
| `matrix.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `npm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `office.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `omni.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `omni.umnybot.ru` | 158.255.0.139 | 158.255.0.139 |
| `plex.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `porteiner.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `pve.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rec.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `remot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `router.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rustdesk.umnybot.ru` | 158.255.0.139 | 158.255.0.139 |
| `swarm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `tg.umnybot.ru` | 158.255.0.139 | 158.255.0.139 |
| `umnybot.ru` | 158.255.0.139 | 158.255.0.139 |
| `unifi.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `vpn.dttb.ru` | — | 10.0.0.195 |
| `z.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `zima.umnybot.ru` | 158.255.0.139 | 158.255.0.139 |
---
*Автоматически через `scripts/kb-audit-dns.py`.*

72
audit/2026-06-21-drift.md Normal file
View File

@@ -0,0 +1,72 @@
---
date: 2026-06-21
type: audit
source: kb-audit.py
tags: [audit, drift, infrastructure]
---
# KB drift audit — 2026-06-21
Сравнение живого `pct list` / `qm list` с [[../projects/dttb/proxmox-inventory|proxmox-inventory.md]]
- Живых гостей Proxmox: **43**
- Упомянуто в inventory: **42**
- В обоих: 42 / только в live: 1 / отсутствуют в live: 0
- Известны как удалённые: 0 (в `## 🗑️ Удалённые`)
## ⚠ В Proxmox есть, в inventory НЕТ (надо добавить)
| VMID | Type | Status | Name |
|---|---|---|---|
| 139 | LXC | running | severny-les |
## Полный живой список
| VMID | Type | Status | Name |
|---|---|---|---|
| 100 | VM | stopped | NV |
| 101 | LXC | stopped | n8n |
| 102 | LXC | stopped | SMB |
| 103 | LXC | running | NPM |
| 104 | VM | stopped | Agent-DVR |
| 105 | VM | stopped | Nextcloud-AIO-dttb.ru |
| 106 | VM | running | pbs |
| 107 | VM | running | Mailcow |
| 108 | LXC | stopped | zabbix |
| 109 | VM | stopped | itilelegent |
| 110 | VM | stopped | Cloud |
| 111 | VM | running | WinServer2025 |
| 112 | VM | running | cloud-dttb |
| 113 | LXC | running | VaultWarden |
| 114 | LXC | running | LinkWarden |
| 115 | LXC | running | watchyourlan |
| 116 | LXC | running | rustdeskserver |
| 117 | LXC | stopped | motioneye |
| 118 | LXC | stopped | plex |
| 119 | LXC | running | myspeed |
| 120 | VM | stopped | 7 |
| 121 | LXC | stopped | docker-windows |
| 122 | LXC | stopped | qbittorrent |
| 123 | LXC | stopped | proxmox-local |
| 124 | VM | stopped | Matrix |
| 125 | VM | stopped | datacentr |
| 126 | LXC | stopped | debian |
| 127 | VM | running | haos-17.0 |
| 128 | LXC | stopped | profi-parser |
| 129 | VM | stopped | profi-parser-vm |
| 130 | VM | running | Zima-OS |
| 131 | VM | stopped | ubuntu |
| 132 | LXC | running | code-server |
| 133 | VM | stopped | s1c-buzharovo |
| 134 | LXC | stopped | ZnamSecurityBot |
| 135 | LXC | running | swarmclaw |
| 136 | LXC | running | gitea |
| 137 | LXC | running | openclaw |
| 138 | LXC | stopped | vpn-proxy |
| 139 | LXC | running | severny-les |
| 140 | LXC | running | unifi |
| 141 | LXC | running | german |
| 250 | VM | running | Nextcloud-AIO |
---
*Автоматически сгенерировано `scripts/kb-audit.py`. Применять правки — вручную после ревью.*

241
audit/2026-06-21-health.md Normal file
View File

@@ -0,0 +1,241 @@
---
date: 2026-06-21
type: audit
source: kb-health.py
score: 2285
tags: [audit, health, metric]
---
# KB health — 2026-06-21
**Score (меньше = лучше): `2285`**
Проверено файлов: 1431
## Разбивка
| Категория | Кол-во | Вес | Штраф |
|---|---:|---:|---:|
| broken_wikilinks | 23 | 10 | 230 |
| broken_paths | 132 | 10 | 1320 |
| missing_frontmatter | 23 | 3 | 69 |
| orphan_files | 62 | 2 | 124 |
| undated_todos | 512 | 1 | 512 |
| duplicate_basenames | 6 | 5 | 30 |
| **ИТОГО** | | | **2285** |
## Битые wikilinks
| Откуда | `[[таргет]]` |
|---|---|
| `decisions/2026-06-15-unifi-controller-homelab.md` | `[[feedback_dttb_dns_split_view]]` |
| `decisions/2026-06-08-swarmclaw-lxc135-deploy.md` | `[[../snippets/spaceweb-dns-api]]` |
| `decisions/2026-05-26-omni-domain-and-update.md` | `[[feedback_spaceweb_dns_desync]]` |
| `decisions/2026-06-04-lipki-deco-p9-powerline-degradation.md` | `[[../claude-memory/feedback_lipki_deco_powerline]]` |
| `decisions/2026-05-23-glavtorg-autologon-off.md` | `[[feedback_vmware_workstation_session]]` |
| `decisions/2026-06-20-german-hermes-out-of-usage.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_omniroute_update]]` |
| `decisions/2026-06-20-german-hermes-out-of-usage.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/project_german_hermes]]` |
| `decisions/2026-06-20-german-hermes-out-of-usage.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring]]` |
| `projects/openwrt-4/credentials.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag]]` |
| `projects/dttb/proxmox-pve-147.md` | `[[../../claude-memory/project_alexandr_assistant]]` |
| `projects/dttb/finland-hostkey-vps.md` | `[[../../claude-memory/finland-vps-security]]` |
| `projects/benilux/kp-alexandr-umny-server.md` | `[[../../claude-memory/project_alexandr_assistant]]` |
| `projects/niikn/maul-pc.md` | `[[project_niikn_maxim_assistant]]` |
| `projects/niikn/maul-pc.md` | `[[../../snippets/netbird-claude-install.ps1]]` |
| `projects/niikn/maul-pc.md` | `[[../../snippets/clients/]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 0]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 1]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 2]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 3]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_busybox_ip_br_flag\]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_iphone_breaks_fakeip\]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring]]` |
| `snippets/podkop-fakeip-diagnostics.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_openclaw_crash_loop]]` |
## Битые relative-пути
| Откуда | Путь |
|---|---|
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/reference_groq_api.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_win11_unattended_upgrade.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_nspd_blocks_mts.md` |
| `notes/claude/2026-04-21-200915-охотхозяйство-с-openwrt-на-orange-pi-нужно-настрои.md` | `projects/dttb/vps-swtest.md` |
| `notes/claude/2026-05-21-102751-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-amnezia-reinstall.md` |
| `notes/claude/2026-04-24-194555-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-20-113423-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `decisions/2026-04-28-rustdesk-lejianwen-pro-migration.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/rustdesk.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-30-221054-найди-инфу-вчера-оксане-делали-доступ-через-рустде.md` | `projects/niikn/office-pc.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/proxmox-inventory.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-05-29-234117-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-pve-147.md` |
| `notes/claude/2026-05-29-234117-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-inventory.md` |
| `notes/claude/2026-04-29-231939-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/happ-routing-roscomvpn.md` |
| `notes/claude/2026-05-30-105828-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-pve-147.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/apple-id-us-on-russia.md` |
| `notes/claude/2026-05-04-100627-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/znamenskoye/network-topology-diagram.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/mmfb/mikrotik.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/niikn/mikrotik.md` |
| `notes/claude/2026-04-24-165527-новый-клиент-ммфб-юрий-витальевич-нужно-подключить.md` | `projects/mmfb/yuri-vitalievich.md` |
| `notes/claude/2026-05-06-210824-superwhisper-можешь-проверить-не-работает.md` | `../knowledge-base/decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` |
| `notes/claude/2026-05-20-195902-давай-проверим-openvrt-benelux.md` | `decisions/2026-05-20-benelux-compromise.md` |
| `notes/claude/2026-05-28-131315-нужно-в-нетбирд-найти-и-настроить-подключение-к-эт.md` | `projects/niikn/maul-pc.md` |
| `notes/claude/2026-04-29-160010-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/clients/yaroslav-happ-setup.md` |
| `notes/claude/2026-05-04-085317-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/dttb/network-topology-diagram.md` |
| `notes/claude/2026-05-21-104248-давай-проверим-openvrt-benelux.md` | `projects/benilux/credentials.md` |
| `notes/claude/2026-06-05-123547-давай-проверим-openvrt-benelux.md` | `decisions/2026-06-05-benelux-blackout-fw4-recovery.md` |
| `notes/claude/2026-04-29-071329-на-компе-юрия-продолжим-проверь-он-сети.md` | `projects/mmfb/otchet-yuri-2026-04.md` |
| `notes/claude/2026-05-23-133737-еще-клиент-ярослав-сервера-1с-главторг-жалуется-чт.md` | `projects/glavtorg/instruction-yaroslav-autologon.md` |
| `notes/claude/2026-05-27-191956-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-power-recovery.md` |
| `notes/claude/2026-04-21-203517-дай-мне-команду-в-сшел-виндовс-установка-нетбирд-и.md` | `/Users/ai/.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag.md` |
| `notes/claude/2026-05-28-215219-102531240-администратор-ol260380eg-нужно-подключит.md` | `projects/mmfb/lionart-1c.md` |
| `notes/claude/2026-05-26-111148-нужно-на-omni-робуте-установить-ему-домен-у-тебя-е.md` | `memory/feedback_antigravity_onboarding.md` |
| `notes/claude/2026-05-26-111148-нужно-на-omni-робуте-установить-ему-домен-у-тебя-е.md` | `memory/MEMORY.md` |
| `notes/claude/2026-06-02-001742-есть-клиент-француз-у-него-есть-cudy-tr3000-с-podk.md` | `projects/openwrt-4/canal-plus-setup-runbook.md` |
| `notes/claude/2026-06-08-213054-найди-аналог-openclaw-для-меня-нужен-аркестратор-и.md` | `decisions/2026-06-08-swarmclaw-lxc135-deploy.md` |
| `notes/claude/2026-04-29-150044-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/vpn-clients.md` |
| `notes/claude/2026-04-29-223542-создадим-еще-одного-пользователя-подключение-к-vpn.md` | `snippets/clients/sergey-znamenskoye-happ-setup.md` |
| `notes/claude/2026-05-30-002747-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-pve-147.md` |
| `notes/claude/2026-05-20-204621-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-amnezia-reinstall.md` |
| `notes/claude/2026-05-30-003032-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-pve-147.md` |
| `notes/claude/2026-05-20-190402-давай-проверим-openvrt-benelux.md` | `projects/benilux/README.md` |
| `notes/claude/2026-05-20-190402-давай-проверим-openvrt-benelux.md` | `decisions/2026-05-20-benelux-compromise.md` |
| `notes/claude/2026-04-28-134112-можешь-найти-кп-мичуринец.md` | `projects/dttb/znamenskoye-network-topology.md` |
| `notes/claude/2026-04-28-134112-можешь-найти-кп-мичуринец.md` | `claude-memory/benelux-topology.md` |
| ... | +82 ещё |
## Без frontmatter (23)
- `decisions/2026-06-01-claude-remote-control-mobile.md`
- `decisions/2026-06-11-niikn-opyt-arhiv-100mb.md`
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `notes/ru-geoblocked-services.md`
- `projects/dttb/znamenskoye-log.md`
- `projects/niikn/office-pc.md`
- `projects/niikn/kripto-arm.md`
- `projects/mmfb/yuri-vitalievich.md`
- `projects/mmfb/otchet-yuri-2026-04.md`
- `projects/dttb/graphify-out/GRAPH_REPORT.md`
- `snippets/happ-vpn-client-instruction.md`
- `snippets/invoice-template.md`
- `snippets/assets/happ-routing-roscomvpn/README-upstream.md`
- `claude-memory/servicedesk-dttb.md`
- `claude-memory/benelux.md`
- `claude-memory/nextcloud-dttb.md`
- `claude-memory/nvr-fix.md`
- `claude-memory/videonablyudenie.md`
- `claude-memory/znamenskoe-home.md`
- `claude-memory/niikn-nextcloud.md`
- `claude-memory/krasnogorsk.md`
- `claude-memory/mas-niikn.md`
- `claude-memory/MEMORY.md`
## Orphan — без бэклинков (62)
_Эти файлы никто не упоминает через `[[..]]`. Кандидаты на удаление или добавление ссылок._
- `decisions/2026-05-14-buzharovo-watchdog-public-only.md`
- `decisions/2026-04-30-niikn-culture-gov-fakeip-fix.md`
- `decisions/2026-06-01-claude-remote-control-mobile.md`
- `decisions/2026-06-17-niikn-deco-p9-backhaul-degradation.md`
- `decisions/2026-05-26-server-upgrade-z6-g4.md`
- `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md`
- `decisions/2026-06-11-niikn-opyt-arhiv-100mb.md`
- `decisions/2026-06-04-deapple-migration-roadmap.md`
- `decisions/2026-04-28-netbird-watchdog-lxc-132-137.md`
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `decisions/2026-05-23-glavtorg-autologon-off.md`
- `decisions/2026-06-08-finland-vless-happ-dns-diag.md`
- `decisions/2026-05-08-buzharovo-1c-licensing-options.md`
- `decisions/2026-05-06-kb-search-overhaul.md`
- `decisions/2026-04-28-niikn-uookn-sev-gov-fakeip-fix.md`
- `decisions/2026-06-20-german-hermes-out-of-usage.md`
- `notes/ru-geoblocked-services.md`
- `projects/openwrt-4/STATUS-2026-06-03-eod.md`
- `projects/openwrt-4/session-handoff-2026-06-02.md`
- `projects/openwrt-4/client-letter.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/glavtorg/instruction-yaroslav-autologon.md`
- `projects/benilux/kp-alexandr-umny-server.md`
- `projects/niikn/mailcow.md`
- `projects/niikn/NIIKN-Infrastructure.md`
- `projects/niikn/maul-pc.md`
- `projects/niikn/groupfolders-migration.md`
- `projects/niikn/credentials.md`
- `projects/niikn/changelog.md`
- `projects/niikn/matrix.md`
- ... +32 ещё
## TODO без даты (512 шт в 93 файлах)
- `projects/backlog-current.md` — 39 шт
- `decisions/2026-06-04-deapple-migration-roadmap.md` — 13 шт
- `decisions/2026-04-30-rustdesk-pre-prod-audit.md` — 13 шт
- `projects/lipki/README.md` — 11 шт
- `templates/vpn-client.md` — 7 шт
- `decisions/2026-05-26-server-upgrade-z6-g4.md` — 6 шт
- `decisions/2026-04-29-rustdesk-client-deployment-package.md` — 6 шт
- `projects/buzharovo/severny-les-bot.md` — 6 шт
- `notes/claude/2026-05-30-223109-session.md` — 5 шт
- `notes/claude/2026-05-31-230412-session.md` — 5 шт
- `notes/claude/2026-06-01-115908-session.md` — 5 шт
- `notes/claude/2026-05-31-212135-session.md` — 5 шт
- `notes/claude/2026-05-31-150934-session.md` — 5 шт
- `notes/claude/2026-05-30-143711-session.md` — 5 шт
- `notes/claude/2026-05-31-232509-session.md` — 5 шт
- `notes/claude/2026-06-08-161105-session.md` — 5 шт
- `notes/claude/2026-06-07-235211-session.md` — 5 шт
- `notes/claude/2026-06-08-160130-session.md` — 5 шт
- `notes/claude/2026-06-08-002741-session.md` — 5 шт
- `notes/claude/2026-05-31-183858-session.md` — 5 шт
## Дубликаты имён (6)
- `README.md`:
- `README.md`
- `decisions/README.md`
- `notes/README.md`
- `projects/znamenskoye/README.md`
- `projects/openwrt-4/README.md`
- `projects/dttb/README.md`
- `projects/glavtorg/README.md`
- `projects/benilux/README.md`
- `projects/vishnevyy-sad/README.md`
- `projects/sergey/README.md`
- `projects/niikn/README.md`
- `projects/lipki/README.md`
- `projects/krasnogorsk/README.md`
- `projects/mmfb/README.md`
- `projects/buzharovo/README.md`
- `projects/peredelki/README.md`
- `projects/zelenograd/README.md`
- `projects/dttb/nextcloud-talk-bot/README.md`
- `snippets/README.md`
- `snippets/mac-dictation/README.md`
- `scripts/README.md`
- `nextcloud.md`:
- `projects/nextcloud.md`
- `projects/dttb/nextcloud.md`
- `network-topology-diagram.md`:
- `projects/znamenskoye/network-topology-diagram.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/niikn/network-topology-diagram.md`
- `credentials.md`:
- `projects/openwrt-4/credentials.md`
- `projects/dttb/credentials.md`
- `projects/benilux/credentials.md`
- `projects/niikn/credentials.md`
- `projects/peredelki/credentials.md`
- `projects/dttb/ai-assistant-pilot/credentials.md`
- `proxmox-inventory.md`:
- `projects/dttb/proxmox-inventory.md`
- `projects/mmfb/proxmox-inventory.md`
- `mikrotik.md`:
- `projects/niikn/mikrotik.md`
- `projects/mmfb/mikrotik.md`
---
*Генерируется `scripts/kb-health.py`. JSON-версия в `audit/health-latest.json` для agent-loop.*

View File

@@ -0,0 +1,76 @@
---
date: 2026-06-21
type: audit
source: kb-audit-npm.py
tags: [audit, drift, npm]
---
# NPM drift audit — 2026-06-21
Сверка [[../projects/dttb/npm-proxy-hosts|npm-proxy-hosts.md]] с NPM API (https://npm.dttb.ru).
- Живых proxy hosts: **31**
- В KB: **27**
- Совпадений: 27 / новых: 4 / удалённых из NPM: 0 / с изменениями: 4
## ⚠ Новые hosts (в NPM есть, в KB нет)
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
| 35 | `ai.umnybot.ru` | `10.0.0.239:9119` | ✓ | on |
| 37 | `umnybot.ru` | `10.0.0.103:3456` | - | on |
## 🔄 Изменения (ID совпадает, но что-то сменилось)
### #12 `bitrix24.dttb.ru`
- backend: KB=`10.0.0.223:8080` → live=`10.0.0.224:8080`
### #14 `remot.dttb.ru`
- backend: KB=`10.0.0.43:21114` → live=`10.0.0.244:21114`
### #22 `git.dttb.ru`
- ssl: KB=✗ → live=✓
### #33 `tg.umnybot.ru`
- backend: KB=`10.0.0.190:3000` → live=`10.0.0.221:80`
## Полный живой список
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 1 | `dttb.ru` | `10.0.0.230:11001` | ✓ | on |
| 2 | `office.dttb.ru` | `10.0.0.169:8080` | ✓ | on |
| 3 | `itilegent.ru` | `10.0.0.223:8080` | ✓ | on |
| 4 | `npm.dttb.ru` | `10.0.0.195:81` | ✓ | on |
| 5 | `porteiner.dttb.ru` | `10.0.0.10:9443` | ✓ | on |
| 6 | `pve.dttb.ru` | `10.0.0.250:8006` | ✓ | on |
| 9 | `ai.dttb.ru` | `10.0.0.179:8080` | ✓ | on |
| 10 | `bit.dttb.ru` | `10.0.0.217:8080` | ✓ | on |
| 11 | `link.dttb.ru` | `10.0.0.184:3000` | ✓ | on |
| 12 | `bitrix24.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 13 | `ip.dttb.ru` | `10.0.0.112:8840` | ✓ | on |
| 14 | `remot.dttb.ru` | `10.0.0.244:21114` | ✓ | on |
| 15 | `plex.dttb.ru` | `10.0.0.200:32400` | ✓ | on |
| 16 | `home.dttb.ru` | `10.0.0.155:8123` | ✓ | on |
| 17 | `z.dttb.ru` | `10.0.0.220:80` | ✓ | on |
| 21 | `rec.dttb.ru` | `10.0.0.227:8091` | ✓ | on |
| 22 | `git.dttb.ru` | `10.0.0.189:3000` | ✓ | on |
| 23 | `matrix.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 25 | `mail.dttb.ru` | `10.0.0.107:443` | ✓ | on |
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
| 28 | `bot.dttb.ru` | `10.0.0.239:18789` | ✓ | on |
| 29 | `omni.dttb.ru` | `10.0.0.179:20128` | ✓ | on |
| 30 | `omni.umnybot.ru` | `10.0.0.163:20128` | ✓ | on |
| 31 | `zima.umnybot.ru` | `10.0.0.190:80` | ✓ | on |
| 32 | `swarm.dttb.ru` | `10.0.0.135:3456` | ✓ | on |
| 33 | `tg.umnybot.ru` | `10.0.0.221:80` | ✓ | on |
| 34 | `rustdesk.umnybot.ru` | `10.0.0.190:3005` | ✓ | on |
| 35 | `ai.umnybot.ru` | `10.0.0.239:9119` | ✓ | on |
| 36 | `unifi.dttb.ru` | `10.0.0.196:8443` | ✓ | on |
| 37 | `umnybot.ru` | `10.0.0.103:3456` | - | on |
---
*Автоматически через `scripts/kb-audit-npm.py`.*

View File

@@ -0,0 +1,56 @@
---
date: 2026-06-21
type: audit
source: scripts/kb-objects-audit.py
tags: [audit, objects, frontmatter, links]
score: 66
---
# KB objects audit — 2026-06-21
**Score (меньше = лучше): `66`**
- Проектов с frontmatter: **14/14** (0 проблем)
- NetBird online-пиров без проектной карточки: **3**
- Битых wiki-ссылок `[[...]]`: **20**
## Frontmatter в projects/
✅ все проекты имеют валидный frontmatter
## Online netbird-пиры без проектной карточки
Эти пиры онлайн в NetBird, но не привязаны ни к одной projects/-странице.
Бот не сможет ответить «найди X» осмысленно — нет файла или alias.
Лечение: либо создать stub в `projects/<slug>/README.md` (см. `projects/lipki/` как образец),
либо добавить имя пира как полную строку в `aliases` подходящего проекта.
| NetBird-имя | IP | OS | Город |
|---|---|---|---|
| `DESKTOP-2IOQS54` | 100.70.82.83 | Windows 10 | Saransk |
| `DESKTOP-AGBMLPN` | 100.70.0.106 | Windows 11 | Helsinki |
| `DESKTOP-HL0BB05` | 100.70.235.80 | Windows 11 | Lipetsk |
## Битые wiki-ссылки
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_busybox_ip_br_flag\|памятка]]` → нет такого файла
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_iphone_breaks_fakeip\|памятка]]` → нет такого файла
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring|памятка: корень vs band-aid]]` → нет такого файла
- [snippets/podkop-fakeip-diagnostics.md](snippets/podkop-fakeip-diagnostics.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_openclaw_crash_loop|памятку про sing-box crash-loop]]` → нет такого файла
- [decisions/2026-06-15-unifi-controller-homelab.md](decisions/2026-06-15-unifi-controller-homelab.md) — `[[feedback_dttb_dns_split_view]]` → нет такого файла
- [decisions/2026-06-08-swarmclaw-lxc135-deploy.md](decisions/2026-06-08-swarmclaw-lxc135-deploy.md) — `[[../snippets/spaceweb-dns-api]]` → нет такого файла
- [decisions/2026-05-26-omni-domain-and-update.md](decisions/2026-05-26-omni-domain-and-update.md) — `[[feedback_spaceweb_dns_desync]]` → нет такого файла
- [decisions/2026-06-04-lipki-deco-p9-powerline-degradation.md](decisions/2026-06-04-lipki-deco-p9-powerline-degradation.md) — `[[../claude-memory/feedback_lipki_deco_powerline]]` → нет такого файла
- [decisions/2026-05-23-glavtorg-autologon-off.md](decisions/2026-05-23-glavtorg-autologon-off.md) — `[[feedback_vmware_workstation_session]]` → нет такого файла
- [decisions/2026-06-20-german-hermes-out-of-usage.md](decisions/2026-06-20-german-hermes-out-of-usage.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_omniroute_update]]` → нет такого файла
- [decisions/2026-06-20-german-hermes-out-of-usage.md](decisions/2026-06-20-german-hermes-out-of-usage.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/project_german_hermes]]` → нет такого файла
- [decisions/2026-06-20-german-hermes-out-of-usage.md](decisions/2026-06-20-german-hermes-out-of-usage.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring]]` → нет такого файла
- [projects/openwrt-4/credentials.md](projects/openwrt-4/credentials.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag|памятка]]` → нет такого файла
- [projects/dttb/proxmox-pve-147.md](projects/dttb/proxmox-pve-147.md) — `[[../../claude-memory/project_alexandr_assistant]]` → нет такого файла
- [projects/dttb/finland-hostkey-vps.md](projects/dttb/finland-hostkey-vps.md) — `[[../../claude-memory/finland-vps-security]]` → нет такого файла
- [projects/benilux/kp-alexandr-umny-server.md](projects/benilux/kp-alexandr-umny-server.md) — `[[../../claude-memory/project_alexandr_assistant]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[project_niikn_maxim_assistant|Максима Мауля]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[../../snippets/netbird-claude-install.ps1]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[rustdesk\|lejianwen-pro LXC 116]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[../../snippets/clients/|метод]]` → нет такого файла

View File

@@ -0,0 +1,98 @@
---
date: 2026-06-21
type: audit-proposed
source: kb-audit-propose.sh (Opus 4.7)
tags: [audit, proposed, inventory]
---
# Предложенные правки inventory — 2026-06-21
Сгенерировано Claude Opus на основе [[2026-06-21-drift|drift-отчёта]].
**Правки НЕ применены.** Ревью — ты. Apply — вручную.
Аудит формально нашёл только 1 расхождение, но сверка **полного** live-списка из отчёта вскрывает ещё несколько. Разбор ниже.
## 1. Резюме
Помимо отсутствующего `LXC 139 severny-les`, в inventory разъехались **4 статуса** (112, 119, 130 на самом деле `running`; 134 — `stopped`) и устарел раздел «Удалённые»: VMID **129/133/135 переиспользованы** живыми гостями. Сводные числа тоже неверны (39 → должно быть 43).
## 2. Конкретные правки
**A. Добавить блок LXC 139 (раздел «Запущенные LXC»)**
```diff
+### LXC 139 — severny-les
+| Параметр | Значение |
+|----------|----------|
+| Статус | 🟢 running |
+| IP | (уточнить — в отчёте нет) |
+| Назначение | (уточнить) |
```
> В drift-отчёте по 139 есть только имя+статус. IP/роль не выдумывал — заглушки.
**B. Исправить статусы (running, а не stopped)** — убрать из таблиц остановленных:
```diff
# Остановленные VM:
-| 112 | cloud-dttb | 8 | 16 GB | 80 GB | — |
-| 130 | Zima-OS | 4 | 12 GB | 32 GB | ZimaOS |
# Остановленные LXC:
-| 119 | myspeed | Speed test мониторинг |
```
…и добавить их как running (минимальные записи, деталей в отчёте нет):
```diff
# Запущенные VM:
+### VM 112 — cloud-dttb → 🟢 running (IP уточнить)
+### VM 130 — Zima-OS → 🟢 running (IP уточнить)
# Запущенные LXC:
+### LXC 119 — myspeed → 🟢 running (IP уточнить)
```
**C. LXC 134 ZnamSecurityBot — теперь stopped**
```diff
-### LXC 134 — ZnamSecurityBot
-| Статус | 🟢 running |
+# переместить в таблицу «Остановленные LXC»:
+| 134 | ZnamSecurityBot | ZnamSecurity Telegram-бот (10.0.0.238) |
```
**D. Раздел «Удалённые» устарел — VMID переиспользованы**
```diff
-| 129 | Clawdbot | ~апрель 2026 | Данные перенесены на code-server (132)... |
-| 133 | clawdbot-1 | ~апрель 2026 | Функционал мигрирован на openclaw (137) |
-| 135 | whisper-bot| ~апрель 2026 | — |
```
> 129 → живой `profi-parser-vm` (VM, stopped); 133 → `s1c-buzharovo` (VM, stopped); 135 → `swarmclaw` (LXC, running — **уже** описан отдельным блоком, т.е. сейчас числится дважды). Историю можно сохранить, но пометкой «VMID освобождён и переиспользован», а не как «удалён».
Добавить 129/133 в «Остановленные VM»:
```diff
+| 129 | profi-parser-vm | — | — | — | (уточнить) |
+| 133 | s1c-buzharovo | — | — | — | (уточнить) |
```
**E. Сводка**
```diff
-| QEMU VM | 15 | 5 | 10 |
-| LXC | 24 | 14| 10 |
-| **Итого** | **39** | **19** | **20** |
+| QEMU VM | 18 | 7 | 11 |
+| LXC | 25 | 13| 12 |
+| **Итого** | **43** | **20** | **23** |
```
> Пересчитано по live-списку отчёта (VM 18 / LXC 25; running 20 / stopped 23).
**F. Дата обновления (шапка)**
```diff
-> Последнее обновление: 2026-06-18 (добавлен LXC 141 german...)
+> Последнее обновление: 2026-06-21 (drift-аудит: +LXC 139; статусы 112/119/130/134; переиспользование VMID 129/133/135)
```
## 3. Предупреждения (неоднозначное)
- **139, 112, 119, 130**: в отчёте нет IP/назначения — поставил `(уточнить)`, заполнять вручную из живых хостов, не из отчёта.
- **133 `s1c-buzharovo`**: имя намекает на 1С (Бужарово), но отчёт это не подтверждает — назначение оставил «уточнить», не додумывал.
- **VMID 129/133/135 переиспользованы**: перед удалением старых записей убедись, что привязки прежних ролей (напр. `backup-lxc129` на code-server) уже не актуальны.
- **Статусы — снимок на момент аудита**. VM включают/выключают; running/stopped мог измениться — сверить при применении.
- Мелочь вне drift: `LXC 138 vpn-proxy` лежит в секции «Запущенные LXC», хотя статус stopped (и в live тоже stopped) — стоит переложить в остановленные.
---
Файл не трогал, как просили. Если хочешь — могу применить эти правки (выйдя из plan-режима) или отдать готовый патч.

View File

@@ -0,0 +1,55 @@
---
date: 2026-06-28
type: audit
source: kb-audit-creds.py
tags: [audit, creds, reachability]
---
# Credentials reachability — 2026-06-28
Ping-проверка URL из [[../projects/dttb/credentials|credentials.md]].
Проверяется только reachability (HTTP status), не реальный логин.
- Всего URL: **28**
- ✓ Reachable: 25 / ⚠ Questionable: 3 / ❌ Unreachable: 0
## ⚠ Нестандартный ответ
| URL | Status | Detail |
|---|---|---|
| `https://remot.dttb.ru/swagger/index.html` | 404 | Not Found |
| `https://api.netbird.io` | 404 | Not Found |
| `https://api.netbird.io/api/setup-keys` | 404 | Not Found |
## ✓ Все ответили нормально
| URL | Status | Категория |
|---|---|---|
| `https://10.0.0.250:8006` | 200 | ✓ reachable |
| `https://pve.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.143:5000` | 200 | ✓ reachable |
| `http://100.70.9.163:5000` | 200 | ✓ reachable |
| `http://10.0.0.189:3000` | 200 | ✓ reachable |
| `http://git.dttb.ru` | 200 | ✓ reachable |
| `http://10.0.0.195:81` | 200 | ✓ reachable |
| `https://npm.dttb.ru` | 200 | ✓ reachable |
| `https://remot.dttb.ru/_admin` | 200 | ✓ reachable |
| `https://dttb.ru` | 200 | ✓ reachable |
| `https://dttb.ru/remote.php/dav/files/admin` | 401 | ✓ auth-required (сервер жив) |
| `http://10.0.0.221` | 200 | ✓ reachable |
| `http://10.0.0.221:7681` | 200 | ✓ reachable |
| `https://vps.sweb.ru` | 200 | ✓ reachable |
| `https://api.sweb.ru/domains/dns` | 200 | ✓ reachable |
| `https://mail.niikn.com` | 200 | ✓ reachable |
| `http://192.168.1.22:81` | 200 | ✓ reachable |
| `https://german.dttb.ru` | 200 | ✓ reachable |
| `https://auth.dttb.ru` | 200 | ✓ reachable |
| `https://dash.dttb.ru` | 401 | ✓ auth-required (сервер жив) |
| `http://10.0.0.148:3000` | 200 | ✓ reachable |
| `https://edit.telegra.ph/auth/f1tfgzYpPpGlAr7cYHRzSeH59fYuNVB2V3fbCdypDc` | 200 | ✓ reachable |
| `https://api.telegra.ph/createPage` | 200 | ✓ reachable |
| `https://api.telegra.ph/editPage` | 200 | ✓ reachable |
| `https://telegra.ph/Nastrojka-VPN-04-24-2` | 200 | ✓ reachable |
---
*Автоматически через `scripts/kb-audit-creds.py`.*

View File

@@ -0,0 +1,101 @@
---
date: 2026-06-28
type: audit
source: kb-audit-dns.py
tags: [audit, dns]
---
# DNS resolve audit — 2026-06-28
Резолвим все домены из NPM через публичный DNS (8.8.8.8) и локальный роутер (10.0.0.1).
- Всего доменов: **35**
- NXDOMAIN на 8.8.8.8: 2 / пустой ответ локально: 1 / split-horizon: 27
## ❌ NXDOMAIN / не резолвится на 8.8.8.8 (публичный DNS)
| Домен | Локальный IP |
|---|---|
| `itilegent.ru` | (тоже нет) |
| `vpn.dttb.ru` | 10.0.0.195 |
## ⚠ Split-horizon — разные IP снаружи и внутри
Это нормально для *.dttb.ru (внешний Let's Encrypt IP vs локальный 10.0.0.195). Но неожиданный split может быть багом.
| Домен | Публичный (8.8.8.8) | Локальный (10.0.0.1) |
|---|---|---|
| `ai.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `auth.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bit.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bitrix24.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `chat.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `dash.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `german.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `git.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `home.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ip.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `link.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `mail.dttb.ru` | 176.62.183.186 | 10.0.0.107 |
| `matrix.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `npm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `office.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `omni.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `plex.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `porteiner.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `pve.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rec.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `remot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `router.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `swarm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `unifi.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `z.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
## ⚠ Пустой локальный резолв (роутер не знает)
- `itilegent.ru` (публичный: -)
## Полная таблица резолва
| Домен | 8.8.8.8 | 10.0.0.1 |
|---|---|---|
| `ai.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ai.umnybot.ru` | 158.255.0.139 | 158.255.0.139 |
| `auth.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bit.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bitrix24.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `bot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `chat.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `dash.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `german.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `git.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `home.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `ip.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `itilegent.ru` | — | — |
| `link.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `mail.dttb.ru` | 176.62.183.186 | 10.0.0.107 |
| `matrix.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `npm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `office.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `omni.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `omni.umnybot.ru` | 158.255.0.139 | 158.255.0.139 |
| `plex.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `porteiner.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `pve.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rec.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `remot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `router.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `rustdesk.umnybot.ru` | 158.255.0.139 | 158.255.0.139 |
| `swarm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `tg.umnybot.ru` | 158.255.0.139 | 158.255.0.139 |
| `umnybot.ru` | 158.255.0.139 | 158.255.0.139 |
| `unifi.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `vpn.dttb.ru` | — | 10.0.0.195 |
| `z.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
| `zima.umnybot.ru` | 158.255.0.139 | 158.255.0.139 |
---
*Автоматически через `scripts/kb-audit-dns.py`.*

76
audit/2026-06-28-drift.md Normal file
View File

@@ -0,0 +1,76 @@
---
date: 2026-06-28
type: audit
source: kb-audit.py
tags: [audit, drift, infrastructure]
---
# KB drift audit — 2026-06-28
Сравнение живого `pct list` / `qm list` с [[../projects/dttb/proxmox-inventory|proxmox-inventory.md]]
- Живых гостей Proxmox: **47**
- Упомянуто в inventory: **46**
- В обоих: 46 / только в live: 1 / отсутствуют в live: 0
- Известны как удалённые: 0 (в `## 🗑️ Удалённые`)
## ⚠ В Proxmox есть, в inventory НЕТ (надо добавить)
| VMID | Type | Status | Name |
|---|---|---|---|
| 139 | LXC | running | severny-les |
## Полный живой список
| VMID | Type | Status | Name |
|---|---|---|---|
| 100 | VM | stopped | NV |
| 101 | LXC | stopped | n8n |
| 102 | LXC | stopped | SMB |
| 103 | LXC | running | NPM |
| 104 | VM | stopped | Agent-DVR |
| 105 | VM | stopped | Nextcloud-AIO-dttb.ru |
| 106 | VM | running | pbs |
| 107 | VM | running | Mailcow |
| 108 | LXC | stopped | zabbix |
| 109 | VM | stopped | itilelegent |
| 110 | VM | stopped | Cloud |
| 111 | VM | running | WinServer2025 |
| 112 | VM | running | cloud-dttb |
| 113 | LXC | running | VaultWarden |
| 114 | LXC | running | LinkWarden |
| 115 | LXC | running | watchyourlan |
| 116 | LXC | running | rustdeskserver |
| 117 | LXC | stopped | motioneye |
| 118 | LXC | stopped | plex |
| 119 | LXC | stopped | myspeed |
| 120 | VM | stopped | 7 |
| 121 | LXC | stopped | docker-windows |
| 122 | LXC | stopped | qbittorrent |
| 123 | LXC | stopped | proxmox-local |
| 124 | VM | stopped | Matrix |
| 125 | VM | stopped | datacentr |
| 126 | LXC | stopped | debian |
| 127 | VM | running | haos-17.0 |
| 128 | LXC | stopped | profi-parser |
| 129 | VM | stopped | profi-parser-vm |
| 130 | VM | running | Zima-OS |
| 131 | VM | stopped | ubuntu |
| 132 | LXC | running | code-server |
| 133 | VM | stopped | s1c-buzharovo |
| 134 | LXC | stopped | ZnamSecurityBot |
| 135 | LXC | running | swarmclaw |
| 136 | LXC | running | gitea |
| 137 | LXC | running | openclaw |
| 138 | LXC | stopped | vpn-proxy |
| 139 | LXC | running | severny-les |
| 140 | LXC | running | unifi |
| 141 | LXC | running | german |
| 142 | LXC | running | open-webui |
| 143 | LXC | running | amnezia-panel |
| 144 | LXC | running | authentik |
| 145 | LXC | running | homepage |
| 250 | VM | running | Nextcloud-AIO |
---
*Автоматически сгенерировано `scripts/kb-audit.py`. Применять правки — вручную после ревью.*

254
audit/2026-06-28-health.md Normal file
View File

@@ -0,0 +1,254 @@
---
date: 2026-06-28
type: audit
source: kb-health.py
score: 2800
tags: [audit, health, metric]
---
# KB health — 2026-06-28
**Score (меньше = лучше): `2800`**
Проверено файлов: 1754
## Разбивка
| Категория | Кол-во | Вес | Штраф |
|---|---:|---:|---:|
| broken_wikilinks | 31 | 10 | 310 |
| broken_paths | 171 | 10 | 1710 |
| missing_frontmatter | 25 | 3 | 75 |
| orphan_files | 68 | 2 | 136 |
| undated_todos | 534 | 1 | 534 |
| duplicate_basenames | 7 | 5 | 35 |
| **ИТОГО** | | | **2800** |
## Битые wikilinks
| Откуда | `[[таргет]]` |
|---|---|
| `decisions/2026-06-15-unifi-controller-homelab.md` | `[[feedback_dttb_dns_split_view]]` |
| `decisions/2026-06-26-authentik-sso-deploy.md` | `[[project_deapple_migration]]` |
| `decisions/2026-06-08-swarmclaw-lxc135-deploy.md` | `[[../snippets/spaceweb-dns-api]]` |
| `decisions/2026-05-26-omni-domain-and-update.md` | `[[feedback_spaceweb_dns_desync]]` |
| `decisions/2026-06-04-lipki-deco-p9-powerline-degradation.md` | `[[../claude-memory/feedback_lipki_deco_powerline]]` |
| `decisions/2026-05-23-glavtorg-autologon-off.md` | `[[feedback_vmware_workstation_session]]` |
| `decisions/2026-06-20-german-hermes-out-of-usage.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_omniroute_update]]` |
| `decisions/2026-06-20-german-hermes-out-of-usage.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/project_german_hermes]]` |
| `decisions/2026-06-20-german-hermes-out-of-usage.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring]]` |
| `decisions/2026-06-20-german-hermes-out-of-usage.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring]]` |
| `notes/claude/2026-06-22-045321-на-proxmox-homelab-установи-hermes-agent-я-его-буд.md` | `[[project_swarmclaw]]` |
| `notes/claude/2026-06-22-013250-на-proxmox-homelab-установи-hermes-agent-я-его-буд.md` | `[[feedback_antigravity_onboarding]]` |
| `projects/openwrt-4/credentials.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag]]` |
| `projects/dttb/proxmox-pve-147.md` | `[[../../claude-memory/project_alexandr_assistant]]` |
| `projects/dttb/finland-hostkey-vps.md` | `[[../../claude-memory/finland-vps-security]]` |
| `projects/benilux/kp-alexandr-umny-server.md` | `[[../../claude-memory/project_alexandr_assistant]]` |
| `projects/niikn/maul-pc.md` | `[[project_niikn_maxim_assistant]]` |
| `projects/niikn/maul-pc.md` | `[[../../snippets/netbird-claude-install.ps1]]` |
| `projects/niikn/maul-pc.md` | `[[../../snippets/clients/]]` |
| `projects/niikn/desktop-jt9qee4.md` | `[[../../snippets/netbird-claude-install.ps1]]` |
| `projects/niikn/desktop-35c8vmi.md` | `[[../../snippets/netbird-claude-install.ps1]]` |
| `projects/buzharovo/podkop-router.md` | `[[buzharovo-router]]` |
| `projects/buzharovo/podkop-router.md` | `[[reference_infra]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 0]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 1]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 2]]` |
| `projects/dttb/graphify-out/GRAPH_REPORT.md` | `[[_COMMUNITY_Community 3]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_busybox_ip_br_flag\]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_iphone_breaks_fakeip\]]` |
| `snippets/podkop-reference.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring]]` |
| `snippets/podkop-fakeip-diagnostics.md` | `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_openclaw_crash_loop]]` |
## Битые relative-пути
| Откуда | Путь |
|---|---|
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/reference_groq_api.md` |
| `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_win11_unattended_upgrade.md` |
| `notes/ru-geoblocked-services.md` | `../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_nspd_blocks_mts.md` |
| `notes/claude/2026-06-23-185108-привет.md` | `projects/dttb/openwrt-router.md` |
| `notes/claude/2026-06-23-185108-привет.md` | `snippets/podkop-reference.md` |
| `notes/claude/2026-04-21-200915-охотхозяйство-с-openwrt-на-orange-pi-нужно-настрои.md` | `projects/dttb/vps-swtest.md` |
| `notes/claude/2026-05-21-102751-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-amnezia-reinstall.md` |
| `notes/claude/2026-04-24-194555-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-20-113423-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `decisions/2026-04-28-rustdesk-lejianwen-pro-migration.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/rustdesk.md` |
| `notes/claude/2026-04-28-122042-промт-для-claude-code-развёртывание-rustdesk-api-s.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-04-30-221054-найди-инфу-вчера-оксане-делали-доступ-через-рустде.md` | `projects/niikn/office-pc.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/proxmox-inventory.md` |
| `notes/claude/2026-04-29-153123-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-05-29-234117-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-pve-147.md` |
| `notes/claude/2026-05-29-234117-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-inventory.md` |
| `notes/claude/2026-04-29-231939-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/happ-routing-roscomvpn.md` |
| `notes/claude/2026-06-27-230948-httpsmaildttbrudomainadmin-можешь-найти-креды.md` | `projects/dttb/mailcow-dttb.md` |
| `notes/claude/2026-05-30-105828-давай-проверим-openvrt-benelux.md` | `projects/dttb/proxmox-pve-147.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/clients/yaroslav-amnezia-setup.md` |
| `notes/claude/2026-04-24-194322-создай-учет-подключаемых-клиентов-со-всеми-данными.md` | `snippets/apple-id-us-on-russia.md` |
| `notes/claude/2026-05-04-100627-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/znamenskoye/network-topology-diagram.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/mmfb/mikrotik.md` |
| `notes/claude/2026-04-20-115126-найди-информацию-по-настройке-openwrt-и-podcop-в-н.md` | `projects/niikn/mikrotik.md` |
| `notes/claude/2026-06-19-142423-10001-установи-обновление-sh-wget-o-httpsrawgithub.md` | `projects/dttb/credentials.md` |
| `notes/claude/2026-06-19-142423-10001-установи-обновление-sh-wget-o-httpsrawgithub.md` | `projects/dttb/proxmox-inventory.md` |
| `notes/claude/2026-04-24-165527-новый-клиент-ммфб-юрий-витальевич-нужно-подключить.md` | `projects/mmfb/yuri-vitalievich.md` |
| `notes/claude/2026-05-06-210824-superwhisper-можешь-проверить-не-работает.md` | `../knowledge-base/decisions/2026-05-05-mac-dictation-groq-hammerspoon.md` |
| `notes/claude/2026-06-11-235741-npm-api-креды-не-подходят-поищу-точные-логинпароль.md` | `projects/dttb/npm-proxy-hosts.md` |
| `notes/claude/2026-05-20-195902-давай-проверим-openvrt-benelux.md` | `decisions/2026-05-20-benelux-compromise.md` |
| `notes/claude/2026-05-28-131315-нужно-в-нетбирд-найти-и-настроить-подключение-к-эт.md` | `projects/niikn/maul-pc.md` |
| `notes/claude/2026-04-29-160010-сделай-красивую-ссылку-с-локацией-финляндия-для-ha.md` | `snippets/clients/yaroslav-happ-setup.md` |
| `notes/claude/2026-05-04-085317-можешь-составлять-графические-схемы-на-dttbruhttpd.md` | `projects/dttb/network-topology-diagram.md` |
| `notes/claude/2026-06-18-134919-добей-swarmclaw-по-хэндофу.md` | `snippets/podkop-agent-runbook.md` |
| `notes/claude/2026-05-21-104248-давай-проверим-openvrt-benelux.md` | `projects/benilux/credentials.md` |
| `notes/claude/2026-06-05-123547-давай-проверим-openvrt-benelux.md` | `decisions/2026-06-05-benelux-blackout-fw4-recovery.md` |
| `notes/claude/2026-04-29-071329-на-компе-юрия-продолжим-проверь-он-сети.md` | `projects/mmfb/otchet-yuri-2026-04.md` |
| `notes/claude/2026-05-23-133737-еще-клиент-ярослав-сервера-1с-главторг-жалуется-чт.md` | `projects/glavtorg/instruction-yaroslav-autologon.md` |
| `notes/claude/2026-05-27-191956-давай-проверим-openvrt-benelux.md` | `snippets/clients/alexandr-benelux-power-recovery.md` |
| `notes/claude/2026-04-21-203517-дай-мне-команду-в-сшел-виндовс-установка-нетбирд-и.md` | `/Users/ai/.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag.md` |
| `notes/claude/2026-06-20-152229-npm-api-креды-не-подходят-поищу-точные-логинпароль.md` | `projects/backlog-current.md` |
| `notes/claude/2026-06-28-014229-httpsmaildttbrudomainadmin-можешь-найти-креды.md` | `projects/dttb/mailcow-dttb.md` |
| `notes/claude/2026-05-28-215219-102531240-администратор-ol260380eg-нужно-подключит.md` | `projects/mmfb/lionart-1c.md` |
| `notes/claude/2026-05-26-111148-нужно-на-omni-робуте-установить-ему-домен-у-тебя-е.md` | `memory/feedback_antigravity_onboarding.md` |
| `notes/claude/2026-05-26-111148-нужно-на-omni-робуте-установить-ему-домен-у-тебя-е.md` | `memory/MEMORY.md` |
| `notes/claude/2026-06-02-001742-есть-клиент-француз-у-него-есть-cudy-tr3000-с-podk.md` | `projects/openwrt-4/canal-plus-setup-runbook.md` |
| `notes/claude/2026-06-08-213054-найди-аналог-openclaw-для-меня-нужен-аркестратор-и.md` | `decisions/2026-06-08-swarmclaw-lxc135-deploy.md` |
| ... | +121 ещё |
## Без frontmatter (25)
- `decisions/2026-06-01-claude-remote-control-mobile.md`
- `decisions/2026-06-11-niikn-opyt-arhiv-100mb.md`
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `notes/ru-geoblocked-services.md`
- `projects/dttb/znamenskoye-log.md`
- `projects/niikn/office-pc.md`
- `projects/niikn/_kbtmp_readme.md`
- `projects/niikn/kripto-arm.md`
- `projects/niikn/_kbtmp_claude.md`
- `projects/mmfb/yuri-vitalievich.md`
- `projects/mmfb/otchet-yuri-2026-04.md`
- `projects/dttb/graphify-out/GRAPH_REPORT.md`
- `snippets/happ-vpn-client-instruction.md`
- `snippets/invoice-template.md`
- `snippets/assets/happ-routing-roscomvpn/README-upstream.md`
- `claude-memory/servicedesk-dttb.md`
- `claude-memory/benelux.md`
- `claude-memory/nextcloud-dttb.md`
- `claude-memory/nvr-fix.md`
- `claude-memory/videonablyudenie.md`
- `claude-memory/znamenskoe-home.md`
- `claude-memory/niikn-nextcloud.md`
- `claude-memory/krasnogorsk.md`
- `claude-memory/mas-niikn.md`
- `claude-memory/MEMORY.md`
## Orphan — без бэклинков (68)
_Эти файлы никто не упоминает через `[[..]]`. Кандидаты на удаление или добавление ссылок._
- `decisions/2026-05-14-buzharovo-watchdog-public-only.md`
- `decisions/2026-04-30-niikn-culture-gov-fakeip-fix.md`
- `decisions/2026-06-01-claude-remote-control-mobile.md`
- `decisions/2026-06-17-niikn-deco-p9-backhaul-degradation.md`
- `decisions/2026-05-26-server-upgrade-z6-g4.md`
- `decisions/2026-06-27-benelux-foreign-banks-eu-exit.md`
- `decisions/2026-06-21-buzharovo-mcp-1c-deploy.md`
- `decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md`
- `decisions/2026-06-11-niikn-opyt-arhiv-100mb.md`
- `decisions/2026-06-04-deapple-migration-roadmap.md`
- `decisions/2026-04-28-netbird-watchdog-lxc-132-137.md`
- `decisions/2026-05-05-mac-dictation-groq-hammerspoon.md`
- `decisions/2026-05-23-glavtorg-autologon-off.md`
- `decisions/2026-06-08-finland-vless-happ-dns-diag.md`
- `decisions/2026-05-08-buzharovo-1c-licensing-options.md`
- `decisions/2026-05-06-kb-search-overhaul.md`
- `decisions/2026-04-28-niikn-uookn-sev-gov-fakeip-fix.md`
- `decisions/2026-06-20-german-hermes-out-of-usage.md`
- `notes/ru-geoblocked-services.md`
- `projects/openwrt-4/STATUS-2026-06-03-eod.md`
- `projects/openwrt-4/session-handoff-2026-06-02.md`
- `projects/openwrt-4/client-letter.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/glavtorg/instruction-yaroslav-autologon.md`
- `projects/benilux/kp-alexandr-umny-server.md`
- `projects/niikn/mailcow.md`
- `projects/niikn/NIIKN-Infrastructure.md`
- `projects/niikn/credentials.md`
- `projects/niikn/changelog.md`
- `projects/niikn/_kbtmp_tpl_decision.md`
- ... +38 ещё
## TODO без даты (534 шт в 99 файлах)
- `projects/backlog-current.md` — 39 шт
- `decisions/2026-06-04-deapple-migration-roadmap.md` — 13 шт
- `decisions/2026-04-30-rustdesk-pre-prod-audit.md` — 13 шт
- `projects/lipki/README.md` — 11 шт
- `templates/vpn-client.md` — 7 шт
- `decisions/2026-05-26-server-upgrade-z6-g4.md` — 6 шт
- `decisions/2026-04-29-rustdesk-client-deployment-package.md` — 6 шт
- `projects/buzharovo/severny-les-bot.md` — 6 шт
- `notes/claude/2026-05-30-223109-session.md` — 5 шт
- `notes/claude/2026-05-31-230412-session.md` — 5 шт
- `notes/claude/2026-06-01-115908-session.md` — 5 шт
- `notes/claude/2026-05-31-212135-session.md` — 5 шт
- `notes/claude/2026-05-31-150934-session.md` — 5 шт
- `notes/claude/2026-06-15-203254-session.md` — 5 шт
- `notes/claude/2026-05-30-143711-session.md` — 5 шт
- `notes/claude/2026-05-31-232509-session.md` — 5 шт
- `notes/claude/2026-06-08-161105-session.md` — 5 шт
- `notes/claude/2026-06-07-235211-session.md` — 5 шт
- `notes/claude/2026-06-08-160130-session.md` — 5 шт
- `notes/claude/2026-06-08-002741-session.md` — 5 шт
## Дубликаты имён (7)
- `README.md`:
- `README.md`
- `decisions/README.md`
- `notes/README.md`
- `projects/znamenskoye/README.md`
- `projects/openwrt-4/README.md`
- `projects/dttb/README.md`
- `projects/glavtorg/README.md`
- `projects/benilux/README.md`
- `projects/vishnevyy-sad/README.md`
- `projects/sergey/README.md`
- `projects/niikn/README.md`
- `projects/lipki/README.md`
- `projects/krasnogorsk/README.md`
- `projects/mmfb/README.md`
- `projects/buzharovo/README.md`
- `projects/peredelki/README.md`
- `projects/zelenograd/README.md`
- `projects/dttb/nextcloud-talk-bot/README.md`
- `snippets/README.md`
- `snippets/mac-dictation/README.md`
- `scripts/README.md`
- `nextcloud.md`:
- `projects/nextcloud.md`
- `projects/dttb/nextcloud.md`
- `network-topology-diagram.md`:
- `projects/znamenskoye/network-topology-diagram.md`
- `projects/dttb/network-topology-diagram.md`
- `projects/niikn/network-topology-diagram.md`
- `credentials.md`:
- `projects/openwrt-4/credentials.md`
- `projects/dttb/credentials.md`
- `projects/benilux/credentials.md`
- `projects/niikn/credentials.md`
- `projects/peredelki/credentials.md`
- `projects/dttb/ai-assistant-pilot/credentials.md`
- `proxmox-inventory.md`:
- `projects/dttb/proxmox-inventory.md`
- `projects/mmfb/proxmox-inventory.md`
- `server1c.md`:
- `projects/dttb/server1c.md`
- `projects/buzharovo/server1c.md`
- `mikrotik.md`:
- `projects/niikn/mikrotik.md`
- `projects/mmfb/mikrotik.md`
---
*Генерируется `scripts/kb-health.py`. JSON-версия в `audit/health-latest.json` для agent-loop.*

View File

@@ -0,0 +1,80 @@
---
date: 2026-06-28
type: audit
source: kb-audit-npm.py
tags: [audit, drift, npm]
---
# NPM drift audit — 2026-06-28
Сверка [[../projects/dttb/npm-proxy-hosts|npm-proxy-hosts.md]] с NPM API (https://npm.dttb.ru).
- Живых proxy hosts: **35**
- В KB: **31**
- Совпадений: 31 / новых: 4 / удалённых из NPM: 0 / с изменениями: 4
## ⚠ Новые hosts (в NPM есть, в KB нет)
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
| 35 | `ai.umnybot.ru` | `10.0.0.239:9119` | ✓ | on |
| 37 | `umnybot.ru` | `10.0.0.103:3456` | - | on |
## 🔄 Изменения (ID совпадает, но что-то сменилось)
### #12 `bitrix24.dttb.ru`
- backend: KB=`10.0.0.223:8080` → live=`10.0.0.224:8080`
### #14 `remot.dttb.ru`
- backend: KB=`10.0.0.43:21114` → live=`10.0.0.244:21114`
### #22 `git.dttb.ru`
- ssl: KB=✗ → live=✓
### #33 `tg.umnybot.ru`
- backend: KB=`10.0.0.190:3000` → live=`10.0.0.221:80`
## Полный живой список
| ID | Домены | Backend | SSL | Enabled |
|---|---|---|---|---|
| 1 | `dttb.ru` | `10.0.0.230:11001` | ✓ | on |
| 2 | `office.dttb.ru` | `10.0.0.169:8080` | ✓ | on |
| 3 | `itilegent.ru` | `10.0.0.223:8080` | ✓ | on |
| 4 | `npm.dttb.ru` | `10.0.0.195:81` | ✓ | on |
| 5 | `porteiner.dttb.ru` | `10.0.0.10:9443` | ✓ | on |
| 6 | `pve.dttb.ru` | `10.0.0.250:8006` | ✓ | on |
| 9 | `ai.dttb.ru` | `10.0.0.179:8080` | ✓ | on |
| 10 | `bit.dttb.ru` | `10.0.0.217:8080` | ✓ | on |
| 11 | `link.dttb.ru` | `10.0.0.184:3000` | ✓ | on |
| 12 | `bitrix24.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 13 | `ip.dttb.ru` | `10.0.0.112:8840` | ✓ | on |
| 14 | `remot.dttb.ru` | `10.0.0.244:21114` | ✓ | on |
| 15 | `plex.dttb.ru` | `10.0.0.200:32400` | ✓ | on |
| 16 | `home.dttb.ru` | `10.0.0.155:8123` | ✓ | on |
| 17 | `z.dttb.ru` | `10.0.0.220:80` | ✓ | on |
| 21 | `rec.dttb.ru` | `10.0.0.227:8091` | ✓ | on |
| 22 | `git.dttb.ru` | `10.0.0.189:3000` | ✓ | on |
| 23 | `matrix.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
| 25 | `mail.dttb.ru` | `10.0.0.107:443` | ✓ | on |
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
| 28 | `bot.dttb.ru` | `10.0.0.239:18789` | ✓ | on |
| 29 | `omni.dttb.ru` | `10.0.0.179:20128` | ✓ | on |
| 30 | `omni.umnybot.ru` | `10.0.0.163:20128` | ✓ | on |
| 31 | `zima.umnybot.ru` | `10.0.0.190:80` | ✓ | on |
| 32 | `swarm.dttb.ru` | `10.0.0.135:3456` | ✓ | on |
| 33 | `tg.umnybot.ru` | `10.0.0.221:80` | ✓ | on |
| 34 | `rustdesk.umnybot.ru` | `10.0.0.190:3005` | ✓ | on |
| 35 | `ai.umnybot.ru` | `10.0.0.239:9119` | ✓ | on |
| 36 | `unifi.dttb.ru` | `10.0.0.196:8443` | ✓ | on |
| 37 | `umnybot.ru` | `10.0.0.103:3456` | - | on |
| 39 | `chat.dttb.ru` | `10.0.0.142:3000` | ✓ | on |
| 40 | `german.dttb.ru` | `10.0.0.141:9119` | ✓ | on |
| 41 | `auth.dttb.ru` | `10.0.0.144:9000` | ✓ | on |
| 42 | `dash.dttb.ru` | `10.0.0.148:3000` | ✓ | on |
---
*Автоматически через `scripts/kb-audit-npm.py`.*

View File

@@ -0,0 +1,67 @@
---
date: 2026-06-28
type: audit
source: scripts/kb-objects-audit.py
tags: [audit, objects, frontmatter, links]
score: 99
---
# KB objects audit — 2026-06-28
**Score (меньше = лучше): `99`**
- Проектов с frontmatter: **14/14** (0 проблем)
- NetBird online-пиров без проектной карточки: **3**
- Битых wiki-ссылок `[[...]]`: **31**
## Frontmatter в projects/
✅ все проекты имеют валидный frontmatter
## Online netbird-пиры без проектной карточки
Эти пиры онлайн в NetBird, но не привязаны ни к одной projects/-странице.
Бот не сможет ответить «найди X» осмысленно — нет файла или alias.
Лечение: либо создать stub в `projects/<slug>/README.md` (см. `projects/lipki/` как образец),
либо добавить имя пира как полную строку в `aliases` подходящего проекта.
| NetBird-имя | IP | OS | Город |
|---|---|---|---|
| `DESKTOP-2IOQS54` | 100.70.82.83 | Windows 10 | Saransk |
| `DESKTOP-AGBMLPN` | 100.70.0.106 | Windows 11 | Helsinki |
| `DESKTOP-HL0BB05` | 100.70.235.80 | Windows 11 | Lipetsk |
## Битые wiki-ссылки
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_busybox_ip_br_flag\|памятка]]` → нет такого файла
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_iphone_breaks_fakeip\|памятка]]` → нет такого файла
- [snippets/podkop-reference.md](snippets/podkop-reference.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring|памятка: корень vs band-aid]]` → нет такого файла
- [snippets/podkop-fakeip-diagnostics.md](snippets/podkop-fakeip-diagnostics.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_openclaw_crash_loop|памятку про sing-box crash-loop]]` → нет такого файла
- [decisions/2026-06-15-unifi-controller-homelab.md](decisions/2026-06-15-unifi-controller-homelab.md) — `[[feedback_dttb_dns_split_view]]` → нет такого файла
- [decisions/2026-06-26-authentik-sso-deploy.md](decisions/2026-06-26-authentik-sso-deploy.md) — `[[project_deapple_migration]]` → нет такого файла
- [decisions/2026-06-08-swarmclaw-lxc135-deploy.md](decisions/2026-06-08-swarmclaw-lxc135-deploy.md) — `[[../snippets/spaceweb-dns-api]]` → нет такого файла
- [decisions/2026-05-26-omni-domain-and-update.md](decisions/2026-05-26-omni-domain-and-update.md) — `[[feedback_spaceweb_dns_desync]]` → нет такого файла
- [decisions/2026-06-04-lipki-deco-p9-powerline-degradation.md](decisions/2026-06-04-lipki-deco-p9-powerline-degradation.md) — `[[../claude-memory/feedback_lipki_deco_powerline]]` → нет такого файла
- [decisions/2026-05-23-glavtorg-autologon-off.md](decisions/2026-05-23-glavtorg-autologon-off.md) — `[[feedback_vmware_workstation_session]]` → нет такого файла
- [decisions/2026-06-20-german-hermes-out-of-usage.md](decisions/2026-06-20-german-hermes-out-of-usage.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_omniroute_update]]` → нет такого файла
- [decisions/2026-06-20-german-hermes-out-of-usage.md](decisions/2026-06-20-german-hermes-out-of-usage.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/project_german_hermes]]` → нет такого файла
- [decisions/2026-06-20-german-hermes-out-of-usage.md](decisions/2026-06-20-german-hermes-out-of-usage.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring]]` → нет такого файла
- [decisions/2026-06-20-german-hermes-out-of-usage.md](decisions/2026-06-20-german-hermes-out-of-usage.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_root_cause_recurring]]` → нет такого файла
- [projects/openwrt-4/credentials.md](projects/openwrt-4/credentials.md) — `[[../../.claude/projects/-Users-ai-knowledge-base/memory/reference_netbird_claude_diag|памятка]]` → нет такого файла
- [projects/dttb/proxmox-pve-147.md](projects/dttb/proxmox-pve-147.md) — `[[../../claude-memory/project_alexandr_assistant]]` → нет такого файла
- [projects/dttb/finland-hostkey-vps.md](projects/dttb/finland-hostkey-vps.md) — `[[../../claude-memory/finland-vps-security]]` → нет такого файла
- [projects/benilux/kp-alexandr-umny-server.md](projects/benilux/kp-alexandr-umny-server.md) — `[[../../claude-memory/project_alexandr_assistant]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[project_niikn_maxim_assistant|Максима Мауля]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[../../snippets/netbird-claude-install.ps1]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[rustdesk\|lejianwen-pro LXC 116]]` → нет такого файла
- [projects/niikn/maul-pc.md](projects/niikn/maul-pc.md) — `[[../../snippets/clients/|метод]]` → нет такого файла
- [projects/niikn/desktop-jt9qee4.md](projects/niikn/desktop-jt9qee4.md) — `[[../../snippets/netbird-claude-install.ps1]]` → нет такого файла
- [projects/niikn/desktop-jt9qee4.md](projects/niikn/desktop-jt9qee4.md) — `[[rustdesk\|lejianwen-pro LXC 116]]` → нет такого файла
- [projects/niikn/desktop-35c8vmi.md](projects/niikn/desktop-35c8vmi.md) — `[[../../snippets/netbird-claude-install.ps1]]` → нет такого файла
- [projects/niikn/desktop-35c8vmi.md](projects/niikn/desktop-35c8vmi.md) — `[[rustdesk\|lejianwen-pro LXC 116]]` → нет такого файла
- [projects/niikn/_kbtmp_claude.md](projects/niikn/_kbtmp_claude.md) — `[[двойные скобки]]` → нет такого файла
- [projects/buzharovo/podkop-router.md](projects/buzharovo/podkop-router.md) — `[[buzharovo-router|Cudy WR6500H 185.13.47.2]]` → нет такого файла
- [projects/buzharovo/podkop-router.md](projects/buzharovo/podkop-router.md) — `[[reference_infra]]` → нет такого файла
- [notes/claude/2026-06-22-045321-на-proxmox-homelab-установи-hermes-agent-я-его-буд.md](notes/claude/2026-06-22-045321-на-proxmox-homelab-установи-hermes-agent-я-его-буд.md) — `[[project_swarmclaw]]` → нет такого файла
- [notes/claude/2026-06-22-013250-на-proxmox-homelab-установи-hermes-agent-я-его-буд.md](notes/claude/2026-06-22-013250-на-proxmox-homelab-установи-hermes-agent-я-его-буд.md) — `[[feedback_antigravity_onboarding]]` → нет такого файла

View File

@@ -0,0 +1,124 @@
---
date: 2026-06-28
type: audit-proposed
source: kb-audit-propose.sh (Opus 4.7)
tags: [audit, proposed, inventory]
---
# Предложенные правки inventory — 2026-06-28
Сгенерировано Claude Opus на основе [[2026-06-28-drift|drift-отчёта]].
**Правки НЕ применены.** Ревью — ты. Apply — вручную.
Данные у меня все есть прямо в задании (оба файла inline), править ничего не нужно — выдаю анализ.
## 1. Резюме
Живых гостей 47, в inventory корректно отражено меньше. Аудит явно поймал только **LXC 139 severny-les** (нет в inventory), но сверка полного live-списка с inventory вскрывает ещё несколько расхождений: два запущенных VM (112, 130) числятся остановленными; два VMID из раздела «Удалённые» (129, 133) переиспользованы и снова живы; VMID 135 задвоен (running + Удалённые); сводная таблица и счётчики устарели (42→47).
## 2. Конкретные правки
### A. Добавить LXC 139 (флаг аудита) — раздел «🟢 Запущенные LXC»
```diff
+### LXC 139 — severny-les
+| Параметр | Значение |
+|----------|----------|
+| Статус | 🟢 running |
+| IP | (уточнить) |
+| Назначение | (уточнить) |
```
> В drift-отчёте только VMID/type/status/name. IP и назначение не выдумываю — пометил «уточнить».
### B. VM 112 cloud-dttb: stopped → running
Live: `112 VM running cloud-dttb`. В inventory он в таблице «🔴 Остановленные VM».
```diff
@@ Остановленные VM (QEMU) @@
-| 112 | cloud-dttb | 8 | 16 GB | 80 GB | — |
```
И добавить блок в «🟢 Запущенные VM»:
```diff
+### VM 112 — cloud-dttb
+| Параметр | Значение |
+|----------|----------|
+| Статус | 🟢 running |
+| CPU | 8 vCPU |
+| RAM | 16 GB |
+| Диск | 80 GB |
+| Назначение | (уточнить) |
```
### C. VM 130 Zima-OS: stopped → running
Live: `130 VM running Zima-OS`. В inventory — в остановленных (детали есть: IP 10.0.0.221).
```diff
@@ Остановленные VM (QEMU) @@
-| 130 | Zima-OS | 4 | 12 GB | 32 GB | ZimaOS NAS — 10.0.0.221, веб `dttb`/`1qaz!QAZ` (см. credentials) |
```
```diff
+### VM 130 — Zima-OS
+| Параметр | Значение |
+|----------|----------|
+| Статус | 🟢 running |
+| CPU | 4 vCPU |
+| RAM | 12 GB |
+| Диск | 32 GB |
+| IP | 10.0.0.221 (веб `dttb`/`1qaz!QAZ`, см. credentials) |
+| Назначение | ZimaOS NAS |
```
### D. VM 129 profi-parser-vm — VMID переиспользован (см. предупреждения)
Live: `129 VM stopped profi-parser-vm`. В inventory 129 числится только в «🗑️ Удалённые» как Clawdbot.
Добавить в «🔴 Остановленные VM»:
```diff
+| 129 | profi-parser-vm | — | — | — | VM-пара к LXC 128 profi-parser (уточнить) |
```
Аннотировать историческую строку (VMID переиспользован):
```diff
@@ 🗑️ Удалённые (история) @@
-| 129 | Clawdbot | ~апрель 2026 | Данные перенесены на code-server (132) ... |
+| 129 | Clawdbot | ~апрель 2026 | Данные на code-server (132) `/root/backup-lxc129/`. ⚠️ VMID 129 переиспользован под VM profi-parser-vm |
```
### E. VM 133 s1c-buzharovo — VMID переиспользован
Live: `133 VM stopped s1c-buzharovo`. В inventory 133 только в «Удалённые» как clawdbot-1.
```diff
+| 133 | s1c-buzharovo | — | — | — | (уточнить; вероятно 1С Бужарово) |
```
```diff
@@ 🗑️ Удалённые (история) @@
-| 133 | clawdbot-1 | ~апрель 2026 | Функционал мигрирован на openclaw (137) |
+| 133 | clawdbot-1 | ~апрель 2026 | Мигрирован на openclaw (137). ⚠️ VMID 133 переиспользован под VM s1c-buzharovo |
```
### F. VMID 135 задвоен
Live: `135 LXC running swarmclaw` (в inventory корректный блок уже есть). Но 135 также висит в «Удалённые» как whisper-bot.
```diff
@@ 🗑️ Удалённые (история) @@
-| 135 | whisper-bot | ~апрель 2026 | — |
+| 135 | whisper-bot | ~апрель 2026 | удалён; ⚠️ VMID 135 переиспользован под LXC swarmclaw |
```
### G. Обновить «Сводка»
```diff
-| QEMU VM | 15 | 5 | 10 |
-| LXC | 27 | 17 | 10 |
-| **Итого** | **42** | **22** | **20** |
+| QEMU VM | 18 | 7 | 11 |
+| LXC | 29 | 17 | 12 |
+| **Итого** | **47** | **24** | **23** |
```
> Пересчёт по live-списку: VM 18 (7 running/11 stopped), LXC 29 (17 running/12 stopped).
### H. Обновить шапку
```diff
-> Последнее обновление: 2026-06-27 (добавлен LXC 145 homepage ...)
+> Последнее обновление: 2026-06-28 (drift-аудит: +LXC 139 severny-les; 112/130 → running; VMID 129/133/135 переиспользованы)
```
## 3. Предупреждения
- **Аудит занизил drift.** `kb-audit.py` сверяет только наличие VMID (упомянут/нет), а не статус и не роль. Поэтому он показал «46/46 совпало» и поймал лишь 139 — расхождения по статусу (112, 130) и переиспользованные VMID (129, 133, 135) скрипт не видит. Стоит доработать аудит на сверку status/name.
- **Переиспользование VMID (129, 133, 135).** Не из выдумки — прямо из live-списка отчёта: 129=profi-parser-vm, 133=s1c-buzharovo, 135=swarmclaw, тогда как в «Удалённые» те же VMID = Clawdbot/clawdbot-1/whisper-bot. Это разные сущности на одном номере. Я предложил **сохранить историю** + пометку, а не удалять строки. Реши, как вести: возможно, в «Удал될» лучше указывать дату и не держать сырой VMID, который потом переиспользуется.
- **Нет данных для деталей.** Для 139, 112, 129, 133 в отчёте нет IP/CPU/RAM/назначения — везде проставил «уточнить», ничего не сочинял. Для 130 детали взял из существующей строки inventory.
- **s1c-buzharovo** по имени похоже на 1С-сервер Бужарово (в памяти есть проект роутера Бужарово), но в отчёте подтверждения роли нет — поэтому «вероятно», не факт.
Если хочешь, могу применить эти правки к `proxmox-inventory.md` (тогда выйди из plan mode или дай добро).

View File

@@ -1,13 +1,13 @@
{
"date": "2026-05-03",
"score": 458,
"date": "2026-06-28",
"score": 2800,
"counts": {
"broken_wikilinks": 7,
"broken_paths": 20,
"missing_frontmatter": 17,
"orphan_files": 38,
"undated_todos": 36,
"duplicate_basenames": 5
"broken_wikilinks": 31,
"broken_paths": 171,
"missing_frontmatter": 25,
"orphan_files": 68,
"undated_todos": 534,
"duplicate_basenames": 7
},
"weights": {
"broken_wikilinks": 10,
@@ -17,5 +17,5 @@
"undated_todos": 1,
"duplicate_basenames": 5
},
"files_scanned": 327
"files_scanned": 1754
}

1075
audit/objects-map.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -68,6 +68,18 @@ Vault `~/knowledge-base` хранился только в Gitea (`git.dttb.ru/ol
**openclaw read-only** через `git remote set-url --push origin DISABLED_READONLY` — любая попытка push из бота завершится ошибкой "Could not resolve host", случайно перезаписать не сможет.
### Нормализация на code-server (2026-05-26)
Обнаружено что на LXC 132 параллельно существовали **два независимых клона** одного репо:
- `/root/knowledge-base/` — рабочий, `git.dttb.ru` remote, обслуживался `kb-autosync.sh` cron'ом
- `/root/.claude/knowledge-base/` — отдельный клон, `10.0.0.189:3000` remote, использовался Claude Code и Obsidian, **отстал от remote на 1.5 месяца (239 коммитов)**
При попытке push с Claude-клона: rebase-каскад на сотни файлов, конфликты. Это нестабильно.
**Решение:** `/root/.claude/knowledge-base/` → симлинк на `/root/knowledge-base/`. Старый клон сохранён как `/root/.claude/knowledge-base.bak-2026-05-26` (на случай если что-то нужно достать). Все процессы теперь пишут в **один git-репо**, cron каждые 5 минут реально синхронизирует то что наработал Claude Code.
Также: на LXC 136 (Gitea) сетевой настройкой стояло `ip=dhcp` — DHCP выдал `.191` вместо `.189`, push с code-server возвращал `Couldn't connect`. Заменено на `ip=10.0.0.189/24,gw=10.0.0.1` (статика).
### Компоненты
- **`/Users/ai/.config/nextcloud-kb/rclone.conf`** — WebDAV ремоут `kbsync:` на `https://dttb.ru/remote.php/dav/files/admin`, app password в obscured виде

View File

@@ -12,7 +12,7 @@ tags: [decision, niikn, network, dns, podkop]
## Диагноз
По алгоритму [[notes/govru-diagnosis]]:
По алгоритму [[../projects/niikn/govru-quickfix-playbook]]:
| Точка | HTTP | Real IP |
|-------|------|---------|

View File

@@ -117,7 +117,7 @@ RustDesk при первом запуске парсит своё имя фай
## TODO / следующие шаги
- [ ] Олег создаёт public share-link в Nextcloud (с паролем), кладёт ссылку в [[../snippets/clients/]]
- [ ] Олег создаёт public share-link в Nextcloud (с паролем), кладёт ссылку в `snippets/clients/`
- [ ] Подготовить **one-liner-скрипты** на сервере (NPM static path `/install/` → S3 или rustdesk-api resources/public)
- [ ] **Configuration Strategy** в админке lejianwen-api — push config existing peers
- [ ] Скачать `rustdesk-utils` 2.x (lejianwen-pro) для генерации `rustdesk-licensed-*.exe` — single-file deployment без скриптов

View File

@@ -12,7 +12,7 @@ tags: [decision, niikn, network, dns, podkop]
## Диагноз
По алгоритму [[notes/govru-diagnosis]]:
По алгоритму [[../projects/niikn/govru-quickfix-playbook]]:
| Точка | HTTP | Real IP |
|-------|------|---------|

View File

@@ -75,6 +75,6 @@ ssh root@10.0.0.1 "cp /etc/adguardhome.yaml.bak.20260430_001129 /etc/adguardhome
## Ссылки
- [[../projects/dttb/openwrt-router]] — карточка роутера
- [[../claude-memory/podkop]] — справка по подкопу (схемы AGH, fakeip 198.18.0.0/15)
- [[2026-04-17-peredelki-podkop-stability-fix]] — справка по подкопу (схемы AGH, fakeip 198.18.0.0/15)
- https://podkop.net/docs/adguard/
- https://podkop.net/docs/dont-touch-my-dhcp/

View File

@@ -103,8 +103,49 @@ Grizzlysms TJ-pool **полностью забанен** Apple на текущи
- **IPRoyal pay-as-you-go** residential — без trial, но pay-as-you-go от $7/GB.
- **Litport mobile** — настоящие 4G IPs местных операторов TJ (Babilon-Mobile AS204106, TT Mobile AS43197, Tacom/Beeline AS34557).
## Альтернативный путь: покупка US Adidas-аккаунта + смена региона на TJ
Когда самостоятельная регистрация через virtual SMS не идёт (Apple блочит весь grizzlysms TJ-pool), можно купить готовый US Adidas Apple ID за 100-300 ₽ и сменить регион на TJ.
**Когда подходит:** платёжная стратегия "карта на нуле, пополнение перед покупкой" — потеря аккаунта не критична.
**Workflow:**
1. Покупка US Apple ID (массовые "Adidas" аккаунты, без payment method, 2FA через trusted devices, не SMS).
2. Проверка жизнеспособности на appleid.apple.com — не должно быть pending verification.
3. **Очистка следов продавца в правильном порядке:** смена пароля → удаление recovery contacts → удаление recovery key → удаление чужих trusted devices → смена recovery email на свой → перевыбор security questions.
4. **Пауза 24-48 часов** — проверять что продавец не пытается восстановить через forgot password.
5. **Смена региона US → TJ через Firefox с TJ-proxy** — Personal Information → Country/Region → Tajikistan → Payment Method: None.
6. На iPhone: **Настройки → текущий Apple ID → Медиа и покупки → Sign Out** (только App Store, НЕ iCloud) → войти под новым TJ-аккаунтом.
7. Когда появится TJ-карта — привязка через Payment & Shipping (на ненулевом балансе для $1 hold).
**Риски:**
- Продавец сохраняет recovery key/devices/email — может вернуть. Очистка в шаге 3 минимизирует, но не на 100%.
- Apple anti-fraud может flagнуть смену региона US → TJ + TJ residential proxy + новая карта в первый месяц — до бана аккаунта. Поэтому **не привязывать критичную TJ-карту в первый месяц**.
- Adidas-пакеты массовые → Apple периодически их банит за нарушение TOS (создание сериями).
**Когда НЕ подходит:** долгосрочное хранение Apple Cash, привязка карт с большим балансом, использование как primary iCloud (там этот US Apple ID лучше не использовать вообще, только App Store).
## Статус на 2026-05-06
**Прогресс:**
- ✅ IPRoyal Royal Residential куплен (1 GB pay-as-you-go), TJ residential подтверждён рабочим (см. [[../snippets/iproyal-gost-relay]])
- ✅ Локальный gost-relay отлажен (порт 9999 для TJ, 9998 для FI), FoxyProxy multi-port
- ✅ Firefox настроен: `intl.accept_languages = tg-TJ`, WebRTC отключён, приватное окно
- ✅ Apple footer показывает «Tajikistan» при правильной комбинации IP + locale + cookies-чистка
- ✅ US Adidas-аккаунт куплен (`hbuggle819@icloud.com`), 2FA через trusted devices, карта привязана
- ⚠️ **Сложности с virtual SMS** — grizzlysms TJ-pool забанен Apple, требуются альтернативы (5sim, smsbower) или реальная TJ SIM
- ⚠️ **Митинский радиорынок «высох»** (2026-05-04 проверено лично): продажа TJ-SIM мигрантам сократилась после ужесточения ФЗ-178. Альтернативные источники: Avito с доставкой (1500-3500 ₽), Telegram-каналы, знакомые в TJ
- 🔴 **Регион US Adidas пока не менялся на TJ** — ждём реальную TJ-SIM либо premium DID. Аккаунт пока используется только для скачивания приложений.
**Текущий план:**
1. Найти реальную TJ SIM-карту (Avito / Telegram / знакомые)
2. После получения SIM — менять регион Adidas-аккаунта на TJ через TJ-IP (gost), привязка к новой TJ-карте
3. До этого момента — US Adidas-аккаунт используется только в App Store на iPhone для скачивания заблокированных в RU приложений (по схеме [[../snippets/apple-id-us-on-russia]])
**Параллельная находка:** Google гораздо строже Apple к virtual SMS — на TJ-IP при регистрации нового @gmail сразу требует QR-верификацию через trusted device. Web-регистрация Google под TJ через grizzlysms — путь в тупик, требует Android-эмулятор или готовый купленный аккаунт.
## Связанные
- [[../README]] — индекс vault
- TODO в MEMORY был «отложено с 2026-04-23», теперь активирован.
- Решение по [[../snippets/clients/]] для US Apple ID на RU iPhone — структурно тот же подход (proxy + foreign SMS).
- Решение по `snippets/clients/` для US Apple ID на RU iPhone — структурно тот же подход (proxy + foreign SMS).

View File

@@ -0,0 +1,74 @@
# 2026-05-05 — Mac dictation: Hammerspoon + Groq Whisper
## Контекст
Олег на Intel MacBook Pro (i9-9880H, 2019), нужна голосовая диктовка для русского. Все современные приложения (superwhisper PRO, VoiceInk, Spokenly Parakeet) либо требуют Apple Silicon, либо платную PRO-лицензию ($150-250). Бесплатный free-tier у superwhisper исчерпан и валидируется на их сервере (см. [feedback_superwhisper_no_license](../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md)).
## Решение
Свой скрипт + Hammerspoon + Groq Whisper API:
- **Hammerspoon** ловит глобальный hotkey `⌘⇧D`
- **Bash скрипт** toggle-режим: первый запуск → ffmpeg запись с микрофона; второй → стоп → POST в Groq → текст в `/tmp/groq-dictate.last`
- **Lua callback** в Hammerspoon читает файл, кладёт в pasteboard, нажимает Cmd+V через `hs.eventtap.keyStroke`
- **Groq Whisper-large-v3-turbo** — бесплатно ~14400 запросов/день, 0.5с на 4-сек запись, RU IP не блочится
## Файлы
- `~/bin/groq-dictate.sh` — скрипт записи + Groq POST + **fallback на whisper-cpp** + write to `/tmp/groq-dictate.last`
- `~/bin/dictation-doctor.sh` — health-check всех компонентов (Hammerspoon / TCC / зависимости / Groq / mic / Fn-key); запускать когда «не работает»
- `~/.hammerspoon/init.lua` — Fn (одиночное нажатие) trigger через eventtap, paste через `hs.eventtap.keyStroke`
- `~/.cache/whisper-cpp/ggml-tiny-q5_1.bin` — 31MB локальная модель для offline fallback
- Groq API key — в `reference_groq_api.md` private memory
## Финальный hotkey
**Fn (Globe) одиночное нажатие** — toggle (старт/стоп). Срабатывает быстрее ⌘⇧D, освобождает руки. Apple Dictation на двойное Fn остаётся (если не отключить «Нажатие клавиши Fn» в System Settings → Keyboard).
## Критические грабли (и фиксы)
1. **Hammerspoon Accessibility кеширует статус** — после Enable в System Settings нужен **`killall Hammerspoon && open -a Hammerspoon`**, иначе Hammerspoon продолжает показывать WARNING и hotkey не работает.
2. **`hs.hotkey.bind({"cmd","shift"}, "d", ...)`** на русской раскладке выдаёт warning `key 'd' not found in active keymap; using ANSI-standard US keyboard layout as fallback, returning '2'`. Решение: **биндить по числовому keycode**`hs.hotkey.bind({"cmd","shift"}, 2, ...)` (2 = физическая клавиша D). Так работает на любой раскладке.
3. **`osascript -e 'tell application "System Events" to keystroke "v" using command down'`** на русской раскладке вместо Cmd+V вставляет UTF-8 байты текста как символы → получается мусор типа `—В—ь—А—∞—ь—В?` для строки «Ты меня слышишь?». Решение: **никогда не использовать `keystroke` для paste**. Использовать `hs.eventtap.keyStroke({"cmd"}, "v")` напрямую из Lua (отправляет настоящий low-level KeyDown event).
4. **Toggle через PID-файл**`/tmp/groq-dictate.pid`. Если процесс упал/убит — удалить руками. Скрипт устойчив: `kill -INT` корректно закрывает .wav, ждёт до 0.5с дописать заголовок.
5. **ffmpeg avfoundation `:0`** = default mic. Если нужен другой — `ffmpeg -f avfoundation -list_devices true -i ""`.
6. **PATH в Hammerspoon** при автозапуске пустой — `ffmpeg: command not found`. Симптом: после перезагрузки Mac диктовка не работает, в логе `command not found`. Лечится `export PATH="/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin"` в начале скрипта. ВАЖНО: doctor использует mой shell PATH и потому видит ffmpeg — НЕ показатель что Hammerspoon тоже видит. Проверять через `env -i HOME=$HOME bash -c 'PATH=/usr/bin:/bin ~/bin/groq-dictate.sh'`.
## Стоимость
- Hammerspoon бесплатный
- Groq бесплатный (14400 req/day, ~120 минут диктовки в день — намного больше нужного)
- Итого: 0₽
## Альтернативы которые НЕ подошли
- **superwhisper** — free tier 530 сек, потом сервер бракует
- **VoiceInk** — официально Apple Silicon only, на Intel CPU крутит большую модель часами
- **Spokenly** — `cdn.spokenly.app` блокирует RU IP (3.8 KB/s), Parakeet требует Neural Engine
- **Wispr Flow** — `dl.wisprflow.com` блокирует RU IP, плюс $144/год Pro для регулярного использования
- **MacWhisper** — $59 lifetime + не пробовали (всё уже работало бесплатно)
- **OpenWhispr** — 273MB dmg в GitHub, не докачался
## Связано
- [RU-заблокированные сервисы](../notes/ru-geoblocked-services.md)
- [Groq API](../../.claude/projects/-Users-ai-knowledge-base/memory/reference_groq_api.md)
- [Superwhisper — нет PRO](../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_superwhisper_no_license.md)
## Воспроизведение на новом Mac
```bash
brew install --cask hammerspoon
brew install whisper-cpp jq ffmpeg
mkdir -p ~/bin ~/.hammerspoon ~/.cache/whisper-cpp
# скопировать ~/bin/groq-dictate.sh + ~/bin/dictation-doctor.sh → chmod +x
# скопировать ~/.hammerspoon/init.lua
# скачать локальную fallback-модель (31 MB, GitHub не блочит RU)
curl -sSL -o ~/.cache/whisper-cpp/ggml-tiny-q5_1.bin \
"https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny-q5_1.bin?download=true"
open -a Hammerspoon
# Hammerspoon Preferences → Enable Accessibility → System Settings → включить
killall Hammerspoon && open -a Hammerspoon # ОБЯЗАТЕЛЬНО после grant — кеш
# System Settings → Клавиатура → Нажатие клавиши Fn → "Действие не требуется"
~/bin/dictation-doctor.sh # должно быть всё зелёное
```
Готово. **Fn → говори → Fn** — текст вставится в активное окно.

View File

@@ -0,0 +1,101 @@
---
date: 2026-05-06
type: decision
tags: [kb, openclaw, search, fts, infra, summary]
status: applied
---
# Перестройка KB-поиска и синхронизации (8 фаз за один день)
## Что было до
Запрос «OpenWRT Липки» Максимке возвращал `netbird-inventory.md`, потому что:
- слова «Липки» во всём vault'е была одна строка в табличке инвентаря,
- слово «OpenWRT» статистически перевешивали НИИКН-документы (`govru-quickfix`, `niikn-openwrt-awg-fix`),
- кросс-ссылок и aliases не было, embeddings не было,
- лаг push→бот доходил до 16 минут (cron `*/5` Mac→Gitea + cron `*/15` Gitea→openclaw).
Пользователь жаловался: «бот путает, я ему про Липки, он мне про НИИКН».
## Что сделано
| Фаза | Эффект |
|---|---|
| 1. Embeddings (ollama+bge-m3) | ⛔ откачено — openclaw 2026.5.2 при `provider: ollama` шлёт inputs целиком, ollama тратит >5 мин/запрос, undici fetch валится по headers timeout. ollama на LXC 132 готова (uptime, bge-m3 1024d), но сторона openclaw нуждается в фиксе chunking |
| 2. Webhook + auto-reindex | Gitea push→listener (HMAC SHA-256)→`kb-pull.sh``openclaw memory index`. **push→FTS: 15 мин → 50 c**. См. [[../snippets/openclaw-kb-webhook]] и [[2026-05-06-openclaw-kb-webhook-deployment]] |
| 3. objects-map.json + _index.md | Скрипт `scripts/kb-objects-map.py` парсит netbird-inventory + frontmatter и пишет JSON для бота + human-readable [[../projects/_index]]. Базовый структурный слой |
| 4. Stubs + frontmatter | Создано 6 README (`znamenskoye`, `mmfb`, `lipki` уже был, + 4 stub'а клиентских OpenWrt). Обогащён frontmatter в `niikn`, `dttb`, `glavtorg`, `krasnogorsk`, `zelenograd` с aliases для netbird-имён. **38 → 14 orphan-пиров** |
| 5.1. Слить дубли видео | Удалён `dttb/video-surveillance-report.md` (297 строк, неполная копия), canonical `videonablyudenie-znam.md` обогащён aliases |
| 5.2. Архив audit/ | 18 устаревших drift-отчётов 2026-04-* перенесены в `audit/archive/`, в active остались 7 свежих |
| 6. Recall + dreaming | `openclaw memory promote --apply`: 17/39 коротких воспоминаний переехали в долгую. `dreaming.enabled=true` (cron `0 3 * * *`). Weekly cron на promote |
| 7. Расширенный kb-audit | Скрипт `scripts/kb-objects-audit.py` пишет еженедельный отчёт с score: проверяет frontmatter, online-orphans, битые wiki-ссылки. Первый запуск — score=84 (12/12 frontmatter ✓, 3 online orphan, 26 битых wiki) |
| 8. UX бота | `memorySearch.query.minScore=0.4`, IDENTITY.md разводит двух Максимок (homelab vs НИИКН), INFRASTRUCTURE.md переписан как навигатор по vault'у |
## Метрики до / после
| Параметр | До | После |
|---|---|---|
| «OpenWRT Липки» top-1 | `netbird-inventory.md` ❌ | `projects/lipki/README.md` ✅ |
| «Антон клиент Звенигород» top-1 | ничего | `projects/lipki/README.md` ✅ |
| «AgentDVR ЧОП Знаменское» top-1 | три дубля | `videonablyudenie-znam.md` ✅ |
| «Константин Вишневый сад» top-1 | `netbird-inventory.md` | `projects/vishnevyy-sad/README.md` ✅ |
| Лаг push → видно боту | 516 мин | **~50 секунд** |
| Проектов с netbird-привязкой | 0 | **9** |
| Структурный объект-граф | нет | `objects-map.json` (34 entries) |
| Online orphan-пиров | ~30+ | **3** |
| Auto-reindex после pull | нет | есть |
| Recall promoted | 0 (mёртв 16 дней) | 17 + weekly cron |
| Dreaming | off | on (ночной cron) |
| FTS-шум audit/ | 24 файла | 7 active + 18 в archive |
## Грабли (для будущей памяти)
1. **Gitea SSRF-protection.** Без `webhook.ALLOWED_HOST_LIST` в `app.ini` Gitea silently отказывает доставлять webhook на private IP. В docker-логах: `webhook can only call allowed HTTP servers, deny '10.0.0.239'`. Listener при этом получает 0 запросов, journal пустой.
2. **`flock -n` теряет двойные push.** Если webhook прилетел во время pull/reindex — non-blocking lock молча выходит. Заменить на `flock -w 180`.
3. **openclaw 2026.5.2 ollama-провайдер игнорирует chunking.** При `provider: ollama` шлёт файлы целиком в `/api/embed`, ollama buffer растёт до 700 MB, обработка >5 мин, fetch валится. Не лечится `chunking.tokens=512`, `nonBatchConcurrency=1`, `batch.enabled=false`. Bug либо в openclaw, либо неочевидный конфиг-флаг.
4. **substring matching → false positives.** Alias `cloud` подхватывал `Cloud-NIIKN New niikn.com`. Перешли на exact-match с нормализацией `ye→e`. Aliases теперь должны содержать **полные** имена пиров как в netbird-inventory.
5. **Heredoc через ssh с backticks** — bash интерпретирует backticks как command-substitution внутри пути файла. Для записи структурных markdown'ов с inline-кодом — пушить через base64 или scp/pct push, не heredoc.
6. **`git commit` без `-a` или явного `git add`** забирает только staged. Удаление через `git rm` помечается автоматом, а modify — нет. Один коммит может оставить часть правок несинхронизированными — дополнительный коммит лечит.
## Что отложено
| Задача | Причина | Когда возвращаться |
|---|---|---|
| Векторный поиск через ollama | bug в openclaw 2026.5.2 ollama-провайдере | при апгрейде openclaw, или попробовать `provider: local` (transformers.js встроен в openclaw) |
| 14 orphan-пиров (Денис Тихая, DESKTOP-2IOQS54 Saransk, KOMPUTER, MastaNotebook, …) | нужны факты от Олега чьи это машины | по мере выяснения — добавлять в aliases подходящих проектов |
| 26 битых wiki-ссылок | автоматический фикс не всегда возможен (некоторые цели реально удалены) | semi-auto проход: показать список, для очевидных — починить, остальное — оставить TODO |
| Singleton-проекты (`projects/*.md`) без frontmatter | не критично — они top-level note'ы | при касании |
## Артефакты в vault
- [[../projects/lipki/README]], [[../projects/znamenskoye/README]], [[../projects/mmfb/README]]
- [[../projects/sergey/README]], [[../projects/benilux/README]], [[../projects/vishnevyy-sad/README]], [[../projects/openwrt-4/README]]
- [[../projects/_index]] — авто-генерированный реестр
- `audit/objects-map.json` — машинно-читаемый граф
- [[../audit/2026-05-06-objects-audit]] — первый health-check
- `scripts/kb-objects-map.py`, `scripts/kb-objects-audit.py`
- [[../snippets/openclaw-kb-webhook]]
- [[2026-05-06-openclaw-kb-webhook-deployment]]
- frontmatter добавлен в `projects/{niikn,dttb,glavtorg,krasnogorsk,zelenograd}/README.md`
## Артефакты вне vault
**LXC 137 (openclaw):**
- `/usr/local/bin/kb-pull-webhook.py` (Python listener, HMAC)
- `/etc/systemd/system/kb-pull-webhook.service`
- Обновлённый `/usr/local/bin/kb-pull.sh` (`flock -w 180`, hash-diff, auto-reindex)
- Cron `0 4 * * 1` weekly memory promote
- Config: `memorySearch.query.minScore=0.4`, `dreaming.enabled=true`, ollama-провайдер откачен (бэкап `/root/.openclaw/openclaw.json.bak.embed-2026-05-06-112441`)
- Переписаны `/root/clawd/IDENTITY.md`, `INFRASTRUCTURE.md`
**LXC 136 (Gitea):**
- `webhook.ALLOWED_HOST_LIST = 10.0.0.0/24,*.dttb.ru,private` в `/opt/gitea/data/gitea/conf/app.ini`
- Webhook id=1 на репо `oleg/knowledge-base`
**LXC 132 (code-server):**
- ollama systemd override `OLLAMA_HOST=0.0.0.0:11434, KEEP_ALIVE=24h` (для будущего возврата к embeddings)

View File

@@ -0,0 +1,78 @@
---
date: 2026-05-06
type: decision
tags: [openclaw, gitea, webhook, kb-sync, performance]
status: applied
---
# Webhook Gitea → openclaw kb-pull (Фаза 2 плана улучшения KB-поиска)
## Контекст
После публикации `projects/lipki/README.md` стало видно, что openclaw (Максимка) видит новые правки vault только через cron `*/15` — лаг до 15 минут. Это первое, что бьёт по UX («только что записал → бот всё ещё не знает»).
План улучшения KB-поиска расписан в чате с Claude Code 2026-05-06 утром, Фаза 2 — webhook + автоматический FTS-реиндекс.
## Решение
Push-канал Gitea → listener на LXC 137 → `kb-pull.sh``openclaw memory index`. Cron `*/15` оставлен как safety net.
Подробная реализация — [[../snippets/openclaw-kb-webhook]].
## Что развёрнуто
| Компонент | Где |
|---|---|
| `/usr/local/bin/kb-pull-webhook.py` | LXC 137, Python http.server, HMAC-SHA256 проверка, journal-лог |
| `/etc/systemd/system/kb-pull-webhook.service` | LXC 137, system unit, Restart=on-failure, secret в env |
| Обновлённый `/usr/local/bin/kb-pull.sh` | `flock -w 180`, hash-diff, авто `openclaw memory index` при новом HEAD |
| Webhook в Gitea (id=1, репо `oleg/knowledge-base`) | events: push, branch: main, secret в HMAC |
| `webhook.ALLOWED_HOST_LIST = 10.0.0.0/24,*.dttb.ru,private` в `app.ini` | LXC 136 (Gitea в docker), `/opt/gitea/data/gitea/conf/app.ini` |
## Метрика
End-to-end push → видно боту:
| Этап | Время |
|---|---|
| `git push` с Mac → Gitea ack | ~2 c |
| Gitea → webhook listener | ~3 c |
| listener → kb-pull.sh → git pull → новый HEAD | ~6 c |
| **Итого до видимости HEAD на 137** | **~11 c** |
| FTS reindex (875 файлов / 1791 chunk) | +38 c |
| **Итого до видимости в `openclaw memory search`** | **~50 c** |
Было: до 15 минут (cron */15) + до 38 c reindex (если бы он раньше был) = до **~16 минут**.
Улучшение: **×20 латентности до видимости HEAD, ×16 до полного FTS**.
## Грабли (для будущей памяти)
1. **Gitea SSRF-protection.** Без `ALLOWED_HOST_LIST` Gitea silently отказывает доставлять webhook на private IP. Test delivery возвращает `204`, но в Gitea log: `webhook can only call allowed HTTP servers, deny '10.0.0.239'`. Listener при этом не видит ничего — пустой journal. Это была первая причина почему ничего не работало.
2. **`flock -n` теряет вторую серию push'ов.** Если webhook прилетел во время уже идущего pull/reindex (быстрый двойной push) — non-blocking flock молча выходит. Надо `-w 180` (ждать в очереди до 3 мин).
3. **sed по строке с `||` ломается, если разделитель `|`.** `sed -i 's|flock -n|flock -w 180|'` падает с `unknown option to s`. Использовать `#` или другой разделитель — `sed -i 's#flock -n#flock -w 180#'`.
4. **Listener `log_message: pass` гасит **все** логи http.server.** Если хочется видеть приём POST — переопределить как `sys.stderr.write(...)`. Иначе debug невозможен.
## Альтернативы, которые отвергнуты
- **Полностью убрать cron**: рискованно — если listener умер и не заметили, vault зависнет. Cron `*/15` ничего не стоит и страхует.
- **Webhook напрямую через NPM/публичный URL**: лишний хоп, нужен HTTPS, всё в LAN — не нужно.
- **iptables на 18790**: HMAC-secret уже отсекает левые запросы. Homelab trusted. Не делал.
## Откат
См. секцию «Откат» в [[../snippets/openclaw-kb-webhook]]. Один rm-рецепт + удаление webhook через Gitea API.
## Что дальше
Фаза 1 плана (embeddings ollama × bge-m3) — пока **отложена**. При попытке развёртывания openclaw 2026.5.2 со всеми правильными config-полями (`provider=ollama`, `remote.baseUrl`, `model=bge-m3`, `chunking.tokens=512`) **игнорирует chunking** и шлёт в `/api/embed` файлы целиком — output buffer ollama растёт до 700+ MB, обработка >5 мин, undici fetch падает по дефолтному 5-min Headers Timeout. Конфигурация откачена, состояние FTS-only сохранено.
Возможные пути возврата к векторному поиску:
- `provider: local` (transformers.js встроенный) — попробовать без сетевого хопа
- Ждать openclaw 2026.5.3+ с фиксом chunking
- GitHub Copilot embeddings (требует токен)
Следующая фаза по плану — **Фаза 3** (`audit/objects-map.json` + `projects/_index.md`) или **Фаза 5.1** (слить дубли видеонаблюдения).

View File

@@ -0,0 +1,119 @@
---
date: 2026-05-06
type: decision
tags: [decision, openclaw, omniroute, claude, opus, cliproxy, max-plan]
---
# 2026-05-06: openclaw перешёл на Claude Opus 4.7 через Max-подписку (cc/* в OmniRoute)
## Контекст
Искали стабильный источник Claude Opus 4.6/4.7 для openclaw — обсуждали построение Workspace-фарма на новом домене с пулом аккаунтов под Antigravity. Перед тем как затевать фарм ($12/домен + время на регистрации + риск массового бана), проверили что фактически работает в текущей OmniRoute.
## Что обнаружили в OmniRoute (10.0.0.179:20128)
В каталоге **17 моделей с opus в id**, но реально пингуются только три:
| Model ID | Источник | Статус |
|---|---|---|
| **`cc/claude-opus-4-7`** | Claude Code OAuth (Max-подписка Олега) | ✅ Работает |
| `cc/claude-opus-4-6` | то же | ✅ Работает |
| `claude/claude-opus-4-7` | прямой Anthropic API | ✅ Работает (платный per-token) |
| `gh/claude-opus-4.6` | GitHub Copilot integrator MS | ❌ MS убрала Opus 4.6 из integrator scope, отдаёт «model not available» |
| `gh/claude-opus-4.7` | то же | ❌ ID mismatch: OmniRoute шлёт `4.7`, MS ждёт `4-7` (баг mapping в текущей версии) |
| `kr/claude-opus-4.6` / `4.7` | Kiro/AWS | ❌ Kiro Opus не выдаёт, только Sonnet |
| `kiro/claude-opus-*` | то же | ❌ |
| `kc/anthropic/claude-opus-4.7` | KiloCode | ❌ Empty response |
| `kilocode/anthropic/claude-opus-4.7` | то же | ❌ |
| `antigravity/claude-opus-4-6-thinking` | Google Antigravity | ❌ «Missing Google projectId — reconnect OAuth in Providers → Antigravity» |
## Решение
**Workspace-фарм для Antigravity не нужен.** У Олега уже есть рабочий Opus 4.7 через **`cc/claude-opus-4-7`** — это его собственная Max-подписка Anthropic, проксированная через CLIProxy в OmniRoute. Лучше любого фарма потому что:
- Нет per-token биллинга, фиксированная стоимость Max ($200/мес за Max20x)
- Не нужны множественные аккаунты, recovery emails, virtual cards
- Один источник = один ключ = простая интеграция
- Нет риска массового бана как у фарм-аккаунтов
- Самая свежая модель Opus 4.7 (новее чем 4.6 которая в фармовых Antigravity)
### Изменения в `/root/.openclaw/openclaw.json` (LXC 137)
**Было:**
```json
"agents.defaults.model": {
"primary": "omniroute/kr/claude-sonnet-4.5",
"fallbacks": [
"omniroute/cc/claude-sonnet-4-6",
"omniroute/cx/gpt-5.4"
]
}
```
**Стало:**
```json
"agents.defaults.model": {
"primary": "omniroute/cc/claude-opus-4-7",
"fallbacks": [
"omniroute/cc/claude-sonnet-4-6",
"omniroute/kr/claude-sonnet-4.5",
"omniroute/cx/gpt-5.4"
]
}
```
Также добавлена запись в `models.providers.omniroute.models[]`:
```json
{
"id": "cc/claude-opus-4-7",
"name": "Claude Opus 4.7 (CLIProxy/Max)",
"reasoning": false,
"input": ["text", "image"],
"contextWindow": 200000,
"maxTokens": 8192
}
```
Без этой записи openclaw fallback'нет на следующий — модель должна быть в каталоге провайдера.
### Применение
OpenClaw подхватил изменения **через hot-reload без рестарта** (видно в журнале: `[reload] config hot reload applied`). После я ещё раз сделал `systemctl --user restart openclaw-gateway.service` для чистоты, но это было необязательно.
В логах после старта:
```
[gateway] agent model: omniroute/cc/claude-opus-4-7
[gateway] http server listening (7 plugins: ..., telegram; 8.6s)
[telegram] [default] starting provider (@maxim_dttb_bot)
[gateway] ready
```
## Бэкап и rollback
Автобэкап перед изменениями: `/root/.openclaw/openclaw.json.bak.opus47-20260506-090832`
Rollback одной командой:
```bash
sshpass -p '1qaz!QAZ' ssh root@10.0.0.250 "pct exec 137 -- bash -c '
cp /root/.openclaw/openclaw.json.bak.opus47-20260506-090832 /root/.openclaw/openclaw.json
XDG_RUNTIME_DIR=/run/user/0 systemctl --user restart openclaw-gateway.service
'"
```
## Известные риски и мониторинг
1. **Max-подписка fair-use лимиты** — Anthropic размывает по нагрузке, точных цифр нет. Когда упрёмся — openclaw сам перейдёт на `cc/claude-sonnet-4-6` (видно в логах `model fallback decision`).
2. **CLIProxy OAuth refresh** — может протухнуть. Мониторинг: `journalctl --user -u openclaw-gateway -f` на LXC 137. При ошибке 401 от Anthropic API → переподключить Claude Code OAuth в OmniRoute (Dashboard → Providers → Claude → Reconnect).
3. **Скорость** — Opus 4.7 в среднем 2-5 сек медленнее Sonnet 4.5. Для интерактива в Telegram это норма.
## Параллельные находки
- **Antigravity** требует OAuth re-connect. По заметке `feedback_antigravity_onboarding.md`: открыть [antigravity.google](https://antigravity.google), залогиниться, создать Cloud Code project → projectId подтянется → `antigravity/claude-opus-4-6-thinking` оживёт. Сейчас не критично.
- **`Unknown model: cx/gpt-5.4`** — каждые 30 минут в логах ошибка. Health-check тыкается в модель которой нет в каталоге `omniroute.models[]` openclaw. Не блокер — failover работает. Решение: либо добавить `cx/gpt-5.4` в каталог openclaw, либо убрать из health-check'ов.
## Связанные
- [[../claude-memory/omniroute]] — OmniRoute setup, провайдеры, версии
- [[../projects/dttb/openclaw]] — справочник по openclaw
- [[../snippets/clawdbot-cliproxy-config]] — старый шаблон CLIProxy
- [[../snippets/omniroute-models-audit]] — шаблон smoke-тестов и парсинга ошибок (использовался при этом аудите)

View File

@@ -0,0 +1,90 @@
---
date: 2026-05-07
type: decision
tags: [buzharovo, server1c, 1c, troubleshooting]
---
# Бужарово 1С сервер — rmngr-loop после грязного ребута: рецепт
## Контекст
07.05.2026 утром локальные пользователи в Бужарово начали жаловаться на резкое замедление 1С. NetBird и удалённый доступ ни при чём — тормозило в локальной сети офиса.
Сервер: `Server1C` (Win 2012 R2, 100.70.75.103 / 185.13.47.2), 1С 8.3.27.1606, MSSQL.
## Что нашли
Сегодня в **09:05 сервер ушёл в crash**:
- `System / Kernel-Power Event 41` (Critical): "rebooted without cleanly shutting down — system stopped responding, crashed, or lost power"
- `System / EventLog 6008`: "previous shutdown was unexpected"
После загрузки:
- `rmngr.exe` (менеджер кластера 1С) держит **~1.7 ядра постоянно** в idle (норма <2% одного ядра).
- `rphost`, `sqlservr`, диски (avg sec/write 1.6 ms, queue 0.03), память (5/64 GB) — **в норме**.
- `rac.exe localhost:1540 cluster list` → "ошибка соединения с сервером", exit -1 — **admin-канал rmngr повис**, кластером невозможно управлять извне.
- `netbird.exe` параллельно жжёт 1.4 ядра — побочный reconnect-loop после crash, после ребута сам успокоился.
## Что не помогло
**Полный ребут сервера** (через `Restart-Computer`) — НЕ решает проблему. На свежезагруженном сервере с uptime=37 секунд rmngr опять на 178% одного ядра. То есть проблема воспроизводится при каждом первом запуске агента после crash.
## Что помогло
```powershell
Restart-Service -Name '1C:Enterprise 8.3 Server Agent (x86-64)' -Force
```
После рестарта службы (не сервера!):
| Процесс | До рестарта | После рестарта |
|---|---|---|
| rmngr | 178% ядра | 3% ядра |
| rphost | 19% | 1% |
| ragent | 0% | 1% |
Все клиенты в этот момент вылетают — нужно предупредить за 2-3 минуты. Перезаход штатный.
## Побочный эффект
После рестарта остался орфан-процесс старого `ragent` от прошлого запуска (не слушает 1540, висит в памяти). Можно безопасно прибить:
```powershell
Get-Process ragent | Where-Object { $_.Id -ne (Get-NetTCPConnection -LocalPort 1540).OwningProcess } | Stop-Process -Force
```
## Корневая причина — открыта
Почему `rmngr` зацикливается после первого запуска ragent — точно не выяснено. Гипотезы:
1. Повреждённый кэш кластера `C:\Program Files\1cv8\srvinfo\reg_*\` после crash.
2. Регресс в 8.3.27.1606 при восстановлении сеансов.
3. Disabled-служба `RagentServer_8327` (старый дубликат) что-то мешает в реестре при первом старте.
Если повторится — смотреть `C:\Program Files\1cv8\srvinfo\reg_*\1Cv8FTLog\` и `1Cv8Log` на ошибки.
## Что сделать долгосрочно
В кластере 1С сейчас **один rphost на всех локальных пользователей** — бутылочное горлышко. Через консоль администрирования сервера 1С увеличить количество рабочих процессов: 1 rphost на 8-12 сеансов. Это отдельная задача, не на горячую.
## Команды диагностики (для повтора)
WinRM-сессия с Mac:
```python
import winrm
s = winrm.Session('http://100.70.75.103:5985/wsman',
auth=('dttb','1qaz!QAZ'),
transport='basic')
```
Дельта CPU за 5 сек по процессам:
```powershell
$names='rmngr','rphost','netbird','sqlservr','ragent'
$first=@{}; $last=@{}
Get-Process | ?{$names -contains $_.Name} | %{ $first[$_.Name]=$_.CPU }
Start-Sleep 5
Get-Process | ?{$names -contains $_.Name} | %{ $last[$_.Name]=$_.CPU }
foreach($n in $names){ "$n delta=$($last[$n]-$first[$n])s" }
```
Если у rmngr дельта >50 за 5 секунд — диагноз "rmngr-loop" подтверждён, делать рестарт службы.
См. также [[projects/buzharovo/server1c]].

View File

@@ -0,0 +1,310 @@
---
date: 2026-05-07
type: decision
tags: [buzharovo, 1c, migration, plan]
status: approved
target_stack: windows-mssql
related:
- "[[decisions/2026-05-07-buzharovo-recon]]"
- "[[projects/buzharovo/server1c]]"
- "[[projects/buzharovo/migration-prompt-2026-05-07]]"
- "[[decisions/2026-05-07-buzharovo-1c-rmngr-loop-after-crash]]"
---
> **Решение по стеку (07.05.2026):** идём на **Windows Server VM + MSSQL** (Вариант W).
> Linux/PostgreSQL отложен на потом. Причина выбора: простая миграция через нативный SQL `.bak` → `RESTORE`, без переобучения 6 терминальных юзеров (они продолжают работать через RDP), без отдельного термсервера. На масштаб ~6 юзеров и ~гигабайтной БД разница в скорости с Linux незаметна.
>
> **Лицензионная часть** (1С Server, клиентские, Windows Server) — за Олегом, обрабатывается отдельно. План описывает только техническую миграцию.
# План миграции 1С Бужарово → HomeLab Proxmox
**Цель:** перенести 1С с физического Server1C (Win 2012 R2, бытовая мать ASUS, без ИБП, 24+ крашей в день) на VM на HomeLab Proxmox (10.0.0.250), сохранив работу 6 терминальных юзеров и двух ПК-касс KASSA3/KASSIRULICA2.
**Базис:** `decisions/2026-05-07-buzharovo-recon.md` (отчёт разведки 07.05.2026).
## Критерии успеха
1.Все 4 инфобазы 1С восстановлены и доступны для пользователей
2. ✅ 6 RDP-юзеров (АртемК, ГорячевАЕ, Павел, ПальмановаН, ФирсовС, dttb) работают в 1С через RDP к новой VM
3. ✅ KASSA3 (192.168.1.18) и KASSIRULICA2 (192.168.1.99) пробивают чеки через новую инфраструктуру (TCP до 1С-сервера через NetBird)
4. ✅ Время простоя при cutover ≤ 4 часов (вечер пятницы или ночь субботы)
5. ✅ Откат за ≤ 30 минут (старый Server1C остаётся включённым в Бужарово до недели после миграции)
---
## Архитектура: Вариант A (приоритетный)
```
Интернет
┌────────────────────┼─────────────────────────┐
│ │ │
↓ ↓ ↓
[Бужарово офис] [сельский WISP/РТК?] [HomeLab Москва]
192.168.1.0/24 10.0.0.0/24
┌─────────────┐ │
│ KASSA3 │ ↓
│ 192.168. │ NetBird VPN ┌────────────────┐
│ .1.18 ├──────────────────────────────│ Proxmox PVE │
│ KASSIRUL2 │ (~96 ms RTT) │ 10.0.0.250 │
│ 192.168. │ │ │
│ .1.99 │ │ ┌──────────┐ │
│ │ │ │ VM 1Cnew │ │
│ 6× RDP- │ │ │ Win22/25 │ │
│ юзеров │ RDP 3389 + 1С 1541 │ │ + 1С 8.3 │ │
│ (тонкие │←─────────────────────────────│ │ + MSSQL │ │
│ клиенты) │ │ │ 8 vCPU │ │
│ │ │ │ 32GB RAM │ │
│ Router- │ │ │ 200GB SSD│ │
│ Office │ │ └──────────┘ │
│ (NetBird │ │ │
│ + advertise│ └────────────────┘
│ 192.168.1/ │
│ 24) │
└─────────────┘
```
### Ключевые элементы
- **Целевая VM:** новая на Proxmox 10.0.0.250 (имя `vm-1c-buzharovo` или подобное), Win Server 2022 или 2025, 8 vCPU, 32GB RAM, 200GB SSD (LVM/qcow на NVMe пуле)
- **1С:** 8.3.27.1606 (тот же билд для совместимости), x64, **только одна** служба `1C:Enterprise 8.3 Server Agent (x86-64)` Auto
- **MSSQL:** 2019 или 2022 (Express если суммарный объём всех 4 БД ≤ 10GB; Standard если больше — нужно подтвердить размер!)
- **NetBird-агент** на VM с advertise-route 10.0.0.0/24 (или подключение к существующему "Dom" route group)
- **NetBird на офисном роутере в Бужарово** с advertise 192.168.1.0/24 — это позволит KASSA3/KASSIRULICA2 общаться с новой VM прозрачно
### Почему Вариант A, а не B
- Сейчас ИДЕНТИЧНАЯ схема уже работает: 6 юзеров через RDP в Server1C запускают 1С локально на сервере → переезд просто меняет адрес сервера
- 1С↔MSSQL остаются в одной локалке VM (latency 0.1ms внутри Proxmox), как сейчас
- RDP толерантен к 96ms; толстый клиент 1С через NetBird тормозил бы при открытии справочников
- Касса KASSA3 уже общается с 1С через TCP (порт 1560) → меняется только адрес, протокол сохраняется
---
## Фазы и эстимейты
### Фаза 0: Pre-flight (1 час, до миграции)
**Кто:** Олег + Claude Code
**Что:** ответы на 8 открытых вопросов из `recon.md`:
| # | Вопрос | Action |
|---|---|---|
| 1 | `sa`-пароль MSSQL? | Олег → 1Password / память / создать SQL-login |
| 2 | Лицензия 1С: пинкоды? | Олег → ЛК на portal.1c.ru |
| 3 | Имена 4 инфобаз | Олег → проверить через 1С-клиент или v8i-ярлык на ПК пользователя |
| 4 | ПО на KASSA3/KASSIRULICA2 | Удалёнкой через RDP/AnyDesk на 192.168.1.18 |
| 5 | Провайдер в Бужарово | Олег → договор / счёт |
| 6 | Окно простоя | Олег + бизнес → согласовать |
| 7 | Бюджет на ИБП / альтернатива «починить на месте» | Олег |
| 8 | AnyDesk оставлять? | Олег |
**Также:** определить SQL backup-метод (FULL+DIFF или COPY_ONLY backup → restore).
### Фаза 1: Подготовка целевой VM (2-4 часа)
**Шаги:**
1. **Создать VM на Proxmox 10.0.0.250:**
- VM ID: например 112 (или соседний свободный)
- OS: Win Server 2022 RU (или 2025; ISO у Олега есть, ставился на VM 111)
- vCPU: 8 (с host-passthrough cpu-type)
- RAM: 32 GB (можно ballooning)
- Disks: 1 OS-disk 100GB qcow2 на быстром пуле + 1 data-disk 200GB для БД
- Сеть: vmbr0 → 10.0.0.0/24 (статический IP, например 10.0.0.197)
2. **Базовая настройка Windows:**
- Hostname: `s1c-buzharovo` (или согласуем)
- Локаль: Russian
- Network: статика 10.0.0.197/24, gw 10.0.0.1, DNS 10.0.0.250
- Firewall: разрешить in 3389 (RDP), 1540-1591 (1С), 1433 (SQL только из NetBird-подсетей)
- Обновления Windows
3. **Установка MSSQL:**
- Express или Standard (зависит от размера БД)
- Default instance MSSQLSERVER
- Mixed Mode auth, sa-пароль strong
- SQL Browser: Disabled (нам не нужен)
4. **Установка 1С Предприятие 8.3.27.1606:**
- Server (x64), administrator components
- Создать 1 службу: `1C:Enterprise 8.3 Server Agent (x86-64)` — Automatic
- Ничего лишнего: ни 8.3.18, ни RagentServer_xxx
5. **Настройка ОС:**
- Crash Dump: `CrashDumpEnabled=3`, pagefile фикс 8GB на C: (как на старом сервере)
- Performance: `Set-MpPreference -DisableRealtimeMonitoring $false` (или установить полноценный AV)
- Time zone: МСК
6. **NetBird:**
- Установить netbird-агент
- Подключить к нашему tenant
- Проверить ping к Server1C (100.70.75.103) и доступ из NetBird-сети
7. **RDP-юзеры:**
- Создать локальные учётки: `АртемК, ГорячевАЕ, Павел, ПальмановаН, ФирсовС, dttb`
- Добавить в `Remote Desktop Users` (для RDP) и `Users`
- Пароли на временных, потом сменить
8. **WinRM 5985 / 5986** для нашей автоматизации (basic auth, Private network).
**Артефакт фазы:** живая VM на 10.0.0.197, доступна по RDP/WinRM из NetBird.
### Фаза 2: Тестовая миграция данных (3-5 часов)
**Шаги:**
1. **Бэкап SQL на Server1C** (вне рабочего времени!):
```sql
BACKUP DATABASE [<db1>] TO DISK = 'D:\backup\<db1>.bak' WITH COPY_ONLY, COMPRESSION;
-- повторить для всех 4 БД
```
- Размер бэкапов оценим сразу; время — зависит от размера, при 39GB может быть 30-60 мин
2. **Передача .bak на HomeLab:**
- Через NetBird SMB (Server1C → s1c-buzharovo) или scp/rsync
- 39GB через 96ms NetBird ≈ зависит от throughput; реалистично 1-3 часа
- Альтернатива: бэкапить на USB на Server1C, привезти физически
3. **Восстановление на новой VM:**
```sql
RESTORE DATABASE [<db1>] FROM DISK='C:\restore\<db1>.bak' WITH MOVE ...;
```
4. **Регистрация инфобаз в 1С на новой VM:**
- Через `1cv8.exe` админ-консоль или ручной ввод
- 4 инфобазы → подключение к локальному `s1c-buzharovo:1541`
5. **Smoke-тест:**
- Запустить тонкий клиент 1С на VM локально, открыть каждую базу
- Проверить: журнал регистрации, последние документы, базовые отчёты
- Сверить контрольные суммы / счётчики документов с боевой
6. **Лицензия 1С:**
- Активировать программную лицензию через PIN (получить от Олега)
- Если резервных PIN нет — заявка в 1С-Партнёр на восстановление
**Артефакт фазы:** на новой VM работают все 4 инфобазы (read-only тест).
### Фаза 3: Тест с кассой (1-2 часа)
**Шаги:**
1. На одном ПК `KASSA3` (192.168.1.18):
- Поднять временный VPN/proxy до новой VM (либо через NetBird-агент на самой кассе, либо через NetBird на офисном роутере)
- В настройках кассового ПО изменить адрес сервера 1С (или v8i базы)
- Открыть тестовую копию рабочей базы
- Сделать тестовый чек: товар → пробить → ответ от ОФД
2. То же самое для `KASSIRULICA2` если есть time
3. Откатить изменения на касса-ПК (вернуть на боевой Server1C)
**⚠ Важно:** не работать с боевой БД! Создать тестовую копию инфобазы для проверки чеков. Иначе двойной чек в ОФД.
**Артефакт фазы:** подтверждение что новая инфраструктура совместима с кассой.
### Фаза 4: Cutover (3-4 часа, окно простоя)
**Окно:** вечер пятницы 18:00 → 22:00 МСК (после рабочего дня) или ночь сб → вс.
**Шаги:**
1. **Заранее (за день):** уведомить юзеров и кассиров о времени простоя
2. **T-0:00** Объявить начало миграции, остановить работу пользователей
3. **T+0:05** На Server1C финальный бэкап SQL (FULL + последний DIFF):
```sql
BACKUP DATABASE [<db>] TO DISK='D:\backup\<db>_final.bak' WITH COPY_ONLY, COMPRESSION;
```
4. **T+0:30** Перенести `_final.bak` на новую VM через SMB
5. **T+1:00** Восстановить на новой VM поверх тестовой копии
6. **T+1:30** Smoke-test: 1С запускается, контрольные суммы совпадают
7. **T+1:45** Перенаправить пользователей и кассу:
- RDP-юзеры: новый ярлык RDP к 10.0.0.197 (или через NetBird FQDN)
- KASSA3 / KASSIRULICA2: новый адрес 1С-сервера
8. **T+2:00** Тестовая транзакция от первого юзера и первой кассы
9. **T+2:30** ✅ Миграция завершена, пользователи возобновляют работу
10. **T+3:00** Лог финального состояния, обновить vault
**На Server1C в Бужарово:** НЕ выключать! Оставить работать ещё неделю как backup (можно перевести в read-only режим в 1С — отключить пишущие фоновые задания).
### Фаза 5: Стабилизация (неделя)
- Мониторинг: rmngr CPU на новой VM (watchdog уже есть на LXC 137)
- Сбор обратной связи от пользователей
- Бэкапы: настроить ежедневные на Proxmox-уровне (snapshot) + еженедельный SQL FULL backup
- Через 7 дней без проблем — можно гасить старый Server1C
---
## Risk Register
| # | Риск | Вероятн. | Импакт | Митигация |
|---|---|---|---|---|
| R1 | Лицензия 1С не активируется на новой VM (нет PIN, HWID-привязка) | Средняя | **Критичный** | Pre-flight: получить пинкоды от Олега; запасной план — обращение в 1С-Партнёр |
| R2 | Размер SQL БД >10GB → нужен MSSQL Standard (платный) | Неизвестна | Средний | Pre-flight: получить sa-пароль, измерить размер; иметь готовую лицензию SQL Standard |
| R3 | Касса KASSA3/KASSIRULICA2 не общается с новой 1С (firewall, COM, специфический протокол) | Низкая | Высокий | Фаза 3 — тест ДО cutover; держать резервный туннель на Server1C |
| R4 | Канал в Бужарово упал в момент миграции → юзеры не могут переключиться | Низкая | Высокий | Cutover ночью; держать резерв (мобильный 4G) |
| R5 | Бэкап повреждён или RESTORE с ошибкой | Низкая | **Критичный** | Сначала FULL+DIFF, проверка восстановлением до cutover; держать оригинал |
| R6 | rmngr-loop повторится на новой VM (баг 8.3.27.1606) | Низкая | Средний | Watchdog уже работает; в крайнем случае — даунгрейд до 8.3.26 |
| R7 | Production crash во время Phase 4 backup'а на Server1C | Высокая | Низкий | Бэкап быстрый (COMPRESSION), краш просто откатит наш cutover на 4 часа |
| R8 | Юзеры не находят свои документы / сбит порядок (если несколько ИБ перепутали) | Средняя | Средний | Маппинг GUID→имя ИБ зафиксировать в pre-flight; дублирующие тесты с реальными документами |
| R9 | Закрытие RDP в Интернет на старом Server1C преждевременно — юзер не сможет подключиться | Средняя | Низкий | Закрывать только после полного cutover + 1 неделя стабильности |
| R10 | Касса в офисе работает с особым ПО (1С Розница нестандартного билда) | Низкая | Высокий | Phase 0: проверить через AnyDesk что стоит на 192.168.1.18 |
---
## План отката (≤ 30 минут)
Если после cutover (Фаза 4) обнаружили блокирующий баг:
1. **T-rollback+0:00:** объявить откат
2. **T+0:05:** На клиентских ПК и кассах вернуть старый адрес сервера (1С: 100.70.75.103 / 192.168.1.249; кассы: 192.168.1.249)
3. **T+0:15:** На Server1C запустить службу 1С (она и так работает в RO-режиме)
4. **T+0:25:** Smoke-test от пары юзеров
5. **T+0:30:** ✅ Откат завершён, работа на старом
Условие отката: производственный блокер, не косметический.
---
## Чек-лист готовности к Phase 4 (Cutover)
```
[ ] sa-пароль SQL получен (#1)
[ ] Лицензия 1С: пинкоды известны или есть онлайн-активация (#2)
[ ] Маппинг GUID → имя инфобазы зафиксирован (#3)
[ ] Кассовое ПО изучено (#4) и протестировано в Phase 3
[ ] Канал в Бужарово протестирован (#5), резерв есть
[ ] Окно простоя согласовано с бизнесом (#6)
[ ] Решение по AnyDesk (#8): убрать или оставить
[ ] Phase 1: VM s1c-buzharovo живая, RDP/WinRM/NetBird работают
[ ] Phase 2: тестовая миграция данных прошла, 4 инфобазы открываются
[ ] Phase 3: касса прошла тест чека через новую инфраструктуру
[ ] Бэкап Server1C перед cutover есть и проверен restore'ом
[ ] План отката известен команде, контакты Олега для эскалации
[ ] Юзеры уведомлены за >24 часа до простоя
```
---
## Альтернатива: «починить на месте»
Если миграция отложена, минимальная починка Server1C в Бужарово:
1. **Купить ИБП** (Eaton/APC, ~10000-15000 ₽) на 1500ВА для покрытия 5-10 минут просадок и корректного shutdown
2. **Заменить мать на серверную** (с ECC, IPMI) — сложно/дорого, лучше тогда уж VM
3. **Watchdog** уже есть (LXC 137 → rac.exe restart-service при rmngr-loop)
4. **Бэкапы:** настроить ежедневный Veeam Free / Native SQL Backup → внешний диск + копия в HomeLab Nextcloud
**Не отменяет миграцию**, но снижает срочность. Хорошая идея сделать ИБП параллельно с подготовкой VM — уменьшит крашы пока VM готовится.
---
## Open для обсуждения
- ⚖ **Кто администратор новой VM** — Олег (как сейчас Server1C) или предложить более ограниченную модель (отдельный admin-аккаунт)?
- ⚖ **Public IP / порт RDP** на HomeLab — нет; всё через NetBird. Согласовано?
- ⚖ **Версия Win Server** — 2022 (стабильнее, дольше поддержка) или 2025 (новее, current на VM 111)?
- ⚖ **Версия MSSQL** — оставить 2012 (max совместимость с 8.3.27, но EOL) или прыгнуть на 2019/2022 (поддерживается, может быть несовместимость с конфигурациями 1С)?
---
## Дефолтные параметры новой VM (для запуска Phase 1)
| Параметр | Значение |
|---|---|
| **Proxmox host** | 10.0.0.250 |
| **VM ID** | 112 (если свободен; иначе ближайший свободный) |
| **Имя** | `s1c-buzharovo` |
| **OS** | Windows Server 2022 Standard RU |
| **vCPU** | 8 (host-passthrough) |
| **RAM** | 32 GB |
| **OS-диск** | 100 GB qcow2 |
| **Data-диск** | 200 GB (для SQL БД) |
| **Сеть** | vmbr0, статический IP `10.0.0.197/24`, gw 10.0.0.1, DNS 10.0.0.250 |
| **MSSQL** | 2019 Standard (если БД >10GB) или 2019 Express (если ≤10GB — пока неизвестно) |
| **1С платформа** | 8.3.27.1606 (та же что на старом) |
| **NetBird** | агент установлен, подключён к нашему tenant |
| **WinRM 5985** | для автоматизации |
Если параметры устраивают — начинаем Phase 1 с этими дефолтами.

View File

@@ -0,0 +1,405 @@
---
date: 2026-05-07
type: decision
tags: [buzharovo, 1c, migration, recon]
status: complete
related:
- "[[projects/buzharovo/server1c]]"
- "[[projects/buzharovo/migration-prompt-2026-05-07]]"
- "[[decisions/2026-05-07-buzharovo-1c-rmngr-loop-after-crash]]"
---
# Бужарово 1С: разведка перед миграцией на HomeLab
**Дата:** 2026-05-07
**Метод:** WinRM (basic, через NetBird) с LXC 137 (openclaw) на Server1C 100.70.75.103. Read-only WMI/PowerShell/sqlcmd/ping.
**Цель:** собрать факты для плана миграции 1С с физического Server1C в Бужарово на HomeLab Proxmox 10.0.0.250.
---
## TL;DR
| Тема | Факт |
|---|---|
| Hardware | ASUS PRIME Z690M-PLUS D4 + i5-12400 (6c/12t) + 64GB DDR4 + 3×Samsung 980 PRO 500GB NVMe |
| OS | Windows Server 2012 R2 (build 9600), русский интерфейс |
| 1С | 8.3.27.1606, x64, ровно одна рабочая служба `1C:Enterprise 8.3 Server Agent (x86-64)` |
| MSSQL | SQL Server 2012 SP2 (11.2.5058) — **EOL с 2022-07-12** |
| Кластер 1С | 1 кластер `Server1C:1541` GUID `473f3f9e-...8700c7`, 4 инфобазы |
| Размер ИБ (на сервере) | 4 каталога в `srvinfo/reg_1541`: 7.3 / 4.8 / 15.2 / 12.0 GB (это **служебные данные кластера**, не SQL БД!) |
| Размер SQL БД | **НЕИЗВЕСТЕН**`dttb` не имеет SQL-логина, `sa`-пароль не подобран. Нужен у Олега. |
| Касса | **Сетевые ПК-кассы** `KASSA3` (192.168.1.18) и `KASSIRULICA2` (192.168.1.99). USB-фискальников на сервере НЕТ. |
| Лицензии 1С | HASP-ключа нет (служба `hasplms` Disabled), `.lic`-файлы не найдены → **программная онлайн-лицензия с привязкой к HWID** (риск!) |
| Активные сеансы | ~5 уникальных удалённых клиентов через 1С + терминальные RDP-юзеры |
| Сеть в офисе | 192.168.1.0/24, gw 192.168.1.1, 13 хостов |
| Канал | ping 1.1.1.1 = 3ms (отличный), ping 8.8.8.8 = 15ms |
| Latency до HomeLab (NetBird) | 9699ms стабильно |
| ИБП | **НЕТ** (`Win32_Battery` пуст) |
| Краши | 24 «грязных ребута» 04.05.2026 (Kernel-Power 41 + 6008), все Bug=0/Power=0 → отключение питания |
**Главные следствия для миграции:**
1. Касса не привязана к серверу физически → пробрасывать USB не нужно. Кассы перенаправят на новый IP 1С-сервера через NetBird.
2. Лицензия 1С — программная онлайн → перепривязка к новой VM сделается через 1С (PIN), но требует подготовки.
3. SQL БД на старой 2012 — нужен экспорт/импорт; новая VM может ставить MSSQL 2019/2022.
4. Нет ИБП + бытовая мать → крашы будут продолжаться, миграция оправдана.
---
## 1. Hardware и OS
### Платформа
```
Manufacturer: ASUSTeK COMPUTER INC.
Product: PRIME Z690M-PLUS D4
BIOS: AMI v1620, 2022-08-12
Computer model: ASUS / "System Product Name" (DIY-сборка, не серверный SKU)
RAM: 64 GB DDR4 (2 модуля по 32GB), без ECC
CPU: 12th Gen Intel(R) Core(TM) i5-12400 — 6 ядер / 12 потоков @ 2.5 GHz
Disks (NVMe): 3× Samsung SSD 980 PRO 500GB (NVMe), статус OK
SerialNumbers: 0025_38B2_31B4_8512 / _8508 / _84FE
```
**Вывод:** железо современное (12-е поколение Intel, NVMe), но **бытовое**:
- нет ECC RAM → необнаруженные битовые ошибки в памяти могут вызывать крашы
- нет IPMI/iLO/iDRAC → удалённого управления питанием нет
- нет ИБП в системе (`Win32_Battery` пуст)
- сертифицировано для Workstation, не для 24/7 server-нагрузки
### OS
```
OS: Microsoft Windows Server 2012 R2 Standard
Build: 9600 (6.3.9600)
PowerShell: 5.1.14409.1018
Локаль: Русская
Hostname: Server1C
Uptime: 3h 51min на момент разведки (последний boot 09:56:42 после краша 09:05)
```
**Срок поддержки:** Windows Server 2012 R2 EOL **2023-10-10**. Без расширенных Security Updates. Серьёзная причина для миграции на 2022/2025.
### Локальные пользователи
```
SERVER1C\dttb — основной admin (наш WinRM-юзер)
SERVER1C\Администратор — встроенный admin
SERVER1C\RemoteAdm — для удалённого доступа (AnyDesk?)
SERVER1C\АртемК — RDP-юзер (1С)
SERVER1C\ГорячевАЕ — RDP-юзер (1С)
SERVER1C\Павел — RDP-юзер (1С)
SERVER1C\ПальмановаН — RDP-юзер (1С)
SERVER1C\ФирсовС — RDP-юзер (1С)
SERVER1C\БольшаковаЕН — RDP-юзер, отключён
SERVER1C\Гость — встроенный, без пароля
```
**6 активных юзеров-сотрудников** работают через RDP. Это значит сейчас сервер **работает в терминальном режиме**: люди ходят по RDP в Server1C и запускают там 1С-клиент. Это упрощает миграцию по варианту A (терминальная VM на HomeLab).
### Удалённые доступы
- **RDP (3389)** — открыт публично на 185.13.47.2:3389 (видны established с 176.62.183.186, 176.215.183.37)
- **AnyDesk** — процесс запущен в системе
- **NetBird** — `netbird.exe` v0.68.3, FQDN `server1c.netbird.cloud`, IP 100.70.75.103/16, peers 31/58 connected
**RDP открыт в Интернет** — security risk. После миграции закрыть и оставить только NetBird.
---
## 2. 1С:Предприятие
### Версия и службы
```
Версия 1С: 1C:Предприятие 8 (x86-64) 8.3.27.1606
Издатель: 1С-Софт
Службы (Win32_Service):
1C:Enterprise 8.3 Server Agent — Stopped, Disabled (8.3.18, x86, бинарника нет)
1C:Enterprise 8.3 Server Agent (x86-64) — Running, Auto ★ рабочая
PATH: "C:\Program Files\1cv8\8.3.27.1606\bin\ragent.exe" -srvc -agent
-regport 1541 -port 1540 -range 1560:1591
-d "C:\Program Files\1cv8\srvinfo"
RagentServer_8327 — Stopped, Disabled (orphan)
```
Конфликт служб уже решён 2026-04-16 (см. `projects/buzharovo/server1c.md`). Сейчас одна корректная служба + два Disabled-дубликата.
### Кластер и инфобазы
```
1cv8wsrv.lst:
cluster: 473f3f9e-4aea-43bc-ac45-ec98da8700c7
name: "Локальный кластер"
port: 1541
server: Server1C
```
Инфобазы (по содержимому `C:\Program Files\1cv8\srvinfo\reg_1541\`):
| GUID (короткий) | Размер служебных данных |
|---|---|
| 00d417ca | 7 355 MB |
| 426d93c8 | 4 793 MB |
| 688e50c3 | **15 178 MB** (самая большая) |
| 9e258b8f | 11 953 MB |
| **Итого** | **~39.3 GB** |
⚠ Это **не размер SQL БД**, а служебные данные кластера 1С (полнотекстовые индексы `1Cv8FTxt`, журналы, кэш). Реальный размер БД в SQL не получен (см. секцию 3).
Файла `1CV8Reg.lst` в корне `reg_1541` нет — только `1CV8Clst.lst` (3962 байта, обновляется каждую секунду — это live-state кластера).
**Имена инфобаз → ⚠ ПРОБЕЛ:** только GUID. Нужно либо узнать через рабочий `rac.exe` (rmngr-loop ломает), либо спросить у Олега, либо посмотреть подключения юзеров через 1С.
### Активная нагрузка
```
ragent PID=4048 CPU= 19s WS= 94 MB Threads=44 # service master
rmngr PID=3876 CPU= 7421s WS= 378 MB Threads=104 # cluster manager — high CPU (rmngr-loop)
rphost PID=2884 CPU= 1056s WS=1827 MB Threads=60 # working process
rphost connections:
Established: 26
Unique remote: 5 → ~5 активных удалённых клиентов сейчас
Listening on: 1540 (rmngr), 1541 (regport), 1560 (rphost extra)
Внешние подключения (не localhost):
192.168.1.18:12228 → :1560 (KASSA3 — постоянный коннект к 1С!)
```
**rmngr CPU=7421s за uptime 3h51min** = `7421/(3*3600+51*60) ≈ 53.4%` среднего одного ядра. Это **активный rmngr-loop**, рецепт лечения через `Restart-Service` уже задокументирован (см. `projects/buzharovo/server1c.md`).
### Лицензии 1С — ⚠ КРИТИЧНО
```
HASP/Sentinel hardware-ключ: Сервис hasplms — Stopped, Disabled
USB HASP/SafeNet/Aladdin устройств нет
Программные .lic файлы:
C:\Users\**\*.lic — не найдено
C:\ProgramData\1C\** — папки license нет
C:\Program Files\1cv8\srvinfo\**\*.lic — не найдено
Реестр:
HKLM:\SOFTWARE\1C — нет
HKLM:\SOFTWARE\Wow6432Node\1C — нет
```
**Гипотеза:** лицензия 1С**программная с активацией через 1С (PIN-код)**, привязанная к HWID (CPU/мать/диск). Это значит:
- При переносе на новую VM лицензия **отвалится** → нужен повторный ввод PIN или резервный комплект пинкодов
- **Комплект пинкодов** хранится в личном кабинете 1С-Партнёра / у Олега — **нужно убедиться что есть доступ к пинкодам**
**Альтернативная гипотеза:** лицензия в облачном сервисе ИТС/КОРП (Activator) — тогда привязка через интернет, миграция проще.
**Action item:** уточнить у Олега, как активирована лицензия 1С и есть ли резервные пинкоды/доступ к ЛК 1С.
---
## 3. MSSQL Server
### Версия
```
Microsoft SQL Server 2012 (64-бит, русская версия)
Build: 11.2.5058.0 (SP2 + KB2958429)
Instance: MSSQL11.MSSQLSERVER (default)
Tools: SQL Server 2012 Management Studio (x64+x86)
SQL Server 2008 Object Management Tools (legacy)
Службы:
MSSQLSERVER — Running, Automatic
SQLBrowser — Stopped, Disabled
```
**Mainstream support EOL: 2017-07-11. Extended support EOL: 2022-07-12.** Без security updates 4-й год.
### Listening
```
TCP listening:
0.0.0.0:1433 ← MSSQL (на всех интерфейсах, включая 100.70.75.103!)
0.0.0.0:1540 ← 1С rmngr
0.0.0.0:1541 ← 1С regport (где живёт кластер)
0.0.0.0:1560 ← 1С rphost
```
**MSSQL слушает на NetBird-IP** (100.70.75.103:1433) — то есть из любого NetBird-пира можно попытаться подключиться к SQL. Не критично пока пароль `sa` не известен, но при миграции нужно ограничить.
### БД 1С — ⚠ ПРОБЕЛ
SQL Auth не получили:
```
Win Auth (SERVER1C\dttb): Login failed (нет SQL-логина)
sa без пароля: Login failed
sa / 1qaz!QAZ: Login failed
sa / Sa12345: Login failed
```
Файлы `*.mdf` / `*.ldf` через `Get-ChildItem -Recurse C:\,D:\,E:\` не нашлись за 50 секунд — либо ACL блокирует, либо они в нестандартном месте, либо файлы 1С хранятся в файловом, а не SQL формате (маловероятно для версии 8.3 с MSSQL-инстансом).
**Action item:** получить от Олега `sa`-пароль (или создать SQL-логин для `dttb`). Без этого размер БД и план бэкапа неполный.
### SQL Backup история — ПРОБЕЛ (тот же auth-issue)
---
## 4. Касса и фискализация
**Установленный софт (поиск по реестру uninstall):**
```
Из паттерна 'Атол|Штрих|Atol|Shtrih|Evotor|Касс|Drv|Fiscal|ОФД|Меркурий':
→ НИЧЕГО не установлено
Sentinel LDK License Manager — есть служба (Disabled), но это для других программ
```
**USB-устройства (Win32_PnPEntity, классы Ports/USB/HIDClass):**
```
HID-compliant vendor-defined device (Asus mobo HID)
Microsoft ACPI/UEFI/SMBIOS интерфейсы
Microsoft IPv4/IPv6 Transition Adapter Bus
Microsoft XPS Document Writer
Адаптеры 6to4 / ISATAP
→ Ни одного USB-фискальника, COM-порта (кроме материнского COM1), драйвера ККТ.
```
**Реестр касс/фискальников:**
```
HKLM:\SOFTWARE\Atol — нет
HKLM:\SOFTWARE\Shtrih-M — нет
HKLM:\SOFTWARE\Drv — нет
HKLM:\SOFTWARE\1C\Драйвер ККТ — нет
HKCR\AddIn.DrvFR — нет
```
**ARP-таблица 192.168.1.0/24:**
```
192.168.1.1 — gateway (router)
192.168.1.2 — ?
192.168.1.3 — ?
192.168.1.4 — ?
192.168.1.18 — KASSA3 ★ касса 1
192.168.1.53 — DESKTOP-JSS8L05 рабочий ПК
192.168.1.99 — KASSIRULICA2 ★ касса 2
192.168.1.127 — ?
192.168.1.139 — Nadezhda рабочий ПК
192.168.1.200 — ?
192.168.1.249 — Server1C (сам)
```
**Активный TCP в момент разведки:**
```
192.168.1.18:12228 ←→ Server1C:1560 (rphost) ESTABLISHED
```
### Вывод
**Кассы НЕ привязаны к серверу через USB.** Это **отдельные ПК-кассы** в локальной сети:
- `KASSA3` (192.168.1.18) — активно общается с 1С на rphost-порту 1560 (это значит запущена 1С на самой кассе ИЛИ внешняя компонента 1С DCOM)
- `KASSIRULICA2` (192.168.1.99) — вероятно вторая касса, не активна в момент разведки
**Это огромный плюс для миграции** — серверу не нужно физически передавать USB-устройства. Касса продолжает работать локально на своём ПК, а к 1С обращается по сети. После миграции достаточно изменить IP/имя сервера 1С в её настройках на новый адрес (через NetBird или публичный IP HomeLab).
**Не выяснено:** какое ПО на самих ПК-кассах (1С Розница? собственная программа? драйвер какого ККТ?). Это нужно увидеть на месте — уточнить у Олега или удалёнкой через RDP/AnyDesk на 192.168.1.18.
---
## 5. Сеть и провайдер
### LAN
```
Description: Семейство адаптеров Realtek PCIe GBE
IP: 192.168.1.249/24
Gateway: 192.168.1.1
DNS: 192.168.1.1
MAC: 00:E0:4C:68:9E:34
IPv6: fe80::2d5c:849d:c9ad:3409 (link-local)
```
13 хостов в подсети (см. ARP выше) — это весь офис.
### Канал
```
ping 1.1.1.1: 3 ms ← очень близкий апстрим у провайдера
ping 8.8.8.8: 15 ms
ping LXC 137 (NetBird HomeLab): 9699 ms
Внешний IP: api.ipify.org timeout — определить не удалось
(либо firewall блокирует ipify, либо канал в момент проверки моргнул)
```
**Action item:** уточнить у Олега провайдера (предположительно местный сельский WISP или РТК), скорость download/upload, наличие резервного канала и тип последней мили.
### NetBird
```
Daemon version: 0.68.3
Profile: default
FQDN: server1c.netbird.cloud
NetBird IP: 100.70.75.103/16
Management: Connected
Signal: Connected
Relays: 1/4 Available
Peers count: 31/58 Connected
```
NetBird работает стабильно, RTT до HomeLab 96-99ms.
---
## 6. Безопасность сервера
```
Антивирус: НЕ установлен (Kaspersky/Defender/ESET/etc — пусто)
Windows Updates: не проверяли явно, но Win 2012 R2 EOL уже с 2023
Public RDP: ОТКРЫТ на 185.13.47.2:3389
Активные RDP login (4624, 7 дней):
2026-05-07 09:53 SERVER1C\dttb from 176.62.183.186
2026-05-07 09:53 SERVER1C\dttb from 176.62.183.186 (sweb hosting? — наш rclone?)
SQL Server: 0.0.0.0:1433 (доступен по NetBird, не только localhost)
AnyDesk: запущен (parallel remote channel, без аудита)
```
**Привести в порядок при миграции:**
- Закрыть RDP в Интернет, оставить только через NetBird
- Решить: AnyDesk нужен или нет (двойной канал = двойной риск)
- MSSQL bind на 127.0.0.1 + явный TCP-route через NetBird, не на 0.0.0.0
- Поставить Defender или другой АВ
- Включить регулярные Win Updates (если новая VM на 2022/2025 — само собой)
---
## 7. Краши — подтверждённый паттерн
Из v2-разведки за последние 30 дней:
**Kernel-Power 41 (грязные ребуты):**
- 2026-05-07 09:07 (1 раз)
- **2026-05-04: 24 раза** между 08:36 и 12:13 (!!) — катастрофа дня
- 2026-05-03: 2 раза (08:40, 09:27)
- 2026-05-02: 1 раз (08:41)
- 2026-05-01: 1 раз (08:34)
- 2026-04-30: 2 раза (11:56, 11:59)
Все события: `BugcheckCode=0`, `PowerButtonTimestamp=0`, `SleepInProgress=False` → классическое **отключение питания / brownout**, не BSOD, не overheating, не sleep.
**EventID 6008 (unexpected shutdown)** идут парой к каждому Kernel-Power 41 — подтверждает что система не успевала корректно завершиться.
**Концентрация во времени:** утренние крашы 8:3012:00 (рабочее время в Бужарово) → совпадает с тем что нагрузка на сельскую сеть растёт утром (включаются плиты/обогреватели/насосы).
Подтверждение что миграция нужна.
---
## Открытые вопросы для Олега (action items)
| # | Вопрос | Зачем |
|---|---|---|
| 1 | `sa`-пароль MSSQL? Или создать SQL-login для миграции? | Размер БД, бэкап, миграция данных |
| 2 | Лицензия 1С: программная или ключ? Где пинкоды для перепривязки? | Активировать на новой VM |
| 3 | Имена 4 инфобаз (по GUID): что в `00d417ca`, `426d93c8`, `688e50c3`, `9e258b8f`? | Маппинг при миграции |
| 4 | Что за ПО на KASSA3 / KASSIRULICA2? (драйвер ККТ, 1С Розница, собственный софт?) | Подтверждение совместимости |
| 5 | Провайдер в Бужарово, скорость канала, резервный канал? | Оценка устойчивости RDP/NetBird |
| 6 | Окно простоя для миграции (вечер пятницы? выходные?) | Планирование cutover |
| 7 | Бюджет на ИБП и на сетевое железо в Бужарово? | Альтернативно — починить «на месте», а не мигрировать |
| 8 | AnyDesk нужен в новой схеме или убираем? | Сужение attack surface |
---
## Дополнительно собранные артефакты (на LXC 137)
- `/tmp/recon_server1c.py` — v1 (оригинальный)
- `/tmp/recon_v2.py`, `/tmp/recon_v3.py`, `/tmp/recon_v4b.py`, `/tmp/recon_v5.py` — последовательные итерации
- Все логи v1v5 на Mac в `/tmp/recon_*_output.txt` (на момент сессии)
---
См. далее: `decisions/2026-05-07-buzharovo-migration-plan.md`.

View File

@@ -0,0 +1,60 @@
---
date: 2026-05-08
type: decision
status: draft
tags: [buzharovo, 1c, licensing, plan]
related:
- "[[decisions/2026-05-07-buzharovo-recon]]"
- "[[decisions/2026-05-07-buzharovo-migration-plan]]"
---
# Бужарово 1С — варианты легализации
## Контекст
На Server1C в Бужарово установлена **пиратская 1С** (через patches20 patcher — модифицирован `frame.dll`, подменён `techsys.dll`). Дистрибутив 1С 8.3.27.1606 оригинальный (LLC 1C-Soft signed). Подробности audit'а`decisions/2026-05-07-buzharovo-recon.md`.
Реальный масштаб использования (уточнено 2026-05-08):
- **1 рабочая инфобаза** — RitmUl (на платформе **1С:Розница**, ~3.8 GB)
- **5 одновременных юзеров** (бухгалтерия + кассиры суммарно)
- Маркировка товаров (Честный знак) — **в скором времени обязательна**
- 2 ПК-кассы: KASSA3 (192.168.1.18), KASSIRULICA2 (192.168.1.99)
## Варианты (цены 2026)
### A. Файловая 1С (рекомендую)
| Позиция | Цена |
|---|---|
| Клиентские ПРОФ на 5 мест | 27 400 ₽ |
| 1С:Розница ПРОФ (если ещё не куплена) | 22 000 ₽ |
| 1С:ИТС ПРОФ — год (обязательно для маркировки) | ~12 000 ₽/год |
| ЭДО (Контур.ЭДО / СБИС / Такском) | 36-50 000 ₽/год |
| КЭП для оператора | 2-5 000 ₽/год |
| **Первый год** | **~80-100 000 ₽** |
| **Со 2-го года** | **~50-60 000 ₽/год** |
**Плюсы:** не нужна серверная 1С (-127k), не нужен MSSQL. 5 юзеров файловая отлично тянет. Размер 3.8 GB далеко от лимита (~10-15 GB).
### B. Клиент-серверная (старый паттерн)
+126 800 ₽ к варианту A на 1С Server PROF (x86-64). **Не оправдано** на масштабе 5 юзеров и 3.8 GB БД.
### C. 1С Облако (1С:Fresh)
~2 000 ₽/мес × 5 = 10 000 ₽/мес = 120 000 ₽/год. Без локального сервера, поддержка от 1С. На длинной дистанции дороже A.
### D. Программа «1С:Старт» для МСП
До 50% скидка от партнёра в регионе. Может сделать вариант A за ~50-60k ₽ в первый год. **Стоит уточнить у местного партнёра** (тот же кто RitmUl делал в Ульяновске?).
## Кассы и маркировка
- Кассы должны быть **ФФД 1.2** — проверить через X-отчёт на каждой
- Если ФФД 1.05 — перепрошивка ~3-5k ₽ × устройство, либо замена
- После обновления через ИТС в 1С:Розница появится поддержка Честного знака
## Что НЕ нужно
- ❌ Server PROF 1С (126 800 ₽) — лишний для масштаба
- ❌ MSSQL Standard — файловая ИБ не использует SQL
- ❌ 1С:Бухгалтерия отдельно — Accounting инфобаза не используется по словам Олега
## Action items
1. Зайти на **portal.1c.ru** под учёткой организации — посмотреть существующие покупки лицензий
2. Связаться с **местным 1С-партнёром** (Ульяновск, RitmUl) — узнать про «1С:Старт»
3. **Проверить ФФД 1.2** на кассах
4. Уточнить какие категории товаров маркируются и **дедлайн** введения

View File

@@ -0,0 +1,75 @@
---
date: 2026-05-08
type: decision
tags: [decision, buzharovo, 1c, backup, mssql, effector-saver]
---
# 2026-05-08: Бэкап Бужарово 1С — переход с Effector Saver DT на native MS SQL Backup
## Контекст
Вечером 2026-05-08, после починки rmngr-loop, регулярная задача `Бэкап 1Cv8` в Effector Saver Free 4.8/2 на `server1c.netbird.cloud` (Win 2012 R2, MSSQL 2012 SP4, 1С 8.3.27.1606) **отказывалась завершаться успешно**. Шесть подряд запусков (19:51 → 22:21) падали с одной и той же связкой ошибок:
1. `HRESULT=800401F3``V83.ComConnector` не зарегистрирован → Olег зарегистрировал через UI Effector Saver, переключился на 64-bit
2. `HRESULT=80004005` — "Администратор кластера не аутентифицирован" — у кластера 1С есть проверка авторизации, но **в кластере нет ни одного admin'а**, а добавить нельзя:
- В Серверной консоли 1С: `Локальный кластер → Администраторы` показывает количество=0, форма "Новый администратор" заполнена, но при OK **просит логин/пароль и не принимает agent-уровневый admin** (создан Olегом отдельно)
- Через COM `V83.COMConnector`: `AuthenticateAgent('admin', '1qaz!QAZ')` проходит, но `RegClusterAdmin` падает "пользователь не выполнил аутентификацию для требуемой операции" (chicken-and-egg: для создания первого cluster admin нужен уже cluster admin)
- Через `rac` с `--agent-user`: cluster operations не принимают agent-уровневую аутентификацию (design choice 1С)
3. `Ошибка исключительной блокировки информационной базы` — даже без cluster admin'а Effector Saver продолжает выгрузку, но не может получить эксклюзив, потому что в БД активные сессии. Особенно "вечная" сессия `КулябинПИ sid=4514, начат 12:55:42` — после моего рестарта службы 1С в 19:30 и последующих SQL `KILL` сессий, она **раз за разом возвращается** (вероятно, реально открытый где-то тонкий клиент Павла Ивановича + persistent state в `1CV8Clst.lst`).
## Что пробовали и почему не сработало
| Попытка | Результат |
|---|---|
| `regsvr32` x64 `comcntr.dll` | ✅ COM зарегистрирован, переключение Effector Saver на 64-bit убрало `800401F3` |
| `Restart-Service '1C:Enterprise 8.3 Server Agent'` | ✅ rmngr вылечен, но session 4514 в реестре кластера **persists** между рестартами |
| `KILL` SQL-сессий через `sa/Qwer1122334400` | ✅ временно (sess=0, locks=0), но 1С rphost восстанавливает соединения за 1-2 мин и сессия 4514 reanimates |
| `rac cluster admin register` без auth | ❌ "оператор не существует" |
| `RegClusterAdmin` через COM с `AuthenticateAgent` | ❌ "пользователь не аутентифицирован для требуемой операции" |
| GUI Серверной консоли 1С — добавить cluster admin | ❌ форма не сохраняет, требует cluster auth (которой нет) |
Тупик: **в кластере БД 1С нет cluster admin'а, и зарегистрировать первого нельзя ни через GUI, ни через rac, ни через COM.** Возможный единственный путь — обнулить `srvinfo\reg_1541\1CV8Clst.lst` целиком (потеря и админов, и регистрации ИБ — нужна перерегистрация ИБ с SQL params; рискованно).
## Решение: native MS SQL Backup
Effector Saver делает **DT-выгрузку через 1С Конфигуратор** (`1cv8.exe DESIGNER /DumpIB`), которая требует эксклюзив на ИБ. Это исторический способ для **файловых** ИБ. Для **клиент-серверных** ИБ на MS SQL правильный путь — **`BACKUP DATABASE` на уровне SQL Server**:
-**Online backup** — снимает копию во время работы, не требует эксклюзива
-Не зависит от 1С-кластера, cluster admin'а, активных сессий
-С `WITH COMPRESSION` файл сжимается ~3:1 (3.8 GB → 1.1 GB)
- ✅ Быстрее — у нас 2 секунды на 3.8 GB БД
- ✅ Восстанавливается одним запросом `RESTORE DATABASE`
Реализация:
```sql
BACKUP DATABASE [RitmUl]
TO DISK = N'C:\backup\RitmUl_<ts>.bak'
WITH FORMAT, INIT, NAME = N'RitmUl-Full',
SKIP, NOREWIND, NOUNLOAD, COMPRESSION, COPY_ONLY,
STATS = 5
```
`COPY_ONLY` — чтобы наш бэкап не ломал log chain если потом настроят differential/log backups.
Запускается через WinRM `python3 + System.Data.SqlClient` с LXC 139 `severny-les` (бот). Storage: `C:\backup\` на server1c (374 GB свободно).
## Артефакт
- **Первый успешный бэкап 2026-05-08:** `C:\backup\RitmUl_2026-05-08_2225.bak` (1105 MB)
- **Скрипт:** `/root/clawd/scripts/sql_native_backup.py` на LXC 139
## TODO (после возвращения Olега из Египта)
1. **Автоматизировать** — добавить cron на LXC 139 `severny-les`: каждый день в 03:00 МСК запускать `sql_native_backup.py`, ротировать (хранить N дней). Алерт в Telegram-группу при сбое.
2. **Ротация и трансфер** — настроить копирование `.bak` файлов на внешний носитель (Nextcloud / S3 / Gitea-LFS).
3. **Тест восстановления** — раз в N дней автоматически развернуть бэкап в тестовую БД и проверить целостность.
4. **Effector Saver** оставить как есть, не чинить (чинить cluster admin = разбирать `1CV8Clst.lst` бинарник, риск убить ИБ). Можно отключить регулярную задачу `Бэкап 1Cv8` в Effector Saver чтобы не плодились алерты "ошибка".
5. **TODO документировать** SQL creds в `projects/dttb/credentials.md` (см. блок Бужарово).
## Связанные
- [[projects/buzharovo/server1c]] — обновлён с SQL backup как новый канон
- [[projects/buzharovo/severny-les-bot]] — бот теперь умеет бэкапить через WinRM+SQL
- [[decisions/2026-05-07-buzharovo-1c-rmngr-loop-after-crash]] — про rmngr (отдельная история, починена)

View File

@@ -0,0 +1,77 @@
---
date: 2026-05-08
type: decision
tags: [decision, buzharovo, bot, openclaw, watchdog, telegram]
---
# 2026-05-08: Северный лес — отдельный AI-ассистент + watchdog для server1c (Бужарово)
## Контекст
Олег уезжает в отпуск в Египет 2026-05-09 → 2026-05-22. На server1c (Бужарово, VDS 185.13.47.2 / NetBird 100.70.75.103) недавно (2026-05-07) был rmngr-loop, который лечится только `Restart-Service '1C:Enterprise 8.3 Server Agent (x86-64)' -Force` — ребут не помогает (см. [[decisions/2026-05-07-buzharovo-1c-rmngr-loop-after-crash]]).
Пока Олег в отпуске, нужно:
1. Чтобы кто-то узнавал когда сервер упал (Telegram-группа руководящего состава Северного леса);
2. Чтобы можно было дёрнуть восстановительное действие (`/approve restart_1c`) не дожидаясь возвращения Олега из Египта.
Через ~2 недели (после Египта) планируется миграция server1c с VDS на собственный сервер. Бот должен работать **до и после** миграции — поэтому он не на самом server1c, а на dttb-Proxmox через NetBird.
## Развилка: clawdbot vs openclaw vs другой watchdog
Рассматривались три варианта:
| Вариант | Плюсы | Минусы |
|---|---|---|
| **clawdbot** (как у [[projects/niikn/clawdbot-niikn|Максимки-Мауля]]) | Проверенный рецепт, проще | Старый стек, не обновляется. exec-approvals самописные. |
| **openclaw** (свежий стек 137) | Встроенный `exec-approvals.json` whitelist для shell-команд. Plugins, skills, делегирование на Opus 4.7 через Max. Свежий, активная разработка. | Жёсткая schema, есть тонкости (bonjour, IPv6, FakeIP DNS) — но они уже разобраны на 137. |
| **Голый watchdog без AI** | Минимум зависимостей. | Нет диагностики "почему упало". Невозможно дёрнуть `/restart_1c` через `/approve` — только ручной WinRM. |
**Решение:** **openclaw** — встроенный whitelist для shell-команд (`exec-approvals.json`) — это прямо то что нужно для `/approve` flow. Плюс Опус 4.7 через Max.
## Архитектура
**Изоляция от Максимки (LXC 137):** не подвешиваем как доп.канал на 137 — если openclaw на 137 упадёт (а это бывает: bonjour, FakeIP, Kiro 402), упадут и алерты Бужарово. Для критичной мониторинг-задачи нужен **отдельный** инстанс.
**Хост:** новый LXC 139 на dttb (10.0.0.240, NetBird 100.70.212.78, Ubuntu 24.04, 2c/4GB/10GB).
**Два слоя независимых:**
1. **buzharovo-watchdog** — bash + curl→TG bot API напрямую, systemd timer 60s. **Не зависит от openclaw.** Если AI-часть упала, алерт всё равно дойдёт.
2. **openclaw 2026.5.7** — AI-помощник для диагностики и `/approve`-action'ов через WinRM.
**Алерт-уровни:**
- `OK` — всё доступно;
- `WARNING` — часть проверок упала;
- `WARNING_NETBIRD` — NetBird до server1c лежит, публично сервер виден;
- `CRITICAL` — сервер не отвечает ни публично, ни через NetBird.
Антиспам: алерт шлётся **только при смене уровня**, состояние в `/var/lib/severny-les/state.json`.
**WinRM-actions с подтверждением:**
- read-only без approval (`/status`, `/check_1c`, `/check_rmngr`);
- destructive с обязательным `/approve` от Олега `1292155421` (`/restart_1c`, `/kill_orphan_ragent`);
- ребута сервера НЕ даём (по опыту 2026-05-07 не помогает rmngr-loop).
## Превентивные правки на старте (уроки 137)
Все три "ловушки openclaw" пропатчены сразу:
1. `plugins.entries.bonjour.enabled = false` — против mDNS crash-loop (см. [[projects/dttb/openclaw#Crash-loop-каждые-40-сек]]).
2. `pct set 139 --nameserver '1.1.1.1 8.8.8.8'` + правка `/etc/resolv.conf` — против FakeIP DNS от 10.0.0.1.
3. `NODE_OPTIONS=--dns-result-order=ipv4first` в systemd unit — против IPv6-сбоев Telegram API.
systemd unit для openclaw — **system-level** (`/etc/systemd/system/openclaw-gateway.service`), а не `--user` как на 137. В LXC без user-session `systemctl --user` не работает (`Failed to connect to bus`).
## Что осталось сделать после возвращения Олега
1. **NetBird ACL** `severny-les``server1c` (порт 5985 TCP минимум) — без него WinRM-actions не работают, watchdog мониторит только публичные проверки.
2. **Добавить @bz_sl_bot в TG-группу** руководящего состава, узнать `chat_id`, обновить `/etc/severny-les/watchdog.env` `BZ_TG_CHAT` и `openclaw.json` `groupAllowFrom`.
3. После миграции server1c на свой сервер — обновить IP в `/root/clawd/INFRASTRUCTURE.md` и в `buzharovo-watchdog.sh`.
## Артефакты
- LXC 139 `severny-les` (10.0.0.240)
- TG bot `@bz_sl_bot` (token `8322860033:...`)
- Справочник: [[projects/buzharovo/severny-les-bot]]
- Persona: `/root/clawd/{IDENTITY,INFRASTRUCTURE,USER,SOUL,TOOLS,MEMORY,HEARTBEAT}.md`
- Скрипты: `/root/clawd/scripts/check_buzharovo.sh`, `winrm_lib.py`, `check_1c_service.py`, `check_rmngr_cpu.py`, `restart_1c_agent.py`, `kill_orphan_ragent.py`, `heartbeat.sh`
- Watchdog: `/usr/local/bin/buzharovo-watchdog.sh` + `.service` + `.timer` (60s); `netbird-watchdog` clone с 137 (2 мин)
- Whitelist: `/root/.openclaw/exec-approvals.json`

View File

@@ -0,0 +1,84 @@
---
date: 2026-05-12
type: decision
status: applied
tags: [openwrt, podkop, fakeip, amneziawg, iphone, doh, instagram, sergey]
aliases: [Sergey Instagram, OpenWrt_Sergey Instagram, iPhone DoH FakeIP]
---
# 2026-05-12 — Sergey: «Инста не работает» — диагноз и фикс
## Кейс
Сергей (объект [[../projects/sergey/README|OpenWrt_Sergey]], Одинцово, Cudy TR3000 v1, 100.70.110.164) пожаловался Олегу — на телефоне **не открывается Instagram** через его роутер. Стек обхода: podkop v0.7.14 + sing-box 1.12.12 + AmneziaWG (kmod) до VLESS-Singapore endpoint `202.71.12.186`, community_lists = `russia_inside`, `telegram`, `meta`.
## Что проверил (на роутере)
| Проверка | Результат |
|---|---|
| AmneziaWG `awg0` handshake | свежий (1:37 назад), 11.5 GiB rx |
| Sing-box процесс | running PID 11491 |
| nft mangle + tproxy 127.0.0.1:1602 | 108k TCP / 2598 UDP пакетов прошли |
| FakeIP для `www.instagram.com` через `192.168.1.1` (dnsmasq роутера) | `198.18.0.17` ✅ |
| FakeIP для `i.instagram.com` | `198.18.0.6` ✅ |
| FakeIP для `scontent.cdninstagram.com` | `198.18.0.27` ✅ |
| `curl --interface awg0 https://www.instagram.com/` с роутера | HTTP/2 200 ✅ |
| WAN exit IP без VPN | `217.73.118.172` (NetByNet, РФ) |
| WAN exit IP через `awg0` | `202.71.12.186` (Singapore) ✅ |
| `podkop list_update` | прошёл 09:13 сегодня без ошибок |
| DNS 8.8.8.8 / 1.1.1.1 не режется провайдером | подтверждено nslookup'ом |
**На стороне роутера всё исправно.** Никаких правок инфраструктуры не нужно.
## Реальная причина
В DHCP-leases роутера активен ровно **один клиент**`192.168.1.102`, MAC `2e:7f:8c:ce:07:8a` (рандомизированный — бит `02` в первом октете), т.е. iPhone/Android с приватным Wi-Fi-MAC. Все маркеры указывают на **iPhone, который обходит роутерный DNS**:
1. **iCloud Private Relay** — целиком тоннелирует трафик Safari + системные DNS через Apple-серверы (`mask.icloud.com`), минуя локальный dnsmasq. FakeIP не успевает подменить IP.
2. **Encrypted DNS** в Safari / приложении Instagram / Chrome (DoH к `1.1.1.1:443` или `dns.google:443` по TCP) — те же симптомы.
3. **Кастомный DNS-профиль** в настройках Wi-Fi сети — устройство просто игнорирует роутерный DNS.
В любом из трёх случаев клиент получает **реальный IP** `157.240.x.x` от внешнего DoH-резолвера, и DPI провайдера (`NetByNet`) блочит TLS handshake по SNI `instagram.com`.
## Фикс — клиент-сайд (приоритет)
Скажи Сергею выключить на iPhone в таком порядке:
1. **Настройки → имя сверху → iCloud → Частный узел → ВЫКЛ**
2. **Настройки → Wi-Fi → ⓘ его сети → Настройка DNS → Автоматически**
3. **Safari → Конфиденциальность и безопасность → Скрывать IP-адрес → ВЫКЛ**
4. Если ходит через **Chrome**: `chrome://settings/security` → DNS через HTTPS → **ВЫКЛ**
5. Wi-Fi выкл/вкл на телефоне (сбросить кэш DNS клиента)
Этих действий достаточно в **80%+ случаев** для подобных сетапов.
## Фикс — роутер-сайд (если клиентский путь не помог)
В podkop v0.7.14 **нет встроенной опции** "force DNS / block DoH" — делать вручную через nft. Опционально — у домашнего OpenWrt Олега это уже сделано (`projects/dttb/openwrt-router.md`: «DNS Hijack: перехватывает порт 53 → 10.0.0.1»).
Шаги для Сергея (если потребуется):
```sh
# 1) Принудительный редирект исходящего DNS:53 на роутер
nft 'add rule inet fw4 dstnat iifname "br-lan" meta l4proto { tcp, udp } th dport 53 dnat ip to 192.168.1.1:53'
# 2) Drop DoH/DoT к публичным резолверам (TCP/443 + TCP/853)
nft 'add set inet fw4 doh_servers { type ipv4_addr; flags interval; elements = { 1.1.1.1, 1.0.0.1, 8.8.8.8, 8.8.4.4, 9.9.9.9, 149.112.112.112 } }'
nft 'add rule inet fw4 forward iifname "br-lan" ip daddr @doh_servers tcp dport { 443, 853 } reject with tcp reset'
# 3) Закрепить в /etc/firewall.user или uci
```
Также можно поднять AdGuard Home (как у Олега в HomeLab) — он по умолчанию форсит свой `:53` и фильтрует DoH-домены. Сейчас у Сергея AGH **не установлен** — стек чисто `dnsmasq → 127.0.0.42 (sing-box) → upstream`.
## Что НЕ является проблемой
- **Шум в логе sing-box** — `ERROR ... {GUID}-netseer-ipaddr-assoc.xy.fbcdn.net: empty result`. Это Meta NetSeer probes (anti-CDN-detection), штатное поведение Meta. Игнорировать.
- **`check_fakeip` показывает 217.73.118.172** — это российский WAN IP роутера. Тестовый домен (`ip.podkop.fyi`) не в community-listах, идёт direct через WAN — это норма для проверки.
## Связанное
- [[../projects/sergey/README]] — полный recon роутера
- [[../snippets/podkop-fakeip-diagnostics]] — типовой playbook для диагностики любого подкоп-роутера
- [[../projects/dttb/openwrt-router]] — домашний OpenWrt Олега, где DNS-hijack уже включён
- [[2026-04-30-openwrt-homelab-agh-podkop-chain]] — стек AGH+podkop у Олега дома (как референс)

View File

@@ -0,0 +1,85 @@
---
date: 2026-05-14
type: decision
tags: [decision, buzharovo, watchdog, netbird, monitoring, openclaw]
---
# 2026-05-14: Watchdog Бужарово — только публичный канал, NetBird вынесен из alert level
## Контекст
Олег в Египте, прислал что бот "сыпал ошибками вчера, попросил отключить мониторинг". Разведка:
1. **Все сервисы на LXC 139 живы** (`openclaw-gateway`, `buzharovo-watchdog.timer`, `netbird-watchdog.timer`, `netbird.service``active+enabled`). Олег ничего не отключал.
2. **Watchdog v1 правильно держал `WARNING_NETBIRD`** (последний алерт 13 мая ~19:32 МСК), антиспам корректный — повторных алертов не слал.
3. **Истинный источник "ошибок"**`openclaw primary model = omniroute/cc/claude-opus-4-7` упёрся в лимит Max-подписки:
```
omniroute (cc/claude-opus-4-7) returned a billing error — your API key has run out of credits
400 [400]: You're out of extra usage. Add more at claude.ai/settings/usage and keep going.
```
Каждое сообщение в боте + каждое ночное `memory-core dreaming` (cron 03:00) → billing 400 → failover на `kr/claude-sonnet-4.5`. На клиенте часть запросов могла отдаться с ошибкой раньше чем failover отработал.
4. **Server1C NetBird daemon (Windows)** регулярно flap'ает, `last_seen=2026-05-13T08:24:26` — > 25 часов вне mesh, хотя сервер сам публично жив (ping + RDP 3389 OK).
## Решения
### Фикс 1: primary model → free Sonnet 4.5
`/root/.openclaw/openclaw.json`:
```json
{
"primary": "omniroute/kr/claude-sonnet-4.5",
"fallbacks": [
"omniroute/cc/claude-sonnet-4-6",
"omniroute/gh/claude-sonnet-4.5",
"omniroute/cc/claude-opus-4-7"
]
}
```
Hot-reload подхватился. Backup конфига — `/root/.openclaw/openclaw.json.bak.opus-billing-<ts>`.
**Возврат на Opus как primary — только после пополнения Max** или подключения второго конектора в OmniRoute.
### Фикс 2: watchdog v2 — только публичный канал
Переписан `/usr/local/bin/buzharovo-watchdog.sh`. Логика alert-level **больше не учитывает NetBird-проверки**:
- `OK` — `ping 185.13.47.2` ✓ + `TCP 3389` (RDP) ✓
- `DEGRADED` — один из публичных упал
- `CRITICAL` — оба публичных упали
NetBird-уровень (`ping 100.70.75.103` + `TCP 5985`) **только логируется** в `state.json` (`ping_nb`, `winrm_nb`), но не меняет level и не порождает алерт.
При первом алерте в новую сессию (prev_level=INIT) добавляется пометка:
> _NetBird до сервера сейчас лежит — это известная регулярная проблема со стороны Windows-сервера, не влияет на работу 1С для пользователей. Watchdog проверяет только публичный канал._
**Почему так:** NetBird daemon на Server1C (Windows 2012 R2) теряет mesh-сессию регулярно (memory `feedback_netbird_watchdog`). Лечится `Restart-Service netbird` через RDP — но это ручная операция, и поток алертов из-за этого был шумом, а не сигналом. Сервер для пользователей в Бужарово при этом работает — 1С локально доступна.
**Что теряем:** WinRM-actions (`check_1c_service.py`, `check_rmngr_cpu.py`, `restart_1c_agent.py`, `sql_native_backup.py`) идут через NetBird (`100.70.75.103:5985`). Когда NetBird падает — эти actions недоступны. Бот в группе об этом честно скажет: "Не могу проверить состояние службы 1С — туннель до сервера временно лежит". Восстанавливается после `Restart-Service netbird` на server1c через RDP.
**Что НЕ теряем:** алерты о реально критичных событиях (сервер физически лёг публично, сеть провайдера упала, RDP закрылся).
## Деплой
```bash
pct push 139 wd.sh /usr/local/bin/buzharovo-watchdog.sh
chmod +x /usr/local/bin/buzharovo-watchdog.sh
chown root:root /usr/local/bin/buzharovo-watchdog.sh
echo "{}" > /var/lib/severny-les/state.json # force re-evaluate
# Manual run → level=OK, alert "Мониторинг включён" ушёл в группу
```
## Обновления в vault и persona
- `/root/clawd/MEMORY.md` на LXC 139 — добавлены уроки про Opus billing + watchdog v2
- [[projects/buzharovo/severny-les-bot]] — обновить ссылку на watchdog v2 (TODO)
- Этот decision-файл
## NetBird route 10.0.0.0/24 — попутно
Существующий route `Dom` (`cud7q73l0ubs73dr3gc0`) advertised через peer `pve 100.70.121.235 (Эстония)`, **disconnected**. Переключил routing peer на **`openclaw` (`d79s9g2fadhs739mihkg`)** через PUT `/api/routes/cud7q73l0ubs73dr3gc0`. Mac получил доступ к 10.0.0.0/24 через NetBird → openclaw → LAN.
## TODO (опционально, не сейчас)
- **Reverse SSH-туннель** server1c → severny-les для WinRM-actions без зависимости от NetBird. Server1C сам делает outbound SSH → LXC 139 пробрасывает 127.0.0.1:55985 → server1c:5985. WinRM-скрипты целятся в `localhost:55985`. Решает проблему "NetBird лёг — WinRM недоступен".
- **HTTPS WinRM (5986)** публично с certificate-pin'ом — альтернатива через интернет, но требует настройки SSL и хорошего firewall.
- **Ночной cron sql_native_backup.py** — автоматизация ежедневных бэкапов БД (TODO от 2026-05-08, см. соответствующий decision).

View File

@@ -0,0 +1,84 @@
---
date: 2026-05-20
type: decision
tags: [vpn, amnezia, amneziawg, macos, finland, server, incompatibility]
status: open
severity: medium
---
# AmneziaVPN macOS-клиент несовместим с v1 AmneziaWG-сервером
## TL;DR
macOS-клиент AmneziaVPN (текущей версии на 2026-05) умеет только новый **AmneziaWG v2** handshake-формат. На **v1**-серверах (старые `amnezia-awg` контейнеры) — handshake silently дропается, клиент видит `ErrorCode 305 — Тайм-аут подключения к серверу`. iOS-клиент, Windows-клиент и Linux-kernel-module `wireguard-go-amneziawg` шлют в v1-совместимом формате — продолжают работать.
## Симптомы
Mac-клиент при попытке Connect:
- На v1-сервере: шлёт **только junk-преамбулу (96-байтовые UDP-пакеты)**, реальный handshake_init (148+ байт) не уходит. Таймаут 305.
- На v2-сервере: handshake проходит, туннель поднимается, всё работает.
В tcpdump на v1-сервере видно множество одинаковых 96-байтных UDP-пакетов от Mac-клиента и **ноль ответных**. На v2-сервере — пакеты разных размеров (handshake → data 1452 байт).
## Подтверждённые случаи (2026-05-20)
| Клиент | Сервер | Контейнер | Версия | Результат |
|---|---|---|---|---|
| Mac Олега | `78.17.4.225` (НИИКН) | `amnezia-awg2` | v2 | ✓ работает |
| Mac Олега | `202.71.12.186` (finland5870) | `amnezia-awg` (7 мес) | v1 | ✗ ErrorCode 305 |
| Mac Александра (Бенелюкс) | `202.71.12.186` | v1 | v1 | ✗ ErrorCode 305 |
| iPhone Александра | `202.71.12.186` | v1 | v1 | ✓ работает |
| Win 2012R2 1С Бужарово | `78.17.4.225` | v2 | v2 | ✓ работает |
| Cudy TR3000 (kernel-mod) | `202.71.12.186` | v1 | v1 | ✓ работает |
## Как опознать v1 vs v2 на сервере
```bash
ssh root@<server> 'docker ps | grep amnezia-awg'
```
- `amnezia-awg` — v1
- `amnezia-awg2` — v2
В `wg0.conf` v2-конфиг включает поля `I1..I5` (после `H1..H4`), в v1 — нет:
```bash
docker exec <amnezia-awg|amnezia-awg2> awk '/^\[Interface\]/,/^\[Peer\]/' /opt/amnezia/awg/wg0.conf
```
## Конфиги клиентов
В `vpn://`-ключе AmneziaPanel оба формата выглядят почти одинаково (поля `I1..I5` присутствуют пустыми и в v1-конфигах). Реальная привязка к версии — на стороне сервера + версия клиентского `wireguard-go-amneziawg`.
## Решение (выбрано Олегом)
**Не трогаем v1-сервер finland5870** — там 84 активных peer (iOS/Windows/Linux/kernel-WG), которые работают. Риск перевыпуска всех конфигов перевешивает пользу.
Mac-юзерам, кто жалуется на 305, выдаём:
- Конфиг от v2-сервера `78.17.4.225` (НИИКН), либо
- Конфиг от **любого** v2-сервера в инфре Олега.
Александру (Бенелюкс) — выпущен новый конфиг от НИИКН-сервера.
## Что не сделано (отложено)
- **Параллельный v2-контейнер на finland5870** на другом UDP-порту (например `37210`) — старые v1-клиенты продолжают на `37209`, новые/Mac — на v2 `37210`. Без вмешательства в текущий контейнер, риск минимальный. Откладывается пока не накопится критическая масса Mac-юзеров.
- **Полная миграция finland5870 v1 → v2** — массовый перевыпуск 84 конфигов. Только в плановое окно даунтайма.
## Диагностика для будущих случаев
Чтобы не разбирать с нуля, чек-лист:
1. **Mac жалуется на ErrorCode 305 или тайм-аут к AmneziaVPN.**
2. Проверь — **iOS-клиент / Windows-клиент того же пользователя на том же сервере работают?** Если да — гипотеза macOS-v1-баг сильно правдоподобна.
3. **Какая версия контейнера на сервере**`docker ps | grep amnezia` → если `amnezia-awg` (без `2`) — это v1. Если `amnezia-awg2` — v2.
4. Если v1 — выдай Mac-юзеру конфиг от v2-сервера. Не пытайся "починить" v1-контейнер.
## Снэпшот серверов на момент решения (2026-05-20)
- **finland5870.com** `202.71.12.186`: `amnezia-awg` (v1, создан ~2025-10), 84 peer, port 37209/udp. Используется как основной endpoint для роутерных podkop-туннелей: Бенелюкс, Сергей, Знаменское, НИИКН-роутер, Lipki, Михуринец и др.
- **finlandit5870.com** `78.17.4.225`: `amnezia-awg2` (v2, создан 2026-05-18), `amnezia-panel-web` (управляющая PHP-панель), полный VPN-стек (xray, shadowbox, socks5, mtproto, WA-proxy). Олег управляет конфигами отсюда через AmneziaApp.
## Связанные
- [[../projects/dttb/finland-hostkey-vps]] — карточка finland5870
- [[../projects/dttb/vpn-clients]] — клиентский реестр
- [[2026-05-20-benelux-compromise]] — параллельная история инцидента с роутером Бенелюкса

View File

@@ -0,0 +1,159 @@
---
date: 2026-05-20
type: decision
tags: [security, incident, benelux, openwrt, ssh, firewall]
status: closed
severity: high
---
# Бенелюкс OpenWrt — взлом через SSH brute-force на WAN
## Что произошло
В ходе плановой проверки в **15:38 MSK** на `OpenWrt Benelux` (Cudy TR3000, NetBird `100.70.207.97`, WAN `45.143.21.60`) обнаружена активная компрометация:
- **LA = 4.0** на 4-ядерном MT7981, CPU 82% idle (нагрузка не на CPU, а на сеть+OOM-loop)
- **19 параллельных SSH-сессий** от чужих IP: `185.244.183.107` (RU), `51.77.53.0/24` и `51.38.148.97` (OVH FR), `108.181.123.93`, `51.75.55.2`
- Каждая сессия рассылала **спам через SMTP 25/465/587** на сотни IP (десятки соединений на момент анализа)
- Также параллельно — попытки на **Docker API 2375** (поиск открытых демонов для распространения)
- Cron `@reboot /tmp/.2424` (тело уже самоудалилось)
- `/root/.bash_history` и `.ash_history` отсутствуют — следы зачищены
## Вектор атаки
**SSH-сервер слушал на WAN (eth0)**, пароль `root:1qaz!QAZ` — общий по всей инфраструктуре. WAN IP `45.143.21.60` публичный → brute force с открытого интернета. После взлома атакующие держали постоянные авторизованные сессии и из своих shell-ов запускали спам напрямую.
> Ранняя гипотеза о malware-процессах под именами `systemd`/`sshd` оказалась ложной — это были обычные процессы атакующих в их собственных dropbear-shell. На OpenWrt нет ни systemd, ни sshd; имена `dropbear` в `netstat` — это родительские SSH-сессии злоумышленников.
## Что сделано (без ребута)
| Шаг | Команда / артефакт |
|---|---|
| 1. Заблокировать спам | `nft insert rule inet fw4 output oifname eth0 tcp dport {25,465,587,2375} drop` (+ `forward`) |
| 2. Заблокировать вход SSH с WAN | `nft insert rule inet fw4 input iifname eth0 tcp dport 22 drop` |
| 3. Убить 19 атакующих сессий | `kill -9` всех `dropbear` PID с не-NetBird foreign IP |
| 4. Положить ключ | `/etc/dropbear/authorized_keys` = mac-ed25519 (см. `~/.ssh/id_ed25519.pub`) |
| 5. Поменять пароль root | новый — в auto-memory (НЕ в vault) |
| 6. Удалить вредоносную крон-запись | `@reboot /tmp/.2424` вычищено, осталось только `13 9 * * * /usr/bin/podkop list_update` |
| 7. Persist firewall | `/etc/nftables.d/99-incident-20260520.nft` + `fw4 reload` |
После `fw4 reload` роутер автоматически ребутнулся (вероятно watchdog отреагировал на reload в момент OOM-loop). После ребута: правила подхватились из `/etc/nftables.d/`, ключ сработал, новый пароль активен, cron чистый.
## Результат
| Метрика | До | После |
|---|---|---|
| Load average | 4.04 | 0.15 |
| Free RAM | ~250 MB (с OOM-loop) | 307 MB available |
| Dropbear процессов | 21 | 2 (listener + моя сессия) |
| Outbound SMTP-соединений | 30+ | 0 |
| Counter `incident_block_in 22` | — | растёт (атакующие тыкаются) |
## Постоянные правила (`/etc/nftables.d/99-incident-20260520.nft`)
```nft
chain incident_block_in {
type filter hook input priority -100; policy accept;
iifname "eth0" tcp dport 22 counter drop comment "incident-20260520-no-ssh-from-wan"
}
chain incident_block_out {
type filter hook output priority -100; policy accept;
oifname "eth0" tcp dport { 25, 465, 587, 2375 } counter drop comment "incident-20260520-block-spam"
oifname "eth0" tcp dport 22 counter drop comment "incident-20260520-block-ssh-brute"
}
chain incident_block_fwd {
type filter hook forward priority -100; policy accept;
oifname "eth0" tcp dport { 25, 465, 587, 2375 } counter drop comment "incident-20260520-block-spam"
oifname "eth0" tcp dport 22 counter drop comment "incident-20260520-block-ssh-brute"
}
```
SSH доступ остался только через:
- LAN (`192.168.1.0/24`, `br-lan`)
- NetBird (`100.70.207.97`, `wt0`)
## Расширение масштаба: Unifi + NetBird-mesh
Бенелюкс — **не изолированный объект**. Cudy за время взлома имел два открытых вектора в чужие сети:
1. **LAN Бенелюкса (192.168.1.0/24)** — здесь живёт **Unifi-сегмент**: 3 AP/Switch (`70:a7:41:79:ef:29`, `70:a7:41:9a:9e:92`, `70:a7:41:c1:33:0a`). Атакующие, сидя на Cudy под root, имели L2 ко всей подсети — могли сниффить broadcasts, ARP, DHCP. К какому контроллеру эти устройства adopted — на момент расследования не выяснено: inform-трафика ни к LXC 116 НИИКН (`100.70.138.234`), ни к UDM-Pro Знаменского нет. Одно из устройств (`192.168.1.199`, hostname `Benelyuks`) стучится в `192.168.28.34:8381` — это IP не из NetBird, пакеты уходят в default-шлюз провайдера без ответа. Похоже на orphaned-сегмент, см. [[projects/benilux/README#unifi-сегмент-за-cudy]].
2. **NetBird-mesh через wt0** — Cudy получает по NetBird маршруты в:
- `10.0.0.0/24` (через openclaw — это вся домашняя dttb-инфра)
- `10.253.1.0/24` + `2.63.246.0/24` + `87.250.251.0/24` + `95.167.245.0/24` (через pve-LionART — ММФБ)
- `192.168.1.0/24` (через pve-niikn — НИИКН; конфликт с локальной подсетью)
- `192.168.2.0/24` (Переделки), `192.168.8.0/24`, `192.168.88.0/24`
Атакующие, имея root на Cudy с активным NetBird agent, теоретически могли достучаться до любого хоста в этих сетях. На практике для этого надо знать топологию (которой у них не было) и проводить активную разведку (не видно в коротких SMTP-сессиях). Но риск ненулевой — особенно для **LXC 116 unifi-controller** (`100.70.138.234:8443`) и **Proxmox НИИКН** (`pve-niikn 100.70.120.229`), которые видны напрямую.
**Что проверить отдельно** (не в этом фиксе):
- Логи Docker LXC 116 unifi-controller (на pve-niikn, `/opt/unifi/config/logs/`) на попытки входа / сессии с `100.70.207.97` за 2026-05-20 13:0015:45 MSK
- NetBird access policy для группы `OpenWRT VPN` — какие пиры/подсети разрешены этой группе
## Что НЕ сделано (на твоё решение)
1. **Полный wipe / sysupgrade -n.** Малварь была memory-resident (`/tmp/.2424` уже не существовало), бэкдоров на диске не найдено (find -mtime -7 чист в `/etc /lib /sbin /usr/sbin /opt`). Но 100% гарантии чистоты после взлома `root` без переустановки нет. Рекомендую перезалить роутер в течение недели в окно даунтайма.
2. **Жёсткое ограничение dropbear на интерфейсы.** Сейчас он слушает на всех (`0.0.0.0:22`), правило отбрасывает только `iifname eth0`. Можно дополнительно через `uci set dropbear.@dropbear[0].Interface=lan` ограничить bind. Не делал — риск разрыва.
3. **Audit прочих хостов с тем же паролем.** `1qaz!QAZ` фигурирует в инфраструктуре много где (Proxmox, Gitea-WebUI, NPM, Nextcloud, openclaw-LXC, server1c, MikroTik и др.). Также UDM-Pro использует похожий `1qaz!QAZ!QAZ`. **Если хоть один публично-доступный хост с этим паролем существует — он тоже скомпрометирован.** Нужен аудит.
4. **Уведомление abuse.** `45.143.21.60` рассылал спам несколько часов (минимум) — стоит ожидать blocklist-листинги (Spamhaus CSS/XBL, abuseipdb).
5. **Чистка `/var/log/dropbear`** (если есть) — для удаления fingerprint атакующих, но это удалит и улики.
## SMTP forward разблокирован (2026-05-20 ~17:00 MSK)
Александр пожаловался что почта перестала работать — это побочный эффект моего forward-drop для 25/465/587. Снял **forward** chain для этих портов (`/etc/nftables.d/99-incident-20260520.nft`), оставил только output-drop (с самого роутера — там SMTP-клиента быть не должно) + forward-drop для 22 (защита от LAN→WAN SSH-брута, если в сети окажется скомпрометированное устройство). Apple Mail/Outlook у LAN-клиентов снова работает.
## Постоянный фикс (2026-05-20 16:30 MSK)
После исходной изоляции выявлено в UCI: `firewall.@rule[9].name='Allow-SSH-WAN'`**корневая причина инцидента**, явное разрешение SSH с интернета. Также включён парольный auth: `dropbear.main.PasswordAuth=on`, `RootPasswordAuth=on`. Применено:
```
# backup
cp /etc/config/firewall /etc/config/firewall.bak.incident-20260520
cp /etc/config/dropbear /etc/config/dropbear.bak.incident-20260520
cp /etc/dropbear/authorized_keys /etc/dropbear/authorized_keys.bak.incident-20260520
# второй ключ в authorized_keys (recovery, если Mac отвалится)
cat >> /etc/dropbear/authorized_keys <<'KEY'
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKlYObrWNTPQbR+WXMURscQ85Xc5HTLZa+wC8sf8WU72 claude-code@code-server
KEY
# удалить дырявые UCI-правила
uci delete firewall.@rule[<idx>] # Allow-SSH-WAN
uci delete firewall.@rule[<idx>] # Allow-IPSec-ESP
uci delete firewall.@rule[<idx>] # Allow-ISAKMP
# key-only
uci set dropbear.main.PasswordAuth='off'
uci set dropbear.main.RootPasswordAuth='off'
uci commit firewall && uci commit dropbear
fw4 reload && /etc/init.d/dropbear restart
```
**Verify:** вход по ключу — ОК; вход по паролю — `Permission denied (publickey)` (dropbear даже password-prompt не показывает).
## NetBird route — NIIKN остаётся в mesh (2026-05-20 16:50 MSK)
Изначально планировалось убрать route `192.168.1.0/24` от pve-niikn для устранения конфликта. По решению Олега — NIIKN-route в mesh нужен, оставлен (новый id после re-create: `d86ug0rl0ubs73djq120`, peer `cqrj61bl0ubs73dkhq70` pve-niikn).
Сейчас тот же `192.168.1.0/24` анонсируют два пира:
- `d86ug0rl0ubs73djq120` — peer **pve-niikn**, network_id="NIIKN"
- `d7kkgtbl0ubs73du6560` — peer **nbgw-glavtorg**, network_id="Glavtorg-LAN"
Какой именно будет выбран на каждом client-peer — определяется NetBird's внутренней логикой metric/peer-status. Для надёжной работы по конкретному объекту с конфликтующим /24 — ходи по NetBird-IP пира, не по LAN-IP (для Бенелюкса: `100.70.207.97`, для LXC 116 unifi-controller: `100.70.138.234`).
## Улики
Локально на mac: `/tmp/benelux-evidence/`
- `recon.txt` — ps/netstat/dmesg/cron на момент обнаружения
- `lockdown.txt` — лог изоляции (kill 19 сессий)
- `harden.txt` — установка ключа, чистка cron
- `new_password.txt` (chmod 600) — новый root пароль
- `recon.sh`, `lockdown.sh`, `harden.sh`, `finalize.sh` — исполненные скрипты
## Open questions для Олега
- [ ] Audit паролей на других хостах (особенно публично-доступных) — выше
- [ ] Когда планируем wipe+sysupgrade Бенелюкса?
- [ ] Сообщить ли Александру (клиент в КП Бенелюкс) — на объекте только podkop для обхода блокировок, бизнес-сервисов нет, утечки клиентских данных не было; вопрос косметический
- [ ] Кто сделал WAN-SSH публичным изначально? (по умолчанию OpenWrt блокирует ssh на wan)

View File

@@ -0,0 +1,51 @@
---
date: 2026-05-23
project: glavtorg
tags: [glavtorg, security, windows, vmware, autologon]
---
# Glavtorg: отключение AutoLogon без потери автозапуска VM
## Контекст
Клиент Ярослав (Главторг) пожаловался: после ребута сервера (Win 2012 R2, 100.70.195.47) пользователь сам автоматически логинится в console-сессию, экран не блокируется. Любой у монитора/iLO/KVM получает залогиненный рабочий стол админа сервера 1С.
AutoLogon был включён 2026-04-25 ради автостарта двух VMware Workstation VM (`nbgw` 192.168.1.50 — NetBird gateway, `Ubuntu` 192.168.1.51 — Amnezia VPN), которые поднимаются скриптом `C:\Scripts\start-vms.bat` через Task Scheduler `VMware AutoStart`.
## Проверка: нужен ли AutoLogon для VM?
На рабочем сервере:
- `vmrun list` — 2 VM running
- `Get-Process vmware-vmx` показал **SessionId=0** (System session, не интерактивная сессия Ярослава)
- `schtasks /Query /TN 'VMware AutoStart' /V`: `LogonType=Password`, `Last Result=0`, отработало после ребута 22.05.2026 13:17
Вывод: Task Scheduler стартует `vmrun ... nogui` со stored password, VM процессы живут в Session 0 как обычные сервисные процессы — интерактивная сессия для них **не требуется**.
## Решение
Снять AutoLogon полностью, оставив Task Scheduler как единственный механизм автозапуска VM.
### Что изменено в HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
| Параметр | Было | Стало |
|---|---|---|
| AutoAdminLogon | 1 | 0 |
| ForceAutoLogon | 1 | 0 |
| AutoLogonCount | 999988 | (удалён) |
| DefaultPassword | (отсутствует, был только LSA secret) | — |
| DefaultUserName | Ярослав | Ярослав (оставлен — preselect на logon screen) |
| DefaultDomainName | glavtorg | glavtorg (оставлен) |
LSA secret `HKLM\SECURITY\Policy\Secrets\DefaultPassword` (создан Sysinternals Autologon) физически остаётся, но без флага `AutoAdminLogon=1` Winlogon его не читает. Полностью стереть можно через `Autologon64.exe /accepteula /delete` (бинарник не установлен — при необходимости скачать).
## Бэкап и rollback
- Бэкап Winlogon ветки: `C:\Scripts\winlogon-backup-20260523-125613.reg`
- Rollback-скрипт: `C:\Scripts\rollback-autologon.cmd` — импортирует бэкап + инструкция как вернуть пароль через Autologon64.exe если потребуется
- Для срочного возврата AutoLogon Ярославу достаточно запустить rollback-скрипт от админа и (если LSA secret был стёрт когда-нибудь позже) скачать Autologon с https://learn.microsoft.com/sysinternals/downloads/autologon
## Проверка после следующего ребута
1. После ребута сервер должен встать на logon screen (без автоматического входа)
2. `vmrun list` от Ярослава после RDP-логина должен показать обе VM running
3. `schtasks /Query /TN 'VMware AutoStart' /V /FO LIST``Last Result: 0`
4. NetBird-маршрутизация в 192.168.1.0/24 работает (доступ к Юрию Витальевичу/другим клиентам через nbgw)
5. Если что-то из этого не сработало — запустить `C:\Scripts\rollback-autologon.cmd`, ребутнуться, разбираться отдельно
## Связанные
- [[projects/glavtorg/README]]
- [[feedback_vmware_workstation_session]] — общая память про VMware Workstation и сессии (logoff роняет VM в interactive session; в нашем случае VM в Session 0, так что это про другой сценарий)

View File

@@ -0,0 +1,101 @@
---
date: 2026-05-26
type: decision
tags: [decision, bot, openclaw, omniroute]
---
# Антошка на Opus 4.7: Kiro/GH-free варианты нерабочие, primary остаётся cc/ (Max-подписка)
**Дата:** 2026-05-26
**Статус:** Реализовано (конфиг откатан на cc/claude-opus-4-7)
## Контекст
- LXC 137 (бывшая "Максимка", переименовано в **"Антошка"** 2026-05-26)
- Цель: перевести Антошку с Sonnet 4.5/Opus 4.6 на **Opus 4.7** как primary
- Гипотеза: использовать бесплатный `kr/claude-opus-4.7` через Kiro (AWS Free Tier), как уже работает для `kr/claude-sonnet-4.5`. Если квоты не хватит — добавить ещё Kiro-учёток.
## Что попробовал
### 1. Переключил primary на `omniroute/kr/claude-opus-4.7`
Добавил модель в `models.providers.omniroute.models` (её там не было — только `cc/claude-opus-4-7`):
```bash
openclaw config set agents.defaults.model.primary omniroute/kr/claude-opus-4.7
openclaw config set agents.defaults.model.fallbacks \
'["omniroute/cc/claude-opus-4-7","omniroute/cc/claude-sonnet-4-6","omniroute/cx/gpt-5.4"]'
```
Hot reload применился, gateway: `agent model: omniroute/kr/claude-opus-4.7`.
### 2. Результат — каскадный фейл всех Anthropic-каналов
Первый же реальный запрос (Telegram):
```
14:02:18 kr/claude-opus-4.7 → 402 You have reached the limit (×4 раза по разным учёткам)
14:04:21 kr/claude-opus-4.7 → 400 No credentials for provider: kiro
14:04:24 cc/claude-opus-4-7 → 400 You're out of extra usage (Max-подписка выгорела)
14:04:26 cc/claude-sonnet-4-6 → 400 You're out of extra usage
14:04:50 cx/gpt-5.4 → 200 success (Codex выручил)
```
### 3. Состояние Kiro в OmniRoute (LXC 132, storage.sqlite)
```
provider_connections WHERE provider='kiro':
5 connections: 4 × credits_exhausted + 1 × banned
```
Все Opus 4.7 вызовы через Kiro **сегодня и исторически** = 402. Ни одного 200.
### 4. Проверил остальные провайдеры на Opus 4.7
| Провайдер | Opus 4.7 |
|---|---|
| `cc/` (Max OAuth) | **200 OK** — работает (после rolling-окна) |
| `kr/` (Kiro AWS) | 402, кредиты выгорели на всех учётках |
| `gh/` (GitHub Models) | 400 — модель есть в `available`, но адаптер OmniRoute шлёт под `integrator="vscode-chat"` который её не имеет |
| `kimi-coding/` | 402 billing |
| `amazon-q/` | 500 |
| `antigravity/` | timeout |
## Ключевое открытие
**Kiro Opus 4.7 — не Free Tier.** На Sonnet 4.5 учётка живёт месяц (~250-300M токенов), на Opus 4.7 — выгорает с первых запросов. Это **отдельная квота**, и она либо нулевая, либо настолько мелкая что неотличима от нуля.
Добавление новых Kiro-учёток **не решает** проблему — каждая новая учётка выгорит на Opus так же быстро.
## Решение
**Primary возвращён на `cc/claude-opus-4-7` (Max-подписка):**
```json
"agents.defaults.model.primary": "omniroute/cc/claude-opus-4-7"
"agents.defaults.model.fallbacks": [
"omniroute/cc/claude-sonnet-4-6",
"omniroute/kr/claude-sonnet-4.5",
"omniroute/cx/gpt-5.4"
]
```
Логика fallback chain:
1. Max-подписка Opus — основной
2. Max-подписка Sonnet — если Opus rolling-окно временно выгорело
3. **Kiro Sonnet** — бесплатный месячный канал, страховка пока Max не восстановится
4. Codex — последний резерв (rolling 3h, ~120 успехов/день суммарно)
## Что НЕ делать впредь
1. **Не пытаться использовать `kr/claude-opus-4.x` как primary** — квота меньше дневной нагрузки бота (~450 вызовов/день), сколько учёток ни добавляй.
2. **Не доверять `gh/claude-opus-*` через OmniRoute** — модель в `available list`, но адаптер несовместим (integrator-ID). Может починят апстрим, тогда переоценить.
3. **Перед сменой primary** — проверять `provider_connections.test_status` и делать одиночный `curl` тест через `http://10.0.0.179:20128/v1/chat/completions` с `model="<новая>"`. Сегодня я этого не сделал → пользователь увидел "Something went wrong" в Telegram.
## Файлы
- Бэкап: `/root/.openclaw/openclaw.json.bak-opus47-2026-05-26-*`
- Текущий конфиг: `/root/.openclaw/openclaw.json` (Antoshka primary = `cc/claude-opus-4-7`)
## См. также
- [[projects/dttb/openclaw|openclaw.md]] — справочник Антошки (бывш. Максимка)
- [[projects/clawdbot-bots|clawdbot-bots.md]] — список всех ботов
- [[decisions/2026-04-17-code-server-upgrade]] — предыдущая работа по OmniRoute/Kiro

Some files were not shown because too many files have changed in this diff Show More