mirror of
https://github.com/anten-ka/kaskad-pro.git
synced 2026-05-19 13:26:01 +00:00
Kaskad PRO v2.3: progress bar on startup, full uninstall with double confirmation, docs and user guide
Made-with: Cursor
This commit is contained in:
174
install.sh
174
install.sh
@@ -2,12 +2,12 @@
|
||||
set -o pipefail
|
||||
|
||||
# ══════════════════════════════════════════════════════════════
|
||||
# KASKAD PRO v2.2 — Cascading VPN / Proxy Manager
|
||||
# KASKAD PRO v2.3 — Cascading VPN / Proxy Manager
|
||||
# Telegram Bot · Live Ping · Monitoring · Alerts · GeoIP · System Stats
|
||||
# Channel: https://www.youtube.com/@antenkaru
|
||||
# ══════════════════════════════════════════════════════════════
|
||||
|
||||
KASKAD_VERSION="2.2"
|
||||
KASKAD_VERSION="2.3"
|
||||
KASKAD_DIR="/etc/kaskad"
|
||||
KASKAD_CONF="$KASKAD_DIR/config"
|
||||
KASKAD_LOG="/var/log/kaskad.log"
|
||||
@@ -547,6 +547,79 @@ flush_rules() {
|
||||
read -p "Нажмите Enter..."
|
||||
}
|
||||
|
||||
full_uninstall() {
|
||||
clear
|
||||
echo -e "\n${RED}╔══════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${RED}║ ⚠ ПОЛНОЕ УДАЛЕНИЕ KASKAD PRO ⚠ ║${NC}"
|
||||
echo -e "${RED}╚══════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
echo -e "${WHITE}Будут удалены:${NC}"
|
||||
echo -e " ${RED}•${NC} Все правила каскада (iptables)"
|
||||
echo -e " ${RED}•${NC} Telegram-бот и мониторинг"
|
||||
echo -e " ${RED}•${NC} Конфигурация ${WHITE}/etc/kaskad/${NC}"
|
||||
echo -e " ${RED}•${NC} Команда ${WHITE}gokaskad${NC}"
|
||||
echo -e " ${RED}•${NC} Логи ${WHITE}/var/log/kaskad.log${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}НЕ будет затронуто:${NC}"
|
||||
echo -e " ${GREEN}•${NC} Системные пакеты (iptables, jq, curl, qrencode)"
|
||||
echo -e " ${GREEN}•${NC} Ваши VPN / прокси (WireGuard, XRay и т.д.)"
|
||||
echo -e " ${GREEN}•${NC} Настройки sysctl (ip_forward, bbr)"
|
||||
echo ""
|
||||
read -p "$(echo -e "${RED}Удалить Kaskad PRO полностью? (y/n): ${NC}")" confirm1
|
||||
[[ "$confirm1" != "y" ]] && { echo -e "\n${CYAN}Отменено.${NC}"; read -p "Нажмите Enter..."; return; }
|
||||
local words=("УДАЛИТЬ" "СТЕРЕТЬ" "СНЕСТИ" "УНИЧТОЖИТЬ" "ПРОЩАЙ")
|
||||
local word="${words[$((RANDOM % ${#words[@]}))]}"
|
||||
echo ""
|
||||
echo -e "${RED}Последний шанс! Введите слово ${WHITE}${word}${RED} для подтверждения:${NC}"
|
||||
read -p "> " confirm2
|
||||
if [[ "$confirm2" != "$word" ]]; then
|
||||
echo -e "\n${CYAN}Неверное слово. Удаление отменено.${NC}"
|
||||
read -p "Нажмите Enter..."
|
||||
return
|
||||
fi
|
||||
echo ""
|
||||
echo -e "${YELLOW}Удаление Kaskad PRO...${NC}\n"
|
||||
if systemctl is-active kaskad-bot &>/dev/null; then
|
||||
systemctl stop kaskad-bot 2>/dev/null; systemctl disable kaskad-bot 2>/dev/null
|
||||
fi
|
||||
[ -f "$BOT_PID_FILE" ] && { kill "$(cat "$BOT_PID_FILE")" 2>/dev/null; rm -f "$BOT_PID_FILE"; }
|
||||
rm -f /etc/systemd/system/kaskad-bot.service
|
||||
echo -e " ${GREEN}✓${NC} Telegram-бот остановлен"
|
||||
if systemctl is-active kaskad-monitor &>/dev/null; then
|
||||
systemctl stop kaskad-monitor 2>/dev/null; systemctl disable kaskad-monitor 2>/dev/null
|
||||
fi
|
||||
[ -f "$MONITOR_PID_FILE" ] && { kill "$(cat "$MONITOR_PID_FILE")" 2>/dev/null; rm -f "$MONITOR_PID_FILE"; }
|
||||
rm -f /etc/systemd/system/kaskad-monitor.service
|
||||
systemctl daemon-reload 2>/dev/null
|
||||
echo -e " ${GREEN}✓${NC} Мониторинг остановлен"
|
||||
while iptables -t nat -S PREROUTING 2>/dev/null | grep -q "DNAT"; do
|
||||
local rule; rule=$(iptables -t nat -S PREROUTING | grep "DNAT" | head -1)
|
||||
eval "iptables -t nat -D ${rule#-A }" 2>/dev/null
|
||||
done
|
||||
for chain in INPUT FORWARD; do
|
||||
while iptables -S "$chain" 2>/dev/null | grep -q "kaskad"; do
|
||||
local rule; rule=$(iptables -S "$chain" | grep "kaskad" | head -1)
|
||||
eval "iptables -D ${rule#-A }" 2>/dev/null
|
||||
done
|
||||
done
|
||||
save_iptables
|
||||
echo -e " ${GREEN}✓${NC} Правила iptables удалены"
|
||||
rm -rf "$KASKAD_DIR"
|
||||
echo -e " ${GREEN}✓${NC} Конфигурация удалена"
|
||||
rm -f "$KASKAD_LOG"
|
||||
echo -e " ${GREEN}✓${NC} Логи удалены"
|
||||
rm -f /usr/local/bin/gokaskad
|
||||
echo -e " ${GREEN}✓${NC} Команда gokaskad удалена"
|
||||
echo ""
|
||||
echo -e "${GREEN}══════════════════════════════════════════${NC}"
|
||||
echo -e "${GREEN} Kaskad PRO полностью удалён.${NC}"
|
||||
echo -e "${WHITE} Спасибо, что пользовались!${NC}"
|
||||
echo -e "${GREEN}══════════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
read -p "Нажмите Enter..."
|
||||
exit 0
|
||||
}
|
||||
|
||||
manage_aliases_menu() {
|
||||
while true; do
|
||||
clear
|
||||
@@ -1428,6 +1501,7 @@ show_menu() {
|
||||
echo -e "12) ${YELLOW}PROMO${NC}"
|
||||
echo -e "13) ${MAGENTA}📚 Инструкция${NC}"
|
||||
echo -e "14) ${WHITE}Имена серверов${NC}"
|
||||
echo -e "15) ${RED}⚠ Удалить Kaskad PRO${NC}"
|
||||
echo -e " 0) Выход"
|
||||
echo -e "------------------------------------------------------"
|
||||
read -p "Выбор: " ch
|
||||
@@ -1436,10 +1510,102 @@ show_menu() {
|
||||
3) configure_rule "tcp" "MTProto/TProxy";; 4) configure_custom_rule;;
|
||||
5) list_active_rules;; 6) ping_menu;; 7) monitoring_menu;; 8) bot_menu;;
|
||||
9) delete_single_rule;; 10) flush_rules;; 11) self_update;; 12) show_promo;;
|
||||
13) show_instructions;; 14) manage_aliases_menu;; 0) exit 0;; esac
|
||||
13) show_instructions;; 14) manage_aliases_menu;; 15) full_uninstall;; 0) exit 0;; esac
|
||||
done
|
||||
}
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# STARTUP WITH PROGRESS
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
run_startup() {
|
||||
local total=7 s=0
|
||||
|
||||
clear; echo ""
|
||||
echo -e "${MAGENTA}╔══════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${MAGENTA}║ KASKAD PRO v${KASKAD_VERSION} — Загрузка ║${NC}"
|
||||
echo -e "${MAGENTA}╚══════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
|
||||
((s++))
|
||||
printf " ${CYAN}[%d/%d]${NC} ${YELLOW}⏳${NC} Проверка прав root..." "$s" "$total"
|
||||
check_root
|
||||
printf "\r ${CYAN}[%d/%d]${NC} ${GREEN}✓${NC} Права root подтверждены \n" "$s" "$total"
|
||||
|
||||
((s++))
|
||||
printf " ${CYAN}[%d/%d]${NC} ${YELLOW}⏳${NC} Загрузка конфигурации..." "$s" "$total"
|
||||
init_config
|
||||
printf "\r ${CYAN}[%d/%d]${NC} ${GREEN}✓${NC} Конфигурация загружена \n" "$s" "$total"
|
||||
|
||||
((s++))
|
||||
printf " ${CYAN}[%d/%d]${NC} ${YELLOW}⏳${NC} Установка gokaskad..." "$s" "$total"
|
||||
if [ "$(readlink -f "$0" 2>/dev/null)" != "/usr/local/bin/gokaskad" ]; then
|
||||
cp -f "$0" "/usr/local/bin/gokaskad"; chmod +x "/usr/local/bin/gokaskad"
|
||||
fi
|
||||
printf "\r ${CYAN}[%d/%d]${NC} ${GREEN}✓${NC} Команда gokaskad \n" "$s" "$total"
|
||||
|
||||
((s++))
|
||||
printf " ${CYAN}[%d/%d]${NC} ${YELLOW}⏳${NC} IP Forwarding + BBR..." "$s" "$total"
|
||||
if grep -qE '^[[:space:]]*#?[[:space:]]*net\.ipv4\.ip_forward' /etc/sysctl.conf; then
|
||||
sed -i 's/^#*\s*net\.ipv4\.ip_forward.*/net.ipv4.ip_forward=1/' /etc/sysctl.conf
|
||||
else
|
||||
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
|
||||
fi
|
||||
grep -q "^net.core.default_qdisc=fq" /etc/sysctl.conf || echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
|
||||
grep -q "^net.ipv4.tcp_congestion_control=bbr" /etc/sysctl.conf || echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
|
||||
sysctl -p > /dev/null 2>&1
|
||||
printf "\r ${CYAN}[%d/%d]${NC} ${GREEN}✓${NC} IP Forwarding + BBR Turbo \n" "$s" "$total"
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
local need_install=0
|
||||
for cmd in iptables jq curl qrencode; do command -v "$cmd" &>/dev/null || need_install=1; done
|
||||
dpkg -s iptables-persistent &>/dev/null 2>&1 || need_install=1
|
||||
((s++))
|
||||
if [ "$need_install" -eq 1 ]; then
|
||||
printf " ${CYAN}[%d/%d]${NC} ${YELLOW}⏳${NC} Установка пакетов" "$s" "$total"
|
||||
( while true; do printf "."; sleep 1; done ) &
|
||||
local dpid=$!
|
||||
if command -v apt-get &>/dev/null; then
|
||||
apt-get update -y > /dev/null 2>&1
|
||||
apt-get install -y iptables-persistent netfilter-persistent qrencode jq curl procps > /dev/null 2>&1
|
||||
elif command -v dnf &>/dev/null; then
|
||||
dnf install -y iptables-services jq qrencode curl procps-ng > /dev/null 2>&1
|
||||
elif command -v yum &>/dev/null; then
|
||||
yum install -y iptables-services jq qrencode curl procps-ng > /dev/null 2>&1
|
||||
else
|
||||
kill $dpid 2>/dev/null; wait $dpid 2>/dev/null
|
||||
printf "\r ${CYAN}[%d/%d]${NC} ${RED}✗${NC} Пакетный менеджер не найден! \n" "$s" "$total"
|
||||
exit 1
|
||||
fi
|
||||
kill $dpid 2>/dev/null; wait $dpid 2>/dev/null
|
||||
printf "\r ${CYAN}[%d/%d]${NC} ${GREEN}✓${NC} Пакеты установлены \n" "$s" "$total"
|
||||
else
|
||||
printf " ${CYAN}[%d/%d]${NC} ${GREEN}✓${NC} Все зависимости на месте \n" "$s" "$total"
|
||||
fi
|
||||
|
||||
((s++))
|
||||
printf " ${CYAN}[%d/%d]${NC} ${YELLOW}⏳${NC} Сетевой интерфейс..." "$s" "$total"
|
||||
detect_interface
|
||||
printf "\r ${CYAN}[%d/%d]${NC} ${GREEN}✓${NC} Интерфейс: %-20s \n" "$s" "$total" "$IFACE"
|
||||
|
||||
((s++))
|
||||
printf " ${CYAN}[%d/%d]${NC} ${YELLOW}⏳${NC} Внешний IP..." "$s" "$total"
|
||||
get_my_ip
|
||||
printf "\r ${CYAN}[%d/%d]${NC} ${GREEN}✓${NC} IP: %-25s \n" "$s" "$total" "$MY_IP"
|
||||
|
||||
echo ""
|
||||
local w=40 bar=""
|
||||
for ((i=0; i<w; i++)); do bar+="█"; done
|
||||
echo -e " ${CYAN}[${GREEN}${bar}${CYAN}]${NC} ${GREEN}100%${NC}"
|
||||
echo ""
|
||||
echo -e " ${GREEN}✅ Kaskad PRO v${KASKAD_VERSION} готов к работе!${NC}"
|
||||
echo ""
|
||||
sleep 2
|
||||
|
||||
show_promo
|
||||
show_menu
|
||||
}
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# ENTRY POINT
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
@@ -1447,5 +1613,5 @@ show_menu() {
|
||||
case "${1:-}" in
|
||||
--bot-daemon) init_config; bot_daemon ;;
|
||||
--monitor-daemon) init_config; monitor_daemon ;;
|
||||
*) check_root; init_config; prepare_system; detect_interface; get_my_ip; show_promo; show_menu ;;
|
||||
*) run_startup ;;
|
||||
esac
|
||||
|
||||
Reference in New Issue
Block a user