From df1f9dc8266cf2e892cc0a904c1e23f86eb37c9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=91=D0=BE=D0=B1?= =?UTF-8?q?=D1=8B=D1=80=D0=B5=D0=B2?= Date: Fri, 15 May 2026 04:49:14 +0300 Subject: [PATCH] docs(ui): human cascade guide + kaskad_web_vpn Expand cascade fold with steps, DNAT primer, install one-liner, link to github.com/andrey271192/kaskad_web_vpn; README and panel-guide aligned. Co-authored-by: Cursor --- README.md | 9 ++++++++- docs/panel-guide.md | 2 +- public/index.html | 27 +++++++++++++++++++------ public/styles.css | 49 ++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 78 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index bc541e7..009c035 100644 --- a/README.md +++ b/README.md @@ -216,7 +216,14 @@ UI_HIDE_SECTIONS=warp,cascade curl -fsSL https://raw.githubusercontent.com/andre ### Каскад (свой Endpoint для клиента) -В панели блок **«Новый клиент под каскад»**: задаёте IP/DNS и при необходимости порт — сервер **генерирует ключи**, добавляет peer в текущий инстанс AmneziaWG и отдаёт `.conf`, где **Endpoint** указывает на ваш промежуточный узел. На этом узле нужен **проброс UDP** на VPS (тот же порт, что слушает WG на сервере, либо свой порт из формы). +Сценарий: **устройство в интернете подключается не к вашему «основному» VPS напрямую**, а к **промежуточному узлу** (ещё один VPS, домашний роутер с пробросом и т.д.), а уже этот узел **пересылает UDP** на порт WireGuard вашего основного VPS, где живёт AmneziaWG и эта панель. + +Что нужно человеку, который ставит связку: + +1. На **этом** (основном) VPS — обычный AmneziaWG и панель PRO; здесь блок **«Новый клиент под каскад»** **создаёт peer и ключи** и выдаёт скачанный **`.conf`**, в котором **Endpoint** уже указывает на промежуточную машину. +2. На **промежуточном** сервере нужен **проброс порта DNAT до основного VPS** на тот же **ListenPort**, что слушает туннель здесь (либо свой внешний порт → тогда его указывают в форме как «Порт Endpoint»). + +Готовая панель для правил проброса (iptables DNAT NAT «под ключ»): репозиторий **[andrey271192/kaskad_web_vpn](https://github.com/andrey271192/kaskad_web_vpn)** — установка `curl … install.sh | sudo bash`, затем вход в браузере на промежуточный VPS по порту из README (например `8088/setup`) и настройка правила «вход → IP основного VPS:порт WG». Подробные шаги и переменные среды см. там же в README. ### Экспорт конфигурации клиента (.conf) diff --git a/docs/panel-guide.md b/docs/panel-guide.md index fa9ab03..e948a1e 100644 --- a/docs/panel-guide.md +++ b/docs/panel-guide.md @@ -10,7 +10,7 @@ | **Время** | Отображение часов контейнера и браузера; синхронизация времени хоста VPS по SSH (если доступно). | | **Cloudflare WARP** | *Необязательно.* Вывод части клиентов в интернет через интерфейс `warp` в контейнере AWG. Если WARP не ставили — статус **«Не установлен»** нормален; панель и VPN без этого работают. Установка и удаление — скрипт `scripts/warp-amnezia.sh` на хосте (`install` / **`uninstall`**), подробности в основном [README](../README.md). | | **Telegram MTProto‑прокси** | *Необязательно*, не часть AWG. Docker-контейнер официального образа **telegrammessenger/proxy**; установка из панели, ссылка **`tg://proxy`**, переменные **`MTPRO_*`** — см. основной [README](../README.md). | -| **Новый клиент под каскад** | Создание нового peer на сервере с **вашим Endpoint** (промежуточный узел); выдача готового `.conf`. | +| **Новый клиент под каскад** | Клиент в конфиге смотрит на **промежуточный узел** по Endpoint; peer и ключи создаются **на текущем VPS** и отдаются в `.conf`. На промежуточном сервере заранее нужен проброс порта DNAT UDP до WG этого VPS ([**kaskad_web_vpn**](https://github.com/andrey271192/kaskad_web_vpn) или свой проброс); в блоке см. текст и команду установки каскад-панели. | | **Пользователи** | Вкл/выкл peer, удаление, переименование, даты отключения; экспорт `.conf` если в записи есть `userData.last_config`. | ## Переключатель «Инстанс» не отображается diff --git a/public/index.html b/public/index.html index 64ece00..a550eea 100644 --- a/public/index.html +++ b/public/index.html @@ -163,15 +163,30 @@ Новый клиент под каскад - Создать peer и скачать .conf + Клиент стучится в «первый» узел → трафик сюда; ключи выдаём на этом VPS
-

- Укажите Endpoint — публичный IP или DNS узла, куда клиент будет подключаться первым шагом - (промежуточный сервер, домашний роутер с пробросом порта и т.д.). Порт по умолчанию совпадает с ListenPort этого инстанса. - Клиент будет создан на текущем сервере AmneziaWG (новые ключи); IP в туннеле можно задать явно или оставить пустым — подберём свободный в той же подсети, что у остальных. -

+
+

+ Что здесь происходит. Приложение Amnezia всегда смотрит на поле Endpoint в конфиге. + При каскаде клиент «видит» только промежуточный узел (часто недорогой VPS поближе к пользователям), а реальное соединение AmneziaWG живёт на этом сервере, где крутится ваш основной контейнер. + Ключ и peer создаём здесь и выдаём файл .conf — Endpoint в файле будет на промежуточную машину, а не на прямой IP этого VPS в интернете. +

+

Сначала нужна пересылка порта до этого VPS. На промежуточном сервере настройте проброс DNAT UDP (и TCP при необходимости). + Удобный вариант с веб-панелью iptables — + репозиторий kaskad_web_vpn: + ставится одной командой ниже; в её панели создаёте правило «входящий порт → UDP на IP:порт этого AmneziaWG». Подробнее — README в том же репозитории.

+
curl -fsSL https://raw.githubusercontent.com/andrey271192/kaskad_web_vpn/main/install.sh | sudo bash
+

После установки откройте http://ПЕРЕХОДНОЙ_IP:8088/setup (или свой HOST_PORT), задайте пароль админки каскада и добавьте правило проброса на ListenPort этого инстанса на данном VPS (видно в шапке панели или в awg show).

+
    +
  1. На промежуточном VPS: kaskad_web_vpn (команда выше) или свой DNAT / проброс порта на роутере.
  2. +
  3. Проверьте, что с промежуточной машины доходит UDP до WG-порта на этом сервере (если ниже поле порта Endpoint пустое — это тот же порт, что ListenPort здесь).
  4. +
  5. В форме ниже в Endpoint укажите публичный IP или DNS промежуточного узла — тот адрес, с которым реально установит туннель клиентское приложение из интернета.
  6. +
  7. Нажмите Создать на сервере и скачать .conf и импортируйте файл в Amnezia на телефоне или ПК.
  8. +
+

Порт Endpoint — когда снаружи слушает не тот номер порта, что WG здесь (пусто значит «как у сервера»). IP в VPN-туннеле можно не заполнять — подберём свободный адрес в той же подсети, что у остальных клиентов.

+
diff --git a/public/styles.css b/public/styles.css index 241f4a1..66b42b0 100644 --- a/public/styles.css +++ b/public/styles.css @@ -505,7 +505,7 @@ h1 { } .panel-fold-body > .warp-intro:first-child, -.panel-fold-body > .cascade-intro:first-child { +.panel-fold-body > .cascade-guide:first-child { margin-top: 0.85rem; } @@ -702,6 +702,53 @@ tr:last-child td { font-size: 0.85em; } +.cascade-guide .cascade-intro { + margin: 0 0 0.75rem; + line-height: 1.5; +} + +.cascade-guide .cascade-intro-tight { + margin-bottom: 0.55rem; +} + +.cascade-guide a { + color: #7dd3fc; + text-decoration: underline; + text-underline-offset: 0.14em; +} + +.cascade-guide a:hover { + color: #bae6fd; +} + +.cascade-steps { + margin: 0.65rem 0 0.85rem; + padding-left: 1.35rem; + line-height: 1.52; +} + +.cascade-steps li { + margin-bottom: 0.45rem; +} + +.cascade-steps li:last-child { + margin-bottom: 0; +} + +.cascade-snippet { + white-space: pre-wrap; + word-break: break-word; + background: #0a0f16; + border: 1px solid var(--line); + padding: 0.75rem 0.95rem; + border-radius: 12px; + color: #cbd5f5; + font-size: 0.78rem; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; + margin: 0.5rem 0 0.85rem; + max-width: min(52rem, 100%); +} + .cascade-form { display: grid; gap: 0.55rem;