Files
gotelegram_pro/install.sh

461 lines
19 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# ══════════════════════════════════════════════════════════════════════════════
# GoTelegram v2.2 — MTProxy на ядре telemt (Rust + Tokio)
# Anti-DPI • Fake TLS • TCP Splice • JA3/JA4 Resistance
#
# Установка:
# curl -sL URL/install.sh | sudo bash
# ══════════════════════════════════════════════════════════════════════════════
set -uo pipefail
# Путь к скрипту и библиотекам
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LIB_DIR="$SCRIPT_DIR/lib"
# Загружаем библиотеки
source "$LIB_DIR/common.sh"
source "$LIB_DIR/telemt.sh"
source "$LIB_DIR/telemt_config.sh"
source "$LIB_DIR/website.sh"
source "$LIB_DIR/templates_catalog.sh"
source "$LIB_DIR/backup.sh"
# ── Главное меню ─────────────────────────────────────────────────────────────
show_main_menu() {
local status
status=$(telemt_status)
local status_badge
case "$status" in
running) status_badge="${GREEN}● Работает${NC}" ;;
stopped) status_badge="${YELLOW}○ Остановлен${NC}" ;;
*) status_badge="${RED}Не установлен${NC}" ;;
esac
echo ""
echo -e " ${BOLD}${WHITE}Главное меню${NC}${status_badge}"
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
echo -e " ${CYAN} 1)${NC} 🔧 Установить / Обновить прокси"
echo -e " ${CYAN} 2)${NC} 📊 Статус"
echo -e " ${CYAN} 3)${NC} 🔗 Ссылка для подключения"
echo -e " ${CYAN} 4)${NC} 📤 Поделиться ключом"
echo -e " ${CYAN} 5)${NC} 🔄 Перезапуск"
echo -e " ${CYAN} 6)${NC} 📋 Логи"
echo -e " ${CYAN} 7)${NC} 🎭 Сменить режим / шаблон"
echo -e " ${CYAN} 8)${NC} 💾 Бекап конфигурации"
echo -e " ${CYAN} 9)${NC} 📦 Восстановить из бекапа"
echo -e " ${CYAN}10)${NC} ⬆️ Обновить telemt"
echo -e " ${CYAN}11)${NC} 🌐 Управление сайтом (SSL)"
echo -e " ${CYAN}12)${NC} 🗑 Удалить прокси"
echo -e " ${CYAN}13)${NC} 🏷 Промо"
echo -e " ${CYAN} 0)${NC} 🚪 Выход"
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
echo -ne " ${WHITE}Выбор:${NC} "
}
# ── Установка: выбор режима ──────────────────────────────────────────────────
menu_install() {
# Проверяем v1
if detect_v1_installation; then
echo ""
echo -e " ${YELLOW}⚠️ Обнаружена установка GoTelegram v1 (mtg)${NC}"
echo -e " ${DIM}Контейнер: ${V1_CONTAINER_NAME}${NC}"
echo ""
if ! migrate_v1_to_v2; then
return
fi
fi
echo ""
echo -e " ${BOLD}${WHITE}🎭 Выберите режим маскировки:${NC}"
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
echo -e " ${CYAN}1)${NC} ${GREEN}⚡ Quick${NC} — маскировка под популярный сайт"
echo -e " ${DIM}Быстро, без домена. telemt маскирует трафик${NC}"
echo -e " ${DIM}под выбранный сайт (google.com и т.д.)${NC}"
echo ""
echo -e " ${CYAN}2)${NC} ${MAGENTA}🛡 Stealth${NC} — свой сайт + полная маскировка"
echo -e " ${DIM}nginx + SSL + HTML-шаблон + telemt.${NC}"
echo -e " ${DIM}DPI видит реальный сайт с реальным сертификатом.${NC}"
echo -e " ${DIM}Требует: домен, направленный на этот сервер.${NC}"
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
echo -ne " ${WHITE}Выбор (1/2):${NC} "
read -r mode_choice
mode_choice="${mode_choice:-}"
case "$mode_choice" in
1) install_quick_mode ;;
2) install_stealth_mode ;;
*) log_error "Неверный выбор: ${mode_choice:-<пусто>}" ;;
esac
}
# ── Quick-режим ──────────────────────────────────────────────────────────────
install_quick_mode() {
log_step "Установка Quick-режима"
# Выбор домена
local domain
domain=$(select_quick_domain)
[ $? -ne 0 ] && return
# Выбор порта
local port
port=$(select_port)
[ $? -ne 0 ] && return
# Генерация секрета
local secret
secret=$(generate_hex 32)
# Подтверждение
local ip
ip=$(get_server_ip)
echo ""
echo -e " ${BOLD}${WHITE}📋 Конфигурация:${NC}"
echo -e " IP: ${CYAN}${ip}${NC}"
echo -e " Порт: ${CYAN}${port}${NC}"
echo -e " Маскировка: ${CYAN}${domain}${NC}"
echo -e " Режим: ${GREEN}Quick${NC}"
echo ""
if ! confirm "Установить прокси?"; then
return
fi
# Установка
ensure_deps
install_telemt_full || return
# Генерируем конфиг telemt
generate_telemt_toml "$secret" "$port" "quick" "$domain" "443"
# Валидация
validate_telemt_config || return
# Запуск
start_telemt || return
# Сохраняем GoTelegram конфиг
save_gotelegram_config "telemt" "quick" "$port" "$secret" "$domain" "" ""
# Благодарности
show_credits
# Результат
show_proxy_info
log_success "GoTelegram v${GOTELEGRAM_VERSION} установлен! (Quick-режим)"
}
# ── Stealth-режим ────────────────────────────────────────────────────────────
install_stealth_mode() {
log_step "Установка Stealth-режима"
# Ввод домена
echo ""
echo -ne " ${WHITE}Введите ваш домен (например, example.com):${NC} "
read -r user_domain
if [ -z "$user_domain" ] || ! validate_domain "$user_domain"; then
log_error "Некорректный домен: ${user_domain:-<пусто>}"
return
fi
# Проверяем DNS
local resolved_ip server_ip
resolved_ip=$(dig +short "$user_domain" A 2>/dev/null | head -1)
server_ip=$(get_server_ip)
if [ -n "$resolved_ip" ] && [ "$resolved_ip" != "$server_ip" ]; then
log_warning "Домен $user_domain указывает на $resolved_ip, а не на $server_ip"
if ! confirm "Продолжить всё равно?"; then
return
fi
fi
# Email для Let's Encrypt
echo -ne " ${WHITE}Email для SSL (Enter = без email):${NC} "
read -r ssl_email
# Выбор шаблона
local template_dir
template_dir=$(interactive_template_selection)
[ $? -ne 0 ] && return
# Выбор порта для telemt (внутренний)
local telemt_port=8443
echo ""
echo -e " ${DIM}telemt будет слушать на порту $telemt_port (внутренний)${NC}"
echo -e " ${DIM}nginx будет на 443 (внешний) и проксировать трафик${NC}"
# Генерация секрета
local secret
secret=$(generate_hex 32)
# Подтверждение
echo ""
echo -e " ${BOLD}${WHITE}📋 Конфигурация:${NC}"
echo -e " Домен: ${CYAN}${user_domain}${NC}"
echo -e " Порт: ${CYAN}443 (nginx) → $telemt_port (telemt)${NC}"
echo -e " Режим: ${MAGENTA}Stealth${NC}"
echo ""
if ! confirm "Установить прокси + сайт?"; then
return
fi
# Установка
ensure_deps
install_telemt_full || return
# Конфиг telemt: маскировка на localhost (nginx)
generate_telemt_toml "$secret" "$telemt_port" "stealth" "127.0.0.1" "443"
# Настройка сайта (nginx + certbot + шаблон)
setup_stealth_mode "$user_domain" "$template_dir" "$telemt_port" "$ssl_email" || return
# Запуск telemt
start_telemt || return
# Сохраняем конфиг
local tpl_id
tpl_id=$(basename "$template_dir")
save_gotelegram_config "telemt" "stealth" "443" "$secret" "127.0.0.1" "$user_domain" "$tpl_id"
# Результат
show_proxy_info
echo -e " ${WHITE}Сайт:${NC} ${GREEN}https://${user_domain}${NC}"
log_success "GoTelegram v${GOTELEGRAM_VERSION} установлен! (Stealth-режим)"
}
# ── Статус ───────────────────────────────────────────────────────────────────
menu_status() {
show_proxy_info
# Дополнительно для stealth
local mode
mode=$(config_get mode 2>/dev/null)
if [ "$mode" = "stealth" ]; then
local domain
domain=$(config_get domain 2>/dev/null)
if [ -n "$domain" ]; then
local ssl_expiry
ssl_expiry=$(get_ssl_expiry "$domain")
local nginx_st
nginx_st=$(nginx_status)
echo -e " ${WHITE}nginx:${NC} ${nginx_st}"
echo -e " ${WHITE}SSL до:${NC} ${ssl_expiry}"
echo -e " ${WHITE}Сайт:${NC} https://${domain}"
echo ""
fi
fi
}
# ── Ссылка ───────────────────────────────────────────────────────────────────
menu_link() {
local secret port ip link
secret=$(get_config_value secret)
port=$(get_config_value port)
ip=$(get_server_ip)
link=$(generate_proxy_link "$ip" "$port" "$secret")
echo ""
echo -e " ${BOLD}${WHITE}🔗 Ссылка для подключения:${NC}"
echo ""
echo -e " ${GREEN}${link}${NC}"
echo ""
if command -v qrencode &>/dev/null; then
qrencode -t UTF8 -m 2 "$link" 2>/dev/null
fi
}
# ── Поделиться ───────────────────────────────────────────────────────────────
menu_share() {
local secret port ip link
secret=$(get_config_value secret)
port=$(get_config_value port)
ip=$(get_server_ip)
link=$(generate_proxy_link "$ip" "$port" "$secret")
echo ""
echo -e " ${BOLD}📤 Перешлите это сообщение:${NC}"
echo ""
echo "🔐 MTProxy для Telegram (GoTelegram v${GOTELEGRAM_VERSION})"
echo ""
echo "🌍 Сервер: $ip"
echo "🔌 Порт: $port"
echo ""
echo "👉 Подключиться одним нажатием:"
echo "$link"
echo ""
echo "Просто нажмите на ссылку или настройте вручную."
echo ""
}
# ── Перезапуск ───────────────────────────────────────────────────────────────
menu_restart() {
restart_telemt
local mode
mode=$(config_get mode 2>/dev/null)
if [ "$mode" = "stealth" ]; then
restart_nginx
fi
}
# ── Логи ─────────────────────────────────────────────────────────────────────
menu_logs() {
echo ""
echo -e " ${BOLD}${WHITE}📋 Логи telemt (последние 40 строк):${NC}"
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
telemt_logs 40
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
}
# ── Смена режима / шаблона ───────────────────────────────────────────────────
menu_change_mode() {
local current_mode
current_mode=$(config_get mode 2>/dev/null)
echo ""
echo -e " ${WHITE}Текущий режим:${NC} ${CYAN}${current_mode}${NC}"
echo ""
echo -e " ${CYAN}1)${NC} Сменить шаблон сайта (только stealth)"
echo -e " ${CYAN}2)${NC} Переключить режим (quick ↔ stealth)"
echo -e " ${CYAN}0)${NC} Назад"
echo -ne " ${WHITE}Выбор:${NC} "
read -r ch
case "$ch" in
1)
if [ "$current_mode" != "stealth" ]; then
log_error "Смена шаблона доступна только в stealth-режиме"
return
fi
local template_dir
template_dir=$(interactive_template_selection)
[ $? -ne 0 ] && return
switch_template "$template_dir"
;;
2)
log_warning "Переключение режима требует переустановки."
if confirm "Переустановить прокси?"; then
menu_install
fi
;;
esac
}
# ── Управление сайтом ───────────────────────────────────────────────────────
menu_website() {
local mode
mode=$(config_get mode 2>/dev/null)
if [ "$mode" != "stealth" ]; then
log_info "Управление сайтом доступно только в stealth-режиме"
return
fi
local domain
domain=$(config_get domain 2>/dev/null)
echo ""
echo -e " ${BOLD}${WHITE}🌐 Управление сайтом${NC}"
echo -e " Домен: ${CYAN}${domain}${NC}"
echo -e " SSL до: $(get_ssl_expiry "$domain")"
echo ""
echo -e " ${CYAN}1)${NC} Обновить SSL сертификат"
echo -e " ${CYAN}2)${NC} Перезапустить nginx"
echo -e " ${CYAN}3)${NC} Сменить шаблон"
echo -e " ${CYAN}0)${NC} Назад"
echo -ne " ${WHITE}Выбор:${NC} "
read -r ch
case "$ch" in
1) renew_ssl_certificate ;;
2) restart_nginx ;;
3)
local template_dir
template_dir=$(interactive_template_selection)
[ $? -ne 0 ] && return
switch_template "$template_dir"
;;
esac
}
# ── Удаление ─────────────────────────────────────────────────────────────────
menu_remove() {
echo ""
log_warning "Это удалит прокси и все настройки."
if ! confirm "Вы уверены?"; then
return
fi
# Предлагаем бекап
if confirm "Сделать бекап перед удалением?"; then
interactive_backup
fi
remove_telemt
local mode
mode=$(config_get mode 2>/dev/null)
if [ "$mode" = "stealth" ]; then
remove_stealth_mode
fi
rm -f "$GOTELEGRAM_CONFIG"
log_success "GoTelegram полностью удалён"
}
# ── Промо ────────────────────────────────────────────────────────────────────
menu_promo() {
echo ""
echo -e " ${YELLOW}╔══════════════════════════════════════════════════════╗${NC}"
echo -e " ${YELLOW}${NC} ${BOLD}💰 ХОСТИНГ СО СКИДКОЙ ДО -60%${NC} ${YELLOW}${NC}"
echo -e " ${YELLOW}${NC} Ссылка: ${CYAN}https://vk.cc/ct29NQ${NC} ${YELLOW}${NC}"
echo -e " ${YELLOW}${NC} ${YELLOW}${NC}"
echo -e " ${YELLOW}${NC} Промокоды: OFF60, antenka20, antenka6, antenka12 ${YELLOW}${NC}"
echo -e " ${YELLOW}${NC} ${YELLOW}${NC}"
echo -e " ${YELLOW}${NC} Донат: ${CYAN}https://pay.cloudtips.ru/p/7410814f${NC} ${YELLOW}${NC}"
echo -e " ${YELLOW}╚══════════════════════════════════════════════════════╝${NC}"
echo ""
}
# ── Точка входа ──────────────────────────────────────────────────────────────
main() {
check_root
init_dirs
show_banner
# Pre-flight
check_os
check_disk_space 500
while true; do
show_main_menu
read -r choice
case "$choice" in
1) menu_install ;;
2) menu_status ;;
3) menu_link ;;
4) menu_share ;;
5) menu_restart ;;
6) menu_logs ;;
7) menu_change_mode ;;
8) interactive_backup ;;
9) interactive_restore ;;
10) update_telemt ;;
11) menu_website ;;
12) menu_remove ;;
13) menu_promo ;;
0|q|exit) echo ""; log_info "До встречи! 👋"; exit 0 ;;
*) log_error "Неверный выбор" ;;
esac
echo ""
echo -ne " ${DIM}Нажмите Enter для возврата в меню...${NC}"
read -r
done
}
main "$@"