[2026-09-15] eagle: family/how-to/truenas-infrastructure.md family/how-to/vps-qentra.md personal/tech/xray-outbound-subscription-3xui.md personal/tech/xray-reverse-tunnel-kraken-truenas.md work/projects/cpm-web-extension-breakage-validation.md
This commit is contained in:
@@ -13,7 +13,7 @@
|
||||
> - **⚠️ «Камера на 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` на внешней outbound-подписке `profilegrid.net` — шаг 1 готов (28 серверов, HTTP 200), стоит на шаге 2 (нужны креды панели, `admin/admin` → 403); подзадача `hermes-taiga` → переключить `vless-proxy` с мёртвого `v.qentra.top`). Ранее: 2026-09-15 (subscription-канал 3x-ui: ссылки `/sub/<subId>` работают, base64 vless-список; раздел `xray-admin` → «SUBSCRIPTION-КАНАЛ»). Ранее: 2026-09-02 (vpn.mallexxx:443 = РАБОЧИЙ Xray-сервер, проверено end-to-end; vless-proxy outbound мёртв)
|
||||
> Обновлено: 2026-09-15 (ночь-2: **`vless-space` — артефакты СОБРАНЫ И ПРОВЕРЕНЫ, применение в живую БД остановлено** (SSH к TrueNAS оборвался ровно на `docker stop`; контейнер сам поднялся, БД не тронута). Путь через БД подтверждён как рабочий (доступ к панели НЕ нужен), шаг «нужны креды панели» **снят как неверный**. Готовы `apply_space.sql` (проверен в песочнице), `template_config.new.json` (10 outbound + правило + `space-balancer` leastPing), UUID клиента. Разделы `xray-admin` обновлены: питфолл `x-ui.db`+WAL, `xrayTemplateConfig` как точка правки, `outbound_subscriptions` **НЕ задействуется** (выбран путь «outbound'ы из подписки, развёрнутые в шаблон»). Ранее 2026-09-15 (вечер: черновой план `vless-space`, шаг 1 — подписка проверена). Ранее: 2026-09-15 (subscription-канал 3x-ui: ссылки `/sub/<subId>` работают, base64 vless-список). Ранее: 2026-09-02 (vpn.mallexxx:443 = РАБОЧИЙ Xray-сервер, проверено end-to-end; vless-proxy outbound мёртв)
|
||||
|
||||
> ## ⚠️ ПРИОРИТЕТ 2026-09-01: VPS qentra.top УДАЛЁН → vless-proxy и сетевые туннели сломаны
|
||||
> - **VPS `91.207.28.205` больше НЕ существует** (вся его Xray/OpenVPN/WG-инфраструктура утрачена). Подробно: [[family/how-to/vps-qentra]].
|
||||
@@ -288,64 +288,124 @@ arr, caddy, cups, filebrowser, gitea, hermes, immich, inpx-web, inpxer, library,
|
||||
|
||||
---
|
||||
|
||||
> ## ⏳ ПЛАН 2026-09-15: клиент `vless-space` на ВНЕШНЕЙ outbound-подписке (НЕ ВЫПОЛНЕН, стоит на шаге 2 из 6)
|
||||
> ## ✅ РЕАЛИЗАЦИЯ 2026-09-15: клиент `vless-space` на ВНЕШНЕЙ outbound-подписке — АРТЕФАКТЫ ГОТОВЫ, ПРИМЕНЕНИЕ НЕ ВЫПОЛНЕНО
|
||||
>
|
||||
> **Задача Alex:** добавить в `xray-admin` третьего клиента `vless-space`, чей трафик идёт через **внешнюю** Xray-подписку `profilegrid.net` с авто-обновлением серверов. `user1` и `kraken-user` **НЕ трогать**.
|
||||
> **Задача Alex:** добавить в `xray-admin` третьего клиента `vless-space`, чей трафик идёт через **внешнюю** Xray-подписку `profilegrid.net` с авто-обновлением серверов. `user1` и `kraken-user` **НЕ трогать**. Серверы — **«авто брать»** (все, с балансировкой).
|
||||
>
|
||||
> **Разбор путаницы (обе версии были в диалоге, верна ВТОРАЯ):**
|
||||
> - ❌ «Сервер не может ходить через чужую подписку, он только принимает» — **НЕВЕРНО**, я сам себя опроверг в том же ответе.
|
||||
> - ✅ **ВЕРНО: 3x-ui так УМЕЕТ** — это функция **`outbound_subscriptions`** (`/panel/api/xray/outbound-subs`, `/panel/api/xray/outbound-subs/parse`). Панель тянет внешнюю подписку, парсит её серверы как свои **outbound**'ы, обновляет по `update_interval`. Это НЕ клиентская подписка (`/sub/<subId>`), а **обратное направление**: сервер сам ходит наружу через чужие серверы.
|
||||
> - ❌ «Сервер не может ходить через чужую подписку, он только принимает» — **НЕВЕРНО**, агент сам себя опроверг в том же ответе. Alex справедливо на это указал.
|
||||
> - ✅ **ВЕРНО: 3x-ui так УМЕЕТ.** Но реализовано это **НЕ** через таблицу `outbound_subscriptions` (как предполагалось в черновике), а **через `xrayTemplateConfig`**: серверы подписки разворачиваются в обычные **outbound'ы** шаблона, а выбор клиента делается routing-правилом. См. «Как реализовано» ниже.
|
||||
> - 🔑 **Два разных «subscription» в 3x-ui — не путать:**
|
||||
> | | Направление | Где | Кто использует |
|
||||
> |---|---|---|---|
|
||||
> | `/sub/<subId>` | сервер → клиентам | `subDomain/subPort/subScheme` | Happ/v2rayN на телефоне |
|
||||
> | `outbound_subscriptions` | панель → тянет извне | таблица `outbound_subscriptions` | сервер как **клиент** чужого VPN |
|
||||
> | `outbound_subscriptions` | панель → тянет извне | таблица `outbound_subscriptions` | (штатный путь 3x-ui; **здесь НЕ использован**) |
|
||||
>
|
||||
> **Целевая схема:**
|
||||
> ### Целевая схема
|
||||
> ```
|
||||
> [клиент vless-space] → vpn.mallexxx:443 → xray-admin → outbound из подписки profilegrid → интернет (DE/LV/NL…)
|
||||
> [клиент vless-space] → vpn.mallexxx:443 → xray-admin → outbound space-01…space-10 → интернет (DE/LV/NL…)
|
||||
> ```
|
||||
>
|
||||
> ### ✅ Шаг 1 ВЫПОЛНЕН — подписка проверена фактом (только чтение)
|
||||
> - URL Alex: `https://go.profilegrid.net/sub/djMsNDc3MjgsMTc4OTQ1OTg5NA.WjZEVaps9Xl3s5dkD6x7KRyNIGi7MlDUNAVPMKBUOdk`
|
||||
> - URL: `https://go.profilegrid.net/sub/djMsNDc3MjgsMTc4OTQ1OTg5NA.WjZEVaps9Xl3s5dkD6x7KRyNIGi7MlDUNAVPMKBUOdk`
|
||||
> - `curl -sk -m 25` **с TrueNAS** → **HTTP 200**, `size=12412`, `content_type=text/plain; charset=utf-8`
|
||||
> - `base64 -d` → **28 серверов**, все `vless://` + `security=reality` + `type=tcp` + `flow=xtls-rprx-vision`
|
||||
> - `base64 -d` → **28 строк** `vless://`, все `security=reality` + `type=tcp` + `flow=xtls-rprx-vision`
|
||||
> - Один UUID на весь список: `c67ce742-d94f-4e56-889e-9f894ae59940`; на каждом сервере свои `pbk`/`sid`/`sni`/`spx`
|
||||
> - Хосты: `edge-{de,lv,nl,ee,pl,fr,us}.mirrorgrid.net:443`, `packages-{nl,se}.repocache.com:443`, `md.repodelivery.com:443`
|
||||
> - Маскировочные метки в `#`: `🇩🇪 Germany`, `🇱🇻 Latvia | YT`, `🇬🇧 United Kingdom` и т.д.
|
||||
> - **Питфолл:** 28 хостов, но реальных адресов ~9 — подписка отдаёт **несколько записей на один хост** с разными `pbk`/`sid` (перебор ключей).
|
||||
> - **Питфолл:** 28 строк → **10 уникальных серверов**. Подписка отдаёт несколько записей на один хост с разными `pbk`/`sid` (перебор ключей). Дедуп по `host + pbk + sid`. Даже после дедупа встречаются повторы хостов с разными ключами.
|
||||
> - 10 уникальных: `edge-{de,lv,nl,ee,pl,fr,us}.mirrorgrid.net`, `packages-{nl,se}.repocache.com`, `md.repodelivery.com` — теги `space-01`…`space-10` (в отчёте на Mac сохранены маскировочные имена: `🇩🇪 Germany`, `🇱🇻 Latvia | YT` …)
|
||||
>
|
||||
> ### ⏸️ ГДЕ ВСТАЛИ (продолжать отсюда)
|
||||
> **Шаг 2 требует ДОСТУПА К ПАНЕЛИ 3x-ui.** Причины, почему через БД нельзя:
|
||||
> - `outbound_subscriptions` содержит сложные поля (`link_identities`, `last_fetched_outbounds`), руками SQL-строку не собрать;
|
||||
> - в `x-ui.db` живой **WAL** (4 МБ) + `-shm`, править под работающей панелью = риск;
|
||||
> - в контейнере **нет `sqlite3`** (только `strings`), запись невозможна технически.
|
||||
> ### ✅ Шаг 2 ВЫПОЛНЕН — бэкап
|
||||
> `/mnt/RED_2TB/docker/backups/xray-admin-before-vless-space-20260915-012057/` — `x-ui.db` + `x-ui.db-shm` + `x-ui.db-wal` + `system_metrics.gob` (копия всей папки).
|
||||
>
|
||||
> **Проверено:**
|
||||
> - `POST https://vpn-panel.mallexxx.duckdns.org/login` с `admin/admin` → **HTTP 403** (дефолт не подходит, креды у Alex).
|
||||
> - Список `sub*`-настроек в БД содержит только `subDomain/subPort/subScheme` (усечённый вывод `strings`) — это клиентская подписка, **не** `outbound_subscriptions` (таблицей подтверждена отдельно ниже).
|
||||
> ### 🔑 КЛЮЧЕВОЕ ОТКРЫТИЕ: правка идёт через `xrayTemplateConfig` в БД, панель НЕ нужна
|
||||
> Черновой вывод «нужен доступ к панели 3x-ui» — **❌ НЕВЕРЕН**, снят в этой же сессии. Факты:
|
||||
> - Таблица **`settings`**, ключ **`xrayTemplateConfig`** (2128 б) — **это и есть** шаблон, из которого 3x-ui генерирует `/app/bin/config.json` при старте. Именно сюда вносятся outbound'ы и routing-правила. **Не править `/app/bin/config.json` — он перезаписывается.**
|
||||
> - Все ключи `settings` в базе: `secret`, `subDomain`, `subPort`, `subScheme`, `panelGuid`, **`xrayTemplateConfig`**. Ключа `webBasePath` **НЕТ**.
|
||||
> - Таблица `outbound_subscriptions` **существует, но ПУСТА** (0 записей) — выбран другой путь (см. ниже).
|
||||
> - `POST /login` с `admin/admin` → **HTTP 403**; корень панели `/` → **HTTP 200**.
|
||||
>
|
||||
> ### 📋 ОСТАВШИЕСЯ ШАГИ (план, ждёт доступа)
|
||||
> ### ✅ Шаг 3 ВЫПОЛНЕН (на Mac) — собран новый `xrayTemplateConfig`
|
||||
> Рабочая папка на Mac: **`~/tmp-xray-space/`**
|
||||
> | Файл | Что |
|
||||
> |---|---|
|
||||
> | `xui_copy.db` | копия живой БД (выгружена `docker cp` → `scp`) |
|
||||
> | `template_config.json` | текущий `xrayTemplateConfig` (из `settings`) |
|
||||
> | `sub_decoded.txt` | подписка, base64 развёрнут — 28 строк |
|
||||
> | `build_template.py` | парсер `vless://` → xray-outbound + сборка шаблона |
|
||||
> | `space_outbounds.json` | 10 новых outbound'ов (отчёт) |
|
||||
> | `template_config.new.json` | **итоговый шаблон** (11 140 б) |
|
||||
> | `make_sql.py` | генератор SQL-скрипта |
|
||||
> | `apply_space.sql` | **готовый SQL** для живой БД |
|
||||
> | `test_apply.db` | песочница (копия БД + применённый SQL) |
|
||||
>
|
||||
> **Что добавлено в шаблон (существующее не тронуто):**
|
||||
> - `outbounds` += **10 штук** `space-01`…`space-10` (protocol `vless`, `vnext[]`, REALITY в `streamSettings.realitySettings`: `serverName`/`publicKey`/`shortId`/`spiderX`/`fingerprint=firefox`)
|
||||
> - `routing.rules` += правило: `{"type":"field","user":["vless-space"],"outboundTag":"space-balancer","ruleTag":"vless-space-via-subscription"}`
|
||||
> - `routing.balancers` = `[{"tag":"space-balancer","selector":["space-"],"strategy":{"type":"leastPing"}}]`
|
||||
> - `observatory` = `{"subjectSelector":["space-"],"probeUrl":"https://www.google.com/generate_204","probeInterval":"30s","enableConcurrency":true}` — **обязателен для `leastPing`** (иначе балансировщик не знает задержки)
|
||||
> - **Питфолл REALITY в outbound:** формат `realitySettings` — `serverName` + `publicKey` + `shortId` + `spiderX` + `fingerprint`; `flow: xtls-rprx-vision` кладётся в `users[0].flow` (в подписке он приходит как query-параметр).
|
||||
> - **Питфолл парсера подписки:** `spx` в ссылке URL-энкодирован (`%2F…`) — обязателен `unquote`, иначе Xray падает на `spiderX`.
|
||||
>
|
||||
> ### ✅ Шаг 4 ВЫПОЛНЕН (на Mac) — клиент `vless-space` + SQL, проверен в песочнице
|
||||
> | Параметр | Значение |
|
||||
> |---|---|
|
||||
> | email | `vless-space` |
|
||||
> | клиентский UUID | `a792c483-07e2-4723-9c50-78054c0abc07` |
|
||||
> | `subId` | `24df9391356b48ff` |
|
||||
> | sub-ссылка (будет) | `https://vpn-panel.mallexxx.duckdns.org/sub/24df9391356b48ff` |
|
||||
>
|
||||
> `apply_space.sql` делает 3 вещи: ① `UPDATE inbounds.settings` (id=1, tag `in-10095-tcp`) — добавляет клиента к `user1`/`kraken-user`; ② `UPDATE settings.xrayTemplateConfig` — новый шаблон; ③ `INSERT INTO clients` — строка клиента для учёта в панели.
|
||||
>
|
||||
> **Результат прогона в песочнице (`test_apply.db`) — совпал с ожиданием:**
|
||||
> | Проверка | Результат |
|
||||
> |---|---|
|
||||
> | Клиенты в БД | `user1`, `kraken-user`, **`vless-space`** |
|
||||
> | UUID `user1`/`kraken-user` | **не изменились** ✅ |
|
||||
> | Outbound'ов | **13** (3 старых + 10 новых) |
|
||||
> | Routing-правила | `kraken-user-via-reverse`, **`vless-space-via-subscription`** |
|
||||
> | Балансировщик | `space-balancer`, `leastPing` |
|
||||
> | Валидность JSON | **VALID** |
|
||||
>
|
||||
> ### ⏸️ Шаг 5 НЕ ВЫПОЛНЕН — применение в живую БД остановлено (продолжать отсюда)
|
||||
> **Что произошло:** SSH-сессия к TrueNAS **оборвалась ровно на `docker stop xray-admin`** (`Connection to mallexxx.duckdns.org closed by remote host`). Контейнер поднялся сам (**`restart: unless-stopped`**), БД осталась нетронутой.
|
||||
>
|
||||
> **Факт-проверка после обрыва (БД НЕ изменена):** `vless-space` в конфиге — **0**, outbound'ов **3**, правил **1**, `balancer` — **null**.
|
||||
>
|
||||
> **Порядок применения (одна короткая команда — SSH к TrueNAS рвётся на длинных операциях):**
|
||||
> ```bash
|
||||
> # на TrueNAS, из /mnt/RED_2TB/docker/xray-admin/
|
||||
> docker stop xray-admin && rm -f x-ui.db-shm x-ui.db-wal \
|
||||
> && sqlite3 x-ui.db < /tmp/apply_space.sql \
|
||||
> && docker start xray-admin
|
||||
> ```
|
||||
> ⚠️ **Питфолл:** `docker stop` у 3x-ui сам корректно закрывает БД и **сливает WAL в основной файл** — поэтому `-wal`/`-shm` надо удалять **после** остановки, иначе правка уйдёт в файл, который потом перезапишется из WAL.
|
||||
> ⚠️ Если правка выполняется при жизни WAL **без** остановки — риск потери изменений и порчи базы. `sqlite3` в самом контейнере **отсутствует** (`which sqlite3` пусто) — работать только хостовым бинарём или через `alpine`-контейнер.
|
||||
>
|
||||
> **Шаг 6 (проверка фактом) — не начат:** временным клиентом с id `vless-space` дёрнуть `curl` и убедиться, что egress **НЕ** `90.189.160.148` (TrueNAS) и **НЕ** `92.62.70.41` (Kraken), а IP сервера из подписки.
|
||||
>
|
||||
> ### 📋 Обновлённая таблица шагов
|
||||
> | # | Шаг | Статус |
|
||||
> |---|---|---|
|
||||
> | 1 | Проверить URL подписки фактом | ✅ **готово** (28 серверов, HTTP 200) |
|
||||
> | 2 | Бэкап `x-ui.db` (+`-wal`,`-shm`) и Caddyfile перед правками | ⏳ **блокер: нужны креды панели** |
|
||||
> | 3 | Добавить `outbound_subscriptions`: `url=<profilegrid>`, `remark=profilegrid`, `tag_prefix=space-`, `update_interval=600`, `enabled=true` | ⏳ не начат |
|
||||
> | 4 | Создать клиента `vless-space` в inbound `in-10095-tcp` (панель сгенерит свой `subId`) | ⏳ не начат |
|
||||
> | 5 | Routing-правило `user: ["vless-space"]` → outbound из подписки (`space-*`) | ⏳ не начат |
|
||||
> | 6 | Проверка фактом: `curl` через нового клиента → ждём egress **НЕ** `90.189.160.148` и **НЕ** `92.62.70.41`, а IP сервера из подписки | ⏳ не начат |
|
||||
>
|
||||
> **Выбор Alex по шагу 5 (открыт):** какой сервер из 28 брать — первый/дефолтный, конкретный (`edge-de`), или балансировщик по всем (тогда нужен `routing.balancers`).
|
||||
> | 1 | Проверить URL подписки фактом | ✅ **готово** (28 строк → 10 серверов, HTTP 200) |
|
||||
> | 2 | Бэкап `x-ui.db` (+`-wal`,`-shm`) | ✅ **готово** (`backups/xray-admin-before-vless-space-20260915-012057`) |
|
||||
> | 3 | Собрать `xrayTemplateConfig` (10 outbound + balancer + rule) | ✅ **готово** на Mac (`template_config.new.json`) |
|
||||
> | 4 | Клиент `vless-space` + `apply_space.sql`, проверка в песочнице | ✅ **готово** (песочница прошла) |
|
||||
> | 5 | Применить SQL в живую БД (стоп → SQL → старт) | ⏳ **остановлено** (SSH оборвался) |
|
||||
> | 6 | Проверка фактом: egress = IP из подписки | ⏳ не начат |
|
||||
> | 7 | Обновить доки | ⏳ не начат |
|
||||
>
|
||||
> ### ⚠️ Питфоллы, выявленные в этой сессии
|
||||
> - **Панель отдаёт 403 на логин с дефолтными кредами** — не «панель сломана», а `webBasePath`/пароль заданы. Не подбирать.
|
||||
> - **`/sub/<subId>` отдаётся без авторизации** (см. вопрос безопасности выше) — при добавлении `vless-space` его sub-ссылка будет так же открыта.
|
||||
> - **Xray-сервер ≠ Xray-клиент.** `vless-proxy` — клиент (SOCKS → наружу), `xray-admin` — сервер (принимает). Единственный способ заставить `xray-admin` ходить наружу через чужие серверы — `outbound_subscriptions`.
|
||||
> - **`docker run --rm -v /mnt/RED_2TB/docker/...:/d alpine cat ...`** — рабочий приём чтения root-owned конфигов TrueNAS (в этой сессии апрув-запрос на такую команду **истёк**, повтор без подтверждения не делать).
|
||||
> - **🔴 SSH к TrueNAS обрывается на `docker stop xray-admin`.** Первое выполнение `docker stop` завершилось `closed by remote host` — контейнер при этом **перезапустился сам** (`restart: unless-stopped`). Длинные операции с остановкой контейнеров делать **одной короткой командой**, а не серией вызовов.
|
||||
> - **Панель 3x-ui не нужна для этой задачи.** `/login` с `admin/admin` → **403**; но правка идёт через `settings.xrayTemplateConfig`, доступного по БД. Не подбирать пароль, не требовать креды.
|
||||
> - **Xray-сервер ≠ Xray-клиент.** `vless-proxy` — клиент (SOCKS → наружу), `xray-admin` — сервер (принимает). `xray-admin` ходит наружу только через свои **outbound'ы**; подписка превращается в набор outbound'ов внутри `xrayTemplateConfig`.
|
||||
> - **`docker exec <c> sh -c "strings <file>"`** — штатный приём чтения бинарных/config-файлов внутри контейнера TrueNAS, где нет `sqlite3`/`jq`/`python3`.
|
||||
> - **`docker run --rm -v /mnt/RED_2TB/docker/...:/d alpine cat ...`** — рабочий приём чтения root-owned конфигов TrueNAS (`docker cp` с копированием БД на хост тоже работает).
|
||||
> - **`outbound_subscriptions` vs разворачивание в шаблон:** таблица `outbound_subscriptions` (штатный путь 3x-ui, роуты `/panel/api/xray/outbound-subs[/parse]`) осталась **пустой**. Выбранный путь — «развернуть серверы подписки в обычные outbound'ы + `leastPing`-балансировщик + routing-правило по `user`». Плюс: не зависит от панели. Минус: авто-обновление списка серверов при смене подписки **не автоматическое** — потребуется повторно собрать шаблон (тот же `build_template.py`) и применить. **Для настоящего «auto» нужен cron-скрипт** (тянет подписку → пересобирает шаблон → применяет SQL).
|
||||
>
|
||||
> ---
|
||||
>
|
||||
> ## ⏳ ПОДЗАДАЧА 2026-09-15: `hermes-taiga` переключить с мёртвого `vless-proxy` (НЕ ВЫПОЛНЕНА)
|
||||
|
||||
>
|
||||
> **Факт:** `hermes-taiga` ходит **НЕ** через `xray-admin`/`user1`, а через **отдельный** контейнер `vless-proxy`.
|
||||
> - env: `TELEGRAM_PROXY=socks5://vless-proxy:1080`, `DISCORD_PROXY=socks5://vless-proxy:1080`
|
||||
@@ -377,10 +437,11 @@ arr, caddy, cups, filebrowser, gitea, hermes, immich, inpx-web, inpxer, library,
|
||||
| Volume | `/mnt/RED_2TB/docker/xray-admin:/etc/x-ui` (там `x-ui.db`) |
|
||||
| Сеть | `caddy_default` (внешняя) |
|
||||
| Панель | `https://vpn-panel.mallexxx.duckdns.org/` (Caddy → xray-admin:2053) |
|
||||
| Inbound | `vless-ws` port `10095`, tag `in-10095-tcp`, path `/vless`, host `vpn.mallexxx.duckdns.org`; clients: `user1` (direct TrueNAS), `kraken-user` (reverse via Kraken) |
|
||||
| Inbound | `vless-ws` port `10095`, tag `in-10095-tcp`, path `/vless`, host `vpn.mallexxx.duckdns.org`; clients: `user1` (direct TrueNAS), `kraken-user` (reverse via Kraken), **`vless-space`** (egress через внешнюю подписку `profilegrid.net` — ⏳ SQL собран и проверен, **в БД не применён**) |
|
||||
| Sub-сервер | `[::]:443` (path /sub), панель `[::]:2053` |
|
||||
| Env | `TZ=Asia/Novosibirsk`, `PUID=950`, `PGID=950` |
|
||||
| Ports (host) | `54321:54321` (не используется панелью — внутри панель на 2053, можно убрать) |
|
||||
| **Точка правки Xray-конфига** | таблица `settings` → ключ **`xrayTemplateConfig`** в `/etc/x-ui/x-ui.db`. **⚠️ `/app/bin/config.json` — генерируемый, не править (перезапишется).** `sqlite3` внутри контейнера отсутствует — работать хостовым бинарём или `alpine`-контейнером |
|
||||
|
||||
**Статус (2026-09-02):** контейнер **Up**, панель HTTP 200. Reverse portal развёрнут отдельным контейнером `xray-reverse-portal`; per-user egress работает end-to-end.
|
||||
|
||||
|
||||
@@ -21,7 +21,9 @@ related:
|
||||
> - На TrueNAS контейнер `vless-proxy` (teddysun/xray) outbound указывает на `v.qentra.top:443` → **сейчас мёртв**. Hermes-Taiga (SOCKS5 через `vless-proxy:1080`) **без рабочего прокси**.
|
||||
> - WireGuard Eagle↔VPS↔Kraken: VPS-звено мёртво.
|
||||
> - Rasputin-роутер VLESS-туннель (`188.239.191.235` / node3.sysnx.net) — это ДРУГОЙ сервер (не qentra), не трогать.
|
||||
> - Замена для выхода клиентов сети TrueNAS → Kraken: см. **[[tech/xray-reverse-tunnel-kraken-truenas]]** (Xray reverse, ЧАСТИЧНО внедрён: 3x-ui на TrueNAS развёрнут 2026-09-01, reverse-клиент на Kraken ещё нет).
|
||||
> - Замена для выхода клиентов сети TrueNAS → Kraken: см. **[[tech/xray-reverse-tunnel-kraken-truenas]]** (Xray reverse, ✅ внедрён и проверен end-to-end 2026-09-02).
|
||||
> - Замена для выхода через **внешнюю подписку** (не через VPS): см. **[[personal/tech/xray-outbound-subscription-3xui]]** (клиент `vless-space` в `xray-admin`, 10 серверов `profilegrid.net`, `leastPing`; ⏳ SQL готов, в БД не применён на 2026-09-15).
|
||||
> - **Контейнер `vless-proxy`** на TrueNAS до сих пор указывает outbound'ом на мёртвый `v.qentra.top` → `hermes-taiga` без прокси. Готовый план переключения (4 поля в `config.json`) — в [[family/how-to/truenas-infrastructure]] (раздел «ПОДЗАДАЧА 2026-09-15: hermes-taiga»).
|
||||
> - **Замена для `vless-proxy` (Hermes-Taiga) — ГОТОВЫЙ ПЛАН, НЕ ВЫПОЛНЕН (2026-09-15, вечер):** переписать 4 поля в `/mnt/RED_2TB/docker/vless-proxy/config.json`. Сейчас outbound ⇒ мёртвый `v.qentra.top:443` (VPS удалён). Станет ⇒ `vpn.mallexxx.duckdns.org:443`, VLESS-WS, path `/vless`, host `vpn.mallexxx.duckdns.org`.
|
||||
> | Поле | Сейчас | Станет |
|
||||
> |---|---|---|
|
||||
|
||||
Reference in New Issue
Block a user