telemt/docs/Config_params/CONFIG_PARAMS.ru.md

165 KiB
Raw Blame History

Справочник параметров конфигурации Telemt

В этом документе перечислены все ключи конфигурации, принимаемые config.toml.

[!NOTE]

Этот справочник был составлен с помощью искусственного интеллекта и сверен с базой кода (схема конфигурации, значения по умолчанию и логика проверки).

[!WARNING]

Параметры конфигурации, подробно описанные в этом документе, предназначены для опытных пользователей и для целей тонкой настройки. Изменение этих параметров без четкого понимания их функции может привести к нестабильности приложения или другому неожиданному поведению. Пожалуйста, действуйте осторожно и на свой страх и риск.

Содержание

Ключи верхнего уровня

Ключ Тип По умолчанию
include String (специальная директива)
show_link "*" or String[] [] (ShowLink::None)
dc_overrides Map<String, String or String[]> {}
default_dc u8 — (эффективный резервный вариант: 2 в ME маршрутизации)

include

  • Ограничения / валидация: значение должно быть одной строкой в виде include = "path/to/file.toml". Значения параметра обрабатываются перед анализом TOML. Максимальное количество - 10.

  • Описание: Включает еще один файл TOML с помощью include = "relative/or/absolute/path.toml"; добавленные файлы обрабатываются рекурсивно.

  • Пример:

    include = "secrets.toml"
    
  • Ограничения / валидация: принимает "*" или массив имен пользователей. Пустой массив означает «не показывать никому».

  • Описание: Устаревший селектор видимости ссылок («*» для всех пользователей или списка имен пользователей).

  • Пример:

    # show links for all configured users
    show_link = "*"
    
    # or: show links only for selected users
    # show_link = ["alice", "bob"]
    

dc_overrides

  • Ограничения / валидация: значение должно быть положительным целым числом в формате строки (например, "203"). Значения разбираются как SocketAddr (ip:port). Пустые строки игнорируются.

  • Описание: Переопределяет DC эндпоинты для нестандартных DC; задается в виде строки с индексом DC, значение — один или несколько адресов ip:port.

  • Пример:

    [dc_overrides]
    "201" = "149.154.175.50:443"
    "203" = ["149.154.175.100:443", "91.105.192.100:443"]
    

default_dc

  • Ограничения / валидация: целочисленное значение в диапазоне 1..=5. Если значение выходит за пределы диапазона, время выполнения возвращается к DC1; Middle-end маршрутизация возвращается к значению «2», если она не установлена.

  • Описание: Индекс DC по умолчанию, используемый для нестандартных DC. Когда клиент запрашивает неизвестный/нестандартный DC без переопределения, направлять его в этот кластер по умолчанию.

  • Пример:

    # When a client requests an unknown/non-standard DC with no override,
    # route it to this default cluster (1..=5).
    default_dc = 2
    

[general]

Ключ Тип По умолчанию
data_path String
prefer_ipv6 bool false
fast_mode bool true
use_middle_proxy bool true
proxy_secret_path String "proxy-secret"
proxy_config_v4_cache_path String "cache/proxy-config-v4.txt"
proxy_config_v6_cache_path String "cache/proxy-config-v6.txt"
ad_tag String
middle_proxy_nat_ip IpAddr
middle_proxy_nat_probe bool true
middle_proxy_nat_stun String
middle_proxy_nat_stun_servers String[] []
stun_nat_probe_concurrency usize 8
middle_proxy_pool_size usize 8
middle_proxy_warm_standby usize 16
me_init_retry_attempts u32 0
me2dc_fallback bool true
me2dc_fast bool false
me_keepalive_enabled bool true
me_keepalive_interval_secs u64 8
me_keepalive_jitter_secs u64 2
me_keepalive_payload_random bool true
rpc_proxy_req_every u64 0
me_writer_cmd_channel_capacity usize 4096
me_route_channel_capacity usize 768
me_c2me_channel_capacity usize 1024
me_c2me_send_timeout_ms u64 4000
me_reader_route_data_wait_ms u64 2
me_d2c_flush_batch_max_frames usize 32
me_d2c_flush_batch_max_bytes usize 131072
me_d2c_flush_batch_max_delay_us u64 500
me_d2c_ack_flush_immediate bool true
me_quota_soft_overshoot_bytes u64 65536
me_d2c_frame_buf_shrink_threshold_bytes usize 262144
direct_relay_copy_buf_c2s_bytes usize 65536
direct_relay_copy_buf_s2c_bytes usize 262144
crypto_pending_buffer usize 262144
max_client_frame usize 16777216
desync_all_full bool false
beobachten bool true
beobachten_minutes u64 10
beobachten_flush_secs u64 15
beobachten_file String "cache/beobachten.txt"
hardswap bool true
me_warmup_stagger_enabled bool true
me_warmup_step_delay_ms u64 500
me_warmup_step_jitter_ms u64 300
me_reconnect_max_concurrent_per_dc u32 8
me_reconnect_backoff_base_ms u64 500
me_reconnect_backoff_cap_ms u64 30000
me_reconnect_fast_retry_count u32 16
me_single_endpoint_shadow_writers u8 2
me_single_endpoint_outage_mode_enabled bool true
me_single_endpoint_outage_disable_quarantine bool true
me_single_endpoint_outage_backoff_min_ms u64 250
me_single_endpoint_outage_backoff_max_ms u64 3000
me_single_endpoint_shadow_rotate_every_secs u64 900
me_floor_mode "static" or "adaptive" "adaptive"
me_adaptive_floor_idle_secs u64 90
me_adaptive_floor_min_writers_single_endpoint u8 1
me_adaptive_floor_min_writers_multi_endpoint u8 1
me_adaptive_floor_recover_grace_secs u64 180
me_adaptive_floor_writers_per_core_total u16 48
me_adaptive_floor_cpu_cores_override u16 0
me_adaptive_floor_max_extra_writers_single_per_core u16 1
me_adaptive_floor_max_extra_writers_multi_per_core u16 2
me_adaptive_floor_max_active_writers_per_core u16 64
me_adaptive_floor_max_warm_writers_per_core u16 64
me_adaptive_floor_max_active_writers_global u32 256
me_adaptive_floor_max_warm_writers_global u32 256
upstream_connect_retry_attempts u32 2
upstream_connect_retry_backoff_ms u64 100
upstream_connect_budget_ms u64 3000
upstream_unhealthy_fail_threshold u32 5
upstream_connect_failfast_hard_errors bool false
stun_iface_mismatch_ignore bool false
unknown_dc_log_path String "unknown-dc.txt"
unknown_dc_file_log_enabled bool false
log_level "debug", "verbose", "normal", or "silent" "normal"
disable_colors bool false
me_socks_kdf_policy "strict" or "compat" "strict"
me_route_backpressure_base_timeout_ms u64 25
me_route_backpressure_high_timeout_ms u64 120
me_route_backpressure_high_watermark_pct u8 80
me_health_interval_ms_unhealthy u64 1000
me_health_interval_ms_healthy u64 3000
me_admission_poll_ms u64 1000
me_warn_rate_limit_ms u64 5000
me_route_no_writer_mode "async_recovery_failfast", "inline_recovery_legacy", or "hybrid_async_persistent" "hybrid_async_persistent"
me_route_no_writer_wait_ms u64 250
me_route_hybrid_max_wait_ms u64 3000
me_route_blocking_send_timeout_ms u64 250
me_route_inline_recovery_attempts u32 3
me_route_inline_recovery_wait_ms u64 3000
fast_mode_min_tls_record usize 0
update_every u64 300
me_reinit_every_secs u64 900
me_hardswap_warmup_delay_min_ms u64 1000
me_hardswap_warmup_delay_max_ms u64 2000
me_hardswap_warmup_extra_passes u8 3
me_hardswap_warmup_pass_backoff_base_ms u64 500
me_config_stable_snapshots u8 2
me_config_apply_cooldown_secs u64 300
me_snapshot_require_http_2xx bool true
me_snapshot_reject_empty_map bool true
me_snapshot_min_proxy_for_lines u32 1
proxy_secret_stable_snapshots u8 2
proxy_secret_rotate_runtime bool true
me_secret_atomic_snapshot bool true
proxy_secret_len_max usize 256
me_pool_drain_ttl_secs u64 90
me_instadrain bool false
me_pool_drain_threshold u64 32
me_pool_drain_soft_evict_enabled bool true
me_pool_drain_soft_evict_grace_secs u64 10
me_pool_drain_soft_evict_per_writer u8 2
me_pool_drain_soft_evict_budget_per_core u16 16
me_pool_drain_soft_evict_cooldown_ms u64 1000
me_bind_stale_mode "never", "ttl", or "always" "ttl"
me_bind_stale_ttl_secs u64 90
me_pool_min_fresh_ratio f32 0.8
me_reinit_drain_timeout_secs u64 90
proxy_secret_auto_reload_secs u64 3600
proxy_config_auto_reload_secs u64 3600
me_reinit_singleflight bool true
me_reinit_trigger_channel usize 64
me_reinit_coalesce_window_ms u64 200
me_deterministic_writer_sort bool true
me_writer_pick_mode "sorted_rr" or "p2c" "p2c"
me_writer_pick_sample_size u8 3
ntp_check bool true
ntp_servers String[] ["pool.ntp.org"]
auto_degradation_enabled bool true
degradation_min_unavailable_dc_groups u8 2
rst_on_close "off", "errors" или "always" "off"

data_path

  • Ограничения / валидация: String (необязательный параметр).

  • Описание: Необязательный путь к каталогу данных состояния telemt.

  • Пример:

    [general]
    data_path = "/var/lib/telemt"
    

prefer_ipv6

  • Ограничения / валидация: Устарело. Используйте network.prefer.

  • Описание: Устаревший флаг предпочтения IPv6 перенесен в network.prefer.

  • Пример:

    [network]
    prefer = 6
    

fast_mode

  • Ограничения / валидация: bool.

  • Описание: Включает оптимизированные маршруты для обработки трафика.

  • Пример:

    [general]
    fast_mode = true
    

use_middle_proxy

  • Ограничения / валидация: bool.

  • Описание: Включает режим ME; если значение false, telemt возвращается к прямой DC-маршрутизации.

  • Пример:

    [general]
    use_middle_proxy = true
    

proxy_secret_path

  • Ограничения / валидация: String. Если этот параметр не указан, используется путь по умолчанию — «proxy-secret». Пустые значения принимаются TOML/serde, но во время выполнения произойдет ошибка (invalid file path).

  • Описание: Путь к файлу кэша proxy-secret инфраструктуры Telegram, используемому ME-handshake/аутентификацией RPC. Telemt всегда сначала пытается выполнить новую загрузку с https://core.telegram.org/getProxySecret, в случае успеха кэширует ее по этому пути и возвращается к чтению кэшированного файла в случае сбоя загрузки.

  • Пример:

    [general]
    proxy_secret_path = "proxy-secret"
    

proxy_config_v4_cache_path

  • Ограничения / валидация: String. Если используется, значение не должно быть пустым или содержать только пробелы.

  • Описание: Необязательный путь к кэшу для необработанного (raw) снимка getProxyConfig (IPv4). При запуске Telemt сначала пытается получить свежий снимок; в случае сбоя выборки или пустого снимка он возвращается к этому файлу кэша, если он присутствует и не пуст.

  • Пример:

    [general]
    proxy_config_v4_cache_path = "cache/proxy-config-v4.txt"
    

proxy_config_v6_cache_path

  • Ограничения / валидация: String. Если используется, значение не должно быть пустым или содержать только пробелы.

  • Описание: Необязательный путь к кэшу для необработанного (raw) снимка getProxyConfigV6 (IPv6). При запуске Telemt сначала пытается получить свежий снимок; в случае сбоя выборки или пустого снимка он возвращается к этому файлу кэша, если он присутствует и не пуст.

  • Пример:

    [general]
    proxy_config_v6_cache_path = "cache/proxy-config-v6.txt"
    

ad_tag

  • Ограничения / валидация: String (необязательный параметр). Если используется, значение должно быть ровно 32 символа в шестнадцатеричной системе; недопустимые значения отключаются во время загрузки конфигурации.

  • Описание: Глобальный резервный спонсируемый канал ad_tag (используется, когда у пользователя нет переопределения в access.user_ad_tags). Тег со всеми нулями принимается, но не имеет никакого эффекта, пока не будет заменен реальным тегом от @MTProxybot.

  • Пример:

    [general]
    ad_tag = "00112233445566778899aabbccddeeff"
    

middle_proxy_nat_ip

  • Ограничения / валидация: IpAddr (необязательный параметр).

  • Описание: При установке этого параметра указанное значение публичного IP-адреса NAT используется в качестве адреса ME.

  • Пример:

    [general]
    middle_proxy_nat_ip = "203.0.113.10"
    

middle_proxy_nat_probe

  • Ограничения / валидация: bool. Возможность проверки ограничивается значением параметра network.stun_use (когда network.stun_use = false, STUN-проверка отключается, даже если этот флаг имеет значение true).

  • Описание: Позволяет проверить NAT на основе STUN для обнаружения общедоступного IP, используемого при получении ключа ME в средах NAT.

  • Пример:

    [general]
    middle_proxy_nat_probe = true
    

middle_proxy_nat_stun

  • Ограничения / валидация: Устарело. Используйте network.stun_servers.

  • Описание: Устаревший сервер STUN для проверки NAT. Во время загрузки конфигурации он объединяется с network.stun_servers, если network.stun_servers не задан явно.

  • Пример:

    [network]
    stun_servers = ["stun.l.google.com:19302"]
    

middle_proxy_nat_stun_servers

  • Ограничения / валидация: Устарело. Используйте network.stun_servers.

  • Описание: Устаревший список STUN серверов для проверки NAT-fallback. Во время загрузки конфигурации значение параметра объединяется с network.stun_servers, если network.stun_servers не задан явно.

  • Пример:

    [network]
    stun_servers = ["stun.l.google.com:19302"]
    

stun_nat_probe_concurrency

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Максимальное количество параллельных тестов STUN для обнаружения NAT/публичного эндпоинта.

  • Пример:

    [general]
    stun_nat_probe_concurrency = 8
    

middle_proxy_pool_size

  • Ограничения / валидация: usize.

  • Описание: Размер пула записи ME.

  • Пример:

    [general]
    middle_proxy_pool_size = 8
    

middle_proxy_warm_standby

  • Ограничения / валидация: usize.

  • Описание: Количество предварительно инициализированных резервных подключений ME.

  • Пример:

    [general]
    middle_proxy_warm_standby = 16
    

me_init_retry_attempts

  • Ограничения / валидация: 0..=1_000_000 (0 означает неограниченное количество повторов).

  • Описание: Количество повторных попыток инициализации пула ME.

  • Пример:

    [general]
    me_init_retry_attempts = 0
    

me2dc_fallback

  • Ограничения / валидация: bool.

  • Описание: Перейти из режима ME в режим прямого соединения (DC) в случае сбоя запуска ME.

  • Пример:

    [general]
    me2dc_fallback = true
    

me2dc_fast

  • Ограничения / валидация: bool. Используется только, когда use_middle_proxy = true и me2dc_fallback = true.

  • Описание: Режим для быстрого перехода между режимами ME->DC для новых сеансов.

  • Пример:

    [general]
    use_middle_proxy = true
    me2dc_fallback = true
    me2dc_fast = false
    

me_keepalive_enabled

  • Ограничения / валидация: bool.

  • Описание: Включает периодическое добавление дополнительных кадров для ME keepalive-сообщений.

  • Пример:

    [general]
    me_keepalive_enabled = true
    

me_keepalive_interval_secs

  • Ограничения / валидация: u64 (секунд).

  • Описание: Базовый интервал ME keepalive-сообщений в секундах.

  • Пример:

    [general]
    me_keepalive_interval_secs = 8
    

me_keepalive_jitter_secs

  • Ограничения / валидация: u64 (секунд).

  • Описание: Случайная задержка (джиттер) keepalive-сообщений в секундах, которая используется для уменьшения синхронных "всплесков" нагрузки.

  • Пример:

    [general]
    me_keepalive_jitter_secs = 2
    

me_keepalive_payload_random

  • Ограничения / валидация: bool.

  • Описание: Заполняет данные (payload) keepalive-пакетов случайными байтами вместо фиксированных нулей.

  • Пример:

    [general]
    me_keepalive_payload_random = true
    

rpc_proxy_req_every

  • Ограничения / валидация: 0 или в пределах 10..=300 (секунд).

  • Описание: Интервал для отправки сигналов активности службы RPC_PROXY_REQ для ME (0 отключает).

  • Пример:

    [general]
    rpc_proxy_req_every = 0
    

me_writer_cmd_channel_capacity

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Ёмкость (размер) канала команд для каждого отправителя.

  • Пример:

    [general]
    me_writer_cmd_channel_capacity = 4096
    

me_route_channel_capacity

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Количество ответов от ME, которое может одновременно находиться “в пути” или в очереди для одного соединения.

  • Пример:

    [general]
    me_route_channel_capacity = 768
    

me_c2me_channel_capacity

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Емкость очереди команд для каждого клиента (client reader -> ME sender).

  • Пример:

    [general]
    me_c2me_channel_capacity = 1024
    

me_c2me_send_timeout_ms

  • Ограничения / валидация: 0..=60000 (миллисекунд).

  • Описание: Максимальное ожидание постановки в очередь команд client->ME, если очередь для каждого клиента заполнена (0 сохраняет устаревшее неограниченное ожидание).

  • Пример:

    [general]
    me_c2me_send_timeout_ms = 4000
    

me_reader_route_data_wait_ms

  • Ограничения / валидация: 0..=20 (миллисекунд).

  • Описание: Ограничение времени ожидания при маршрутизации данных ME в очереди конкретного соединения (0 = без ожидания).

  • Пример:

    [general]
    me_reader_route_data_wait_ms = 2
    

me_d2c_flush_batch_max_frames

  • Ограничения / валидация: Должно быть в пределах 1..=512.

  • Описание: Максимальное количество кадров (фреймов) от ME к клиенту, объединяемых перед отправкой.

  • Пример:

    [general]
    me_d2c_flush_batch_max_frames = 32
    

me_d2c_flush_batch_max_bytes

  • Ограничения / валидация: Должно быть в пределах 4096..=2097152 (байт).

  • Описание: Максимальный объём данных (в байтах) от ME к клиенту, который можно объединить перед отправкой.

  • Пример:

    [general]
    me_d2c_flush_batch_max_bytes = 131072
    

me_d2c_flush_batch_max_delay_us

  • Ограничения / валидация: 0..=5000 (миллисекунд).

  • Описание: Максимальное время ожидания (в миллисекундах) для накопления дополнительных фреймов от ME к клиенту перед отправкой (0 = без ожидания).

  • Пример:

    [general]
    me_d2c_flush_batch_max_delay_us = 500
    

me_d2c_ack_flush_immediate

  • Ограничения / валидация: bool.

  • Описание: Сбрасывать буфер записи клиента сразу после быстрой отправки подтверждения (quick-ack).

  • Пример:

    [general]
    me_d2c_ack_flush_immediate = true
    

me_quota_soft_overshoot_bytes

  • Ограничения / валидация: 0..=16777216 (байт).

  • Описание: Дополнительный допустимый объём (в байтах) на маршрут, который разрешён сверх квоты, прежде чем механизм записи начнёт принудительно отбрасывать данные этого маршрута.

  • Пример:

    [general]
    me_quota_soft_overshoot_bytes = 65536
    

me_d2c_frame_buf_shrink_threshold_bytes

  • Ограничения / валидация: Должно быть в пределах 4096..=16777216 (байт).

  • Описание: Порог, при котором слишком большие буферы агрегации фреймов ME>client уменьшаются (сжимаются) после отправки.

  • Пример:

    [general]
    me_d2c_frame_buf_shrink_threshold_bytes = 262144
    

direct_relay_copy_buf_c2s_bytes

  • Ограничения / валидация: Должно быть в пределах 4096..=1048576 (байт).

  • Описание: Размер буфера копирования для направления client > DC в режиме прямой пересылки (direct relay).

  • Пример:

    [general]
    direct_relay_copy_buf_c2s_bytes = 65536
    

direct_relay_copy_buf_s2c_bytes

  • Ограничения / валидация: Должно быть в пределах 8192..=2097152 (байт).

  • Описание: CoРазмер буфера копирования для направления DC > клиент в режиме прямой пересылки (direct relay).

  • Пример:

    [general]
    direct_relay_copy_buf_s2c_bytes = 262144
    

crypto_pending_buffer

  • Ограничения / валидация: usize (байт).

  • Описание:Максимальный объём ожидающих (неотправленных) зашифрованных данных в буфере client writer (в байтах).

  • Пример:

    [general]
    crypto_pending_buffer = 262144
    

max_client_frame

  • Ограничения / валидация: usize (байт).

  • Описание: Максимально допустимый размер кадра MTProto клиента (в байтах).

  • Пример:

    [general]
    max_client_frame = 16777216
    

desync_all_full

  • Ограничения / валидация: bool.

  • Описание: Создавать полные журналы крипто-рассинхронизации для каждого события

  • Пример:

    [general]
    desync_all_full = false
    

beobachten

  • Ограничения / валидация: bool.

  • Описание: Включает "криминалистическое" наблюдения для каждого IP-адреса. Анализирует поведение всех подключений и записывает возможные типы клиентов, которые посылают active-probing запросы.

  • Пример:

    [general]
    beobachten = true
    

beobachten_minutes

  • Ограничения / валидация: Должно быть > 0 (минут).

  • Описание: Время хранения (минуты) для сегментов наблюдения по каждому IP-адресу.

  • Пример:

    [general]
    beobachten_minutes = 10
    

beobachten_flush_secs

  • Ограничения / валидация: Должно быть > 0 (секунд).

  • Описание: Время удаления моментального снимка (в секундах) для файла наблюдения.

  • Пример:

    [general]
    beobachten_flush_secs = 15
    

beobachten_file

  • Ограничения / валидация: Не должно быть пустым или содержать только пробелы.

  • Описание: Путь к выходному снэпшоту наблюдения.

  • Пример:

    [general]
    beobachten_file = "cache/beobachten.txt"
    

hardswap

  • Ограничения / валидация: bool.

  • Описание: Включить стратегию ME-hardswap на основе генерации.

  • Пример:

    [general]
    hardswap = true
    

me_warmup_stagger_enabled

  • Ограничения / валидация: bool.

  • Описание: Распределить во времени дополнительные стадии "прогрева" ME, чтобы избежать всплесков нагрузки на соединения.

  • Пример:

    [general]
    me_warmup_stagger_enabled = true
    

me_warmup_step_delay_ms

  • Ограничения / валидация: u64 (миллисекунд).

  • Описание: Базовая задержка в миллисекундах между этапами "прогрева".

  • Пример:

    [general]
    me_warmup_step_delay_ms = 500
    

me_warmup_step_jitter_ms

  • Ограничения / валидация: u64 (миллисекунд).

  • Описание: Дополнительная случайная задержка (джиттер) в миллисекундах для шагов "прогрева".

  • Пример:

    [general]
    me_warmup_step_jitter_ms = 300
    

me_reconnect_max_concurrent_per_dc

  • Ограничения / валидация: u32.

  • Описание: Ограничить количество одновременно работающих процессов переподключения (reconnect workers) к DC во время восстановления работоспособности.

  • Пример:

    [general]
    me_reconnect_max_concurrent_per_dc = 8
    

me_reconnect_backoff_base_ms

  • Ограничения / валидация: u64 (миллисекунд).

  • Описание: Базовая задержка повторного подключения в миллисекундах.

  • Пример:

    [general]
    me_reconnect_backoff_base_ms = 500
    

me_reconnect_backoff_cap_ms

  • Ограничения / валидация: u64 (миллисекунд).

  • Описание: Максимальная задержка повторного подключения в миллисекундах.

  • Пример:

    [general]
    me_reconnect_backoff_cap_ms = 30000
    

me_reconnect_fast_retry_count

  • Ограничения / валидация: u32.

  • Описание: Лимит немедленных повторных попыток подключения перед тем, как включается долгий backoff (увеличивающаяся задержка между попытками).

  • Пример:

    [general]
    me_reconnect_fast_retry_count = 16
    

me_single_endpoint_shadow_writers

  • Ограничения / валидация: Должно быть в пределах 0..=32.

  • Описание: Количество дополнительных резервных writer-процессов для групп DC, у которых есть только один конечный узел (endpoint).

  • Пример:

    [general]
    me_single_endpoint_shadow_writers = 2
    

me_single_endpoint_outage_mode_enabled

  • Ограничения / валидация: bool.

  • Описание: Включает агрессивный режим восстановления после сбоя для групп DC, когда доступен только один endpoint.

  • Пример:

    [general]
    me_single_endpoint_outage_mode_enabled = true
    

me_single_endpoint_outage_disable_quarantine

  • Ограничения / валидация: bool.

  • Описание: Игнорировать карантин endpointа в режиме сбоя, когда доступен только один endpoint.

  • Пример:

    [general]
    me_single_endpoint_outage_disable_quarantine = true
    

me_single_endpoint_outage_backoff_min_ms

  • Ограничения / валидация: Должно быть > 0 (миллисекунд) и меньше или равно me_single_endpoint_outage_backoff_max_ms.

  • Описание: Минимальная задержка между повторными попытками переподключения (reconnect backoff) в режиме сбоя с единственным endpointом.

  • Пример:

    [general]
    me_single_endpoint_outage_backoff_min_ms = 250
    

me_single_endpoint_outage_backoff_max_ms

  • Ограничения / валидация: Должно быть > 0 (миллисекунд) и больше или равно me_single_endpoint_outage_backoff_min_ms.

  • Описание: Максимальная задержка между попытками переподключения (reconnect backoff) в режиме сбоя с единственным endpointом.

  • Пример:

    [general]
    me_single_endpoint_outage_backoff_max_ms = 3000
    

me_single_endpoint_shadow_rotate_every_secs

  • Ограничения / валидация: u64 (секунды). 0 отключает периодическую ротацию.

  • Описание: Интервал периодической ротации резервного (shadow) writerа для DC-групп с единственным endpointом

  • Пример:

    [general]
    me_single_endpoint_shadow_rotate_every_secs = 900
    

me_floor_mode

  • Ограничения / валидация: "static" или "adaptive".

  • Описание: Режим политики нижнего порога (минимального ограничения) для целевых узлов/получателей ME writerа.

  • Пример:

    [general]
    me_floor_mode = "adaptive"
    

me_adaptive_floor_idle_secs

  • Ограничения / валидация: u64 (секунды).

  • Описание: Время простоя, после которого адаптивный нижний порог (adaptive floor) может уменьшить целевой лимит writerа для единственного endpointа.

  • Пример:

    [general]
    me_adaptive_floor_idle_secs = 90
    

me_adaptive_floor_min_writers_single_endpoint

  • Ограничения / валидация: Должно быть в пределах 1..=32.

  • Описание: Минимально допустимое количество writerов в DC-группах с одним endpointом в режиме адаптивного нижнего порога (adaptive floor).

  • Пример:

    [general]
    me_adaptive_floor_min_writers_single_endpoint = 1
    

me_adaptive_floor_min_writers_multi_endpoint

  • Ограничения / валидация: Должно быть в пределах 1..=32.

  • Описание: Минимально допустимое количество writerов в DC-группах с несколькими endpointами в режиме адаптивного нижнего порога (adaptive floor).

  • Пример:

    [general]
    me_adaptive_floor_min_writers_multi_endpoint = 1
    

me_adaptive_floor_recover_grace_secs

  • Ограничения / валидация: u64 (секунды).

  • Описание: Период “льготного ожидания”, в течение которого сохраняется фиксированный (static) нижний порог после появления активности в адаптивном режиме

  • Пример:

    [general]
    me_adaptive_floor_recover_grace_secs = 180
    

me_adaptive_floor_writers_per_core_total

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Глобальный лимит записи ME writerа на каждое логическое CPU-ядро в адаптивном режиме.

  • Пример:

    [general]
    me_adaptive_floor_writers_per_core_total = 48
    

me_adaptive_floor_cpu_cores_override

  • Ограничения / валидация: u16. 0 - использовать автоматическое обнаружение во время выполнения.

  • Описание: Переопределить количество логических CPU-ядер, используемых при расчёте адаптивного нижнего порога (adaptive floor).

  • Пример:

    [general]
    me_adaptive_floor_cpu_cores_override = 0
    

me_adaptive_floor_max_extra_writers_single_per_core

  • Ограничения / валидация: u16.

  • Описание: Максимальное количество дополнительных writer-процессов на одно CPU-ядро сверх базового требуемого уровня для DC-групп с единственным endpointом.

  • Пример:

    [general]
    me_adaptive_floor_max_extra_writers_single_per_core = 1
    

me_adaptive_floor_max_extra_writers_multi_per_core

  • Ограничения / валидация: u16.

  • Описание: Максимальное количество дополнительных writer-процессов на одно CPU-ядро сверх базового требуемого уровня для DC-групп с несколькими endpointами.

  • Пример:

    [general]
    me_adaptive_floor_max_extra_writers_multi_per_core = 2
    

me_adaptive_floor_max_active_writers_per_core

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Лимит количества ME writer-процессов на одно логическое CPU-ядро.

  • Пример:

    [general]
    me_adaptive_floor_max_active_writers_per_core = 64
    

me_adaptive_floor_max_warm_writers_per_core

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Лимит количества “разогретых” (warm) ME writer-процессов на одно логическое CPU-ядро.

  • Пример:

    [general]
    me_adaptive_floor_max_warm_writers_per_core = 64
    

me_adaptive_floor_max_active_writers_global

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Глобальный лимит количества ME writer-процессов.

  • Пример:

    [general]
    me_adaptive_floor_max_active_writers_global = 256
    

me_adaptive_floor_max_warm_writers_global

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Глобальный лимит количества “разогретых” (warm) ME writer-процессов.

  • Пример:

    [general]
    me_adaptive_floor_max_warm_writers_global = 256
    

upstream_connect_retry_attempts

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Количество попыток подключения к выбранному upstream'у перед тем, как вернуть ошибку или перейти к fallback.

  • Пример:

    [general]
    upstream_connect_retry_attempts = 2
    

upstream_connect_retry_backoff_ms

  • Ограничения / валидация: u64 (миллисекунды). 0 - отключает задержку отсрочки (повторные попытки становятся немедленными).

  • Описание: Задержка в миллисекундах между попытками подключения к upstream.

  • Пример:

    [general]
    upstream_connect_retry_backoff_ms = 100
    

upstream_connect_budget_ms

  • Ограничения / валидация: Должно быть > 0 (миллисекунд).

  • Описание: Общий лимит времени (в миллисекундах), измеряемый по реальному времени (wall-clock), на одну попытку подключения к upstream с учётом всех повторных попыток.

  • Пример:

    [general]
    upstream_connect_budget_ms = 3000
    

upstream_unhealthy_fail_threshold

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Количество неудачных запросов подряд, после которого upstream помечается, как неработоспособный.

  • Пример:

    [general]
    upstream_unhealthy_fail_threshold = 5
    

upstream_connect_failfast_hard_errors

  • Ограничения / валидация: bool.

  • Описание: Если включено (true), telemt пропускает дополнительные повторные попытки для постоянных ошибок подключения к upstream.

  • Пример:

    [general]
    upstream_connect_failfast_hard_errors = false
    

stun_iface_mismatch_ignore

  • Ограничения / валидация: bool.

  • Описание: Флаг совместимости, зарезервированный для будущего использования. Сейчас этот параметр читается (парсится), но не используется средой выполнения.

  • Пример:

    [general]
    stun_iface_mismatch_ignore = false
    

unknown_dc_log_path

  • Ограничения / валидация: String (необязательный параметр). Путь должен быть без .. и с существующим родительским каталогом, иначе он будет отклонён во время выполнения.

  • Описание: Путь к файлу логов для неизвестных (нестандартных) DC-запросов, который используется только если unknown_dc_file_log_enabled = true. Чтобы отключить файловое логирование, не указывйте этот параметр.

  • Пример:

    [general]
    unknown_dc_log_path = "unknown-dc.txt"
    

unknown_dc_file_log_enabled

  • Ограничения / валидация: bool.

  • Описание: Включить файловое логирование неизвестных DC (записывает строки вида dc_idx=<N>). Требует, чтобы был задан unknown_dc_log_path. На не-Unix платформах может не поддерживаться. Логирование очищается от дубликатов и имеет ограничения: записываются только первые ~1024 уникальных неизвестных DC-индексов.

  • Пример:

    [general]
    unknown_dc_file_log_enabled = false
    

log_level

  • Ограничения / валидация: "debug", "verbose", "normal", или "silent".

  • Описание: Уровень детализации логов во время работы системы, который используется только если переменная окружения RUST_LOG не задана. Если RUST_LOG задана, она имеет приоритет и переопределяет этот параметр.

  • Пример:

    [general]
    log_level = "normal"
    

disable_colors

  • Ограничения / валидация: bool.

  • Описание: Отключает ANSI-цвета в логах. Это влияет только на форматирование вывода и не меняет уровень логирования и фильтрацию сообщений..

  • Пример:

    [general]
    disable_colors = false
    

me_socks_kdf_policy

  • Ограничения / валидация: "strict" или "compat".

  • Описание: Политика fallback-поведения KDF, привязанная к SOCKS, для Middle-End-handshake.

  • Пример:

    [general]
    me_socks_kdf_policy = "strict"
    

me_route_backpressure_base_timeout_ms

  • Ограничения / валидация: Должно быть в пределах 1..=5000 (миллисекунд).

  • Описание: Базовый таймаут (в миллисекундах) ожидания при режиме backpressure (ситуация, при которой данные обрабатываются медленне, чем получаются) для отправки через ME route-channel.

  • Пример:

    [general]
    me_route_backpressure_base_timeout_ms = 25
    

me_route_backpressure_high_timeout_ms

  • Ограничения / валидация: Должно быть в пределах 1..=5000 (миллисекунд) и больше или равно me_route_backpressure_base_timeout_ms.

  • Описание: Увеличенный таймаут ожидания (в миллисекундах) при режиме backpressure, когда заполненность очереди превышает порог.

  • Пример:

    [general]
    me_route_backpressure_high_timeout_ms = 120
    

me_route_backpressure_high_watermark_pct

  • Ограничения / валидация: Должно быть в пределах 1..=100 (процентов).

  • Описание: Порог заполненности очереди (в процентах), при превышении которого система переключается на увеличенный таймаут backpressure.

  • Пример:

    [general]
    me_route_backpressure_high_watermark_pct = 80
    

me_health_interval_ms_unhealthy

  • Ограничения / валидация: Должно быть > 0 (миллисекунд).

  • Описание: Интервал проверки состояния (health monitoring), который используется, когда покрытие ME-writerов ухудшено (деградировало).

  • Пример:

    [general]
    me_health_interval_ms_unhealthy = 1000
    

me_health_interval_ms_healthy

  • Ограничения / валидация: Должно быть > 0 (миллисекунд).

  • Описание: Интервал проверки состояния (health monitoring), который используется, когда покрытие ME-writerов стабильно.

  • Пример:

    [general]
    me_health_interval_ms_healthy = 3000
    

me_admission_poll_ms

  • Ограничения / валидация: Должно быть > 0 (миллисекунд).

  • Описание: Интервал опроса (polling interval) для проверки состояния приема при выполнении условий (conditional admission).

  • Пример:

    [general]
    me_admission_poll_ms = 1000
    

me_warn_rate_limit_ms

  • Ограничения / валидация: Должно быть > 0 (миллисекунд).

  • Описание: Период "затухания" (cooldown) для повторяющихся предупреждающих логов ME, чтобы ограничить их частоту.

  • Пример:

    [general]
    me_warn_rate_limit_ms = 5000
    

me_route_no_writer_mode

  • Ограничения / валидация: "async_recovery_failfast", "inline_recovery_legacy", or "hybrid_async_persistent".

  • Описание: Поведение ME-маршрута, когда ни один writer не доступен.

  • Пример:

    [general]
    me_route_no_writer_mode = "hybrid_async_persistent"
    

me_route_no_writer_wait_ms

  • Ограничения / валидация: Должно быть в пределах 10..=5000 (миллисекунды).

  • Описание: Максимальное время ожидания, используемое в режиме async-recovery failfast перед переходом к fallback.

  • Пример:

    [general]
    me_route_no_writer_wait_ms = 250
    

me_route_hybrid_max_wait_ms

  • Ограничения / валидация: Должно быть в пределах 50..=60000 (миллисекунд).

  • Описание: Максимальное суммарное время ожидания в гибридном режиме без writerа перед failfast fallback.

  • Пример:

    [general]
    me_route_hybrid_max_wait_ms = 3000
    

me_route_blocking_send_timeout_ms

  • Ограничения / валидация: Должно быть в пределах 0..=5000 (миллисекунд). 0 - неограниченное время ожидания.

  • Описание: Максимальное время ожидания для блокировки отправки через канал маршрутизации при fallback.

  • Пример:

    [general]
    me_route_blocking_send_timeout_ms = 250
    

me_route_inline_recovery_attempts

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Количество попыток inline-восстановления в legacy-режиме

  • Пример:

    [general]
    me_route_inline_recovery_attempts = 3
    

me_route_inline_recovery_wait_ms

  • Ограничения / валидация: Должно быть в пределах 10..=30000 (миллисекунд).

  • Описание: Максимальное время ожидания inline-восстановления в legacy-режиме.

  • Пример:

    [general]
    me_route_inline_recovery_wait_ms = 3000
    

fast_mode_min_tls_record

  • Ограничения / валидация: usize (bytes). 0 disables the limit.

  • Описание: Минимальный размер TLS-записи при включённой агрегации fast-mode.

  • Пример:

    [general]
    fast_mode_min_tls_record = 0
    

update_every

  • Ограничения / валидация: u64 (секунд). Должно быть > 0. Если этот ключ не задан явно, могут использоваться устаревшие параметры proxy_secret_auto_reload_secs и proxy_config_auto_reload_secs (их эффективное минимальное значение должно быть > 0).

  • Описание: Унифицированный интервал обновления задач ME-updaterа (getProxyConfig, getProxyConfigV6, getProxySecret). При установке переопределяет устаревшие интервалы автообновления прокси-сервера.

  • Пример:

    [general]
    update_every = 300
    

me_reinit_every_secs

  • Ограничения / валидация: Должно быть > 0 (секунд).

  • Описание: Интервал для выполнения цикла повторной инициализации ME с нулевым временем простоя.

  • Пример:

    [general]
    me_reinit_every_secs = 900
    

me_hardswap_warmup_delay_min_ms

  • Ограничения / валидация: u64 (миллисекунд). Должно быть <= me_hardswap_warmup_delay_max_ms.

  • Описание: Нижняя граница задержки между шагами "прогрева" при "принудительном" изменении состояния.

  • Пример:

    [general]
    me_hardswap_warmup_delay_min_ms = 1000
    

me_hardswap_warmup_delay_max_ms

  • Ограничения / валидация: Должно быть > 0 (миллисекунд).

  • Описание: Верхняя граница задержки между шагами "прогрева" при "принудительном" изменении состояния.

  • Пример:

    [general]
    me_hardswap_warmup_delay_max_ms = 2000
    

me_hardswap_warmup_extra_passes

  • Ограничения / валидация: Должно быть в пределах [0, 10].

  • Описание: Количество дополнительных циклов "прогрева" сверх базового при "принудительном" изменении состояния.

  • Пример:

    [general]
    # default: 3 (allowed range: 0..=10)
    me_hardswap_warmup_extra_passes = 3
    

me_hardswap_warmup_pass_backoff_base_ms

  • Ограничения / валидация: u64 (миллисекунд). Должно быть > 0.

  • Описание: Базовая задержка повторной попытки между дополнительными проходами "прогрева" при "принудительном" изменении состояния, если нижний порог ещё не достигнут.

  • Пример:

    [general]
    # default: 500
    me_hardswap_warmup_pass_backoff_base_ms = 500
    

me_config_stable_snapshots

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Количество одинаковых подряд снимков конфигурации ME, необходимых для применения изменений.

  • Пример:

    [general]
    # require 3 identical snapshots before applying ME endpoint map updates
    me_config_stable_snapshots = 3
    

me_config_apply_cooldown_secs

  • Ограничения / валидация: u64.

  • Описание: Время восстановления между примененными обновлениями карты конечных точек ME. 0 отключает время восстановления.

  • Пример:

    [general]
    # allow applying stable snapshots immediately (no cooldown)
    me_config_apply_cooldown_secs = 0
    

me_snapshot_require_http_2xx

  • Ограничения / валидация: bool.

  • Описание: Требовать HTTP-ответы 2xx для применения снимков конфигурации ME. Если false, не-2xx ответы также могут быть проанализированы/учтены программой обновления.

  • Пример:

    [general]
    # allow applying snapshots even when the HTTP status is non-2xx
    me_snapshot_require_http_2xx = false
    

me_snapshot_reject_empty_map

  • Ограничения / валидация: bool.

  • Описание: Отклоняет пустые snapshot-конфигурации ME (без endpointов). Если установлено значение false, пустой snapshot может быть применён (при выполнении других условий), что может временно очистить или уменьшить карту ME.

  • Пример:

    [general]
    # allow applying empty snapshots (use with care)
    me_snapshot_reject_empty_map = false
    

me_snapshot_min_proxy_for_lines

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Минимальное количество проанализированных строк proxy_for, необходимое для принятия снимка.

  • Пример:

    [general]
    # require at least 10 proxy_for rows before accepting a snapshot
    me_snapshot_min_proxy_for_lines = 10
    

proxy_secret_stable_snapshots

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Количество идентичных снимков с секретом прокси-сервера, необходимых для ротации.

  • Пример:

    [general]
    # require 2 identical getProxySecret snapshots before rotating at runtime
    proxy_secret_stable_snapshots = 2
    

proxy_secret_rotate_runtime

  • Ограничения / валидация: bool.

  • Описание: Включает ротацию proxy-secret на основе снапшотов, получаемых от обновляющего компонента.

  • Пример:

    [general]
    # disable runtime proxy-secret rotation (startup still uses proxy_secret_path/proxy_secret_len_max)
    proxy_secret_rotate_runtime = false
    

me_secret_atomic_snapshot

  • Ограничения / валидация: bool.

  • Описание: Сохраняет селекторные и секретные байты из одного и того же снимка атомарно. Если general.use_middle_proxy = true, автоматически включается при загрузке конфигурации для согласованности KDF-данных ME.

  • Пример:

    [general]
    # NOTE: when use_middle_proxy=true, Telemt will auto-enable this during load
    me_secret_atomic_snapshot = false
    

proxy_secret_len_max

  • Ограничения / валидация: Должно быть в пределах [32, 4096].

  • Описание: Верхний предел длины (в байтах) принимаемого proxy-secret во время запуска и обновления.

  • Пример:

    [general]
    # default: 256 (bytes)
    proxy_secret_len_max = 256
    

me_pool_drain_ttl_secs

  • Ограничения / валидация: u64 (секунды). 0 - отключает период drain-TTL и подавляет предупреждения drain-TTL для ненулевых (непустых) writerов, находящихся в состоянии draining.

  • Описание: Временной интервал Drain-TTL для устаревших ME writerов после изменения карты endpointов. В течение TTL устаревшие writerы могут использоваться только как fallback для новых биндов (в зависимости от политики биндов).

  • Пример:

    [general]
    # disable drain TTL (draining writers won't emit "past drain TTL" warnings)
    me_pool_drain_ttl_secs = 0
    

me_instadrain

  • Ограничения / валидация: bool.

  • Описание: Принудительно удаляет устаревшие writerы на следующем цикле очистки, обходя TTL и таймаут ожидания.

  • Пример:

    [general]
    # default: false
    me_instadrain = false
    

me_pool_drain_threshold

  • Ограничения / валидация: u64. Установите значение 0, чтобы отключить очистку на основе пороговых значений.

  • Описание: Максимальное количество устаревших writerов, после которого самые старые принудительно закрываются в пакетном режиме.

  • Пример:

    [general]
    # default: 32
    me_pool_drain_threshold = 32
    

me_pool_drain_soft_evict_enabled

  • Ограничения / валидация: bool.

  • Описание: Включает постепенное удаление устаревших writerов во время очистки/повторной инициализации вместо их немедленного закрытия.

  • Пример:

    [general]
    # default: true
    me_pool_drain_soft_evict_enabled = true
    

me_pool_drain_soft_evict_grace_secs

  • Ограничения / валидация: u64 (секунд). Должно быть в пределах [0, 3600].

  • Описание: Дополнительный период ожидания после TTL перед началом этапа мягкого удаления.

  • Пример:

    [general]
    # default: 10
    me_pool_drain_soft_evict_grace_secs = 10
    

me_pool_drain_soft_evict_per_writer

  • Ограничения / валидация: 1..=16.

  • Описание: Максимальное количество устаревших маршрутов, вытесняемых за один проход мягкого удаления на один writer.

  • Пример:

    [general]
    # default: 2
    me_pool_drain_soft_evict_per_writer = 2
    

me_pool_drain_soft_evict_budget_per_core

  • Ограничения / валидация: 1..=64.

  • Описание: Лимиты работы мягкого удаления на одно CPU-ядро за один проход.

  • Пример:

    [general]
    # default: 16
    me_pool_drain_soft_evict_budget_per_core = 16
    

me_pool_drain_soft_evict_cooldown_ms

  • Ограничения / валидация: u64 (миллисекунд). Должно быть > 0.

  • Описание: Время восстановления между повторяющимися мягкими удалениями одного и того же writerа.

  • Пример:

    [general]
    # default: 1000
    me_pool_drain_soft_evict_cooldown_ms = 1000
    

me_bind_stale_mode

  • Ограничения / валидация: "never", "ttl" или "always".

  • Описание: Политика разрешения новых биндов к устаревшим writerам.

  • Пример:

    [general]
    # allow stale binds only for a limited time window
    me_bind_stale_mode = "ttl"
    

me_bind_stale_ttl_secs

  • Ограничения / валидация: u64.

  • Описание: TTL для разрешения биндов к устаревшим writerам при режиме ttl.

  • Пример:

    [general]
    me_bind_stale_mode = "ttl"
    me_bind_stale_ttl_secs = 90
    

me_pool_min_fresh_ratio

  • Ограничения / валидация: Должно быть в пределах [0.0, 1.0].

  • Описание: Минимальный коэффициент актуального (fresh) покрытия DC перед началом удаления устаревших writerов.

  • Пример:

    [general]
    # require >=90% desired-DC coverage before draining stale writers
    me_pool_min_fresh_ratio = 0.9
    

me_reinit_drain_timeout_secs

  • Ограничения / валидация: u64. 0 - используется безопасный системный fallback. Если значение > 0 и < me_pool_drain_ttl_secs, повышает его до значения TTL.

  • Описание: Таймаут принудительного закрытия устаревших writerов при очистке/повторной инициализации. При 0 используется безопасный системный fallback (300 секунд).

  • Пример:

    [general]
    # use runtime safety fallback force-close timeout (300s)
    me_reinit_drain_timeout_secs = 0
    

proxy_secret_auto_reload_secs

  • Ограничения / валидация: Устарело. Используйте general.update_every. Если general.update_every не задан, эффективный интервал обновления равен min(proxy_secret_auto_reload_secs, proxy_config_auto_reload_secs) и должен быть > 0.

  • Описание: Интервал обновления устаревшего секрета прокси-сервера. Используется только, если general.update_every не задан.

  • Пример:

    [general]
    # legacy mode: omit update_every to use proxy_*_auto_reload_secs
    proxy_secret_auto_reload_secs = 600
    proxy_config_auto_reload_secs = 120
    # effective updater interval = min(600, 120) = 120 seconds
    

proxy_config_auto_reload_secs

  • Ограничения / валидация: Устарело. Используйте general.update_every. Если general.update_every не задан, эффективный устаревший интервал обновления равен min(proxy_secret_auto_reload_secs, proxy_config_auto_reload_secs) и должен быть > 0.

  • Описание: Интервал обновления устаревшей конфигурации ME. Используется только, если general.update_every не задан.

  • Пример:

    [general]
    # legacy mode: omit update_every to use proxy_*_auto_reload_secs
    proxy_secret_auto_reload_secs = 600
    proxy_config_auto_reload_secs = 120
    # effective updater interval = min(600, 120) = 120 seconds
    

me_reinit_singleflight

  • Ограничения / валидация: bool.

  • Описание: Упорядочивать циклы повторной инициализации ME, поступающие от разных источников триггеров.

  • Пример:

    [general]
    me_reinit_singleflight = true
    

me_reinit_trigger_channel

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Емкость очереди триггеров для планировщика повторной инициализации.

  • Пример:

    [general]
    me_reinit_trigger_channel = 64
    

me_reinit_coalesce_window_ms

  • Ограничения / валидация: u64.

  • Описание: Время объединения (coalescing) триггеров перед запуском переинициализации (в мс).

  • Пример:

    [general]
    me_reinit_coalesce_window_ms = 200
    

me_deterministic_writer_sort

  • Ограничения / валидация: bool.

  • Описание: Включить детерминированную сортировку кандидатов при выборе writerа.

  • Пример:

    [general]
    me_deterministic_writer_sort = true
    

me_writer_pick_mode

  • Ограничения / валидация: "sorted_rr" or "p2c".

  • Описание: Режим выбора writerа для бинда маршрута.

  • Пример:

    [general]
    me_writer_pick_mode = "p2c"
    

me_writer_pick_sample_size

  • Ограничения / валидация: 2..=4.

  • Описание: Количество кандидатов, отобранных сборщиком в режиме p2c.

  • Пример:

    [general]
    me_writer_pick_mode = "p2c"
    me_writer_pick_sample_size = 3
    

ntp_check

  • Ограничения / валидация: bool.

  • Описание: Зарезервировано для будущего использования. Сейчас параметр читается, но не используется системой.

  • Пример:

    [general]
    ntp_check = true
    

ntp_servers

  • Ограничения / валидация: String[].

  • Описание: Зарезервировано для будущего использования. Сейчас параметр читается, но не используется системой.

  • Пример:

    [general]
    ntp_servers = ["pool.ntp.org"]
    

auto_degradation_enabled

  • Ограничения / валидация: bool.

  • Описание: Зарезервировано для будущего использования. Сейчас параметр читается, но не используется системой.

  • Пример:

    [general]
    auto_degradation_enabled = true
    

degradation_min_unavailable_dc_groups

  • Ограничения / валидация: u8.

  • Описание: Зарезервировано для будущего использования. Сейчас параметр читается, но не используется системой.

  • Пример:

    [general]
    degradation_min_unavailable_dc_groups = 2
    

rst_on_close

  • Ограничения / валидация: "off", "errors", "always".

  • Описание: Управляет поведением SO_LINGER(0) на принятых клиентских TCP-сокетах. На высоконагруженных прокси-серверах накапливаются FIN-WAIT-1 и осиротевшие (orphan) сокеты от соединений, которые не завершают Telegram-рукопожатие (сканеры, DPI-зонды, боты). Эта опция позволяет отправлять немедленный RST вместо корректного FIN для таких соединений, мгновенно освобождая ресурсы ядра.

    • "off" — по умолчанию. Обычный FIN при закрытии всех соединений; поведение не меняется.
    • "errors"SO_LINGER(0) устанавливается при accept(). Если клиент успешно проходит аутентификацию, linger сбрасывается и relay-сессия закрывается корректно через FIN. Соединения, закрытые до завершения рукопожатия (таймауты, ошибки крипто, сканеры), отправляют RST.
    • "always"SO_LINGER(0) устанавливается при accept() и никогда не сбрасывается. Все закрытия отправляют RST независимо от результата рукопожатия.
  • Пример:

    [general]
    rst_on_close = "errors"
    

[general.modes]

Ключ Тип По умолчанию
classic bool false
secure bool false
tls bool true

classic

  • Ограничения / валидация: bool.

  • Описание: Включает классический режим MTProxy.

  • Пример:

    [general.modes]
    classic = true
    

secure

  • Ограничения / валидация: bool.

  • Описание: Включает защищённый режим (dd-ссылки).

  • Пример:

    [general.modes]
    secure = true
    

tls

  • Ограничения / валидация: bool.

  • Описание: Включает режим TLS (ee-ссылки).

  • Пример:

    [general.modes]
    tls = true
    

[general.links]

Ключ Тип По умолчанию
show "*" or String[] "*"
public_host String
public_port u16

show

  • Ограничения / валидация: "*" или String[]. Пустое значение означает, что нельзя показывать никому.

  • Описание: Определяет пользователей, для которых показываются proxy-ссылки tg:// при запуске.

  • Пример:

    [general.links]
    show = "*"
    # or:
    # show = ["alice", "bob"]
    

public_host

  • Ограничения / валидация: String (необязательный параметр).

  • Описание: Переопределение общедоступного имени хоста/IP-адреса, используемое для сгенерированных ссылок tg:// (перезаписывает автоматически определённый IP).

  • Пример:

    [general.links]
    public_host = "proxy.example.com"
    

public_port

  • Ограничения / валидация: u16 (необязательный параметр).

  • Описание: Публичный порт для генерации tg:// ссылок (перезаписывает server.port).

  • Пример:

    [general.links]
    public_port = 443
    

[general.telemetry]

Ключ Тип По умолчанию
core_enabled bool true
user_enabled bool true
me_level "silent", "normal", or "debug" "normal"

core_enabled

  • Ограничения / валидация: bool.

  • Описание: Включает метрики ядра (hot-path telemetry counters).

  • Пример:

    [general.telemetry]
    core_enabled = true
    

user_enabled

  • Ограничения / валидация: bool.

  • Описание: Включает счетчики телеметрии для каждого пользователя.

  • Пример:

    [general.telemetry]
    user_enabled = true
    

me_level

  • Ограничения / валидация: "silent", "normal"или "debug".

  • Описание: Уровень детализации телеметрии Middle-End.

  • Пример:

    [general.telemetry]
    me_level = "normal"
    

[network]

Ключ Тип По умолчанию
ipv4 bool true
ipv6 bool false
prefer u8 4
multipath bool false
stun_use bool true
stun_servers String[] Встроенный STUN-лист (13 записей)
stun_tcp_fallback bool true
http_ip_detect_urls String[] ["https://ifconfig.me/ip", "https://api.ipify.org"]
cache_public_ip_path String "cache/public_ip.txt"
dns_overrides String[] []

ipv4

  • Ограничения / валидация: bool.

  • Описание: Включает возможность подключения по IPv4.

  • Пример:

    [network]
    ipv4 = true
    

ipv6

  • Ограничения / валидация: bool.

  • Описание: Включает возможность подключения по IPv6. Если не задан - используется значение false.

  • Пример:

    [network]
    # enable IPv6 explicitly
    ipv6 = true
    
    # or: disable IPv6 explicitly
    # ipv6 = false
    

prefer

  • Ограничения / валидация: Должно быть 4 или 6. Если prefer = 4, а ipv4 = false, Telemt принудительно использует prefer = 6. Если prefer = 6, а ipv6 = false, Telemt принудительно использует prefer = 4.

  • Описание: Предпочтительный IP-протокол (IPv4 или IPv6) при выборе, если доступны оба.

  • Пример:

    [network]
    prefer = 6
    

multipath

  • Ограничения / валидация: bool.

  • Описание: Включает многопоточное (multipath) сетевое поведение, если оно поддерживается платформой и средой выполняния.

  • Пример:

    [network]
    multipath = true
    

stun_use

  • Ограничения / валидация: bool.

  • Описание: Глобальный переключатель STUN; если установлено значение «false», проверка STUN отключается и остается только обнаружение без STUN.

  • Пример:

    [network]
    stun_use = false
    

stun_servers

  • Ограничения / валидация: String[]. Значения обрезаются; пустые значения удаляются; список очищается от дубликатов. Если этот ключ не задан явно, Telemt использует встроенный список STUN по умолчанию.

  • Описание: Список STUN-серверов для определения публичного IP-адреса.

  • Пример:

    [network]
    stun_servers = [
      "stun.l.google.com:19302",
      "stun.stunprotocol.org:3478",
    ]
    

stun_tcp_fallback

  • Ограничения / валидация: bool.

  • Описание: Включает резервный TCP для STUN в случае недоступности UDP-соединения.

  • Пример:

    [network]
    stun_tcp_fallback = true
    

http_ip_detect_urls

  • Ограничения / валидация: String[].

  • Описание: HTTP-эндпоинты, используемые для определения публичного IP (резервный вариант после STUN).

  • Пример:

    [network]
    http_ip_detect_urls = ["https://ifconfig.me/ip", "https://api.ipify.org"]
    

cache_public_ip_path

  • Ограничения / валидация: String.

  • Описание: Путь к файлу, в котором кэшируется определённый публичный IP.

  • Пример:

    [network]
    cache_public_ip_path = "cache/public_ip.txt"
    

dns_overrides

  • Ограничения / валидация: String[]. Каждая запись должна использовать формат host:port:ip.

    • host: доменное имя (не должно быть пустым и не должно содержать :)
    • port: u16
    • ip: IPv4 (1.2.3.4) или IPv6 в квадратных скобках ([2001:db8::1]). Значения IPv6 без скобок отклоняются!
  • Описание: Переопределение DNS во время работы для host:port-соединений. Позволяет принудительно задавать IP для указанных доменов, не изменяя системный DNS.

  • Пример:

    [network]
    dns_overrides = [
      "example.com:443:127.0.0.1",
      "example.net:8443:[2001:db8::10]",
    ]
    

[server]

Ключ Тип По умолчанию
port u16 443
listen_addr_ipv4 String "0.0.0.0"
listen_addr_ipv6 String "::"
listen_unix_sock String
listen_unix_sock_perm String
listen_tcp bool — (auto)
proxy_protocol bool false
proxy_protocol_header_timeout_ms u64 500
proxy_protocol_trusted_cidrs IpNetwork[] []
metrics_port u16
metrics_listen String
metrics_whitelist IpNetwork[] ["127.0.0.1/32", "::1/128"]
max_connections u32 10000
accept_permit_timeout_ms u64 250

port

  • Ограничения / валидация: u16.

  • Описание: Main proxy listen port (TCP).

  • Пример:

    [server]
    port = 443
    

listen_addr_ipv4

  • Ограничения / валидация: String (необязательный параметр). Если задан, должен содержать валидный IPv4-адрес в формате строки.

  • Описание: Прослушиваемый адрес в формате IPv4 (не задавайте этот параметр, если необходимо отключить прослушивание по IPv4).

  • Пример:

    [server]
    listen_addr_ipv4 = "0.0.0.0"
    

listen_addr_ipv6

  • Ограничения / валидация: String (необязательный параметр). Если задан, должен содержать валидный IPv6-адрес в формате строки.

  • Описание: Прослушиваемый адрес в формате IPv6 (не задавайте этот параметр, если необходимо отключить прослушивание по IPv6).

  • Пример:

    [server]
    listen_addr_ipv6 = "::"
    

listen_unix_sock

  • Ограничения / валидация: String (необязательный параметр). Не должен быть пустым, если задан. Unix only.

  • Описание: Путь к Unix-сокету для прослушивания. Если этот параметр задан, server.listen_tcp по умолчанию устанавливается в false (если только не переопределён явно).

  • Пример:

    [server]
    listen_unix_sock = "/run/telemt.sock"
    

listen_unix_sock_perm

  • Ограничения / валидация: String (необязательный параметр). Если задан, должен содержать восьмеричную строку со значением прав, например "0666" или "0777".

  • Описание: Необязательные права доступа для Unix-сокета, применяемые после биндинга через chmod. Если параметр не указан, права не изменяются и используются настройки umask.

  • Пример:

    [server]
    listen_unix_sock = "/run/telemt.sock"
    listen_unix_sock_perm = "0666"
    

listen_tcp

  • Ограничения / валидация: bool (необязательный параметр). Если этот параметр не задан, Telemt автоматически использует:
  • true, если listen_unix_sock не задан;
  • false, если задан listen_unix_sock.
    • Описание: Явное переопределение включения или отключения TCP-прослушивания.

    • Пример:

      [server]
      # force-enable TCP even when also binding a unix socket
      listen_unix_sock = "/run/telemt.sock"
      listen_tcp = true
      

proxy_protocol

  • Ограничения / валидация: bool.

  • Описание: Включает поддержку разбора PROXY protocol от HAProxy (v1/v2) на входящих соединениях. При включении исходный IP клиента берётся из PROXY-заголовка.

  • Пример:

    [server]
    proxy_protocol = true
    

proxy_protocol_header_timeout_ms

  • Ограничения / валидация: Должно быть > 0 (миллисекунд).

  • Описание: Таймаут чтения и анализа заголовков протокола PROXY (мс).

  • Пример:

    [server]
    proxy_protocol = true
    proxy_protocol_header_timeout_ms = 500
    

proxy_protocol_trusted_cidrs

  • Ограничения / валидация: IpNetwork[].

    • Если этот параметр не задан, по умолчанию в качестве доверенных используются доверительные все CIDR (0.0.0.0/0 и ::/0).
    • Если явно задан пустой массив, все заголовки PROXY отклоняются.
  • Описание: Список доверенных CIDR-диапазонов, которым разрешено передавать PROXY protocol-заголовки (механизм безопасности).

  • Пример:

    [server]
    proxy_protocol = true
    proxy_protocol_trusted_cidrs = ["127.0.0.1/32", "10.0.0.0/8"]
    

metrics_port

  • Ограничения / валидация: u16 (необязательный параметр).

  • Описание: Порт для Prometheus-совместимого endpointа метрик. При задании включает прослушивание метрик (поведение прослушивания может быть переопределено через metrics_listen).

  • Пример:

    [server]
    metrics_port = 9090
    

metrics_listen

  • Ограничения / валидация: String (необязательный параметр). Если задан, значение должно быть в формате IP:PORT.

  • Описание: Полный адрес привязки метрик (IP:PORT), переопределяет metrics_port и запускает прослушивание только на указанном адресе..

  • Пример:

    [server]
    metrics_listen = "127.0.0.1:9090"
    

metrics_whitelist

  • Ограничения / валидация: IpNetwork[].

  • Описание: Белый список CIDR для доступа к endpointу метрик.

  • Пример:

    [server]
    metrics_port = 9090
    metrics_whitelist = ["127.0.0.1/32", "::1/128"]
    

max_connections

  • Ограничения / валидация: u32. 0 - без ограничений.

  • Описание: Максимальное количество одновременных клиентских соединений.

  • Пример:

    [server]
    max_connections = 10000
    

accept_permit_timeout_ms

  • Ограничения / валидация: 0..=60000 (milliseconds). 0 - неограниченное время ожидания.

  • Описание: Максимальное время ожидания получения разрешения на подключение, прежде чем принятое соединение будет разорвано.

  • Пример:

    [server]
    accept_permit_timeout_ms = 250
    

Примечание. Когда server.proxy_protocol включен, входящие заголовки протокола PROXY анализируются с первых байтов соединения, а исходный адрес клиента заменяется на src_addr из заголовка. В целях безопасности IP-адрес прямого соединения проверяется по server.proxy_protocol_trusted_cidrs; если этот список пуст, заголовки PROXY отклоняются и соединение считается ненадежным.

[server.conntrack_control]

Примечание. Рабочий процесс conntrack-control работает только в Linux. В других операционных системах не запускается; если inline_conntrack_control имеет значение true, в логи записывается предупреждение. Для эффективной работы также требуется CAP_NET_ADMIN и пригодный к использованию бэкенд (nft или iptables/ip6tables в PATH). Утилита conntrack используется для удаления необязательных записей таблицы под нагрузкой.

Ключ Тип По умолчанию
inline_conntrack_control bool true
mode String "tracked"
backend String "auto"
profile String "balanced"
hybrid_listener_ips IpAddr[] []
pressure_high_watermark_pct u8 85
pressure_low_watermark_pct u8 70
delete_budget_per_sec u64 4096

inline_conntrack_control

  • Ограничения / валидация: bool.

  • Описание: Главный переключатель для задачи conntrack-control: согласовывает правила сетевого фильтра raw/notrack для входяшего трафика (см. mode), раз в секунду измеряет нагрузку и при активном режиме нагрузки может выполнять удаления через conntrack -D для подходящих событий закрытия соединений (см. delete_budget_per_sec). Если отключён (false), notrack-правила удаляются, а удаление при нагрузке отключается.

  • Пример:

    [server.conntrack_control]
    inline_conntrack_control = true
    

mode

  • Ограничения / валидация: tracked, notrack или hybrid (чувствителен к регистру, используется нижний регистр).

  • Описание:

    • tracked: не устанавливать notrack-правила, соединения полностью отслеживаются conntrack.
    • notrack: помечает входящий TCP-трафик к server.port как notrack; цели берутся из [server.listeners], либо из server.listen_addr_ipv4 / server.listen_addr_ipv6 (неуказанные адреса означают «любой» для этого семейства).
    • hybrid: notrack применяется только к адресам из hybrid_listener_ips (не должно быть пустым, проверяется при загрузке), остальные соединения отслеживаются обычным образом.
  • Пример:

    [server.conntrack_control]
    mode = "notrack"
    

backend

  • Ограничения / валидация: auto, nftablesили iptables (чувствителен к регистру, используется нижний регистр).

  • Описание: Выбор набора инструментов для применения notrack-правил.

    • auto: использует nft, если доступен, иначе - iptables/ip6tables.
    • nftables / iptables: принудительно выбирает соответствующий backend; при отсутствии бинарника правила не применяются. В nft-режиме используется таблица inet telemt_conntrack, в iptables — цепочка TELEMT_NOTRACK в таблице raw.
  • Пример:

    [server.conntrack_control]
    backend = "auto"
    

profile

  • Ограничения / валидация: conservative, balancedили aggressive (чувствителен к регистру, используется нижний регистр).

  • Описание: При активном режиме conntrack pressure mode граничивает таймауты для снижения нагрузки: idle-время клиента, таймауты активности direct relay и политики idle middle relay. Более агрессивные профили используют более короткие ограничения.

  • Пример:

    [server.conntrack_control]
    profile = "balanced"
    

hybrid_listener_ips

  • Ограничения / валидация: IpAddr[]. Значение не должно быть пустым, если mode = "hybrid". Игнорируется для режимов tracked / notrack.

  • Описание: Явный список прослушиваемых IP-адресов, к которым применяется notrack в hybrid-режиме (разделяется на IPv4 и IPv6 правила).

  • Пример:

    [server.conntrack_control]
    mode = "hybrid"
    hybrid_listener_ips = ["203.0.113.10", "2001:db8::1"]
    

pressure_high_watermark_pct

  • Ограничения / валидация: Должно быть в пределах [1, 100].

  • Описание: Порог входа в conntrack pressure mode. Переход происходит при любом из следующих условий: заполненность соединений относительно server.max_connections (в процентах, если max_connections > 0), использование файловых дескрипторов относительно мягкого лимита RLIMIT_NOFILE, ненулевое значение accept_permit_timeout или дельта относитель счетчика ME c2me send-full. Сравниваются соответствующие проценты с верхней отметкой указанных параметров (см. update_pressure_state в conntrack_control.rs).

  • Пример:

    [server.conntrack_control]
    pressure_high_watermark_pct = 85
    

pressure_low_watermark_pct

  • Ограничения / валидация: Должно быть сторого ниже значения pressure_high_watermark_pct.

  • Описание: Режим conntrack pressure mode отключается только после трех последовательных односекундных выборок, когда все сигналы находятся на уровне этой нижней границы или ниже, а дельты времени ожидания приема/ME-очереди равны нулю (гистерезис).

  • Пример:

    [server.conntrack_control]
    pressure_low_watermark_pct = 70
    

delete_budget_per_sec

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Максимальное количество попыток удаления через conntrack -D в секунду во время режима conntrack pressure mode. Ограничение реализовано через токен-бакет; применяется только к событиям закрытия с причинами timeout, pressure или reset.

  • Пример:

    [server.conntrack_control]
    delete_budget_per_sec = 4096
    

[server.api]

Примечание: В этом разделе также задается устаревший параметр [server.admin_api] (аналогично [server.api]).

Ключ Тип По умолчанию
enabled bool true
listen String "0.0.0.0:9091"
whitelist IpNetwork[] ["127.0.0.0/8"]
auth_header String ""
request_body_limit_bytes usize 65536
minimal_runtime_enabled bool true
minimal_runtime_cache_ttl_ms u64 1000
runtime_edge_enabled bool false
runtime_edge_cache_ttl_ms u64 1000
runtime_edge_top_n usize 10
runtime_edge_events_capacity usize 256
read_only bool false

enabled

  • Ограничения / валидация: bool.

  • Описание: Включает возможность управления через REST API.

  • Пример:

    [server.api]
    enabled = true
    

listen

  • Ограничения / валидация: String. Должно быть в формате IP:PORT.

  • Описание: Адрес биндинга API в формате IP:PORT.

  • Пример:

    [server.api]
    listen = "0.0.0.0:9091"
    

whitelist

  • Ограничения / валидация: IpNetwork[].

  • Описание: Список CIDR-адресов, которым разрешён доступ к API.

  • Пример:

    [server.api]
    whitelist = ["127.0.0.0/8"]
    

auth_header

  • Ограничения / валидация: String. Пустая строка отключает проверку заголовка аутентификации.

  • Описание: Точное ожидаемое значение заголовка Authorization (static shared secret).

  • Пример:

    [server.api]
    auth_header = "Bearer MY_TOKEN"
    

request_body_limit_bytes

  • Ограничения / валидация: Должно быть > 0 (байт).

  • Описание: Максимальный принимаемый размер тела HTTP-запроса (в байтах).

  • Пример:

    [server.api]
    request_body_limit_bytes = 65536
    

minimal_runtime_enabled

  • Ограничения / валидация: bool.

  • Описание: Включает логику минимальных runtime-снимков endpointа.

  • Пример:

    [server.api]
    minimal_runtime_enabled = true
    

minimal_runtime_cache_ttl_ms

  • Ограничения / валидация: 0..=60000 (миллисекунд). 0 - отключает кэширование.

  • Описание: Время жизни минимальных runtime-снимков (в мс).

  • Пример:

    [server.api]
    minimal_runtime_cache_ttl_ms = 1000
    

runtime_edge_enabled

  • Ограничения / валидация: bool.

  • Описание: Включает runtime endpointы для edge-данных (статистики/метрик).

  • Пример:

    [server.api]
    runtime_edge_enabled = false
    

runtime_edge_cache_ttl_ms

  • Ограничения / валидация: 0..=60000 (миллисекунд).

  • Описание: Время жизни кэша (в миллисекундах) для агрегированных данных (payloadов) runtime edge.

  • Пример:

    [server.api]
    runtime_edge_cache_ttl_ms = 1000
    

runtime_edge_top_n

  • Ограничения / валидация: 1..=1000.

  • Описание: Размер выборки Top-N для рейтинга (leaderboard) edge-соединений.

  • Пример:

    [server.api]
    runtime_edge_top_n = 10
    

runtime_edge_events_capacity

  • Ограничения / валидация: 16..=4096.

  • Описание: Ёмкость кольцевого буфера для runtime edge-событий.

  • Пример:

    [server.api]
    runtime_edge_events_capacity = 256
    

read_only

  • Ограничения / валидация: bool.

  • Описание: Переводит API в режим "только чтение".

  • Пример:

    [server.api]
    read_only = false
    

server.listeners

Ключ Тип По умолчанию
ip IpAddr
announce String
announce_ip IpAddr
proxy_protocol bool
reuse_allow bool false

ip

  • Ограничения / валидация: Обязательный параметр. Значение должно содержать IP-адрес в формате строки.

  • Описание: Адрес для listenerа.

  • Пример:

    [server.listeners]
    ip = "0.0.0.0"
    

announce

  • Ограничения / валидация: String (необязательный параметр). Не должен быть пустым, если задан.

  • Описание: Публичный IP-адрес или домен, объявляемый в proxy-ссылках для данного listenerа. Имеет приоритет над announce_ip.

  • Пример:

    [server.listeners]
    ip = "0.0.0.0"
    announce = "proxy.example.com"
    

announce_ip

  • Ограничения / валидация: IpAddr (необязательный параметр). Устарел. Используйте announce.

  • Описание: Устаревший параметр для анонсирования IP. Во время загрузки конфигурации он переносится в announce если announce не задан.

  • Пример:

    [server.listeners]
    ip = "0.0.0.0"
    announce_ip = "203.0.113.10"
    

proxy_protocol

  • Ограничения / валидация: bool (необязательный параметр). Если задан, перезаписывает значение server.proxy_protocol для этого listenerа.

  • Описание: Переопределение протокола PROXY для каждого listenerа.

  • Пример:

    [server]
    proxy_protocol = false
    
    [server.listeners]
    ip = "0.0.0.0"
    proxy_protocol = true
    

reuse_allow"

  • reuse_allow
    • Ограничения / валидация: bool.

    • Описание: Включает SO_REUSEPORT для совместного использования привязки нескольких экземпляров (позволяет нескольким экземплярам telemt прослушивать один и тот же ip:port).

    • Пример:

      [server.listeners]
      ip = "0.0.0.0"
      reuse_allow = false
      

[timeouts]

Ключ Тип По умолчанию
client_handshake u64 30
relay_idle_policy_v2_enabled bool true
relay_client_idle_soft_secs u64 120
relay_client_idle_hard_secs u64 360
relay_idle_grace_after_downstream_activity_secs u64 30
tg_connect u64 10
client_keepalive u64 15
client_ack u64 90
me_one_retry u8 12
me_one_timeout_ms u64 1200

client_handshake

  • Ограничения / валидация: Должно быть > 0. Значение указано в секундах. Также используется в качестве верхней границы некоторых задержек эмуляции TLS (см. censorship.server_hello_delay_max_ms).

  • Описание: Таймаут выполнения "рукопожатия" для клиента (в секундах).

  • Пример:

    [timeouts]
    client_handshake = 30
    

relay_idle_policy_v2_enabled

  • Ограничения / валидация: bool.

  • Описание: Включает политику простоя клиента для промежуточного узла.

  • Пример:

    [timeouts]
    relay_idle_policy_v2_enabled = true
    

relay_client_idle_soft_secs

  • Ограничения / валидация: Должно быть > 0; Должно быть меньше или равно relay_client_idle_hard_secs.

  • Описание: Мягкий порог простоя (в секундах) для неактивности uplink клиента в промежуточном узле. При достижении этого порога сессия помечается как кандидат на простой и может быть удалена в зависимости от политики.

  • Пример:

    [timeouts]
    relay_client_idle_soft_secs = 120
    

relay_client_idle_hard_secs

  • Ограничения / валидация: Должно быть > 0; Должно быть больше или равноrelay_client_idle_soft_secs.

  • Описание: Жёсткий порог простоя (в секундах) для неактивности uplink клиента в промежуточном узле. При достижении этого порога сессия принудительно закрывается.

  • Пример:

    [timeouts]
    relay_client_idle_hard_secs = 360
    

relay_idle_grace_after_downstream_activity_secs

  • Ограничения / валидация: Должно быть <= relay_client_idle_hard_secs.

  • Описание: Дополнительный период отсрочки жёсткого простоя (в секундах), добавляемый после недавней активности downstream.

  • Пример:

    [timeouts]
    relay_idle_grace_after_downstream_activity_secs = 30
    

tg_connect

  • Ограничения / валидация: u64 (секунд).

  • Описание: Таймаут подключения к upstream-серверу Telegram (в секундах).

  • Пример:

    [timeouts]
    tg_connect = 10
    

client_keepalive

  • Ограничения / валидация: u64 (секунд).

  • Описание: Таймаут keepalive для клиента..

  • Пример:

    [timeouts]
    client_keepalive = 15
    

client_ack

  • Ограничения / валидация: u64 (секунд).

  • Описание: Таймаут подтверждения (ACK) от клиента в секундах.

  • Пример:

    [timeouts]
    client_ack = 90
    

me_one_retry

  • Ограничения / валидация: u8.

  • Описание: Лимит быстрых попыток переподключения в сценариях DC с единственным endpoint'ом.

  • Пример:

    [timeouts]
    me_one_retry = 12
    

me_one_timeout_ms

  • Ограничения / валидация: u64 (миллисекунд).

  • Описание: Таймаут на одну быструю попытку переподключения (в миллисекундах) в логике reconnect для DC с единственным endpoint'ом.

  • Пример:

    [timeouts]
    me_one_timeout_ms = 1200
    

[censorship]

Ключ Тип По умолчанию
tls_domain String "petrovich.ru"
tls_domains String[] []
unknown_sni_action "drop", "mask", "accept" "drop"
tls_fetch_scope String ""
tls_fetch Table built-in defaults
mask bool true
mask_host String
mask_port u16 443
mask_unix_sock String
fake_cert_len usize 2048
tls_emulation bool true
tls_front_dir String "tlsfront"
server_hello_delay_min_ms u64 0
server_hello_delay_max_ms u64 0
tls_new_session_tickets u8 0
tls_full_cert_ttl_secs u64 90
alpn_enforce bool true
mask_proxy_protocol u8 0
mask_shape_hardening bool true
mask_shape_hardening_aggressive_mode bool false
mask_shape_bucket_floor_bytes usize 512
mask_shape_bucket_cap_bytes usize 4096
mask_shape_above_cap_blur bool false
mask_shape_above_cap_blur_max_bytes usize 512
mask_relay_max_bytes usize 5242880
mask_classifier_prefetch_timeout_ms u64 5
mask_timing_normalization_enabled bool false
mask_timing_normalization_floor_ms u64 0
mask_timing_normalization_ceiling_ms u64 0

tls_domain

  • Ограничения / валидация: Не должно быть пустым. Не должно содержать пробелы или /.

  • Описание: Основной TLS-домен, используемый в профиле FakeTLS handshake и как домен SNI по умолчанию.

  • Пример:

    [censorship]
    tls_domain = "example.com"
    

tls_domains

  • Ограничения / валидация: String[]. Когда задан, значение объединяется с tls_domain и очищается от дубликатов (первичный tls_domain всегда остается первым).

  • Описание: Дополнительные домены TLS для создания нескольких прокси-ссылок.

  • Пример:

    [censorship]
    tls_domain = "example.com"
    tls_domains = ["example.net", "example.org"]
    

unknown_sni_action

  • Ограничения / валидация: "drop", "mask" или "accept".

  • Описание: Действие для TLS ClientHello с неизвестным/ненастроенным SNI.

  • Пример:

    [censorship]
    unknown_sni_action = "drop"
    

tls_fetch_scope

  • Ограничения / валидация: String. Значение обрезается во время загрузки; значение, состоящее только из пробелов, становится пустым.

  • Описание: Тег области upstream, используемый для TLS-front метаданных при их получении. Пустое значение сохраняет стандартное поведение маршрутизации upstream.

  • Пример:

    [censorship]
    tls_fetch_scope = "fetch"
    

censorship.tls_fetch

  • Ограничения / валидация: Таблица, см. секцию [censorship.tls_fetch] ниже.

  • Описание: Настройки стратегии получения TLS-front метаданных (поведение загрузки и обновления bootstrap и данных эмуляции TLS)..

  • Пример:

    [censorship.tls_fetch]
    strict_route = true
    attempt_timeout_ms = 5000
    total_budget_ms = 15000
    

mask

  • Ограничения / валидация: bool.

  • Описание: Включает режим маскировки/верхнего уровня. Принимаются все SNI, которые похожи на заданный в tls_domain.

  • Пример:

    [censorship]
    mask = true
    

mask_host

  • Ограничения / валидация: String (необязательный параметр).

    • Если задан параметр mask_unix_sock, mask_host не должен быть задан.
    • Если не задан параметр mask_host и mask_unix_sock не задан, Telemt по умолчанию устанавливает для mask_host значение tls_domain.
  • Описание: Хост, используемый для маскировки при TLS-fronting.

  • Пример:

    [censorship]
    mask_host = "www.cloudflare.com"
    

mask_port

  • Ограничения / валидация: u16.

  • Описание: Порт маскирующего upstream для TLS fronting.

  • Пример:

    [censorship]
    mask_port = 443
    

mask_unix_sock

  • Ограничения / валидация: String (optional).

    • Значение не должно быть пустым, если задан.
    • Unix only;
    • На Unix системах, должно быть \le 107 байт (ограничение длины пути).
    • Взаимоисключающий с mask_host.
  • Описание: Путь к Unix-сокету для mask-бэкенда вместо использования TCP mask_host/mask_port.

  • Пример:

    [censorship]
    mask_unix_sock = "/run/telemt/mask.sock"
    

fake_cert_len

  • Ограничения / валидация: usize. Когда tls_emulation = false и используется значение по умолчанию, Telemt может рандомизировать его при запуске для обеспечения вариативности.

  • Описание: Длина синтетического сертификатного payloadа, используемого при отсутствии данных для эмуляции.

  • Пример:

    [censorship]
    fake_cert_len = 2048
    

tls_emulation

  • Ограничения / валидация: bool.

  • Описание: Включает эмуляцию поведения сертификата/TLS из кэшированных реальных сайтов.

  • Пример:

    [censorship]
    tls_emulation = true
    

tls_front_dir

  • Ограничения / валидация: String.

  • Описание: Путь к директории для хранения кэша сайтов.

  • Пример:

    [censorship]
    tls_front_dir = "tlsfront"
    

server_hello_delay_min_ms

  • Ограничения / валидация: u64 (миллисекунд).

  • Описание: Минимальная задержка server_hello (в миллисекундах) для защиты от идентификации по fingerprint'у.

  • Пример:

    [censorship]
    server_hello_delay_min_ms = 0
    

server_hello_delay_max_ms

  • Ограничения / валидация: u64 (миллисекунд). Должно быть < timeouts.client_handshake * 1000.

  • Описание: Максимальная задержка server_hello (в миллисекундах) для защиты от идентификации по fingerprint'у.

  • Пример:

    [timeouts]
    client_handshake = 30
    
    [censorship]
    server_hello_delay_max_ms = 0
    

tls_new_session_tickets

  • Ограничения / валидация: u8.

  • Описание: Количество сообщений NewSessionTicket, отправляемых после рукопожатия.

  • Пример:

    [censorship]
    tls_new_session_tickets = 0
    

tls_full_cert_ttl_secs

  • Ограничения / валидация: u64 (секунд).

  • Описание: TTL для отправки полного сертификатного payloadа для каждой пары (домен, IP клиента).

  • Пример:

    [censorship]
    tls_full_cert_ttl_secs = 90
    

alpn_enforce

  • Ограничения / валидация: bool.

  • Описание: Принудительно изменяет поведение возврата ALPN в соответствии с предпочтениями клиента.

  • Пример:

    [censorship]
    alpn_enforce = true
    

mask_proxy_protocol

  • Ограничения / валидация: u8. 0 = выключен, 1 = v1 (текстовый), 2 = v2 (бинарный).

  • Описание: Отправляет заголовок PROXY protocol при подключении к mask-бэкенду, позволяя бэкенду видеть реальный IP клиента.

  • Пример:

    [censorship]
    mask_proxy_protocol = 0
    

mask_shape_hardening

  • Ограничения / валидация: bool.

  • Описание: Усиливает защиту канала формирования/маскировки (shape-channel) трафика client->mask за счёт контролируемого добавления хвостового padding'а к границам групп данных при завершении работы mask relay.

  • Пример:

    [censorship]
    mask_shape_hardening = true
    

mask_shape_hardening_aggressive_mode

  • Ограничения / валидация: Требует, чтобы mask_shape_hardening = true.

  • Описание: Опциональный агрессивный профиль формирования трафика (более сильное противодействие классификаторам с изменённой логикой шейпинга).

  • Пример:

    [censorship]
    mask_shape_hardening = true
    mask_shape_hardening_aggressive_mode = false
    

mask_shape_bucket_floor_bytes

  • Ограничения / валидация: Должно быть > 0; должно быть меньше или равноmask_shape_bucket_cap_bytes.

  • Описание: Минимальный размер группы данных, используемый при усилении канала формирования/маскировки трафика (shape-channel).

  • Пример:

    [censorship]
    mask_shape_bucket_floor_bytes = 512
    

mask_shape_bucket_cap_bytes

  • Ограничения / валидация: Должно быть >= mask_shape_bucket_floor_bytes.

  • Описание: Максимальный размер группы данных, используемого для усиления канала формирования/маскировки трафика (shape-channel); трафик, превышающий этот лимит, больше не подвергается bucket-padding'у.

  • Пример:

    [censorship]
    mask_shape_bucket_cap_bytes = 4096
    

mask_shape_above_cap_blur

  • Ограничения / валидация: Требует, чтобы mask_shape_hardening = true.

  • Описание: Добавляет ограниченное количество случайных байтов в конец данных (tail), даже если передаваемый размер уже превышает лимит.

  • Пример:

    [censorship]
    mask_shape_hardening = true
    mask_shape_above_cap_blur = false
    

mask_shape_above_cap_blur_max_bytes

  • Ограничения / валидация: Должно быть <= 1048576. Должно быть > 0, если mask_shape_above_cap_blur = true.

  • Описание: Максимальное количество случайных дополнительных байтов, добавляемых сверх лимита, когда включено размытие данных(blur).

  • Пример:

    [censorship]
    mask_shape_above_cap_blur = true
    mask_shape_above_cap_blur_max_bytes = 64
    

mask_relay_max_bytes

  • Ограничения / валидация: Должно быть > 0; Должно быть меньше или равно 67108864.

  • Описание: Максимальное количество байт, передаваемых в каждом направлении, на неаутентифицированной fallback маскировке.

  • Пример:

    [censorship]
    mask_relay_max_bytes = 5242880
    

mask_classifier_prefetch_timeout_ms

  • Ограничения / валидация: Должно быть в пределах [5, 50] (миллисекунд).

  • Описание: Лимит времени ожидания (в миллисекундах) для расширения первых входящих данных в режиме fallback-маскировки.

  • Пример:

    [censorship]
    mask_classifier_prefetch_timeout_ms = 5
    

mask_timing_normalization_enabled

  • Ограничения / валидация: Когда true, требует, чтобы mask_timing_normalization_floor_ms > 0 и mask_timing_normalization_ceiling_ms был больше или равен mask_timing_normalization_floor_ms. Значение должно быть меньше или равно 60000.

  • Описание: Включает выравнивание и сглаживание временных паттернов (таймингов) трафика после применения маскировки.

  • Пример:

    [censorship]
    mask_timing_normalization_enabled = false
    

mask_timing_normalization_floor_ms

  • Ограничения / валидация: Должно быть > 0, если mask_timing_normalization_enabled = true; Должно быть меньше или равно mask_timing_normalization_ceiling_ms.

  • Описание: Lower bound (ms) for masking outcome normalization target.

  • Пример:

    [censorship]
    mask_timing_normalization_floor_ms = 0
    

mask_timing_normalization_ceiling_ms

  • Ограничения / валидация: Должно быть >= mask_timing_normalization_floor_ms; Должно быть <= 60000.

  • Описание: Минимально допустимое значение таймингов/задержек, к которому система “приводит” (нормализует) поведение маскированного трафика.

  • Пример:

    [censorship]
    mask_timing_normalization_ceiling_ms = 0
    

Примечания по усилению shape-channel ([censorship])

Эти параметры предназначены для снижения одного конкретного источника fingerprinting при маскировке: точного количества байт, отправляемых от прокси к mask_host при невалидном или зондирующем (probe) трафике.

Без усиления защиты цензор часто может очень точно сопоставить длину входящего пробного запроса с длиной, наблюдаемой на стороне бэкенда (например, 5 + body_sent на ранних этапах отклонения TLS). Это является сигналом для классификации на основе длины.

Когда mask_shape_hardening = true, Telemt дополняет (padding) хвост потока client → mask до границы группы данных при завершении работы промежуточного звена:

  • Сначала измеряется общее количество байт, отправленных в mask.
  • Затем выбирается bucket (группа данных), используя степени двойки, начиная с mask_shape_bucket_floor_bytes.
  • Padding добавляется только если общее количество байт меньшеmask_shape_bucket_cap_bytes.
  • Если количество байт уже превышает cap, дополнительные данные не добавляются

Это означает, что несколько близких по размеру пробных запросов (probe) объединяются в одну и ту же группу данных, наблюдаемых на стороне backend'а, что усложняет активную классификацию.

Что каждый параметр меняет на практике:

  • mask_shape_hardening Включает или отключает весь этап формирования (shaping) длины на fallback'е. Если false, наблюдаемая на backend длина остаётся близкой к реальной длине переданного probe-запроса. Если true, при быстром завершении соединения промежуточное звено может добавлять случайные padding-байты, чтобы итоговый размер попадал в заданную группу данных.
  • mask_shape_bucket_floor_bytes Устанавливает первую границу bucketа, используемого для небольших probe-запросов. Например: при значении 512 некорректный probe-запрос, который в обычном случае передал бы 37 байт, может быть дополнен до 512 байт при корректном завершении соединения (clean EOF). Более высокие значения mask_shape_bucket_floor_bytes лучше скрывают очень маленькие probe-запросы, но увеличивают объём исходящего трафика.
  • mask_shape_bucket_cap_bytes Устанавливает наибольший bucket, до которого Telemt может выполнять padding по bucket-логике. Например: при значении cap = 4096 итоговые 1800 байт могут быть дополнены до 2048 или 4096 в зависимости от "лестницы" bucketов, но если объём уже превышает 4096 байт, дальнейшее bucket-дополнение не выполняется. Более высокие значения cap расширяют диапазон, в котором размеры объединяются в классы, но также увеличивают максимальные накладные расходы.
  • Clean EOF имеет значение в conservative режиме В профиле по умолчанию padding формы трафика намеренно реализован консервативно: он применяется только при корректном завершении соединения (clean relay shutdown), а не при каждом таймауте или "капельной" (drip) передаче. Это позволяет избежать появления новых артефактов тайм-аута, которые некоторые серверные части или тесты интерпретируют как отдельные fingerprint'ы.

Практические компромиссы:

  • Улучшенная защита от fingerprinting'a для канала формирования/маскировки трафика.
  • Немного выше выходные накладные расходы для небольших зондов из-за padding'а.
  • Система намеренно использует "консервативный" режим и это поведение включено по умолчанию.

Рекомендуемые начальные настройки:

  • mask_shape_hardening = true (default)
  • mask_shape_bucket_floor_bytes = 512
  • mask_shape_bucket_cap_bytes = 4096

Уточнения по агрессивным режимам работы ([censorship])

mask_shape_hardening_aggressive_mode - это параметр, который включается вручную и предназначен для более сильного противодействия классификаторам.

  • Значение по умолчанию - false, чтобы сохранить консервативное поведение по тайм-ауту.
  • Требует, чтобы mask_shape_hardening = true.
  • Когда включено, не завершающиеся (non-EOF) запросы для маскировки, не передающие данные на backend, могут подвергаться shapingу (формированию трафика).
  • Когда включено вместе с "размытием" трафика выше порога cap, случайный дополнительный tail использует [1, max] instead of [0, max].

Что меняется при включении агрессивного режима:

  • Могут быть сформированы пути тайм-аута, не требующие бэкенда. В режиме по умолчанию клиент, который держит сокет полуоткрытым и имеет тайм-аут, обычно не будет получать заполнение формы по этому пути. В агрессивном режиме Telemt все равно может применять shaping к такому backend-silent соединению, если от backend не было получено ответа. Это специально предназначено для активных зондов, которые пытаются избежать EOF, чтобы сохранить точную наблюдаемую длину.
  • "Размытие" трафика выше порога cap всегда добавляет как минимум один байт. В режиме по умолчанию для размытия трафика (blur) над максимальным пределом может быть выбрано значение «0», поэтому некоторые зонды слишком большого размера по-прежнему попадают на точную базовую длину пересылки. В агрессивном режиме эта базовая выборка удаляется автоматически.
  • Компромисс Агрессивный режим повышает устойчивость к активным классификаторам на основе длины, но он более жесткие ограничения и менее консервативен. Если вам важна строгая совместимость с логикой таймаутов и no-tail semantics, лучше оставить его выключенным. Если же ваша модель угроз включает повторяющееся активное зондирование со стороны цензора, этот режим является более сильным вариантом защиты.

Используйте этот режим только в том случае, если ваша модель угроз отдает приоритет устойчивости классификатора над строгой совместимостью с консервативной семантикой маскировки.

О "размытии" трафика ([censorship])

mask_shape_above_cap_blur Добавляет второй этап blur (размытия) для очень больших probe-запросов, которые уже превышают mask_shape_bucket_cap_bytes.

  • Рандомное дополнение конца данных [0, mask_shape_above_cap_blur_max_bytes] добавляется в режиме по умолчанию.
  • В агрессивном режиме система всегда добавляет хотя бы немного дополнительных байт в конец трафика: [1, mask_shape_above_cap_blur_max_bytes].
  • Система хуже “раскрывает” точный размер больших запросов, но делает это так, чтобы не сильно увеличивать лишний трафик.
  • Используйте mask_shape_above_cap_blur_max_bytes в базовом режиме, чтобы избежать ненужного роста исходящего трафика

Что это означает на практике:

  • Без above-cap blur Probe-запрос, который пересылает 5005 байт, всё равно будет выглядеть для backend как 5005 байт, если он уже превышает cap.
  • С включённым above-cap blur Тот же самый probe-запрос может выглядеть как любое значение в ограниченном диапазоне выше его исходной длины. Например, если mask_shape_above_cap_blur_max_bytes = 64: Наблюдаемый на backend размер становится диапазоном 5005..5069 в режиме по умолчанию или 5006..5069 в агрессивном режиме.
  • Выбор mask_shape_above_cap_blur_max_bytes Малые значения уменьшают cost, но сохраняют большую различимость между сильно различающимися классами трафика, которые по размеру существенно больше обычного. Большие значения сильнее размывают (blur) классы трафика, которые по размеру существенно больше обычного, но увеличивают исходящий трафик и вариативность выходных данных.

Примечания по нормализации таймингов ([censorship])

mask_timing_normalization_enabled сглаживает разницу во времени между результатами маскировки, применяя целевой диапазон длительности.

  • Случайное целевое значение выбирается в [mask_timing_normalization_floor_ms, mask_timing_normalization_ceiling_ms].
  • Быстрые запросы задерживаются до выбранной цели.
  • Медленные запросы мягко ограничиваются верхним пределом.

Рекомендованный начальный конфиг для шейпинга таймингов:

  • mask_timing_normalization_enabled = true
  • mask_timing_normalization_floor_ms = 180
  • mask_timing_normalization_ceiling_ms = 320

Если ваш backend или сеть сильно ограничены по пропускной способности, сначала уменьшите cap. Если в вашей среде пробные запросы (probes) всё ещё слишком легко различимы, постепенно увеличивайте нижнее значение.

[censorship.tls_fetch]

Ключ Тип По умолчанию
profiles String[] ["modern_chrome_like", "modern_firefox_like", "compat_tls12", "legacy_minimal"]
strict_route bool true
attempt_timeout_ms u64 5000
total_budget_ms u64 15000
grease_enabled bool false
deterministic bool false
profile_cache_ttl_secs u64 600

profiles

  • Ограничения / валидация: String[]. Пустой список возвращает значения по умолчанию; дубликаты удаляются с сохранением порядка.

  • Описание: Упорядоченная цепочка fallback-профилей ClientHello для получения TLS-front метаданных.

  • Пример:

    [censorship.tls_fetch]
    profiles = ["modern_chrome_like", "compat_tls12"]
    

strict_route

  • Ограничения / валидация: bool.

  • Описание: Если значние true и настроен upstream-маршрут, то при ошибках подключения к upstream TLS-запрос завершается с ошибкой вместо перехода на прямое TCP-соединение.

  • Пример:

    [censorship.tls_fetch]
    strict_route = true
    

attempt_timeout_ms

  • Ограничения / валидация: Должно быть > 0 (миллисекунд).

  • Описание: Лимит таймаута на одну попытку получения профиля TLS (мс).

  • Пример:

    [censorship.tls_fetch]
    attempt_timeout_ms = 5000
    

total_budget_ms

  • Ограничения / валидация: Должно быть > 0 (миллисекунд).

  • Описание: Общий бюджет “реального времени” (wall-clock) на все попытки получения данных через TLS (в миллисекундах).

  • Пример:

    [censorship.tls_fetch]
    total_budget_ms = 15000
    

grease_enabled

  • Ограничения / валидация: bool.

  • Описание: Включает случайные GREASE-style значения в выбранных расширениях ClientHello для получения трафика.

  • Пример:

    [censorship.tls_fetch]
    grease_enabled = false
    

deterministic

  • Ограничения / валидация: bool.

  • Описание: Включает детерминированную случайность ClientHello для отладки и тестов. Dместо настоящей случайности в TLS ClientHello используется фиксированная (повторяемая) “псевдослучайность”, чтобы поведение можно было воспроизводить.

  • Пример:

    [censorship.tls_fetch]
    deterministic = false
    

profile_cache_ttl_secs

  • Ограничения / валидация: u64 (секунд). 0 - отключает кэширование.

  • Описание: Время жизни (TTL) записей кэша “победившего профиля” (winner-profile), используемых для получения данных через TLS.

  • Пример:

    [censorship.tls_fetch]
    profile_cache_ttl_secs = 600
    

[access]

Ключ Тип По умолчанию
users Map<String, String> {"default": "000…000"}
user_ad_tags Map<String, String> {}
user_max_tcp_conns Map<String, usize> {}
user_max_tcp_conns_global_each usize 0
user_expirations Map<String, DateTime<Utc>> {}
user_data_quota Map<String, u64> {}
user_max_unique_ips Map<String, usize> {}
user_max_unique_ips_global_each usize 0
user_max_unique_ips_mode "active_window", "time_window", or "combined" "active_window"
user_max_unique_ips_window_secs u64 30
replay_check_len usize 65536
replay_window_secs u64 120
ignore_time_skew bool false

users

  • Ограничения / валидация: Не должно быть пустым (должен существовать хотя бы один пользователь). Каждое значение должно состоять ровно из 32 шестнадцатеричных символов.

  • Описание: Учетные данные пользователей, используемые для аутентификации клиентов. Ключи — это имена пользователей; значения являются секретами MTProxy.

  • Пример:

    [access.users]
    alice = "00112233445566778899aabbccddeeff"
    bob   = "0123456789abcdef0123456789abcdef"
    

user_ad_tags

  • Ограничения / валидация: Каждое значение должно содержать ровно 32 шестнадцатеричных символа (тот же формат, что и в general.ad_tag). Тег со всеми нулями разрешен, но в логи будет записано предупреждение.

  • Описание: Переопределение рекламного тега спонсируемого канала для каждого пользователя. Когда у пользователя есть запись здесь, она имеет приоритет над general.ad_tag.

  • Пример:

    [general]
    ad_tag = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    
    [access.user_ad_tags]
    alice = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    

user_max_tcp_conns

  • Ограничения / валидация: Map<String, usize>.

  • Описание: Максимальное количество одновременных TCP-соединений для каждого пользователя.

  • Пример:

    [access.user_max_tcp_conns]
    alice = 500
    

user_max_tcp_conns_global_each

  • Ограничения / валидация: usize. 0 - отключает лимит.

  • Описание: Глобальное максимальное количество одновременных TCP-соединений для каждого пользователя, применяется, когда у пользователя нет записи в [access.user_max_tcp_conns] (отсутствующее или равное 0 значения подпадают под это условие). Ограничения на пользователя, превышающие 0 в параметре user_max_tcp_conns, имеют приоритет.

  • Пример:

    [access]
    user_max_tcp_conns_global_each = 200
    
    [access.user_max_tcp_conns]
    alice = 500   # uses 500, not the global cap
    # bob has no entry > uses 200
    

user_expirations

  • Ограничения / валидация: Map<String, DateTime<Utc>>. Каждое значение должно быть валидной датой и временем в формате RFC3339/ISO-8601.

  • Описание: Временные метки истечения срока действия учетной записи пользователя (UTC).

  • Пример:

    [access.user_expirations]
    alice = "2026-12-31T23:59:59Z"
    

user_data_quota

  • Ограничения / валидация: Map<String, u64>.

  • Описание: Квота трафика на пользователя в байтах.

  • Пример:

    [access.user_data_quota]
    alice = 1073741824 # 1 GiB
    

user_max_unique_ips

  • Ограничения / валидация: Map<String, usize>.

  • Описание: Ограничение на количество уникальных IP-адресов, с которых выполняется подключение, для каждого пользователя.

  • Пример:

    [access.user_max_unique_ips]
    alice = 16
    

user_max_unique_ips_global_each

  • Ограничения / валидация: usize. 0 - отключает лимит.

  • Описание: Глобальный лимит на количество уникальных IP-адресов, с которых выполняется подключение, для каждого пользователя, когда у пользователя нет индивидуального переопределения в [access.user_max_unique_ips].

  • Пример:

    [access]
    user_max_unique_ips_global_each = 8
    

user_max_unique_ips_mode

  • Ограничения / валидация: "active_window", "time_window", "combined".

  • Описание: Режим учета лимита уникальных IP-адресов.

  • Пример:

    [access]
    user_max_unique_ips_mode = "active_window"
    

user_max_unique_ips_window_secs

  • Ограничения / валидация: Должно быть > 0.

  • Описание: Размер временного окна (в секундах), используемого режимами учёта уникальных IP, которые работают с ограничением по времени (значения "time_window" и "combined").

  • Пример:

    [access]
    user_max_unique_ips_window_secs = 30
    

replay_check_len

  • Ограничения / валидация: usize.

  • Описание: Количество последних сообщений/запросов, которое система запоминает, чтобы не допустить их повторной отправки (replay).

  • Пример:

    [access]
    replay_check_len = 65536
    

replay_window_secs

  • Ограничения / валидация: u64.

  • Описание: Как долго система "помнит" уже обработанные запросы, чтобы не принять их повторно (в секундах).

  • Пример:

    [access]
    replay_window_secs = 120
    

ignore_time_skew

  • Ограничения / валидация: bool.

  • Описание: Отключает проверку расхождения (смещения) времени между клиентом и сервером в валидации защиты от повторной отправки (replay)

  • Пример:

    [access]
    ignore_time_skew = false
    

[upstreams]

Ключ Тип По умолчанию
type "direct", "socks4", "socks5", or "shadowsocks"
weight u16 1
enabled bool true
scopes String ""
interface String
bind_addresses String[]
url String
address String
user_id String
username String
password String

type

  • Ограничения / валидация: Обязательный параметр."direct", "socks4", "socks5", "shadowsocks".

  • Описание: Выбирает реализацию upstream-транспорта для этой записи в [upstreams].

  • Пример:

    [upstreams]
    type = "direct"
    
    [upstreams]
    type = "socks5"
    address = "127.0.0.1:9050"
    
    [upstreams]
    type = "shadowsocks"
    url = "ss://2022-blake3-aes-256-gcm:BASE64PASSWORD@127.0.0.1:8388"
    

weight

  • Ограничения / валидация: u16 (0..=65535).

  • Описание: Приоритет, используемый при случайном выборе upstream-сервера (чем выше значение, тем чаще он выбирается).

  • Пример:

    [upstreams]
    type = "direct"
    weight = 10
    

enabled

  • Ограничения / валидация: bool.

  • Описание: Если установлено значение false, эта запись игнорируется и не используется при выборе upstream-сервера

  • Пример:

    [upstreams]
    type = "socks5"
    address = "127.0.0.1:9050"
    enabled = false
    

scopes

  • Ограничения / валидация: String. CСписок, разделенный запятыми; пробелы обрезаются во время сопоставления

  • Описание: Теги области (scope), используемые для фильтрации upstream-серверов на уровне запроса. Если в запросе указан scope, выбираются только те upstreamы, у которых поле scopes содержит этот тег. Если scope в запросе не указан, допускаются только upstreamы с пустым scopes.

  • Пример:

    [upstreams]
    type = "socks4"
    address = "10.0.0.10:1080"
    scopes = "me, fetch, dc2"
    

interface

  • Ограничения / валидация: String (необязательный параметр).

    • для "direct": может быть IP-адресом (используется как явный local bind) или именем сетевого интерфейса ОС (резолвится в IP во время выполнения; только Unix).
    • для "socks4"/"socks5": поддерживает только, если address - это IP:port; если address - это имя хоста, interface binding игнорируется.
    • для "shadowsocks": passed to the shadowsocks connector as an optional outbound bind hint.
  • Описание: Передаётся в коннектор Shadowsocks как необязательная подсказка для outbound bind.

  • Пример:

    [upstreams]
    type = "direct"
    interface = "eth0"
    
    [upstreams]
    type = "socks5"
    address = "203.0.113.10:1080"
    interface = "192.0.2.10" # explicit local bind IP
    

bind_addresses

  • Ограничения / валидация: String[] (необязательный параметр). Применяется в случае, если type = "direct".

    • Каждая запись должна быть IP-адресом в формате строки.
    • Во время выполнения Telemt выбирает адрес, соответствующий целевому семейству (IPv4 или IPv6). Если установлен параметр «bind_addresses», и ни один из них не соответствует целевому семейству, попытка подключения считается неудачной.
  • Описание: Явно заданные локальные source адреса для исходящих прямых TCP-соединений. Если указано несколько адресов, они выбираются по алгоритму round-robin.

  • Пример:

    [upstreams]
    type = "direct"
    bind_addresses = ["192.0.2.10", "192.0.2.11"]
    

url

  • Ограничения / валидация: Применяется в случае, если type = "shadowsocks".

    • Должен быть действительный URL-адрес Shadowsocks, принятый shadowsocks контейнером.
    • Плагины Shadowsocks не поддерживаются.
    • Требует, чтобы general.use_middle_proxy = false ( Shadowsocks upstreams отклоняются в режиме ME (Middle-End)).
  • Описание: URL-адрес сервера Shadowsocks, используемый для подключения к Telegram через Shadowsocks.

  • Пример:

    [general]
    use_middle_proxy = false
    
    [upstreams]
    type = "shadowsocks"
    url = "ss://2022-blake3-aes-256-gcm:BASE64PASSWORD@127.0.0.1:8388"
    

address

  • Ограничения / валидация: Необходим в случае, если type = "socks4" и type = "socks5". Значение должно быть в формате host:port или ip:port.

  • Описание: Endpoint прокси-сервера SOCKS, используемый для upstream-подключений.

  • Пример:

    [upstreams]
    type = "socks5"
    address = "127.0.0.1:9050"
    

user_id

  • Ограничения / валидация: String (необязательный параметр). Используется только при type = "socks4".

  • Описание: User ID для команды CONNECT в SOCKS4. Примечание: если для запроса выбран scope, Telemt может переопределить это значение на выбранный scope.

  • Пример:

    [upstreams]
    type = "socks4"
    address = "127.0.0.1:1080"
    user_id = "telemt"
    

username

  • Ограничения / валидация: String (необязательный параметр). Используется только при type = "socks5".

  • Описание: Имя пользователя SOCKS5 (для аутентификации по username/password). Примечание: если для запроса выбран scope, Telemt может переопределить это значение на выбранный scope.

  • Пример:

    [upstreams]
    type = "socks5"
    address = "127.0.0.1:9050"
    username = "alice"
    

password

  • Ограничения / валидация: String (необязательный параметр). Используется только при type = "socks5".

  • Описание: Пароль SOCKS5 (для аутентификации по username/password). Примечание: если для запроса выбран scope, Telemt может переопределить это значение на выбранный scope.

  • Пример:

    [upstreams]
    type = "socks5"
    address = "127.0.0.1:9050"
    username = "alice"
    password = "secret"