#!/bin/sh EP_LIST='Россия |engage.cloudflareclient.com:4500 Россия #2 |engage.cloudflareclient.com:2408 Россия #3 |engage.cloudflareclient.com:500' GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' NC='\033[0m' MAGENTA="\033[1;35m" CYAN="\033[1;36m" clear chose_endpoint() { while true; do echo -e "\n${MAGENTA}Выберите endpoint${NC}" i=1 while IFS='|' read -r country ep; do printf "${CYAN}%d) ${GREEN}%-10s${MAGENTA}| ${CYAN}%s${NC}\n" "$i" "$country" "$ep" i=$((i+1)) done </dev/null 2>&1; then PKG="apk" elif command -v opkg >/dev/null 2>&1; then PKG="opkg" else echo -e "${RED}Не найден пакетный менеджер!${NC}" exit 1 fi echo -e "${CYAN}Проверяем зависимости${NC}" deps="wireguard-tools curl jq" missing="" for pkg in $deps; do if [ "$PKG" = "apk" ]; then apk info -e "$pkg" >/dev/null 2>&1 || missing="$missing $pkg" else opkg list-installed 2>/dev/null | grep -q "^$pkg " || missing="$missing $pkg" fi done if [ -n "$missing" ]; then echo -e "${CYAN}Обновляем пакеты${NC}" if [ "$PKG" = "apk" ]; then apk update >/dev/null 2>&1 || { echo -e "\n${RED}Ошибка обновления пакетов!${NC}"; exit 1; } else opkg update >/dev/null 2>&1 || { echo -e "\n${RED}Ошибка обновления пакетов!${NC}"; exit 1; } fi install_pkg() { pkg="$1" if [ "$PKG" = "apk" ]; then apk info -e "$pkg" >/dev/null 2>&1 && return echo -e "${GREEN}Устанавливаем:${NC} $pkg" apk add "$pkg" >/dev/null 2>&1 || { echo -e "\n${RED}Ошибка установки${NC} $pkg"; exit 1; } else opkg list-installed 2>/dev/null | grep -qF "^$pkg " && return echo -e "${GREEN}Устанавливаем:${NC} $pkg" opkg install "$pkg" >/dev/null 2>&1 || { echo -e "\n${RED}Ошибка установки${NC} $pkg"; exit 1; } fi } for pkg in $missing; do install_pkg "$pkg" done fi echo -e "${CYAN}Генерируем ключи${NC}" priv="$(wg genkey)" pub="$(printf "%s" "$priv" | wg pubkey)" api="https://api.cloudflareclient.com/v0i1909051800" ins() { curl -s \ -H "User-Agent: okhttp/3.12.1" \ -H "Content-Type: application/json" \ -X "$1" "$api/$2" "${@:3}" } sec() { ins "$1" "$2" -H "Authorization: Bearer $3" "${@:4}" } echo -e "${CYAN}Регистрируем устройство в ${NC}Cloudflare" response=$(ins POST "reg" \ -d "{\"install_id\":\"\",\"tos\":\"$(date -u +%FT%TZ)\",\"key\":\"${pub}\",\"fcm_token\":\"\",\"type\":\"ios\",\"locale\":\"en_US\"}") id=$(echo "$response" | jq -r '.result.id') token=$(echo "$response" | jq -r '.result.token') if [ -z "$id" ] || [ "$id" = "null" ]; then echo -e "${RED}Ошибка регистрации${NC} $response" if [ "$(/etc/init.d/zapret status 2>/dev/null)" = "running" ]; then echo -e "${YELLOW}Zapret запущен. Направьте через него ${NC}cloudflareclient.com${YELLOW} и повторите попытку.${NC}" else echo -e "${YELLOW}Требуется установленный и запущенный ${NC}Zapret${YELLOW} с маршрутизацией ${NC}cloudflareclient.com${YELLOW} через него.${NC}" fi exit 1 fi ################################################################################################ chose_endpoint ################################################################################################ echo -e "${GREEN}Активируем и генерируем ${NC}WARP${NC}" response=$(sec PATCH "reg/${id}" "$token" -d '{"warp_enabled":true}') peer_pub=$(echo "$response" | jq -r '.result.config.peers[0].public_key') client_ipv4=$(echo "$response" | jq -r '.result.config.interface.addresses.v4') client_ipv6=$(echo "$response" | jq -r '.result.config.interface.addresses.v6') if [ -z "$peer_pub" ] || [ "$peer_pub" = "null" ]; then echo -e "\n${RED}Ошибка получения конфигурации${NC}" exit 1 fi conf=$(cat < [Peer] PublicKey = ${peer_pub} AllowedIPs = 0.0.0.0/0, ::/0 Endpoint = ${ENDPOINT} PersistentKeepalive = 25 EOF ) echo echo -e "${GREEN}========== ${YELLOW}WARP CONFIG${GREEN} ==========${NC}" echo "$conf" echo -e "${GREEN}=================================${NC}" echo "$conf" > /root/WARP.conf echo -e "\n${YELLOW}Файл сохранён:${NC} /root/WARP.conf"