[2026-09-20] eagle: family/how-to/kraken-access.md personal/tech/xray-reverse-tunnel-kraken-truenas.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-20 10:54:15 +06:00
1 parent 1531aa9692
commit 9b697962b1
2 files changed
+76 -6

No files matched your search

+52 -4
View File
@@ -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-<date>/`.
> 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)
@@ -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).
>