fix: telemt v3 config format ([server], [censorship], [access.users]), stealth with dns_overrides

This commit is contained in:
anten-ka
2026-04-08 20:31:50 +03:00
parent 7f81c21d8e
commit 6e32ca9d12
3 changed files with 37 additions and 35 deletions

View File

@@ -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

View File

@@ -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]

View File

@@ -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