[2026-09-15] eagle: family/how-to/truenas-infrastructure.md family/how-to/truenas-infrastructure.md.bak-before-drop-changelog family/how-to/truenas-infrastructure.md.bak-before-merge-dup-header personal/tech/vault-doc-pruning.md personal/tech/vless-space-subscription-egress.md personal/tech/vless-space-subscription-egress.md.bak-before-squeeze-history personal/tech/vless-space-subscription-egress.md.bak-before-squeeze2 personal/tech/xray-outbound-subscription-3xui.md

This commit is contained in:
Alexey Martemyanov
2026-09-15 17:45:27 +06:00
parent 548bedf3cd
commit 397847b50b
8 changed files with 3428 additions and 349 deletions
+9 -12
View File
@@ -330,7 +330,6 @@ arr, caddy, cups, filebrowser, gitea, hermes, immich, inpx-web, inpxer, library,
| **vpn-panel.mallexxx.duckdns.org** | **3x-ui панель :2053** (добавлен 2026-09-01) |
| **vpn.mallexxx.duckdns.org** | **Xray VLESS-WS (путь /vless) → xray-admin:10095** (добавлен 2026-09-01) |
### `xray-admin` — 3x-ui панель (Xray server, добавлена 2026-09-01)
> ### ✅ SUBSCRIPTION-КАНАЛ (auto-обновление клиентов) — работает, проверено 2026-09-15
>
@@ -362,7 +361,7 @@ arr, caddy, cups, filebrowser, gitea, hermes, immich, inpx-web, inpxer, library,
> | **v2rayN** (Windows) | Subscriptions → **Add subscription** | «Sub update interval» (мин) в настройках подписки |
> | **NekoBox / sing-box** (Android) | Группа → **Add subscription** | в свойствах группы, «Auto update» + интервал |
> | **Streisand** (iOS) | «+» → **Subscription** | внутри подписки, «Auto update» |
> | **Xray/`xray-core` в docker** | — | ❌ **не умеет.** Только статический `config.json`; «auto» = внешний cron-скрипт (`curl` sub → `base64 -d` → собрать config → `docker restart`) |
> | **Xray/`xray-core` в КОНТЕЙНЕРЕ-КЛИЕНТЕ** (`vless-proxy`) | — | ❌ **не умеет.** Только статический `config.json`; «auto» = внешний cron-скрипт (`curl` sub → `base64 -d` → собрать config → `docker restart`) |
> ⚠️ Обязательное условие во всех: вставлять **полный URL с `/sub/<subId>`**, а не одиночный `vless://…` — иначе получится статический сервер без обновления.
>
> **Команды проверки подписки (с TrueNAS, без правки чего-либо):**
@@ -393,18 +392,16 @@ arr, caddy, cups, filebrowser, gitea, hermes, immich, inpx-web, inpxer, library,
> **Правильный порядок:** `docker stop` **ДО** скачивания БД. Если остановить нельзя — читать WAL через `strings /mnt/RED_2TB/docker/xray-admin/x-ui.db-wal` (не через `sqlite3` на файле). Признак: `SELECT COUNT(*) FROM outbound_subscriptions` → `0`, а панель запись показывает.
>
> **Восстановление:** заново добавить подписку в UI (`Xray → Outbound Subscriptions`). Бэкапы БД старше правки пусты — URL подписки в доке не хранится.
> ### 🧹 ЧИСТКА ЭТОЙ ДОКИ (2026-09-15, Alex: «Убирай»)
>
> Из документа вырезан блок-летопись **«⚠️ ИСТОРИЯ (2026-09-15, ранние попытки) — АРТЕФАКТЫ ГОТОВЫ, ПРИМЕНЕНИЕ НЕ ВЫПОЛНЕНО»** (163 строки) вместе с вложенной в него подзадачей `hermes-taiga`. Причина: описывал состояние «задача не выполнена», противоречащее факту, и содержал ложное утверждение «Xray не умеет подписки → авто только в GUI».
> ### 🔴 ПИТФОЛЛ диагностики: `jq` показывает `null` для живой секции — проверять ОБА имени
>
> - Файл: **990 → 836 строк**. Бэкап вырезанного: `family/how-to/truenas-infrastructure.md.bak-before-cut-history` (в той же папке, `.gitignore`-независимый; при необходимости восстановить — файл .md перезаписать из .bak).
> - Инструмент вырезания: `~/tmp-xray-space/cut_history_block.py` (на Mac; режет по маркерам начала/конца, **сначала пишет `.bak`**, никакого `sed`).
> - Восстановлен украденный подзаголовок `### xray-admin — 3x-ui панель` (был внутри вырезанного блока — без него секция пропадала из оглавления).
> - Проверено: осиротевших ссылок на вырезанный раздел в vault — 0 (`grep -rn` по всем `.md`).
> - **Оставлены намеренно** (помечены как летопись, не врут о текущем статусе): §«ПОПЫТКА 1…8» и §«ПРЕДЫДУЩИЙ ФИНАЛ» в [[personal/tech/vless-space-subscription-egress]] — полезны как грабли.
> Xray 26.x знает **две** секции observatory: `observatory` и **`burstObservatory`** (панель при сохранении создаёт вторую и удаляет первую). Диагностический запрос только по `.observatory` вернёт `null`, и это **ложный вывод «секции нет»** — секция есть, под другим ключом.
> ```bash
> docker exec xray-admin cat /app/bin/config.json | jq -r 'keys[]' # ищем ЛЮБОЕ из двух
> docker exec xray-admin cat /app/bin/config.json | jq -c '.burstObservatory // .observatory'
> ```
> 🔴 **Правило:** `routing.balancers[].selector` и `observatory|burstObservatory.subjectSelector` — **два разных поля**. Сменил префикс подписки (`space-` → `sub1-`) — **меняй оба**, иначе `leastLoad` не видит живых кандидатов и трафик **молча** уходит в `direct`, **без ошибок в логе**. Детали — [[personal/tech/xray-outbound-subscription-3xui]].
---
### `xray-admin` — 3x-ui панель (Xray server, добавлена 2026-09-01)
@@ -486,7 +483,7 @@ arr, caddy, cups, filebrowser, gitea, hermes, immich, inpx-web, inpxer, library,
| Можно через SQL | Нельзя через SQL |
|---|---|
| `settings.xrayTemplateConfig` — outbound'ы, `routing.rules`, `routing.balancers`, `observatory` ✅ (13 outbound'ов применились) | **Клиенты инбаунда**`inbounds.settings`, таблица `clients` ❌ |
| `settings.xrayTemplateConfig` — outbound'ы, `routing.rules`, `routing.balancers`, `burstObservatory` ✅ (применились) | **Клиенты инбаунда**`inbounds.settings`, таблица `clients` ❌ |
**Почему:** 3x-ui держит БД открытой и пишет в `-wal`; при рестарте список клиентов берёт **из своей внутренней памяти**, а не из файла. Правки в `clients`/`inbounds.settings` молча игнорируются, `config.json` перегенерируется в урезанном виде (2978 б вместо 11 990).