mirror of
https://github.com/anten-ka/gotelegram_pro.git
synced 2026-05-19 15:46:02 +00:00
stealth: telemt on 0.0.0.0:443, nginx on 127.0.0.1:8443, domain-based proxy link with ee-secret
This commit is contained in:
48
install.sh
Normal file → Executable file
48
install.sh
Normal file → Executable file
@@ -192,24 +192,32 @@ install_stealth_mode() {
|
|||||||
template_dir=$(interactive_template_selection)
|
template_dir=$(interactive_template_selection)
|
||||||
[ $? -ne 0 ] && return
|
[ $? -ne 0 ] && return
|
||||||
|
|
||||||
# Внутренний порт для telemt (только localhost, не открыт наружу)
|
# Архитектура Stealth:
|
||||||
# nginx принимает весь трафик на внешнем 443 и проксирует MTProxy-соединения на localhost:8443
|
# telemt слушает на 0.0.0.0:443 (принимает ВСЕ подключения)
|
||||||
# Внешний порт 8443 НЕ затрагивается и НЕ открывается — telemt слушает только 127.0.0.1
|
# nginx слушает на 127.0.0.1:8443 с SSL (обслуживает сайт)
|
||||||
local telemt_port=8443
|
# MTProxy клиент → :443 → telemt (проксирует)
|
||||||
|
# Обычный браузер → :443 → telemt → 127.0.0.1:8443 → nginx (сайт)
|
||||||
|
# Провайдер видит только HTTPS на 443 к домену
|
||||||
|
local nginx_internal_port=8443
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${DIM}telemt будет слушать на localhost:$telemt_port (только внутренний, не открыт наружу)${NC}"
|
echo -e " ${DIM}telemt принимает весь трафик на 443 (маскировка под HTTPS)${NC}"
|
||||||
echo -e " ${DIM}nginx принимает трафик на 443 (внешний) и проксирует к telemt${NC}"
|
echo -e " ${DIM}nginx обслуживает сайт на внутреннем порту $nginx_internal_port${NC}"
|
||||||
|
echo -e " ${DIM}Провайдер видит только HTTPS-трафик к ${user_domain}:443${NC}"
|
||||||
|
|
||||||
# Генерация секрета
|
# Генерация fake-TLS секрета (ee + secret + hex domain)
|
||||||
local secret
|
# Префикс ee говорит Telegram-клиенту маскировать трафик под TLS к домену
|
||||||
secret=$(generate_hex 32)
|
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 ""
|
||||||
echo -e " ${BOLD}${WHITE}📋 Конфигурация:${NC}"
|
echo -e " ${BOLD}${WHITE}📋 Конфигурация:${NC}"
|
||||||
echo -e " Домен: ${CYAN}${user_domain}${NC}"
|
echo -e " Домен: ${CYAN}${user_domain}${NC}"
|
||||||
echo -e " Порт: ${CYAN}443 (nginx) → $telemt_port (telemt)${NC}"
|
echo -e " Порт: ${CYAN}443 (telemt + nginx внутри)${NC}"
|
||||||
echo -e " Режим: ${MAGENTA}Stealth${NC}"
|
echo -e " Режим: ${MAGENTA}Stealth (fake-TLS)${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
if ! confirm "Установить прокси + сайт?"; then
|
if ! confirm "Установить прокси + сайт?"; then
|
||||||
@@ -220,11 +228,15 @@ install_stealth_mode() {
|
|||||||
ensure_deps
|
ensure_deps
|
||||||
install_telemt_full || return
|
install_telemt_full || return
|
||||||
|
|
||||||
# Конфиг telemt: маскировка на localhost (nginx)
|
# Конфиг telemt: слушает 443, маскировка на локальный nginx
|
||||||
generate_telemt_toml "$secret" "$telemt_port" "stealth" "127.0.0.1" "443"
|
generate_telemt_toml "$raw_secret" "443" "stealth" "127.0.0.1" "$nginx_internal_port"
|
||||||
|
|
||||||
# Настройка сайта (nginx + certbot + шаблон)
|
# Настройка сайта (nginx на внутреннем порту + certbot + шаблон)
|
||||||
setup_stealth_mode "$user_domain" "$template_dir" "$telemt_port" "$ssl_email" || return
|
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
|
# Запуск telemt
|
||||||
start_telemt || return
|
start_telemt || return
|
||||||
@@ -232,10 +244,10 @@ install_stealth_mode() {
|
|||||||
# Сохраняем конфиг
|
# Сохраняем конфиг
|
||||||
local tpl_id
|
local tpl_id
|
||||||
tpl_id=$(basename "$template_dir")
|
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"
|
||||||
|
|
||||||
# Результат
|
# Результат — используем домен и fake-TLS ссылку
|
||||||
show_proxy_info
|
show_proxy_info_stealth "$user_domain" "$faketls_secret"
|
||||||
echo -e " ${WHITE}Сайт:${NC} ${GREEN}https://${user_domain}${NC}"
|
echo -e " ${WHITE}Сайт:${NC} ${GREEN}https://${user_domain}${NC}"
|
||||||
log_success "GoTelegram v${GOTELEGRAM_VERSION} установлен! (Stealth-режим)"
|
log_success "GoTelegram v${GOTELEGRAM_VERSION} установлен! (Stealth-режим)"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,10 +36,10 @@ generate_telemt_toml() {
|
|||||||
|
|
||||||
mkdir -p "$(dirname "$output")"
|
mkdir -p "$(dirname "$output")"
|
||||||
|
|
||||||
# В stealth-режиме telemt слушает только localhost (трафик идёт через nginx)
|
# telemt всегда слушает на 0.0.0.0 (внешний трафик)
|
||||||
# В quick-режиме — на всех интерфейсах (клиенты подключаются напрямую)
|
# В 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"
|
local bind_addr="0.0.0.0"
|
||||||
[ "$mask_mode" = "stealth" ] && bind_addr="127.0.0.1"
|
|
||||||
|
|
||||||
cat > "$output" << EOTOML
|
cat > "$output" << EOTOML
|
||||||
# GoTelegram v${GOTELEGRAM_VERSION} — telemt configuration
|
# GoTelegram v${GOTELEGRAM_VERSION} — telemt configuration
|
||||||
@@ -286,3 +286,34 @@ show_proxy_info() {
|
|||||||
qrencode -t UTF8 -m 2 "$link" 2>/dev/null
|
qrencode -t UTF8 -m 2 "$link" 2>/dev/null
|
||||||
fi
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -40,7 +40,8 @@ generate_nginx_config() {
|
|||||||
|
|
||||||
cat > "$NGINX_SITE_CONF" << 'EONGINX'
|
cat > "$NGINX_SITE_CONF" << 'EONGINX'
|
||||||
# GoTelegram v2.2 — nginx config
|
# 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 {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
@@ -60,8 +61,7 @@ server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen SSL_PORT_PLACEHOLDER ssl http2;
|
listen 127.0.0.1:SSL_PORT_PLACEHOLDER ssl http2;
|
||||||
listen [::]:SSL_PORT_PLACEHOLDER ssl http2;
|
|
||||||
server_name DOMAIN_PLACEHOLDER;
|
server_name DOMAIN_PLACEHOLDER;
|
||||||
|
|
||||||
# SSL сертификаты
|
# SSL сертификаты
|
||||||
@@ -113,7 +113,7 @@ EONGINX
|
|||||||
local escaped_domain
|
local escaped_domain
|
||||||
escaped_domain=$(printf '%s\n' "$domain" | sed 's/[&/\]/\\&/g')
|
escaped_domain=$(printf '%s\n' "$domain" | sed 's/[&/\]/\\&/g')
|
||||||
sed -i "s|DOMAIN_PLACEHOLDER|${escaped_domain}|g" "$NGINX_SITE_CONF"
|
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
|
rm -f /etc/nginx/sites-enabled/default 2>/dev/null
|
||||||
|
|||||||
Reference in New Issue
Block a user