andrey271192 f6514e9bba feat: one-command install/uninstall + fix delete-ams in WebUI
- install.sh: интерактивный one-liner — ставит WG, ключи, скрипты,
  бот, WebUI, cron; сам поднимает RU-сервер если он чистый
- uninstall.sh: полная очистка (сервисы, конфиги, cron, /opt/kaskad)
  с подтверждением; опц. KASKAD_PURGE_KEYS=1 для затирания ключей
- webui: кнопка «удалить» для зарубежных серверов теперь явно красная
  (class danger.solid), для локального — « нельзя» вместо disabled
- webui: DELETE /api/ams/<id> переписан — портативный python-based
  peer-removal, явные ошибки, поддержка ?force=1
- README + docs/install.md: переписаны под обычного пользователя,
  one-command flow на первом плане, ручной — как fallback

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-12 06:28:56 +03:00
2026-05-02 09:13:23 +03:00
2026-05-02 09:13:23 +03:00
2026-05-02 09:13:23 +03:00
2026-05-02 09:13:23 +03:00
2026-05-02 09:13:23 +03:00

Kaskad

Свой VPN для россиян за границей. Российские сайты (госуслуги, банки, ВК) открываются через ваш сервер в РФ. Всё остальное — напрямую через зарубежный. Если RU-сервер падает — за минуту переключается на запасной. Управляется из браузера или Telegram.

Каскад работает License Stars


Зачем это нужно

Живёте за границей и сталкивались с тем, что:

  • 🏦 Тинькофф не пускает с заграничного IP
  • 🧾 Госуслуги «вы не из России»
  • 📺 Кинопоиск, ivi, ВК — недоступны
  • 🛍 Озон, Wildberries — корзина не работает

При этом обычный VPN в РФ тормозит всё подряд, включая Netflix, рабочие звонки и игры.

Каскад делит трафик по умному:

        ┌──────────────────────────────────────────┐
вы ───▶ │  зарубежный сервер (Амстердам, X-ray)    │
        │                                          │
        │  если адрес РФ → 🇷🇺 RU-сервер → инет    │
        │  всё остальное → 🌍 напрямую             │
        └──────────────────────────────────────────┘

Vk.com видит ваш московский IP. Netflix видит амстердамский. Скорость не страдает.


Что умеет

  • Авто-failover — если основной RU-сервер упал, за минуту переключение на запасной. Когда вернулся — автоматически обратно.
  • 🎛 WebUI — добавлять серверы, домены, IP в один клик. Никакого SSH.
  • 🤖 Telegram-бот — то же самое из телефона.
  • 🌐 N RU-серверов в каскаде с приоритетами.
  • 🌍 N зарубежных нод под одним каскадом — все автоматически переключаются вместе.
  • 🔔 Уведомления в Telegram при каждом переключении.
  • 📋 Маршруты по доменам — ввёл vk.com, бот сам резолвит IP и держит их в маршрутах.

Установка в одну команду

На зарубежном сервере (Ubuntu 20.04+) с уже работающим X-ray:

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

Скрипт спросит:

  1. Telegram bot token (от @BotFather)
  2. Telegram chat ID (узнать у @userinfobot)
  3. Хост вашего RU-сервера + пароль root (пароль нужен один раз)
  4. Логин/пароль для WebUI

Через 2-3 минуты получите:

  • 🌐 WebUI на http://ВАШ_СЕРВЕР:8088
  • 🤖 Активного Telegram-бота — /status покажет состояние
  • 🔁 Авто-failover каждую минуту через cron

Готово. Никаких ручных правок конфигов.

💡 Если RU-сервер ещё чистый — скрипт сам поставит на него WireGuard, ip_forward, iptables и поднимет туннель. Достаточно SSH-пароля.


Удаление в одну команду

curl -fsSL https://raw.githubusercontent.com/andrey271192/kaskad/main/uninstall.sh | sudo bash

или, если уже склонировано:

sudo bash /opt/kaskad/uninstall.sh

Спросит подтверждение (YES), затем уберёт:

  • сервисы, скрипты, cron, WG-туннели, конфиги, /opt/kaskad/

X-ray, ваши SSH-ключи и системные пакеты не трогает. Если хотите снести и WG-ключи — KASKAD_PURGE_KEYS=1 sudo bash uninstall.sh.


WebUI

После установки откройте http://ВАШ_СЕРВЕР:8088.

Что Как
Переключиться на запасной RU кнопка backup в верхней таблице
Добавить ещё один RU-сервер секция «RU-серверы» → «+ добавить RU-сервер», ввести IP/домен и пароль root
Добавить ещё одну зарубежную ноду секция «Ам. серверы» → «+ добавить ам. сервер»
Удалить зарубежный сервер красная кнопка удалить в строке — peer уберётся со всех RU и из конфига
Добавить русский сайт секция «Домены» → ввести vk.com ozon.ru
Принудительный refresh DNS для доменов кнопка 🔄 Refresh DNS

Все действия идут с подтверждением, ошибки видны сразу.


Telegram-бот

Категория Команды
Туннели /status, /use <id>, /primary, /backup
RU-серверы /server-list, /server-add, /server-remove, /bot-key
Ам. серверы /ams-list, /ams-add, /ams-remove
Маршруты /ips, /list, /add <IP>, /remove <IP>, /clear
Домены /list-domains, /add-domain <d>, /remove-domain <d>, /show-domain <d>, /refresh-domains
Прочее /help

Полный синтаксис — docs/bot.md.


Как это работает (короткая версия)

  1. На каждом зарубежном сервере поднят WireGuard-туннель ru → к выбранному RU-серверу.
  2. iptables mangle помечает трафик от X-ray меткой 100, ip rule отправляет его в таблицу маршрутизации 200, где default → через туннель.
  3. Маршруты на конкретные RU-подсети/IP добавляются в ru-base.aips и ru-extra.list.
  4. Cron каждую минуту запускает ru-failover.py: проверяет handshake + TCP-пробу на RU. Если пусто > N секунд — переключает endpoint на следующий по приоритету.

Деталки — docs/architecture.md.


Структура репозитория

kaskad/
├── install.sh            ← одна команда — всё ставится
├── uninstall.sh          ← одна команда — всё убирается
├── bin/                  ← скрипты для ам. серверов
├── bot/                  ← Telegram-бот
├── webui/                ← Flask-приложение
├── examples/             ← шаблоны конфигов (если ставите вручную)
└── docs/                 ← подробная документация

Безопасность

  • Все конфиги (ru-servers.json, notify.env, webui.env) с правами 600, не коммитятся.
  • Между серверами — только SSH-ключи. Пароли используются один раз, при добавлении нового сервера, и сразу затираются.
  • WebUI защищён HTTP basic auth. Рекомендация: поставьте за HTTPS reverse-proxy (Caddy, Nginx, Traefik).
  • Telegram-бот принимает команды только от заранее заданного TG_CHAT_ID.

Требования

  • Ubuntu / Debian 20.04+ на ам. сервере (где будет WebUI и бот) — root доступ
  • Ubuntu / Debian 20.04+ на RU-сервере — root + SSH-пароль (нужен один раз)
  • На ам. сервере: уже настроенный X-ray (3x-ui подойдёт) с интерфейсом amn0
  • На RU-сервере: открыт UDP/1939 наружу (или проброс на роутере)

FAQ

Не работает «удалить» в WebUI? — кнопки удалить рядом с зарубежными серверами теперь явно красные. Если показывает « нельзя» — это сервер, на котором сам WebUI запущен; такой нельзя убрать (надо сначала перенести WebUI на другой узел).

Сервер удалён, но peer остался на RU? — при удалении WebUI сам делает wg set wg_ru peer ... remove на всех RU. Если RU был недоступен — попросит подтверждение и удалит запись принудительно (force).

Скорость упала? — каскад не должен влиять на не-RU трафик. Если падает — проверьте iptables -t mangle -L PREROUTING -v (помечается ли трафик) и ip rule show.

Бот молчитjournalctl -u ru-tg-bot -f. Чаще всего: неверный TG_BOT_TOKEN или TG_CHAT_ID, или сервер не может выйти к api.telegram.org.

Подробнее: docs/troubleshooting.md.


Связанные проекты


Поддержать проект

Лицензия

MIT

Description
No description provided
Readme MIT 102 KiB
Languages
Python 57.2%
Shell 22.3%
HTML 15.9%
CSS 4.6%