diff --git a/family/how-to/kraken-access.md b/family/how-to/kraken-access.md index 1db6e3af..0701724a 100644 --- a/family/how-to/kraken-access.md +++ b/family/how-to/kraken-access.md @@ -1,6 +1,29 @@ # Kraken — Внешний доступ -> Обновлено: 2026-09-04 +> # 🔴 2026-09-15 — KRAKEN НЕДОСТУПЕН ПО ВСЕМ ПУТЯМ (проверено с Mac) +> +> **Симптом:** перестал работать клиент `kraken-user` в 3x-ui на TrueNAS. При разборе выяснилось — причина **не в БД и не в конфиге**, а в том, что **сам хост Kraken недоступен**. +> +> | Путь | Команда | Результат | +> |---|---|---| +> | Cloudflare SSH | `ssh ssh-kraken.qentra.top` | ❌ `Connection timed out during banner exchange` | +> | WireGuard Direct | `ssh kraken@10.99.1.2:22` | ❌ `Operation timed out` | +> | DNS | `host kraken` | ❌ `NXDOMAIN` (в `/etc/hosts` записи нет) | +> +> **Состояние TrueNAS-стороны (жива):** `xray-reverse-portal` Up 13 дней, порты `12345` (SOCKS) и `12346` (interconn) в LISTEN, конфиг `/mnt/RED_2TB/docker/reverse-portal/config.json` цел. +> +> **Диагностика, доказывающая «бридж молчит»:** +> ```bash +> docker exec xray-reverse-portal netstat -an | grep 12346 # пусто = от Kraken никто не звонит +> curl -s --max-time 20 --socks5-hostname 127.0.0.1:12345 https://api.ipify.org # пусто (ждём 92.62.70.41) +> ``` +> Логи портала при этом содержат `app/dispatcher: non existing outTag: reverse-out` — **это не битый конфиг**, а ожидаемое следствие: `reverse-out` создаётся Xray'ем автоматически только пока бридж подключён (объявлен в `inbounds[interconn].clients[0].reverse.tag`, не в `.outbounds`). +> +> **Вывод:** нужно проверять Kraken со стороны панели хостинга/консоли провайдера — машина выключена либо сетевая недоступность. Решение Alex: **«подождём, может оживет»**. +> +> ⚠️ **Урок:** перед тем как искать причину в конфиге TrueNAS, проверять доступность самого Kraken. Полдня ушло на разбор 3x-ui, который к этой поломке отношения не имел. +> +> **Обновлено: 2026-09-04** > Updated: 2026-09-01 23:00 — диск/докер кракена восстановились после перезагрузки. diff --git a/family/how-to/truenas-infrastructure.md b/family/how-to/truenas-infrastructure.md index eb820c10..b745e1d1 100644 --- a/family/how-to/truenas-infrastructure.md +++ b/family/how-to/truenas-infrastructure.md @@ -13,7 +13,50 @@ > - **⚠️ «Камера на TrueNAS» — ИСПРАВЛЕНО (2026-09-14, вечер-10) + ✅ РЕШЕНО ОКОНЧАТЕЛЬНО (вечер-13):** прежняя запись «камера = USB-вебка на t610, upstream `cam.*:8090` к камере отношения не имеет» — **❌ НЕВЕРНА**. Поиск в `Caddyfile.bak` доказал: **`cam.mallexxx.duckdns.org → 192.168.2.197:8090` — ЭТО И БЫЛА камера** на TrueNAS: отдельный HTTP-MJPEG-сервис (`ustreamer`/`mjpg-streamer`, порт 8090 — канон для «USB-вебка → MJPEG»). **Контейнер УТРАЧЕН** при пересоздании пула (локальный образ не пережил `.ix-apps`; из живого Caddyfile строка удалена — `cam.*` больше нет). **✅ ФИНАЛ (вечер-13):** вебка `046d:0825` физически в **t610**, работает через **аддон `a889bffc_go2rtc-hardware`** → RTSP H.264 `rtsp://192.168.2.176:8554/usb_camera_h264` → **Generic Camera** `camera.192_168_2_176` (зона `kotelnaia`, `unique_id`, **WebRTC работает**, поворот `#rotate=90`). Схема `camera: platform: ffmpeg` в Core — **❌ ОТВЕРГНУТА** (`Resource busy` + нет `unique_id`). Подробно — [[family/how-to/home-automation]] §5-кватер-И-3/И-6. > - **Не перенесено с TrueNAS:** ~~погашение TrueNAS-стека (Этап 4 п.6 — заблокировано: Caddy на TrueNAS держит точку входа)~~ → **✅ ЗАКРЫТО 2026-09-14 (ночь): стек автоматизации ПОГАШЕН, Caddy остался на TrueNAS (так и задумано).** См. §5-кватер-Л в [[family/how-to/home-automation]]. -> Обновлено: 2026-09-15 (**ВЕЧЕР — `vless-space` СОЗДАН И ЗАЛИТ, `xui_v7.db` применена успешно.** Проверено фактом: `in-10095-tcp` clients = `user1,kraken-user,vless-space` одной строкой (без дубля, **без порта 10096**), outbounds 13, подписка `/sub/24df9391356b48ff` **HTTP 200** — QR появился впервые за 7 попыток, `kraken-user` и `user1` **не пострадали**. 🔴 **ЭТО ОПРОВЕРГАЕТ прежний хард-вывод «3x-ui нельзя править снаружи».** Настоящий барьер был один — **инбаунд внутри `xrayTemplateConfig`**; как только в шаблоне остаётся **только `api`**, SQLite-путь работает штатно. ⚠️ **Остаточная проблема (не в клиенте):** egress `vless-space` **не идёт** — `app/dispatcher: non existing outTag: space-balancer`, туннель рвётся `websocket: close 1000`. 🔴🔴 **КОРЕНЬ НАЙДЕН И ДОКАЗАН A/B: `leastPing` НЕ РАБОТАЕТ в Xray 26.x** — балансировщик не регистрируется; рабочая стратегия — **`leastLoad`** (с `observatory`): лог даёт `app/observatory: the outbound space-01 is alive:0.249334909` + `taking detour [space-02]`. Собран `xui_v7_load.db` (md5 `855ff3ac2d2319b17b20fe5c788ddc59`, `leastPing`→`leastLoad`, integrity `ok`) — **залит не был**, это следующий шаг. ⚠️ **`xray -test` печатает `Configuration OK` и для битого `leastPing`** — семантику маршрутизации ловит только рантайм-лог. **Команды для Alex:** плоские однострочники, **без `ssh … '…'`-обёртки**, **без `sleep N`**, **без кириллицы в bash**. **✅ Compose-файл `xray-admin` ВОССТАНОВЛЕН** из `docker inspect`. Полный разбор — [[personal/tech/vless-space-subscription-egress]] / [[personal/tech/xray-outbound-subscription-3xui]]. +> ## 🏁 2026-09-15 22:30 — `vless-space` ПОЛНОСТЬЮ РАБОТАЕТ. EGRESS ИДЁТ ЧЕРЕЗ ПОДПИСКУ. +> +> **Проверено фактом (Xray-клиент в докере на NAS, `xui_v9.db`):** IP через `vless-space` = `195.72.61.192` (**Стокгольм, SE**) / `104.28.225.223` ≠ `90.189.160.148` (IP TrueNAS) → трафик идёт через серверы подписки `profilegrid`. 3/3 запроса подряд стабильно. +> +> | Что | Состояние | +> |---|---| +> | `in-10095-tcp` clients | ✅ `user1,kraken-user,vless-space` — один инбаунд, порта 10096 нет | +> | outbounds | ✅ 13 + balancer `space-balancer` (`leastLoad`) | +> | подписка `/sub/24df9391356b48ff` | ✅ HTTP 200 (QR есть) | +> | `user1`, `kraken-user` | ✅ целы, не тронуты | +> +> ### 🔑 ТРИ ПИТФОЛЛА БАЛАНСИРОВЩИКА — все три обязательны +> +> Ошибка `app/dispatcher: non existing outTag: space-balancer` вызывалась **тремя независимыми причинами** (каждая воспроизведена и снята отдельно): +> +> | # | Причина | Фикс | +> |---|---|---| +> | 1 | правило ссылалось через `outboundTag` | → **`balancerTag`** | +> | 2 | `strategy: leastPing` (в Xray 26.x балансировщик не создаётся) | → **`leastLoad`** | +> | 3 | в `observatory` отсутствовал `sampling` | → **`"sampling": 3`** | +> +> ```jsonc +> "routing": { +> "rules": [ ..., { "type":"field","user":["vless-space"], +> "balancerTag":"space-balancer","ruleTag":"vless-space-via-subscription" } ], +> "balancers": [ { "tag":"space-balancer","selector":["space-"],"strategy":{"type":"leastLoad"} } ] +> }, +> "observatory": { "subjectSelector":["space-"], "probeUrl":"https://www.google.com/generate_204", +> "probeInterval":"30s", "enableConcurrency":true, "sampling":3 } +> ``` +> +> ⚠️ **`xray -test` печатает `Configuration OK` при всех трёх ошибках** — семантику маршрутизации ловит только рантайм-лог + живой запрос через клиент. +> +> **Артефакты:** `~/tmp-xray-space/xui_v9.db` (md5 `8113add5b1d43a54f54253324eed2f1c`) — залита. Бэкапы `/mnt/RED_2TB/docker/backups/xray-admin-v{9,8,7load,7}-*` + исходный `xray-admin-before-vless-space-20260915-012057`. +> +> 🔴 **Прежний хард-вывод «3x-ui нельзя править снаружи» — ОКОНЧАТЕЛЬНО ОПРОВЕРГНУТ.** SQLite-путь работает при двух условиях: (1) в `xrayTemplateConfig` нет инбаунда (только `api`), (2) БД правится локально на Mac и кладётся файлом с `rm -f *.db-wal *.db-shm` + `chown 950:root`. +> +> **⚠️ ОТДЕЛЬНАЯ НЕЗАКРЫТАЯ ПРОБЛЕМА — `kraken-user`:** не работает, потому что **сервер Kraken недоступен** (не связано с БД). Проверено 2026-09-15: `ssh-kraken.qentra.top` → `Connection timed out during banner exchange`; `kraken@10.99.1.2:22` → `Operation timed out`; DNS `kraken` → NXDOMAIN. Портал на TrueNAS жив (`xray-reverse-portal` Up, `12345`/`12346` LISTEN), но соединений от бриджа **ноль** → ждём восстановления Kraken (решение Alex «подождём, может оживет»). +> +> **Остаточная задача (не начата):** авто-обновление списка серверов подписки. Outbound'ы `space-01…10` **статически вбиты в шаблон** — при смене списка у `profilegrid` всё сломается молча. Варианты: (A) cron-скрипт на NAS (sub → пересборка шаблона → рестарт), (B) штатная таблица `outbound_subscriptions` 3x-ui через панель. +> +> **Правила взаимодействия (Alex, 2026-09-15):** команды — плоские однострочники, **без `ssh … '…'`-обёртки**, **без `sleep N`**, **без кириллицы в bash**, без `execute_code`/python. Правку SQLite делать **локально на Mac**, потом заливать готовый файл. +> +> **✅ Compose-файл `xray-admin` ВОССТАНОВЛЕН** из `docker inspect` (пережил все откаты). Полный разбор, процедура повторения и таблица диагностики — [[personal/tech/vless-space-subscription-egress]] / [[personal/tech/xray-outbound-subscription-3xui]]. > > Обновлено (ранее): 2026-09-15 (**ФИНАЛ попытки 7: `vless-space` НЕ СОЗДАН, БД ОТКАЧЕНА Alex'ом, система в исходном состоянии** — проверено: контейнер Up, панель/`vpn.mallexxx`/обе подписки HTTP 200, клиенты `user1`+`kraken-user`, outbound'ов 3). **Главный вывод: 3x-ui НЕЛЬЗЯ править снаружи работающего контейнера.** Семь подходов (SQL в копию БД, прямой SQL, `auth`/`reverse`, `security`, `password`, инбаунд-в-шаблоне, шаблон-без-инбаунда) — все отбились, при том что БД каждый раз была полностью корректна (`integrity ok`, типы совпадают, шаблон валиден, живой Xray давал `Configuration OK`). Работает только `settings.xrayTemplateConfig` (outbound'ы/правила/балансировщики — **13 outbound + `space-balancer` leastPing применились**), **клиенты инбаунда — только через панель/API-токен**. 🔴 **ХАРД-ВЫВОД: не тратить попытки на правку клиентов 3x-ui через SQLite — сразу просить доступ к панели.** 🔴 **НОВЫЕ ПИТФОЛЛЫ:** (1) **правку SQLite делать ЛОКАЛЬНО на Mac** (`scp` базы → `sqlite3`/`jq`/`integrity_check` → валидация живым `xray -test` → заливка готового файла) — установка Alex, гонка кавычек по SSH дважды ломала команды; (2) команды для Alex давать **без `ssh truenas_admin@… '…'`-обёртки** и **без `sleep N`** (Alex, 2026-09-15: «ты заебал свой sleep 8 пихать»); (3) 3x-ui держит БД открытой — при внешней правке `x-ui.db` показывает старую дату; (4) 🔴 **инбаунд ВНУТРИ `xrayTemplateConfig` ломает своих клиентов** — 3x-ui мёржит шаблон с таблицей `inbounds`, шаблонная версия того же тега перебивает панельную (так отвалился `kraken-user`); в шаблоне — только outbound'ы/правила/балансировщик. **✅ Compose-файл `xray-admin` ВОССТАНОВЛЕН** из `docker inspect` (это единственное, что пережило откат). Полный разбор — [[personal/tech/vless-space-subscription-egress]]. Ранее 2026-09-15 (ночь-4: попытка 2 — SQL применён, БД корректна, но Xray клиента не видит; ложный «корень» `auth`/`reverse`=`NULL` — **опровергнут**; ранее ночь-3: попытка 1 провалилась с `database disk image is malformed` — SQL применялся к копии `.db` без `-wal`/`-shm`. 🔴 **ПИТФОЛЛ:** для WAL-базы нельзя копировать только `.db`. Ранее ночь-2: артефакты собраны и проверены в песочнице. Ранее 2026-09-15 (вечер: черновой план `vless-space`, подписка проверена; subscription-канал 3x-ui: ссылки `/sub/` работают, base64 vless-список). Ранее: 2026-09-02 (vpn.mallexxx:443 = РАБОЧИЙ Xray... [truncated] — провенено: контейнер Up, панель/`vpn.mallexxx`/обе подписки HTTP 200, клиенты `user1`+`kraken-user`, outbound'ов 3). **Главный вывод: 3x-ui НЕЛЬЗЯ править снаружи работающего контейнера.** Пять подходов (SQL в копию БД, прямой SQL, `auth`/`reverse`, `security`, `password`) — все отбились, при том что БД каждый раз была полностью корректна (`integrity ok`, типы совпадают, шаблон валиден, живой Xray давал `Configuration OK`). Работает только `settings.xrayTemplateConfig` (outbound'ы/правила/балансировщики — **13 outbound + `space-balancer` leastPing применились**), **клиенты инбаунда — только через панель/API-токен**. 🔴 **ХАРД-ВЫВОД: не тратить попытки на правку клиентов 3x-ui через SQLite — сразу просить доступ к панели.** 🔴 **НОВЫЕ ПИТФОЛЛЫ:** (1) **правку SQLite делать ЛОКАЛЬНО на Mac** (`scp` базы → `sqlite3`/`jq`/`integrity_check` → валидация живым `xray -test` → заливка готового файла) — установка Alex, гонка кавычек по SSH дважды ломала команды; (2) команды для Alex давать **без `ssh truenas_admin@… '…'`-обёртки**; (3) 3x-ui держит БД открытой — при внешней правке `x-ui.db` показывает старую дату. **✅ Compose-файл `xray-admin` ВОССТАНОВЛЕН** из `docker inspect` (это единственное, что пережило откат). Полный разбор — [[personal/tech/vless-space-subscription-egress]]. Ранее 2026-09-15 (ночь-4: попытка 2 — SQL применён, БД корректна, но Xray клиента не видит; ложный «корень» `auth`/`reverse`=`NULL` — **опровергнут**; ранее ночь-3: попытка 1 провалилась с `database disk image is malformed` — SQL применялся к копии `.db` без `-wal`/`-shm`. 🔴 **ПИТФОЛЛ:** для WAL-базы нельзя копировать только `.db`. Ранее ночь-2: артефакты собраны и проверены в песочнице. Ранее 2026-09-15 (вечер: черновой план `vless-space`, подписка проверена; subscription-канал 3x-ui: ссылки `/sub/` работают, base64 vless-список). Ранее: 2026-09-02 (vpn.mallexxx:443 = РАБОЧИЙ Xray-сервер, проверено end-to-end; vless-proxy outbound мёртв) diff --git a/family/plans/reverse-xray-3xui-kraken.md b/family/plans/reverse-xray-3xui-kraken.md index 518f3c3e..06a446a2 100644 --- a/family/plans/reverse-xray-3xui-kraken.md +++ b/family/plans/reverse-xray-3xui-kraken.md @@ -2,6 +2,19 @@ > Создано: 2026-09-01. Цель: проксировать трафик локальных клиентов (сеть TrueNAS 192.168.2.x) через TrueNAS → Kraken → интернет. **Kraken = точка выхода (exit node).** TrueNAS = bridge/контроллер. +> ## 🏁 2026-09-15 22:30 — СОСТОЯНИЕ ПРОЕКТА +> +> **Закрыто:** +> - ✅ Compose-файл `xray-admin` восстановлен из `docker inspect` (инцидент разобран ниже) — пережил все откаты. +> - ✅ **Третий клиент `vless-space` создан и работает** — egress через внешнюю подписку `profilegrid` (не через Kraken, не напрямую). Проверено: IP `195.72.61.192` (Стокгольм) ≠ `90.189.160.148` (TrueNAS). Полный разбор — [[personal/tech/vless-space-subscription-egress]]. +> - ✅ Установлен рабочий способ правки 3x-ui через SQLite (условия: инбаунд НЕ внутри `xrayTemplateConfig`, правка локально на Mac, `rm -f *.db-wal *.db-shm` + `chown 950:root`). +> +> **Открыто:** +> - 🔴 **`kraken-user` не работает — хост Kraken недоступен** (SSH и WG — таймауты, DNS NXDOMAIN). Портал на TrueNAS жив, соединений от бриджа ноль. Решение Alex: «подождём, может оживет». Разбор — [[family/how-to/kraken-access]], [[personal/tech/xray-reverse-tunnel-kraken-truenas]]. +> - ⏳ **Авто-обновление серверов подписки** не сделано. Outbound'ы `space-01…10` статичны в шаблоне. Варианты: (A) cron-скрипт на NAS, (B) штатная `outbound_subscriptions` 3x-ui через панель. +> - ⏳ `/sub/` отдаётся **без авторизации** — вопрос безопасности, решения нет. +> - ⏳ **`hermes-taiga` ходит через мёртвый `vless-proxy`** (`v.qentra.top` удалён). Нужна правка 5 полей в `/mnt/RED_2TB/docker/vless-proxy/config.json`. + ## 🔴 2026-09-15: COMPOSE-ФАЙЛ `xray-admin` УТРАЧЕН — восстановлен из `docker inspect` **Факт (проверено по Zulip DB, `personal/zulip router issues`, сообщение `id=86681`, 2026-09-01 05:40:08 UTC):** diff --git a/personal/tech/vless-space-subscription-egress.md b/personal/tech/vless-space-subscription-egress.md index 8fa34162..7c415e4b 100644 --- a/personal/tech/vless-space-subscription-egress.md +++ b/personal/tech/vless-space-subscription-egress.md @@ -524,6 +524,8 @@ Alex восстановил БД из бэкапа. **Проверено фак ## 🔴 ПОПЫТКА 7 (2026-09-15, финал сессии) — `xui_v7.db`: шаблон БЕЗ инбаунда. НЕ ЗАЛИТА +> ℹ️ **ИСТОРИЧЕСКИЙ РАЗДЕЛ.** `xui_v7.db` тогда действительно не залили, но **позже в тот же день** она была залита, а после неё — `xui_v7_load.db`, `xui_v8.db` и **`xui_v9.db` (рабочая, egress идёт)**. Актуальное состояние — в шапке дока. + **Что сделано:** учтён урок 6-й попытки — инбаунд из шаблона **убран**. Собрана `~/tmp-xray-space/xui_v7.db` заново **от оригинала** (`xui_copy.db`), с проверенным diff. **Состав `xui_v7.db` (проверено фактами):** @@ -650,6 +652,79 @@ docker logs probe-load 2>&1 | grep -iE 'observatory|detour|non existing' | `docker-compose.yml` | **восстановленный compose `xray-admin`** | | `inbound_settings.json` | снимок инбаунда для финального SQL | +## 🏁 MILESTONE 2026-09-15 — точная процедура, которая сработала (повторяемо) + +**Задача:** новый клиент 3x-ui с egress через внешнюю подписку, не трогая существующих. + +### Шаг 1 — вытащить и разобрать подписку +```bash +curl -s "https://go.profilegrid.net/sub/" | base64 -d > sub_decoded.txt +# дедуп по host+publicKey+shortId → 10 уникальных серверов +# парсер vless:// → xray-outbound: build_template.py +``` + +### Шаг 2 — собрать шаблон ЛОКАЛЬНО (на Mac) +```bash +cp xui_copy.db xui_vN.db # собирать ВСЕГДА от оригинала +sqlite3 xui_copy.db "SELECT value FROM settings WHERE key='xrayTemplateConfig';" > /tmp/base_orig.json +# ДОБАВИТЬ: 10 outbound space-01…10, правило, balancer, observatory +jq --slurpfile sp /tmp/space_outs.json '.outbounds += $sp[0] + | .routing.rules += [{"type":"field","user":["vless-space"], + "balancerTag":"space-balancer", # ← КЛЮЧ 1 + "ruleTag":"vless-space-via-subscription"}] + | .routing.balancers = [{"tag":"space-balancer","selector":["space-"], + "strategy":{"type":"leastLoad"}}] # ← КЛЮЧ 2 + | .observatory = {"subjectSelector":["space-"], + "probeUrl":"https://www.google.com/generate_204", + "probeInterval":"30s","enableConcurrency":true, + "sampling":3}' # ← КЛЮЧ 3 + /tmp/base_orig.json > /tmp/tpl_final.json +``` +⛔ **`.inbounds` в шаблоне НЕ трогать** — там остаётся только `api`. + +### Шаг 3 — клиент в таблицы +```bash +# inbounds.settings JSON (id=1) + clients + client_inbounds, id=5 +# client_traffics НЕ трогать — 3x-ui заполняет сам +sqlite3 xui_vN.db "PRAGMA journal_mode=DELETE;"; rm -f xui_vN.db-wal xui_vN.db-shm +sqlite3 xui_vN.db "PRAGMA integrity_check;" # → ok +``` + +### Шаг 4 — заливка +```bash +scp xui_vN.db truenas_admin@mallexxx.duckdns.org:/tmp/ +docker stop xray-admin +docker run --rm -v /mnt/RED_2TB/docker/xray-admin:/data -v /mnt/RED_2TB/docker/backups:/b -v /tmp:/src alpine sh -c 'TS=$(date +%Y%m%d-%H%M%S); mkdir -p /b/xray-admin-vN-$TS; cp -av /data/x-ui.db /b/xray-admin-vN-$TS/; rm -f /data/x-ui.db-wal /data/x-ui.db-shm; cp -av /src/xui_vN.db /data/x-ui.db; chown 950:root /data/x-ui.db; echo BACKUP=/b/xray-admin-vN-$TS' +docker start xray-admin +``` + +### Шаг 5 — проверка (все три обязательны) +```bash +docker exec xray-admin cat /app/bin/config.json | /usr/bin/jq -r '.inbounds[].settings.clients[]?.email' +docker exec xray-admin cat /app/bin/config.json | /usr/bin/jq -c '{bal:.routing.balancers[0], ob:.observatory.sampling}' +docker logs --since 1m xray-admin 2>&1 | grep -c 'non existing' # → 0 +``` +**Плюс end-to-end через Xray-клиент в докере** — `api.ipify.org` должен вернуть НЕ `90.189.160.148`. + +### Диагностика: как отличить три дефекта по симптому + +| Симптом в рантайм-логе | Причина | Фикс | +|---|---|---| +| `non existing outTag: space-balancer` | правило ссылается через `outboundTag` | → `balancerTag` | +| то же, без `alive` в логе | нет `sampling` в observatory | → `"sampling": 3` | +| то же, `alive` нет, `sampling` есть | стратегия `leastPing` | → `leastLoad` | +| клиент в `config.json` отсутствует | инбаунд лежит **внутри** шаблона | убрать из шаблона | +| `in-10095-tcp` **дважды** в `jq` | то же (шаблонная копия + панельная) | то же | +| `database disk image is malformed` | копию БД положили рядом со старыми `-wal`/`-shm` | `rm -f *.db-wal *.db-shm` до старта | + +### Откат (любой версии) +```bash +docker stop xray-admin +docker run --rm -v /mnt/RED_2TB/docker/xray-admin:/d -v /mnt/RED_2TB/docker/backups:/b alpine sh -c 'cp -av /b/xray-admin-v9-/x-ui.db /d/x-ui.db; rm -f /d/x-ui.db-wal /d/x-ui.db-shm; chown 950:root /d/x-ui.db' +docker start xray-admin +``` +**Исходное состояние (до всей работы):** `/mnt/RED_2TB/docker/backups/xray-admin-before-vless-space-20260915-012057/` + ## Связанные заметки - [[family/plans/reverse-xray-3xui-kraken]] — reverse-туннель к Кра́кену, история compose-инцидента diff --git a/personal/tech/xray-outbound-subscription-3xui.md b/personal/tech/xray-outbound-subscription-3xui.md index c61ff5fa..e5611032 100644 --- a/personal/tech/xray-outbound-subscription-3xui.md +++ b/personal/tech/xray-outbound-subscription-3xui.md @@ -1,7 +1,7 @@ --- title: Xray outbound — внешняя подписка в 3x-ui (vless-space) created: '2026-09-15' -updated: '2026-09-15' +updated: '2026-09-15T22:30:00.000Z' type: tech namespace: personal tags: @@ -12,8 +12,11 @@ tags: - truenas - reality - balancer + - leastLoad + - balancerTag + - sampling confidence: high -status: blocked-no-panel-access +status: done-egress-working related: - '[[family/how-to/truenas-infrastructure]]' - '[[personal/tech/xray-reverse-tunnel-kraken-truenas]]' @@ -23,7 +26,25 @@ related: # Xray outbound из внешней подписки в 3x-ui (`vless-space`) -> ## ✅ ОБНОВЛЕНО 2026-09-15 (вечер): БАРЬЕР ПРЕОДОЛЁН — `xui_v7.db` ЗАЛИТА УСПЕШНО +> ## 🏁 2026-09-15 22:30 — EGRESS РАБОТАЕТ. `xui_v9.db` ЗАЛИТА. +> +> IP через `vless-space` = `194.x / 104.28.225.223` (Стокгольм, SE) ≠ `90.189.160.148` (TrueNAS). Проверено Xray-клиентом в докере на NAS, 3 запроса подряд. +> +> **Формула, которая работает (все три пункта обязательны):** +> ```jsonc +> { "type":"field", "user":["vless-space"], "balancerTag":"space-balancer" } // ← balancerTag, НЕ outboundTag +> "balancers": [ { "tag":"space-balancer","selector":["space-"], +> "strategy":{"type":"leastLoad"} } ] // ← leastLoad, НЕ leastPing +> "observatory": { "subjectSelector":["space-"], ..., "sampling":3 } // ← sampling обязателен +> ``` +> +> Без `balancerTag` → `non existing outTag: space-balancer`. Без `sampling` → то же молча, `-test` = `Configuration OK`. Без `leastLoad` → то же. +> +> ⚠️ **`xray -test` НЕ ловит эти ошибки** — проверять только рантайм-логом и живым запросом. +> +> **Остаточный риск:** `strategy: leastLoad` выбран по A/B-тесту (единственный рабочий). Авто-обновление списка серверов подписки по-прежнему требует cron-скрипта — outbound'ы статические. **Отдельная задача, не начата.** + +## ✅ БАРЬЕР ПРЕОДОЛЁН — `xui_v7.db` ЗАЛИТА УСПЕШНО > > **Прежний вывод «клиентов через SQLite добавить нельзя» — ОПРОВЕРГНУТ.** `xui_v7.db` залита, и клиент появился: > diff --git a/personal/tech/xray-reverse-tunnel-kraken-truenas.md b/personal/tech/xray-reverse-tunnel-kraken-truenas.md index 5b81de98..da69142d 100644 --- a/personal/tech/xray-reverse-tunnel-kraken-truenas.md +++ b/personal/tech/xray-reverse-tunnel-kraken-truenas.md @@ -27,6 +27,26 @@ verified_fix_2026_09_02: >- # Xray Reverse Tunnel — Kraken ↔ TrueNAS +> ## 🔴 2026-09-15 — ТУННЕЛЬ НЕ РАБОТАЕТ: KRAKEN НЕДОСТУПЕН (не конфиг) +> +> **Клиент `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). +> +> | Что | Состояние | +> |---|---| +> | `xray-reverse-portal` (TrueNAS) | ✅ Up 13 дней, `12345` + `12346` в LISTEN, конфиг цел | +> | Соединения от бриджа на `12346` | ❌ **ноль** — от Kraken никто не звонит | +> | Выход через SOCKS `12345` | ❌ пусто (норма — `92.62.70.41`) | +> +> **Диагностика (короткая):** +> ```bash +> docker exec xray-reverse-portal netstat -an | grep 12346 # пусто = бридж молчит +> curl -s --max-time 20 --socks5-hostname 127.0.0.1:12345 https://api.ipify.org +> ``` +> +> ⚠️ **Не принимать за поломку:** в логах портала будет `app/dispatcher: non existing outTag: reverse-out` — это **ожидаемо**, пока бридж не подключён. Тег `reverse-out` объявлен в `inbounds[interconn].clients[0].reverse.tag` (не в `.outbounds`) и создаётся Xray'ем автоматически только при живом бридже. **Конфиг портала править НЕ нужно.** +> +> **Дальше:** проверять Kraken через панель хостинга/консоль провайдера. Решение Alex (2026-09-15): «подождём, может оживет». Статус прошлой проверки (2026-09-02) — ниже. + > ## 🔀 НЕ ПУТАТЬ с egress-подпиской (2026-09-15) > У `xray-admin` **три независимых механизма выхода**, их легко перепутать: > | Механизм | Кто выходит | Док |