diff --git a/family/how-to/kraken-access.md b/family/how-to/kraken-access.md index 0701724a..eda9f793 100644 --- a/family/how-to/kraken-access.md +++ b/family/how-to/kraken-access.md @@ -1,7 +1,53 @@ # Kraken — Внешний доступ +> # ✅ 2026-09-20 — НАЙДЕНА ИСТИННАЯ ПРИЧИНА (2026-09-15 поломки): ГОНКА Docker ↔ монтирование USB-диска +> +> **Симптом 2026-09-15:** одновременно упали (1) reverse-туннель Kraken→TrueNAS (`kraken-user`) и (2) cloudflared SSH-туннель `ssh-kraken.qentra.top`. Обе поломки — **одна причина**, не две. +> +> ### Таймлайн последнего boot (Kraken) +> | Событие | Время | +> |---|---| +> | Boot | Sep 15 **17:29:17** | +> | Ядро видит `sda1` (USB HDD) | +130 с → **17:31:27** | +> | **`dockerd` стартовал** (PID 1324) | **17:31:01** ← на **26 с раньше** диска | +> | Диск смонтирован | **17:31:27** | +> +> **Механизм:** `/etc/docker/daemon.json` → `data-root` = `/srv/dev-disk-by-uuid-49e8f586-.../docker-data` (симлинк на `6194539b-...`). `docker.service` **не имеет `RequiresMountsFor=`** → не ждёт монтирования. dockerd на 17:31:01 открыл путь до появления диска → увидел пусто → загрузил **0 контейнеров**; через 26 с диск смонтировался поверх точки, но daemon уже держал пустое состояние в памяти. Перечитывания нет. +> +> ### Что НЕ потеряно (проверено живьём) +> - `docker-data/containers/` = **4.7G, 35 контейнеров целы** (cloudflared, xray-reverse-bridge, jellyfin, sonarr, radarr, prowlarr, transmission, homeassistant, hermes-kraken, portainer, rclone, watchtower, flaresolverr, timemachine). +> - Образы (21), 32 volume — на месте. Диск `sda1` 1.8T смонтирован, 242G свободно. +> - `docker info` при этом рапортует `Containers=0` — **не верь ему, metadata на диске цела**. +> +> ### Побочные дефекты, найденные при разборе +> 1. **`/etc/fstab` содержит ДУБЛЬ** строки для `6194539b`: OMV-блок + ручная строка `UUID=6194539b-...` → systemd: `Duplicate entry in '/etc/fstab'?`. +> 2. **`docker.service`: `RequiresMountsFor=` пусто** — корень гонки. Drop-in нужен, чтобы dockerd ждал диск. +> 3. **RestartPolicy у всех контейнеров = `null`** (стартовали вручную `docker run` без `--restart`) → daemon-restart **не поднимет их автоматически**, нужен явный `docker start`. +> +> ### Команды диагностики (воспроизводимые) +> ```bash +> ssh kraken 'docker ps -a --format "{{.Names}}\t{{.Status}}"' # пусто → daemon state пуст +> ssh kraken 'ps -o pid,lstart,cmd -p $(pgrep -x dockerd)' # реальное время старта dockerd +> ssh kraken 'systemctl show docker -p RequiresMountsFor' # пусто = нет зависимости от mount +> ssh kraken 'uptime -s; findmnt /srv/dev-disk-by-uuid-6194539b-...' # когда boot / когда диск +> ssh kraken 'sudo ls /srv/dev-disk-by-uuid-6194539b-.../docker-data/containers | wc -l' # 35 = целы +> ``` +> Питфолл: `systemctl show docker -p ExecMainStartTimestamp` дал stale `15:18:36`; **истинное время старта — `ps -o lstart`** = 17:31:01. +> +> ### План восстановления (согласован 2026-09-20) +> 1. Backup: `/etc/fstab`, `/etc/docker/daemon.json`, `/home/kraken/xray-reverse/` → `/home/kraken/backups/docker-recovery-/`. +> 2. **`sudo systemctl restart docker`** — диск уже смонтирован → daemon прочитает все 35 контейнеров. +> 3. `docker start` по списку (RestartPolicy=null, авто-старта не будет). +> 4. Правка боевого: убрать дубль fstab + drop-in `RequiresMountsFor=/srv/dev-disk-by-uuid-6194539b-...` — **только с апрувом Alex**. Порядок: коммит ДО → правка → заливка → проверка Alex → коммит ПОСЛЕ. +> 5. Проверка: `docker ps` все Up; reverse-канал `udp:reverse:0`; cloudflared tunnel. +> 6. Версии Xray на бридже: оставить `26.4.25` + `network_mode: host` (проверенный фикс 2026-09-02) — открытый вопрос к Alex. +> +> **Статус: диагноз подтверждён, план согласуется. Восстановление НЕ начато.** + > # 🔴 2026-09-15 — KRAKEN НЕДОСТУПЕН ПО ВСЕМ ПУТЯМ (проверено с Mac) > +> ⚠️ **ВНИМАНИЕ (обновлено 2026-09-20):** вывод этой секции был **ЧАСТИЧНО НЕВЕРЕН**. «Kraken недоступен» относилось к внешним путям (cloudflared `ssh-kraken.qentra.top`, WG `10.99.1.2`) — оба были down не из-за выключенной машины Kraken, а из-за **гонки docker↔mount** (см. секцию выше): `cloudflared`-контейнер просто не загрузился daemon'ом. По **LAN Kraken был жив всю дорогу** (`192.168.1.15`). Урок: «недоступен снаружи» ≠ «машина мертва» — проверять LAN и состояние docker daemon, прежде чем звонить провайдеру. +> > **Симптом:** перестал работать клиент `kraken-user` в 3x-ui на TrueNAS. При разборе выяснилось — причина **не в БД и не в конфиге**, а в том, что **сам хост Kraken недоступен**. > > | Путь | Команда | Результат | @@ -59,13 +105,15 @@ EP=3 # endpoint ID на Кракене = 3, не 1! - Outbound VLESS+REALITY TCP → `mallexxx.duckdns.org:12346` (TrueNAS через OpenWrt DNAT), reverse tag `reverse-in`, egress freedom. - ⛔ **End-to-end payload НЕ работает** (bridge принимает reverse-канал, но данные от portal до bridge не доходят). Детали: [[tech/xray-reverse-tunnel-kraken-truenas]]. -## Docker контейнеры (исторически было 2026-06-24; на 2026-09-01 НЕ восстановлены) +## Docker контейнеры (обновлено 2026-09-20) + +⚠️ **На 2026-09-20 контейнеры ЦЕЛЫ на диске (35 шт., metadata 4.7G), но daemon их не видит** из-за гонки docker↔mount (см. шапку заметки). `docker ps -a` пусто, `docker info` = 0. Не паниковать — metadata на месте, лечится `systemctl restart docker`. | Имя | Заметки | |-----|---------| -| xray-reverse-bridge | развёрнут 2026-09-01 | -| cloudflared | ✅ UP (2026-09-04), remote-managed по TUNNEL_TOKEN — пересоздан после сбоя | -| flaresolverr / hermes-kraken / homeassistant / jellyfin / portainer / prowlarr / radarr / rclone / sonarr / transmission / watchtower | образы есть, контейнеры потеряны — пересоздать при необходимости | +| xray-reverse-bridge | развёрнут 2026-09-01; образ `teddysun/xray:26.4.25`, `network_mode: host` (фикс 2026-09-02). Metadata цела ✅ | +| cloudflared | образ `cloudflare/cloudflared:latest`, `network_mode: host`, remote-managed по TUNNEL_TOKEN. Metadata цела ✅ | +| flaresolverr / hermes-kraken / homeassistant / jellyfin / portainer / prowlarr / radarr / rclone / sonarr / transmission / watchtower / timemachine | metadata цела ✅ (все 35 в `docker-data/containers/`). **RestartPolicy=null → daemon-restart их не поднимет, нужен `docker start`** | ## Cloudflared туннель — публичные маршруты (состояние на 2026-09-04) diff --git a/personal/tech/xray-reverse-tunnel-kraken-truenas.md b/personal/tech/xray-reverse-tunnel-kraken-truenas.md index da69142d..20cd4c09 100644 --- a/personal/tech/xray-reverse-tunnel-kraken-truenas.md +++ b/personal/tech/xray-reverse-tunnel-kraken-truenas.md @@ -1,7 +1,7 @@ --- title: Xray Reverse Tunnel — Kraken ↔ TrueNAS created: '2026-09-01' -updated: '2026-09-15' +updated: '2026-09-20' type: tech namespace: personal tags: @@ -27,7 +27,29 @@ verified_fix_2026_09_02: >- # Xray Reverse Tunnel — Kraken ↔ TrueNAS -> ## 🔴 2026-09-15 — ТУННЕЛЬ НЕ РАБОТАЕТ: KRAKEN НЕДОСТУПЕН (не конфиг) +> ## ✅ 2026-09-20 — КОРЕНЬ 2026-09-15 НАЙДЕН: ГОНКА Docker ↔ mount, НЕ конфиг и НЕ версия +> +> **Симптом:** `kraken-user` не выходил (portal на TrueNAS жив, но от бриджа — ноль звонков на `12346`). +> +> **Истинная причина (не имеет отношения к Xray/REALITY/версиям):** `dockerd` на Kraken стартовал на **26 с раньше**, чем смонтировался USB-HDD с `data-root`, поэтому загрузил **0 контейнеров** — включая `xray-reverse-bridge`. Бриджа просто не было запущено → канал не поднимался → `reverse-out` не создавался → `curl` через SOCKS пусто. +> +> | Событие | Время | +> |---|---| +> | Boot Kraken | Sep 15 **17:29:17** | +> | dockerd (PID 1324) старт | **17:31:01** | +> | Диск `sda1` смонтирован | **17:31:27** | +> +> **Доказательства целостности:** `docker-data/containers/` = 4.7G, **35 контейнеров целы**, включая `xray-reverse-bridge` и `cloudflared`; образ `teddysun/xray:26.4.25` на месте. `docker info` врёт `Containers=0`. +> +> **Дефекты конфига, породившие гонку:** `docker.service` без `RequiresMountsFor=`; дубль строки `6194539b` в `/etc/fstab`. +> +> **Что это НЕ:** это **не** регрессия #6242, **не** REALITY mismatch, **не** `network_mode` — все прежние гипотезы по 2026-09-15 снимаются. Проверенный фикс 2026-09-02 (`26.4.25` + `network_mode: host`) остаётся в силе и не трогается. +> +> **План:** `systemctl restart docker` (диск уже смонтирован) + `docker start` по списку (RestartPolicy=null) + drop-in `RequiresMountsFor` + чистка fstab. Полный план и команды — [[family/how-to/kraken-access]], секция «2026-09-20». **Статус: восстановление НЕ начато, ждёт апрува Alex.** +> +> **Урок диагностики:** если portal пишет `non existing outTag: reverse-out` и «ноль соединений на 12346» — **сначала проверять, жив ли контейнер `xray-reverse-bridge` на Kraken** (`docker ps`), а не конфиг. 2026-09-15 этот шаг был пропущен: записали «Kraken недоступен → ждать», хотя машина была жива по LAN (`192.168.1.15`), а не запущен был только docker-контейнер бриджа. + +> ## 🔴 2026-09-15 — ТУННЕЛЬ НЕ РАБОТАЕТ: KRAKEN НЕДОСТУПЕН (не конфиг) [СУПЕРСИДЕНО 2026-09-20 — см. выше] > > **Клиент `kraken-user` перестал выходить в интернет.** Причина — **не** конфиг портала и **не** 3x-ui: **хост Kraken недоступен по всем путям** (SSH через `ssh-kraken.qentra.top` → `timed out during banner exchange`; `10.99.1.2:22` → `Operation timed out`; DNS `kraken` → NXDOMAIN). >