[2026-09-15] eagle: family/how-to/truenas-infrastructure.md personal/tech/vless-space-subscription-egress.md personal/tech/xray-outbound-subscription-3xui.md personal/tech/xray-reverse-tunnel-kraken-truenas.md

This commit is contained in:
Alexey Martemyanov
2026-09-15 16:13:51 +06:00
parent 65f515bf51
commit 05464f090a
4 changed files with 187 additions and 12 deletions
@@ -4,9 +4,9 @@ created: 2026-09-15
updated: 2026-09-15
type: tech
namespace: personal
tags: [xray, 3x-ui, x-ui, subscription, outbound, profilegrid, truenas, space]
tags: [xray, 3x-ui, x-ui, subscription, outbound, profilegrid, truenas, space, balancer, leastLoad]
confidence: high
status: reverted-blocked-7-attempts
status: applied-clients-ok-egress-rootcaused
related:
- "[[family/plans/reverse-xray-3xui-kraken]]"
- "[[personal/tech/xray-reverse-tunnel-kraken-truenas]]"
@@ -16,7 +16,25 @@ related:
# `vless-space` — клиент 3x-ui, egress через внешнюю подписку
> ## ❌ ФИНАЛ 2026-09-15: ЗАДАЧА НЕ ВЫПОЛНЕНА. БД ОТКАЧЕНА.
> ## ✅ ОБНОВЛЕНО 2026-09-15 (вечер): `xui_v7.db` ЗАЛИТА И РАБОТАЕТ ЧАСТИЧНО
>
> | Проверка после заливки `xui_v7.db` | Результат |
> |---|---|
> | `in-10095-tcp` clients | ✅ `user1,kraken-user,vless-space` — **один инбаунд, без дубля, без порта 10096** |
> | outbounds | ✅ 13 |
> | balancer | ✅ `space-balancer` в конфиге |
> | подписка `/sub/24df9391356b48ff` | ✅ **HTTP 200** (QR теперь есть — впервые за 7 попыток) |
> | `kraken-user` | ✅ **не отвалился** (исправление урока попытки 6 сработало) |
> | `user1` | ✅ на месте |
> | **egress `vless-space`** | ❌ **НЕ работает** — `non existing outTag: space-balancer`, туннель рвётся `websocket: close 1000` |
>
> **🔴 Корень найден и доказан:** стратегия **`leastPing` не работает в Xray 26.x** — балансировщик не создаётся. Лечится заменой на **`leastLoad`**. Подробности — §«ГЛАВНАЯ НАХОДКА СЕССИИ» ниже.
>
> **Собран `xui_v7_load.db`** (md5 `855ff3ac2d2319b17b20fe5c788ddc59`, integrity `ok`) — `xui_v7.db` с `leastPing` → `leastLoad`. **Залит не был** (апрувы истекли). Это следующий шаг.
>
> **Ключевой вывод, который опроверг прежний пессимизм:** правка клиентов 3x-ui через SQLite **СРАБОТАЛА** в попытке 7 — клиент появился в конфиге и подписка отдала 200. Барьер был **только** в том, что инбаунд лежал внутри шаблона (урок 6). При исправленной сборке SQLite-путь рабочий.
> ## ❌ ПРЕДЫДУЩИЙ ФИНАЛ 2026-09-15: ЗАДАЧА НЕ ВЫПОЛНЕНА. БД ОТКАЧЕНА.
>
> **Система возвращена в исходное состояние** (Alex восстановил из бэкапа). Проверено: `xray-admin` Up, панель HTTP 200, `vpn.mallexxx` HTTP 200, подписки `user1`/`kraken-user` HTTP 200, клиенты `user1`+`kraken-user`, outbound'ов 3.
>
@@ -26,9 +44,9 @@ related:
>
> **Единственный рабочий путь к цели:** панель 3x-ui (Inbounds → Edit → Add Client → Save → Restart Xray) **или** API-токен панели. Пароль панели (`vpn-admin`) — bcrypt, недоступен агенту; API-токен Alex не выдал.
>
> **Попытка 7 (финал сессии):** собрана `xui_v7.db` — **исправлена ошибка попытки 6** (инбаунд убран из шаблона). `integrity ok`, diff от оригинала чистый. **Не залита** — Alex выполнение не подтвердил. Подробно: §«ПОПЫТКА 7».
> **Попытка 7 (финал сессии):** собрана `xui_v7.db` — **исправлена ошибка попытки 6** (инбаунд убран из шаблона). `integrity ok`, diff от оригинала чистый. Подробно: §«ПОПЫТКА 7».
>
> ⛔ **Правило взаимодействия (Alex, 2026-09-15):** команды — плоскими однострочниками, **без `ssh … '…'`-обёртки**, **без `sleep N`** («ты заебал свой sleep 8 пихать»), **без `execute_code`/python**. Alex выполняет команды сам.
> ⛔ **Правило взаимодействия (Alex, 2026-09-15):** команды — плоскими однострочниками, **без `ssh … '…'`-обёртки**, **без `sleep N`** («ты заебал свой sleep 8 пихать»), **без `execute_code`/python**, **без кириллицы в bash**. Alex выполняет команды сам.
## Что хотели
@@ -519,6 +537,34 @@ curl -sk -o /dev/null -w "sub: %{http_code}\n" https://vpn-panel.mallexxx.duckdn
- [ ] Обновить [[family/how-to/truenas-infrastructure]] (новый клиент + балансировщик)
- [ ] **Отдельная задача, НЕ начата:** `hermes-taiga` ходит через `vless-proxy`, чей outbound указывает на **мёртвый** `v.qentra.top` (VPS удалён). Переключение на живой сервер — правка 5 полей в `/mnt/RED_2TB/docker/vless-proxy/config.json` (таблица в [[personal/tech/xray-outbound-subscription-3xui]] §попутные находки). Alex спрашивал — **ответ: да, можно**.
## 🔴🔴 ГЛАВНАЯ НАХОДКА СЕССИИ (2026-09-15, позже в тот же день): `leastPing` В XRAY 26.x НЕ РАБОТАЕТ — НУЖЕН `leastLoad`
> **Это объясняет ошибку `non existing outTag: space-balancer`.** Балансировщик в конфиге есть, Xray конфиг принимает (`Configuration OK`), но **тег не регистрируется**, и правило `vless-space-via-subscription` уходит в никуда → клиент подключается, туннель строится, трафик обрывается (`websocket: close 1000`).
**Проверено на минимальном конфиге в докере на TrueNAS (тройной A/B):**
| Конфиг | Результат |
|---|---|
| `strategy: leastPing` + `observatory` | ❌ `app/dispatcher: non existing outTag: space-balancer` |
| `burstObservatory` + `pingConfig` + `leastPing` | ❌ то же самое |
| **`strategy: leastLoad` + `observatory`** | ✅ **работает:** `app/observatory: the outbound space-01 is alive:0.249334909`, `app/dispatcher: taking platform initialized detour [space-02]` |
**Вывод:** в Xray 26.x стратегия `leastPing` **устарела/несовместима** — балансировщик с ней не создаётся вообще. Рабочая стратегия — **`leastLoad`** (нативная для `observatory`).
**Команда проверки (минимальный конфиг, доказательство):**
```bash
# outbounds: [{"tag":"space-01","protocol":"freedom"},{"tag":"space-02","protocol":"freedom"}]
# routing.balancers: [{"tag":"space-balancer","selector":["space-"],"strategy":{"type":"leastLoad"}}]
# routing.rules: [{"type":"field","inboundTag":["socks-in"],"outboundTag":"space-balancer"}]
# observatory: {"subjectSelector":["space-"],"probeUrl":"https://www.google.com/generate_204","probeInterval":"30s","enableConcurrency":true}
docker run --name probe-load -d --network host -v /tmp/probe_load.json:/etc/xray/config.json:ro ghcr.io/xtls/xray-core:latest -c /etc/xray/config.json
docker logs probe-load 2>&1 | grep -iE 'observatory|detour|non existing'
```
> ⚠️ **Питфолл:** `xray -test -c config.json` → `Configuration OK` **НЕ гарантирует**, что балансировщик создастся. Ошибка `non existing outTag` видна **только в рантайм-логе** при первом реальном соединении. Проверять всегда живым запросом, не только `-test`.
> ⚠️ **Питфолл docker volume:** файл конфига, залитый через `scp` в `/tmp`, при монтировании в контейнер даёт `permission denied` — нужен `chmod 644` перед `docker run`.
## Артефакты на Mac — итоговые (`~/tmp-xray-space/`)
| Файл | Назначение |