mirror of
https://github.com/anten-ka/gotelegram_pro.git
synced 2026-05-19 14:36:05 +00:00
fix: telemt v3 config format ([server], [censorship], [access.users]), stealth with dns_overrides
This commit is contained in:
@@ -228,8 +228,8 @@ install_stealth_mode() {
|
|||||||
ensure_deps
|
ensure_deps
|
||||||
install_telemt_full || return
|
install_telemt_full || return
|
||||||
|
|
||||||
# Конфиг telemt: слушает 443, маскировка на локальный nginx
|
# Конфиг telemt: слушает 443, маскировка на локальный nginx через dns_override
|
||||||
generate_telemt_toml "$raw_secret" "443" "stealth" "127.0.0.1" "$nginx_internal_port"
|
generate_telemt_toml "$raw_secret" "443" "stealth" "$user_domain" "$nginx_internal_port"
|
||||||
|
|
||||||
# Настройка сайта (nginx на внутреннем порту + certbot + шаблон)
|
# Настройка сайта (nginx на внутреннем порту + certbot + шаблон)
|
||||||
setup_stealth_mode "$user_domain" "$template_dir" "$nginx_internal_port" "$ssl_email" || return
|
setup_stealth_mode "$user_domain" "$template_dir" "$nginx_internal_port" "$ssl_email" || return
|
||||||
|
|||||||
@@ -174,9 +174,8 @@ LimitNOFILE=65535
|
|||||||
|
|
||||||
# Безопасность
|
# Безопасность
|
||||||
NoNewPrivileges=true
|
NoNewPrivileges=true
|
||||||
ProtectSystem=strict
|
ProtectSystem=full
|
||||||
ProtectHome=true
|
ProtectHome=true
|
||||||
ReadWritePaths=/etc/telemt /var/log
|
|
||||||
PrivateTmp=true
|
PrivateTmp=true
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
|
|||||||
@@ -25,52 +25,49 @@ QUICK_DOMAINS=(
|
|||||||
"zoom.us"
|
"zoom.us"
|
||||||
)
|
)
|
||||||
|
|
||||||
# ── Генерация TOML конфига ───────────────────────────────────────────────────
|
# ── Генерация TOML конфига (telemt v3 формат) ───────────────────────────────
|
||||||
generate_telemt_toml() {
|
generate_telemt_toml() {
|
||||||
local secret="$1"
|
local secret="$1"
|
||||||
local port="${2:-443}"
|
local port="${2:-443}"
|
||||||
local mask_mode="${3:-quick}" # quick | stealth
|
local mask_mode="${3:-quick}" # quick | stealth
|
||||||
local mask_host="${4:-google.com}"
|
local mask_domain="${4:-google.com}"
|
||||||
local mask_port="${5:-443}"
|
local mask_port="${5:-443}"
|
||||||
local output="${6:-$TELEMT_CONFIG}"
|
local output="${6:-$TELEMT_CONFIG}"
|
||||||
|
|
||||||
mkdir -p "$(dirname "$output")"
|
mkdir -p "$(dirname "$output")"
|
||||||
|
|
||||||
# telemt всегда слушает на 0.0.0.0 (внешний трафик)
|
# DNS override для stealth: домен резолвится в 127.0.0.1
|
||||||
# В stealth-режиме: telemt на 0.0.0.0:443, nginx на 127.0.0.1:8443 (внутренний)
|
# чтобы mask-трафик шёл на локальный nginx, а не в интернет
|
||||||
# В quick-режиме: telemt на 0.0.0.0:443, без nginx
|
local dns_line=""
|
||||||
local bind_addr="0.0.0.0"
|
if [ "$mask_mode" = "stealth" ]; then
|
||||||
|
dns_line="dns_overrides = [\"${mask_domain}:${mask_port}:127.0.0.1\"]"
|
||||||
|
fi
|
||||||
|
|
||||||
cat > "$output" << EOTOML
|
cat > "$output" << EOTOML
|
||||||
# GoTelegram v${GOTELEGRAM_VERSION} — telemt configuration
|
# GoTelegram v${GOTELEGRAM_VERSION} — telemt v3 configuration
|
||||||
# Сгенерировано: $(date -Iseconds)
|
# Сгенерировано: $(date -Iseconds)
|
||||||
# Режим: ${mask_mode}
|
# Режим: ${mask_mode}
|
||||||
|
|
||||||
# ── Основные настройки ───────────────────────────────────────────────────────
|
[server]
|
||||||
[stats]
|
port = ${port}
|
||||||
statsd_address = ""
|
listen_addr_ipv4 = "0.0.0.0"
|
||||||
|
|
||||||
# ── Секреты ──────────────────────────────────────────────────────────────────
|
[censorship]
|
||||||
[[users]]
|
tls_domain = "${mask_domain}"
|
||||||
name = "main"
|
mask = true
|
||||||
secret = "${secret}"
|
mask_port = ${mask_port}
|
||||||
|
tls_emulation = $([ "$mask_mode" = "stealth" ] && echo "false" || echo "true")
|
||||||
|
|
||||||
# ── Привязка ─────────────────────────────────────────────────────────────────
|
[access.users]
|
||||||
[listen]
|
main = "${secret}"
|
||||||
# quick: 0.0.0.0 (клиенты напрямую) | stealth: 127.0.0.1 (только через nginx)
|
|
||||||
bind_to = "${bind_addr}:${port}"
|
|
||||||
|
|
||||||
# ── TLS маскировка ───────────────────────────────────────────────────────────
|
|
||||||
[security]
|
|
||||||
# Маскировочный хост — куда перенаправлять неопознанные подключения
|
|
||||||
# quick: внешний сайт | stealth: локальный nginx
|
|
||||||
host = "${mask_host}:${mask_port}"
|
|
||||||
|
|
||||||
|
[network]
|
||||||
|
${dns_line}
|
||||||
EOTOML
|
EOTOML
|
||||||
|
|
||||||
chmod 600 "$output"
|
chmod 600 "$output"
|
||||||
log_success "Конфиг telemt записан: $output"
|
log_success "Конфиг telemt записан: $output"
|
||||||
log_dim "Режим: $mask_mode, маскировка: $mask_host:$mask_port"
|
log_dim "Режим: $mask_mode, домен: $mask_domain, порт mask: $mask_port"
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── Добавление дополнительного секрета ───────────────────────────────────────
|
# ── Добавление дополнительного секрета ───────────────────────────────────────
|
||||||
@@ -95,7 +92,7 @@ EOSECRET
|
|||||||
log_success "Добавлен секрет: $name"
|
log_success "Добавлен секрет: $name"
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── Чтение текущего конфига ──────────────────────────────────────────────────
|
# ── Чтение текущего конфига (telemt v3 формат) ──────────────────────────────
|
||||||
get_config_value() {
|
get_config_value() {
|
||||||
local key="$1"
|
local key="$1"
|
||||||
local config="${2:-$TELEMT_CONFIG}"
|
local config="${2:-$TELEMT_CONFIG}"
|
||||||
@@ -104,13 +101,19 @@ get_config_value() {
|
|||||||
|
|
||||||
case "$key" in
|
case "$key" in
|
||||||
secret)
|
secret)
|
||||||
grep -m1 'secret\s*=' "$config" | sed 's/.*=\s*"\(.*\)"/\1/' | tr -d ' '
|
# [access.users] main = "..."
|
||||||
|
grep -A5 '\[access.users\]' "$config" | grep -m1 '=' | sed 's/.*=\s*"\(.*\)"/\1/' | tr -d ' '
|
||||||
;;
|
;;
|
||||||
port)
|
port)
|
||||||
grep 'bind_to\s*=' "$config" | sed 's/.*:\([0-9]*\)".*/\1/'
|
# [server] port = 443
|
||||||
|
grep -A5 '\[server\]' "$config" | grep 'port\s*=' | head -1 | sed 's/.*=\s*\([0-9]*\)/\1/' | tr -d ' '
|
||||||
;;
|
;;
|
||||||
mask_host)
|
mask_host|tls_domain)
|
||||||
grep -A10 '\[security\]' "$config" | grep 'host\s*=' | sed 's/.*=\s*"\(.*\)".*/\1/'
|
# [censorship] tls_domain = "..."
|
||||||
|
grep -A10 '\[censorship\]' "$config" | grep 'tls_domain\s*=' | sed 's/.*=\s*"\(.*\)"/\1/'
|
||||||
|
;;
|
||||||
|
mask_port)
|
||||||
|
grep -A10 '\[censorship\]' "$config" | grep 'mask_port\s*=' | sed 's/.*=\s*\([0-9]*\)/\1/' | tr -d ' '
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
grep "$key" "$config" | head -1 | sed 's/.*=\s*"\?\(.*\)"\?/\1/' | tr -d ' "'
|
grep "$key" "$config" | head -1 | sed 's/.*=\s*"\?\(.*\)"\?/\1/' | tr -d ' "'
|
||||||
@@ -151,7 +154,7 @@ validate_telemt_config() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$host" ]; then
|
if [ -z "$host" ]; then
|
||||||
log_error "Не задан маскировочный хост (security.host)"
|
log_error "Не задан маскировочный хост (censorship.tls_domain)"
|
||||||
((errors++))
|
((errors++))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user