# Установка Kaskad Проще всего — одна команда на зарубежном VPS (ниже). Если любишь разбирать каждый шаг сам — есть ручной путь в конце файла. --- ## 🚀 Простой путь — одна команда ### Что нужно заранее - **Один зарубежный сервер** (Ubuntu/Debian 20.04+, root) с настроенным X-ray (3x-ui подойдёт), интерфейс обычно `amn0`. Здесь будут жить WebUI и Telegram-бот. - **Один RU-сервер** (Ubuntu/Debian 20.04+, root, открыт UDP/1939 наружу или проброшен с роутера). Если он чистый — скрипт сам поставит на него WireGuard. - **Telegram-бот**: создайте через [@BotFather](https://t.me/BotFather), запишите token. - **Свой Telegram chat ID**: узнайте через [@userinfobot](https://t.me/userinfobot). ### Запуск На зарубежном сервере, под root: ```bash curl -fsSL https://raw.githubusercontent.com/andrey271192/kaskad/main/install.sh | sudo bash ``` Скрипт интерактивный, спросит 5–6 вопросов: | Вопрос | Что вводить | |---|---| | Telegram bot token | строка от @BotFather, типа `123456:AAH...` | | Telegram chat ID | число, например `123456789` | | Короткое имя ам. сервера | любое, `ams1` подойдёт | | Внешний IP | сам подтянет с `api.ipify.org` | | Хост RU-сервера | IP или домен RU-машины | | SSH-порт RU | обычно `22` | | Пароль root@RU | используется ОДИН раз, потом затирается | | Логин WebUI | например `admin` | | Пароль WebUI | минимум 8 символов | | Имя X-ray-интерфейса | обычно `amn0` | Через 2–3 минуты: ``` ✓ Готово! WebUI: http://YOUR_AMS_IP:8088 Логин: admin Пароль: (тот, что ты ввёл) Telegram-бот активен — отправь ему /status. ``` Дальше всё через WebUI или бот. ### Обновление ```bash cd /opt/kaskad && git pull && sudo bash install.sh ``` Скрипт идемпотентный — повторный запуск ничего не сломает, просто обновит скрипты. ### Удаление ```bash sudo bash /opt/kaskad/uninstall.sh ``` Или одной командой: ```bash curl -fsSL https://raw.githubusercontent.com/andrey271192/kaskad/main/uninstall.sh | sudo bash ``` Подтверждение через ввод `YES`. Если хотите снести и WG-ключи — `KASKAD_PURGE_KEYS=1 sudo bash uninstall.sh`. --- ## 🛠 Ручной путь — для тех, кто хочет понять каждый шаг Все шаги ниже делает за вас `install.sh` — приведены для отладки и образовательных целей. ### Шаг 1. Первый RU-сервер На RU-сервере под root: ```bash apt update && apt install -y wireguard iptables-persistent cd /etc/wireguard umask 077 wg genkey | tee ru_private.key | wg pubkey > ru_public.key PRIVKEY=$(cat ru_private.key) sysctl -w net.ipv4.ip_forward=1 echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf IFACE=$(ip route | awk '/^default/{print $5; exit}') cat > /etc/wireguard/wg_ru.conf < ru_public.key cat ru_public.key # запомните — добавим в peer'ы RU # Узнать имя интерфейса X-ray ip a | grep -E 'amn|tun' | grep -v '@' # обычно amn0 PRIVKEY=$(cat ru_private.key) cat > /etc/wireguard/ru.conf <> /etc/wireguard/wg_ru.conf </dev/null; \ echo '* * * * * /usr/local/bin/ru-failover.py'; \ echo '17 */6 * * * /usr/local/bin/ru-domains.py refresh >> /var/log/ru-domains.log 2>&1' \ ) | crontab - # SSH-ключ для бота [ -f /root/.ssh/id_ed25519 ] || ssh-keygen -t ed25519 -N '' -f /root/.ssh/id_ed25519 cat /root/.ssh/id_ed25519.pub # добавьте в /root/.ssh/authorized_keys на остальных ам. и RU серверах systemctl daemon-reload systemctl enable --now ru-tg-bot.service ru-webui.service # открываем 8088 iptables -A INPUT -p tcp --dport 8088 -j ACCEPT netfilter-persistent save ``` Проверьте: `journalctl -u ru-tg-bot -u ru-webui -f`. Отправьте боту `/status` — должен ответить. Откройте `http://AMS_IP:8088`. --- ## Дальнейшее расширение После того как первая пара RU + ам. работает — добавлять новые **через WebUI или бот**, ничего больше не надо настраивать вручную. - **+RU-сервер** → в WebUI «+ добавить RU-сервер» (нужен root-пароль для первичной онбординги) или `/server-add` в боте - **+ам. сервер** → «+ добавить ам. сервер» или `/ams-add` - **+домен** (vk.com, ozon.ru) → секция «Домены» или `/add-domain vk.com ozon.ru` - **+IP/CIDR** → секция «Доп. IP/CIDR» или `/add 5.45.192.1/32` Cron каждую минуту проверяет здоровье текущего RU peer'а через handshake age + TCP-пробу и переключает на следующий по приоритету при необходимости. --- ## Если что-то не работает См. [troubleshooting.md](troubleshooting.md).