# Установка ## Требования - Минимум 1 RU-сервер (Ubuntu 20.04+) с публичным IP или пробросом UDP/1939 на роутере - Минимум 1 ам. сервер (Ubuntu 20.04+) с установленной X-ray панелью (3x-ui) - Telegram-бот (создать в @BotFather) и chat ID для уведомлений (узнать у @userinfobot) - Root доступ на оба сервера ## Шаг 1. Первый RU-сервер На RU-сервере под root: ```bash apt update && apt install -y wireguard iptables-persistent # 1. Генерация ключа cd /etc/wireguard umask 077 wg genkey | tee ru_private.key | wg pubkey > ru_public.key PRIVKEY=$(cat ru_private.key) # 2. ip_forward sysctl -w net.ipv4.ip_forward=1 echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf # 3. Конфиг — пока без peer'ов, добавятся когда подключим первый ам. IFACE=$(ip route | awk '/^default/{print $5; exit}') cat > /etc/wireguard/wg_ru.conf < ru_public.key cat ru_public.key # записать — добавим в peer'ы RU # 2. Узнать имя интерфейса X-ray ip a | grep -E 'amn|tun' | grep -v '@' # обычно amn0 — используем дальше # 3. Конфиг ru.conf — IP в туннеле = 10.0.0.2 (первый ам.) 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 - # 6. SSH-ключ бота (нужен для управления остальными серверами через ssh-key auth) [ -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-серверах # 7. Установить бот install -m 755 bot/ru-tg-bot.py /usr/local/bin/ install -m 644 bot/ru-tg-bot.service /etc/systemd/system/ apt install -y python3 sshpass systemctl daemon-reload systemctl enable --now ru-tg-bot.service journalctl -u ru-tg-bot.service -f ``` Послать боту в Telegram `/status` — должно прийти текущее состояние. ## Шаг 4. Веб-интерфейс (опционально) На том же ам. сервере, где бот: ```bash cd /opt/kaskad apt install -y python3-flask install -m 755 webui/app.py /usr/local/bin/ru-webui.py mkdir -p /usr/local/share/kaskad cp -r webui/templates webui/static /usr/local/share/kaskad/ # в app.py указать template_folder и static_folder если нужно; # по умолчанию работает из текущей директории, поэтому проще: ln -s /usr/local/share/kaskad/templates /usr/local/bin/templates ln -s /usr/local/share/kaskad/static /usr/local/bin/static mkdir -p /etc/kaskad cp webui/webui.env.example /etc/kaskad/webui.env chmod 600 /etc/kaskad/webui.env # ВПИСАТЬ KASKAD_WEB_USER и KASKAD_WEB_PASS install -m 644 webui/ru-webui.service /etc/systemd/system/ systemctl daemon-reload systemctl enable --now ru-webui.service # Открыть порт 8088 (по желанию) iptables -I INPUT -p tcp --dport 8088 -j ACCEPT netfilter-persistent save # Открыть в браузере: http://AMS-IP:8088 ``` Рекомендуется поставить за HTTPS reverse-proxy (nginx, caddy, traefik) с Let's Encrypt. ## Шаг 5. Дальше Через бот или WebUI: - `/server-add` — добавить новый RU-сервер - `/ams-add` — добавить новый ам. сервер - `/add-domain vk.com ozon.ru` — добавить русские сайты по доменам - `/add 5.45.192.1/32` — добавить конкретные IP/CIDR Failover-скрипт каждую минуту проверяет здоровье текущего peer'а и переключает при необходимости. ## Если что-то не работает См. [docs/troubleshooting.md](troubleshooting.md).