[2026-09-15] eagle: family/how-to/kraken-access.md family/how-to/truenas-infrastructure.md family/plans/reverse-xray-3xui-kraken.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:
@@ -1,6 +1,29 @@
|
|||||||
# Kraken — Внешний доступ
|
# 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 — диск/докер кракена восстановились после перезагрузки.
|
> Updated: 2026-09-01 23:00 — диск/докер кракена восстановились после перезагрузки.
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -2,6 +2,19 @@
|
|||||||
|
|
||||||
> Создано: 2026-09-01. Цель: проксировать трафик локальных клиентов (сеть TrueNAS 192.168.2.x) через TrueNAS → Kraken → интернет. **Kraken = точка выхода (exit node).** TrueNAS = bridge/контроллер.
|
> Создано: 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/<subId>` отдаётся **без авторизации** — вопрос безопасности, решения нет.
|
||||||
|
> - ⏳ **`hermes-taiga` ходит через мёртвый `vless-proxy`** (`v.qentra.top` удалён). Нужна правка 5 полей в `/mnt/RED_2TB/docker/vless-proxy/config.json`.
|
||||||
|
|
||||||
## 🔴 2026-09-15: COMPOSE-ФАЙЛ `xray-admin` УТРАЧЕН — восстановлен из `docker inspect`
|
## 🔴 2026-09-15: COMPOSE-ФАЙЛ `xray-admin` УТРАЧЕН — восстановлен из `docker inspect`
|
||||||
|
|
||||||
**Факт (проверено по Zulip DB, `personal/zulip router issues`, сообщение `id=86681`, 2026-09-01 05:40:08 UTC):**
|
**Факт (проверено по Zulip DB, `personal/zulip router issues`, сообщение `id=86681`, 2026-09-01 05:40:08 UTC):**
|
||||||
|
|||||||
@@ -524,6 +524,8 @@ Alex восстановил БД из бэкапа. **Проверено фак
|
|||||||
|
|
||||||
## 🔴 ПОПЫТКА 7 (2026-09-15, финал сессии) — `xui_v7.db`: шаблон БЕЗ инбаунда. НЕ ЗАЛИТА
|
## 🔴 ПОПЫТКА 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.
|
**Что сделано:** учтён урок 6-й попытки — инбаунд из шаблона **убран**. Собрана `~/tmp-xray-space/xui_v7.db` заново **от оригинала** (`xui_copy.db`), с проверенным diff.
|
||||||
|
|
||||||
**Состав `xui_v7.db` (проверено фактами):**
|
**Состав `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`** |
|
| `docker-compose.yml` | **восстановленный compose `xray-admin`** |
|
||||||
| `inbound_settings.json` | снимок инбаунда для финального SQL |
|
| `inbound_settings.json` | снимок инбаунда для финального SQL |
|
||||||
|
|
||||||
|
## 🏁 MILESTONE 2026-09-15 — точная процедура, которая сработала (повторяемо)
|
||||||
|
|
||||||
|
**Задача:** новый клиент 3x-ui с egress через внешнюю подписку, не трогая существующих.
|
||||||
|
|
||||||
|
### Шаг 1 — вытащить и разобрать подписку
|
||||||
|
```bash
|
||||||
|
curl -s "https://go.profilegrid.net/sub/<TOKEN>" | 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-<TS>/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-инцидента
|
- [[family/plans/reverse-xray-3xui-kraken]] — reverse-туннель к Кра́кену, история compose-инцидента
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Xray outbound — внешняя подписка в 3x-ui (vless-space)
|
title: Xray outbound — внешняя подписка в 3x-ui (vless-space)
|
||||||
created: '2026-09-15'
|
created: '2026-09-15'
|
||||||
updated: '2026-09-15'
|
updated: '2026-09-15T22:30:00.000Z'
|
||||||
type: tech
|
type: tech
|
||||||
namespace: personal
|
namespace: personal
|
||||||
tags:
|
tags:
|
||||||
@@ -12,8 +12,11 @@ tags:
|
|||||||
- truenas
|
- truenas
|
||||||
- reality
|
- reality
|
||||||
- balancer
|
- balancer
|
||||||
|
- leastLoad
|
||||||
|
- balancerTag
|
||||||
|
- sampling
|
||||||
confidence: high
|
confidence: high
|
||||||
status: blocked-no-panel-access
|
status: done-egress-working
|
||||||
related:
|
related:
|
||||||
- '[[family/how-to/truenas-infrastructure]]'
|
- '[[family/how-to/truenas-infrastructure]]'
|
||||||
- '[[personal/tech/xray-reverse-tunnel-kraken-truenas]]'
|
- '[[personal/tech/xray-reverse-tunnel-kraken-truenas]]'
|
||||||
@@ -23,7 +26,25 @@ related:
|
|||||||
|
|
||||||
# Xray outbound из внешней подписки в 3x-ui (`vless-space`)
|
# 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` залита, и клиент появился:
|
> **Прежний вывод «клиентов через SQLite добавить нельзя» — ОПРОВЕРГНУТ.** `xui_v7.db` залита, и клиент появился:
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -27,6 +27,26 @@ verified_fix_2026_09_02: >-
|
|||||||
|
|
||||||
# Xray Reverse Tunnel — Kraken ↔ TrueNAS
|
# 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)
|
> ## 🔀 НЕ ПУТАТЬ с egress-подпиской (2026-09-15)
|
||||||
> У `xray-admin` **три независимых механизма выхода**, их легко перепутать:
|
> У `xray-admin` **три независимых механизма выхода**, их легко перепутать:
|
||||||
> | Механизм | Кто выходит | Док |
|
> | Механизм | Кто выходит | Док |
|
||||||
|
|||||||
Reference in New Issue
Block a user