diff --git a/install.sh b/install.sh old mode 100644 new mode 100755 index c373d64..cec726e --- a/install.sh +++ b/install.sh @@ -192,24 +192,32 @@ install_stealth_mode() { template_dir=$(interactive_template_selection) [ $? -ne 0 ] && return - # Внутренний порт для telemt (только localhost, не открыт наружу) - # nginx принимает весь трафик на внешнем 443 и проксирует MTProxy-соединения на localhost:8443 - # Внешний порт 8443 НЕ затрагивается и НЕ открывается — telemt слушает только 127.0.0.1 - local telemt_port=8443 + # Архитектура Stealth: + # telemt слушает на 0.0.0.0:443 (принимает ВСЕ подключения) + # nginx слушает на 127.0.0.1:8443 с SSL (обслуживает сайт) + # MTProxy клиент → :443 → telemt (проксирует) + # Обычный браузер → :443 → telemt → 127.0.0.1:8443 → nginx (сайт) + # Провайдер видит только HTTPS на 443 к домену + local nginx_internal_port=8443 echo "" - echo -e " ${DIM}telemt будет слушать на localhost:$telemt_port (только внутренний, не открыт наружу)${NC}" - echo -e " ${DIM}nginx принимает трафик на 443 (внешний) и проксирует к telemt${NC}" + echo -e " ${DIM}telemt принимает весь трафик на 443 (маскировка под HTTPS)${NC}" + echo -e " ${DIM}nginx обслуживает сайт на внутреннем порту $nginx_internal_port${NC}" + echo -e " ${DIM}Провайдер видит только HTTPS-трафик к ${user_domain}:443${NC}" - # Генерация секрета - local secret - secret=$(generate_hex 32) + # Генерация fake-TLS секрета (ee + secret + hex domain) + # Префикс ee говорит Telegram-клиенту маскировать трафик под TLS к домену + local raw_secret + raw_secret=$(generate_hex 32) + local domain_hex + domain_hex=$(printf '%s' "$user_domain" | xxd -p | tr -d '\n') + local faketls_secret="ee${raw_secret}${domain_hex}" # Подтверждение 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 -e " Порт: ${CYAN}443 (telemt + nginx внутри)${NC}" + echo -e " Режим: ${MAGENTA}Stealth (fake-TLS)${NC}" echo "" if ! confirm "Установить прокси + сайт?"; then @@ -220,11 +228,15 @@ install_stealth_mode() { ensure_deps install_telemt_full || return - # Конфиг telemt: маскировка на localhost (nginx) - generate_telemt_toml "$secret" "$telemt_port" "stealth" "127.0.0.1" "443" + # Конфиг telemt: слушает 443, маскировка на локальный nginx + generate_telemt_toml "$raw_secret" "443" "stealth" "127.0.0.1" "$nginx_internal_port" - # Настройка сайта (nginx + certbot + шаблон) - setup_stealth_mode "$user_domain" "$template_dir" "$telemt_port" "$ssl_email" || return + # Настройка сайта (nginx на внутреннем порту + certbot + шаблон) + setup_stealth_mode "$user_domain" "$template_dir" "$nginx_internal_port" "$ssl_email" || return + + # Останавливаем nginx на 443 перед запуском telemt (telemt займёт 443) + # nginx уже перенастроен на внутренний порт + systemctl restart nginx 2>/dev/null # Запуск telemt start_telemt || return @@ -232,10 +244,10 @@ install_stealth_mode() { # Сохраняем конфиг local tpl_id tpl_id=$(basename "$template_dir") - save_gotelegram_config "telemt" "stealth" "443" "$secret" "127.0.0.1" "$user_domain" "$tpl_id" + save_gotelegram_config "telemt" "stealth" "443" "$raw_secret" "$user_domain" "$user_domain" "$tpl_id" - # Результат - show_proxy_info + # Результат — используем домен и fake-TLS ссылку + show_proxy_info_stealth "$user_domain" "$faketls_secret" echo -e " ${WHITE}Сайт:${NC} ${GREEN}https://${user_domain}${NC}" log_success "GoTelegram v${GOTELEGRAM_VERSION} установлен! (Stealth-режим)" } diff --git a/lib/telemt_config.sh b/lib/telemt_config.sh index f56fa27..81f803b 100644 --- a/lib/telemt_config.sh +++ b/lib/telemt_config.sh @@ -36,10 +36,10 @@ generate_telemt_toml() { mkdir -p "$(dirname "$output")" - # В stealth-режиме telemt слушает только localhost (трафик идёт через nginx) - # В quick-режиме — на всех интерфейсах (клиенты подключаются напрямую) + # telemt всегда слушает на 0.0.0.0 (внешний трафик) + # В stealth-режиме: telemt на 0.0.0.0:443, nginx на 127.0.0.1:8443 (внутренний) + # В quick-режиме: telemt на 0.0.0.0:443, без nginx local bind_addr="0.0.0.0" - [ "$mask_mode" = "stealth" ] && bind_addr="127.0.0.1" cat > "$output" << EOTOML # GoTelegram v${GOTELEGRAM_VERSION} — telemt configuration @@ -286,3 +286,34 @@ show_proxy_info() { qrencode -t UTF8 -m 2 "$link" 2>/dev/null fi } + +# ── Вывод информации о прокси (Stealth-режим) ────────────────────────────── +# В stealth-режиме ссылка содержит домен (не IP) и fake-TLS секрет (ee...) +show_proxy_info_stealth() { + local domain="$1" + local faketls_secret="$2" + + local link="tg://proxy?server=${domain}&port=443&secret=${faketls_secret}" + + echo "" + echo -e " ${BOLD}${WHITE}✅ Stealth-прокси настроен${NC}" + echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}" + echo -e " ${WHITE}Ядро:${NC} telemt (Rust)" + echo -e " ${WHITE}Домен:${NC} ${CYAN}${domain}${NC}" + echo -e " ${WHITE}Порт:${NC} ${CYAN}443${NC} (внешний, telemt)" + echo -e " ${WHITE}Режим:${NC} ${MAGENTA}Stealth (fake-TLS)${NC}" + echo -e " ${WHITE}nginx:${NC} ${CYAN}127.0.0.1:8443${NC} (внутренний)" + echo -e " ${WHITE}Secret:${NC} ${CYAN}${faketls_secret:0:20}...${NC}" + echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}" + echo -e " ${WHITE}Ссылка для Telegram:${NC}" + echo -e " ${GREEN}${link}${NC}" + echo "" + echo -e " ${DIM}Провайдер видит: HTTPS-трафик к ${domain}:443${NC}" + echo -e " ${DIM}Telegram-клиент маскирует соединение под TLS${NC}" + echo "" + + # QR если доступен + if command -v qrencode &>/dev/null; then + qrencode -t UTF8 -m 2 "$link" 2>/dev/null + fi +} diff --git a/lib/website.sh b/lib/website.sh index dec3381..1b8f89d 100644 --- a/lib/website.sh +++ b/lib/website.sh @@ -40,7 +40,8 @@ generate_nginx_config() { cat > "$NGINX_SITE_CONF" << 'EONGINX' # GoTelegram v2.2 — nginx config -# Обслуживает сайт-маскировку для telemt stealth mode +# Stealth: nginx на 127.0.0.1:8443 (внутренний), telemt на 0.0.0.0:443 (внешний) +# Обычный браузер → :443 → telemt → 127.0.0.1:8443 → nginx (сайт) server { listen 80; @@ -60,8 +61,7 @@ server { } server { - listen SSL_PORT_PLACEHOLDER ssl http2; - listen [::]:SSL_PORT_PLACEHOLDER ssl http2; + listen 127.0.0.1:SSL_PORT_PLACEHOLDER ssl http2; server_name DOMAIN_PLACEHOLDER; # SSL сертификаты @@ -113,7 +113,7 @@ EONGINX local escaped_domain escaped_domain=$(printf '%s\n' "$domain" | sed 's/[&/\]/\\&/g') sed -i "s|DOMAIN_PLACEHOLDER|${escaped_domain}|g" "$NGINX_SITE_CONF" - sed -i "s|SSL_PORT_PLACEHOLDER|443|g" "$NGINX_SITE_CONF" + sed -i "s|SSL_PORT_PLACEHOLDER|${proxy_port}|g" "$NGINX_SITE_CONF" # Активируем сайт rm -f /etc/nginx/sites-enabled/default 2>/dev/null