# Reverse Xray (3x-ui) — TrueNAS ↔ Kraken > Создано: 2026-09-01. Цель: проксировать трафик локальных клиентов (сеть TrueNAS 192.168.2.x) через TrueNAS → Kraken → интернет. **Kraken = точка выхода (exit node).** TrueNAS = bridge/контроллер. ## Архитектура ```text ЛОКАЛЬНЫЕ КЛИЕНТЫ (192.168.2.x) │ подключаются к прокси TrueNAS:1080/1081 (SOCKS/HTTP) ИЛИ на поддомен ▼ TRUENAS = 3x-ui (Xray-сервер, bridge/контроллер) — белый IP, mallexxx.duckdns.org │ принимает клиентский трафик; reverse-канал к Kraken ▼ ▲ KRAKEN = Xray-клиент (outbound reverse) + exit node — держит исходящий канал к TrueNAS ▼ интернет ``` - **TrueNAS** (3x-ui): принимает от локальных клиентов + держит reverse-вход, куда подключается Kraken. - **Kraken**: сам **инициирует** канал к TrueNAS (за NAT, не может принимать), получает по нему трафик клиентов, отпускает в интернет. - Кра́кен за NAT ⇒ направление канала **от Kraken к TrueNAS** (Xray reverse). ## Ключевые факты (прояснены) 1. **На 443 у TrueNAS — Caddy** (reverso-proxy, валидные LE-серты), НЕ Xray REALITY. Хостовый маппинг: `0.0.0.0:8443→443` (контейнер), `2019` (admin), `8088→80`. 2. **Xray на TrueNAS** раньше был задуман как 3x-ui: - База `/mnt/RED_2TB/docker/xray-admin/x-ui.db` (3x-ui), inbound `vless-ws` port `10095`, tag `in-10095-tcp`, path `/vless`, host `vpn.mallexxx.duckdns.org`, protocol vless. - Композ-файла в `xray-admin/` нет; контейнер НЕ запущен. 3. **Caddyfile** уже проксирует (мёртвые ссылки на `xray-admin`): - `vpn.mallexxx.duckdns.org` → `@ws path /vless` → `xray-admin:10095` - `vpn-panel.mallexxx.duckdns.org` → `xray-admin:443` / `xray-admin:2053` (path /sub/*) - Сертификаты для этих поддоменов уже выданы (DNS на TrueNAS IP). 4. **`vless-proxy`** (teddysun/xray) на TrueNAS — КЛИЕНТ: слушает 1080/1081 (SOCKS/HTTP), outbound на мёртвый `v.qentra.top:443` (VPS удалён). Используется Hermes-Taiga. 5. **VPS qentra.top (91.207.28.205) УДАЛЁН.** Вся старая VLESS+REALITY инфраструктура на нём недоступна. 6. Открытые порты TrueNAS наружу: **22, 443** (8443 ведёт внутрь контейнера Caddy:443 → но Caddy обрабатывает HTTPS-домены). ## Образ 3x-ui - Официальный: `ghcr.io/mhsanaei/3x-ui:latest` - Контейнер должен называться **`xray-admin`** (как в Caddyfile) и быть в сети **`caddy_default`** (чтобы Caddy резолвил имя). - Volume: `/mnt/RED_2TB/docker/xray-admin:/etc/x-ui` (там лежит готовая `x-ui.db`). - Порт панели: 54321 (web UI, через Caddy поддомен `vpn-panel.mallexxx.duckdns.org`). - VLESS inbound 10095 принимается извне через Caddy `vpn.mallexxx.duckdns.org/vless` (WS), НО для reverse к Kraken нужен подход через панель. ## Композ-файл Файл: `/mnt/RED_2TB/docker/xray-admin/docker-compose.yml` ```yaml services: xray-admin: image: ghcr.io/mhsanaei/3x-ui:latest container_name: xray-admin restart: unless-stopped volumes: - /mnt/RED_2TB/docker/xray-admin:/etc/x-ui environment: - XRAY_VMESS_AEAD_FORCED=false networks: - caddy_default ports: - "54321:54321" # 3x-ui панель (web UI) networks: caddy_default: external: true ``` ⚠️ ПОРТЫ 10095 и 2053/443 НЕ пробрасывать на host отдельно — Caddy стоит перед 443 и маршрутизирует /vless → xray-admin:10095 по имени в общей сети. Если нужно наружу снаружи (не через Caddy), проброс отдельный — обсудить. ## Сеть: reverse к Kraken `xray-admin` должен быть в сети `caddy_default` — там же Caddy. Проверено: caddy_default содержит caddy, syncthing, webdav, gitea. ## Статус деплоя (2026-09-01) ✅ **3x-ui развёрнут на TrueNAS и работает:** - Контейнер `xray-admin` (ghcr.io/mhsanaei/3x-ui:latest, **3.7.0**, Xray 26.7.28) в сети `caddy_default`, volume `/mnt/RED_2TB/docker/xray-admin:/etc/x-ui`. - Панель web UI: **`https://vpn-panel.mallexxx.duckdns.org/` → HTTP 200** (Caddy резолвит `xray-admin:2053`). - Sub-сервер: `[::]:443` (путь /sub), панель `[::]:2053` — как в Caddyfile. - Inbound: `vless-ws` port **10095**, tag `in-10095-tcp`, path `/vless`, host `vpn.mallexxx.duckdns.org` (Caddy path /vless → xray-admin:10095). - 3x-ui **поддерживает reverse** (в бинарнике `clientReverseTags`) — настройка через панель. - Бэкап: `/mnt/RED_2TB/docker/backups/reverse-xray-3xui-20260901-113625/` (Caddyfile + x-ui.db + docker-inventory). **Следующий шаг:** развернуть reverse-клиент на Kraken (exit node) и настроить reverse-bridge в 3x-ui (TrueNAS) + локальный SOCKS/HTTP для клиентов сети TrueNAS. ## Порядок работ 1. ✅ Бэкап: снять копии Caddyfile, x-ui.db, текущий docker-инвентарь → `/mnt/RED_2TB/docker/backups/reverse-xray-3xui-YYYYMMDD-HHMMSS/`. 2. Создать `/mnt/RED_2TB/docker/xray-admin/docker-compose.yml` (выше). 3. Поднять `docker compose up -d`. 4. Проверить: контейнер Up, панель отвечает на `vpn-panel.mallexxx.duckdns.org`, VLESS inbound активен. 5. Через панель 3x-ui создать/настроить **reverse inbound** и клиента для Kraken + локальный SOCKS/HTTP для клиентов. 6. На Kraken поднять Xray reverse-клиент (Docker compose) с выходом в интернет. 7. Проверка end-to-end: клиент → TrueNAS → Kraken → интернет (с IP Kraken). 8. Обновить Obsidian: truenas-infrastructure.md, kraken-access.md, vps-qentra.md (пометить VPS удалён). ## Ограничения / риски - Кра́кен в NAT ⇒ только исходящие соединения; reverse-канал держит Kraken. - Не ломать существующий Caddy/домены (бэкапить Caddyfile, перезапуск Caddy аккуратно). - `vless-proxy` (Hermes-Taiga) не трогать — настроен под local SOCKS. - Внешний Xray-порт: через Caddy по пути `/vless` (WS). Для полноценного reverse возможно потребуется отдельный VLESS+Reality inbound на отдельном порту + проброс на роутере для Kraken — ДОБАВИТЬ после проверки связности панели.