Files
obsidian-vault/family/plans/reverse-xray-3xui-kraken.md
T

10 KiB
Raw Blame History

Reverse Xray (3x-ui) — TrueNAS ↔ Kraken

Создано: 2026-09-01. Цель: проксировать трафик локальных клиентов (сеть TrueNAS 192.168.2.x) через TrueNAS → Kraken → интернет. Kraken = точка выхода (exit node). TrueNAS = bridge/контроллер.

Архитектура

ЛОКАЛЬНЫЕ КЛИЕНТЫ (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 /vlessxray-admin:10095
    • vpn-panel.mallexxx.duckdns.orgxray-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

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.

Reverse-схема (Xray portal/bridge) — 2026-09-01, спроектировано

Целевое: локальные клиенты сети TrueNAS (192.168.2.x) выходят в интернет через Kraken.

Роли Xray reverse (по эталону Xray-examples/ReverseProxy):

  • Kraken = BRIDGE (reverse bridges) — держит исходящий канал к TrueNAS, публикует "интернет-выход" (freedom).
  • TrueNAS = PORTAL (reverse portals) — принимает от локальных клиентов (external-inbound) и пересылает в Kraken по reverse-каналу (interconn).

Конкретные порты/транспорт:

Компонент Хост Контейнер/роль Транспорт Вход/выход
portal TrueNAS xray-reverse-portal VLESS-WS interconn :12346 → Caddy path /rvs; external :12345 для клиентов сети
bridge Kraken xray-reverse-bridge VLESS-WS interconn → vpn.mallexxx.duckdns.org path /rvs; свобода → интернет

Транспорт: VLESS + WebSocket (т.к. снаружи TrueNAS только 443 через Caddy; WS подходит для reverse поверх outbound). Отдельный путь Caddy /rvs (не /vless 3x-ui) → xray-reverse-portal:12346, чтобы не смешивать с inbound 3x-ui.

Caddy правка: vpn.mallexxx.duckdns.org добавить маршрут @rvs path /rvsreverse_proxy @rvs xray-reverse-portal:12346.

Статус деплоя (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).

Фактически развёрнутый compose (deployed на TrueNAS)

services:
  xray-admin:
    image: ghcr.io/mhsanaei/3x-ui:latest
    container_name: xray-admin
    hostname: xray-admin
    restart: unless-stopped
    environment:
      - TZ=Asia/Novosibirsk
      - PUID=950
      - PGID=950
    volumes:
      - /mnt/RED_2TB/docker/xray-admin:/etc/x-ui
    ports:
      - "54321:54321"     # 3x-ui web UI (внутри панель реально на 2053)
    networks:
      - caddy_default
networks:
  caddy_default:
    external: true

Черновик выше (секция «Композ-файл») — предварительный; фактический файл на TrueNAS содержит hostname, TZ, PUID/PGID. Панель внутри слушает 2053 (не 54321) — это то, что Caddyfile проксирует через vpn-panel. Хостовый 54321-проброс не используется панелью (панель = 2053), можно убрать.

Следующий шаг: развернуть reverse-клиент на Kraken (exit node) и настроить reverse-bridge в 3x-ui (TrueNAS) + локальный SOCKS/HTTP для клиентов сети TrueNAS. См. personal/tech/xray-reverse-tunnel-kraken-truenas.md — основной doc архитектуры с деталями.

Порядок работ (отметки → фактический статус 2026-09-01)

  1. Бэкап: /mnt/RED_2TB/docker/backups/reverse-xray-3xui-20260901-113625/ (Caddyfile + x-ui.db + docker-inventory).
  2. Создан /mnt/RED_2TB/docker/xray-admin/docker-compose.yml (deployed версия — см. «Фактически развёрнутый compose»).
  3. Поднят docker compose up -d → контейнер Up.
  4. Проверено: панель https://vpn-panel.mallexxx.duckdns.org/ → HTTP 200, inbound vless-ws:10095 активен.
  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 — ДОБАВИТЬ после проверки связности панели.