telemt/docs/Config_params/CONFIG_PARAMS.ru.md

3301 lines
183 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Справочник параметров конфигурации Telemt
В этом документе перечислены все ключи конфигурации, принимаемые `config.toml`.
> [!ПРИМЕЧАНИЕ]
>
> Этот справочник был составлен с помощью искусственного интеллекта и сверен с базой кода (схема конфигурации, значения по умолчанию и логика проверки).
> [!ПРЕДУПРЕЖДЕНИЕ]
>
> Параметры конфигурации, подробно описанные в этом документе, предназначены для опытных пользователей и для целей тонкой настройки. Изменение этих параметров без четкого понимания их функции может привести к нестабильности приложения или другому неожиданному поведению. Пожалуйста, действуйте осторожно и на свой страх и риск.
## Ключи верхнего уровня
| Ключ | Тип | По умолчанию |
| --- | ---- | ------- |
| [`include`](#cfg-top-include) | `String` (special directive) | — |
| [`show_link`](#cfg-top-show_link) | `"*"` or `String[]` | `[]` (`ShowLink::None`) |
| [`dc_overrides`](#cfg-top-dc_overrides) | `Map<String, String or String[]>` | `{}` |
| [`default_dc`](#cfg-top-default_dc) | `u8` | — (effective fallback: `2` in ME routing) |
<a id="cfg-top-include"></a>
- `include`
- **Ограничения / валидация**: Должна быть однострочной директивой в форме `include = "path/to/file.toml"`. Включения расширяются перед анализом TOML. Максимальная глубина включения — 10.
- **Описание**: Включает еще один файл TOML с помощью `include = "relative/or/absolute/path.toml"`; включения обрабатываются рекурсивно перед анализом.
- **Пример**:
```toml
include = "secrets.toml"
```
<a id="cfg-top-show_link"></a>
- `show_link`
- **Ограничения / валидация**: Принимает `"*"` или массив имен пользователей. Пустой массив означает «не показывать ничего».
- **Описание**: Устаревший селектор видимости ссылок верхнего уровня («*»` для всех пользователей или списка явных имен пользователей).
- **Пример**:
```toml
# show links for all configured users
show_link = "*"
# or: show links only for selected users
# show_link = ["alice", "bob"]
```
<a id="cfg-top-dc_overrides"></a>
- `dc_overrides`
- **Ограничения / валидация**: Ключ должен быть положительным целочисленным индексом DC, закодированным как строка (например, `"203"`). Значения должны анализироваться как `SocketAddr` (`ip:port`). Пустые строки игнорируются.
- **Описание**: Переопределяет конечные точки контроллера домена для нестандартных контроллеров домена; ключ — индексная строка контроллера домена, значение — один или несколько адресов `ip:port`.
- **Пример**:
```toml
[dc_overrides]
"201" = "149.154.175.50:443"
"203" = ["149.154.175.100:443", "91.105.192.100:443"]
```
<a id="cfg-top-default_dc"></a>
- `default_dc`
- **Ограничения / валидация**: Предполагаемый диапазон: «1..=5». Если этот параметр выходит за пределы диапазона, время выполнения возвращается к поведению DC1 в прямом реле; Маршрутизация среднего уровня возвращается к значению «2», если она не установлена.
- **Описание**: Индекс контроллера домена по умолчанию, используемый для несопоставленных нестандартных контроллеров домена.
- **Пример**:
```toml
# 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`](#cfg-general-data_path) | `String` | — |
| [`prefer_ipv6`](#cfg-general-prefer_ipv6) | `bool` | `false` |
| [`fast_mode`](#cfg-general-fast_mode) | `bool` | `true` |
| [`use_middle_proxy`](#cfg-general-use_middle_proxy) | `bool` | `true` |
| [`proxy_secret_path`](#cfg-general-proxy_secret_path) | `String` | `"proxy-secret"` |
| [`proxy_config_v4_cache_path`](#cfg-general-proxy_config_v4_cache_path) | `String` | `"cache/proxy-config-v4.txt"` |
| [`proxy_config_v6_cache_path`](#cfg-general-proxy_config_v6_cache_path) | `String` | `"cache/proxy-config-v6.txt"` |
| [`ad_tag`](#cfg-general-ad_tag) | `String` | — |
| [`middle_proxy_nat_ip`](#cfg-general-middle_proxy_nat_ip) | `IpAddr` | — |
| [`middle_proxy_nat_probe`](#cfg-general-middle_proxy_nat_probe) | `bool` | `true` |
| [`middle_proxy_nat_stun`](#cfg-general-middle_proxy_nat_stun) | `String` | — |
| [`middle_proxy_nat_stun_servers`](#cfg-general-middle_proxy_nat_stun_servers) | `String[]` | `[]` |
| [`stun_nat_probe_concurrency`](#cfg-general-stun_nat_probe_concurrency) | `usize` | `8` |
| [`middle_proxy_pool_size`](#cfg-general-middle_proxy_pool_size) | `usize` | `8` |
| [`middle_proxy_warm_standby`](#cfg-general-middle_proxy_warm_standby) | `usize` | `16` |
| [`me_init_retry_attempts`](#cfg-general-me_init_retry_attempts) | `u32` | `0` |
| [`me2dc_fallback`](#cfg-general-me2dc_fallback) | `bool` | `true` |
| [`me2dc_fast`](#cfg-general-me2dc_fast) | `bool` | `false` |
| [`me_keepalive_enabled`](#cfg-general-me_keepalive_enabled) | `bool` | `true` |
| [`me_keepalive_interval_secs`](#cfg-general-me_keepalive_interval_secs) | `u64` | `8` |
| [`me_keepalive_jitter_secs`](#cfg-general-me_keepalive_jitter_secs) | `u64` | `2` |
| [`me_keepalive_payload_random`](#cfg-general-me_keepalive_payload_random) | `bool` | `true` |
| [`rpc_proxy_req_every`](#cfg-general-rpc_proxy_req_every) | `u64` | `0` |
| [`me_writer_cmd_channel_capacity`](#cfg-general-me_writer_cmd_channel_capacity) | `usize` | `4096` |
| [`me_route_channel_capacity`](#cfg-general-me_route_channel_capacity) | `usize` | `768` |
| [`me_c2me_channel_capacity`](#cfg-general-me_c2me_channel_capacity) | `usize` | `1024` |
| [`me_c2me_send_timeout_ms`](#cfg-general-me_c2me_send_timeout_ms) | `u64` | `4000` |
| [`me_reader_route_data_wait_ms`](#cfg-general-me_reader_route_data_wait_ms) | `u64` | `2` |
| [`me_d2c_flush_batch_max_frames`](#cfg-general-me_d2c_flush_batch_max_frames) | `usize` | `32` |
| [`me_d2c_flush_batch_max_bytes`](#cfg-general-me_d2c_flush_batch_max_bytes) | `usize` | `131072` |
| [`me_d2c_flush_batch_max_delay_us`](#cfg-general-me_d2c_flush_batch_max_delay_us) | `u64` | `500` |
| [`me_d2c_ack_flush_immediate`](#cfg-general-me_d2c_ack_flush_immediate) | `bool` | `true` |
| [`me_quota_soft_overshoot_bytes`](#cfg-general-me_quota_soft_overshoot_bytes) | `u64` | `65536` |
| [`me_d2c_frame_buf_shrink_threshold_bytes`](#cfg-general-me_d2c_frame_buf_shrink_threshold_bytes) | `usize` | `262144` |
| [`direct_relay_copy_buf_c2s_bytes`](#cfg-general-direct_relay_copy_buf_c2s_bytes) | `usize` | `65536` |
| [`direct_relay_copy_buf_s2c_bytes`](#cfg-general-direct_relay_copy_buf_s2c_bytes) | `usize` | `262144` |
| [`crypto_pending_buffer`](#cfg-general-crypto_pending_buffer) | `usize` | `262144` |
| [`max_client_frame`](#cfg-general-max_client_frame) | `usize` | `16777216` |
| [`desync_all_full`](#cfg-general-desync_all_full) | `bool` | `false` |
| [`beobachten`](#cfg-general-beobachten) | `bool` | `true` |
| [`beobachten_minutes`](#cfg-general-beobachten_minutes) | `u64` | `10` |
| [`beobachten_flush_secs`](#cfg-general-beobachten_flush_secs) | `u64` | `15` |
| [`beobachten_file`](#cfg-general-beobachten_file) | `String` | `"cache/beobachten.txt"` |
| [`hardswap`](#cfg-general-hardswap) | `bool` | `true` |
| [`me_warmup_stagger_enabled`](#cfg-general-me_warmup_stagger_enabled) | `bool` | `true` |
| [`me_warmup_step_delay_ms`](#cfg-general-me_warmup_step_delay_ms) | `u64` | `500` |
| [`me_warmup_step_jitter_ms`](#cfg-general-me_warmup_step_jitter_ms) | `u64` | `300` |
| [`me_reconnect_max_concurrent_per_dc`](#cfg-general-me_reconnect_max_concurrent_per_dc) | `u32` | `8` |
| [`me_reconnect_backoff_base_ms`](#cfg-general-me_reconnect_backoff_base_ms) | `u64` | `500` |
| [`me_reconnect_backoff_cap_ms`](#cfg-general-me_reconnect_backoff_cap_ms) | `u64` | `30000` |
| [`me_reconnect_fast_retry_count`](#cfg-general-me_reconnect_fast_retry_count) | `u32` | `16` |
| [`me_single_endpoint_shadow_writers`](#cfg-general-me_single_endpoint_shadow_writers) | `u8` | `2` |
| [`me_single_endpoint_outage_mode_enabled`](#cfg-general-me_single_endpoint_outage_mode_enabled) | `bool` | `true` |
| [`me_single_endpoint_outage_disable_quarantine`](#cfg-general-me_single_endpoint_outage_disable_quarantine) | `bool` | `true` |
| [`me_single_endpoint_outage_backoff_min_ms`](#cfg-general-me_single_endpoint_outage_backoff_min_ms) | `u64` | `250` |
| [`me_single_endpoint_outage_backoff_max_ms`](#cfg-general-me_single_endpoint_outage_backoff_max_ms) | `u64` | `3000` |
| [`me_single_endpoint_shadow_rotate_every_secs`](#cfg-general-me_single_endpoint_shadow_rotate_every_secs) | `u64` | `900` |
| [`me_floor_mode`](#cfg-general-me_floor_mode) | `"static"` or `"adaptive"` | `"adaptive"` |
| [`me_adaptive_floor_idle_secs`](#cfg-general-me_adaptive_floor_idle_secs) | `u64` | `90` |
| [`me_adaptive_floor_min_writers_single_endpoint`](#cfg-general-me_adaptive_floor_min_writers_single_endpoint) | `u8` | `1` |
| [`me_adaptive_floor_min_writers_multi_endpoint`](#cfg-general-me_adaptive_floor_min_writers_multi_endpoint) | `u8` | `1` |
| [`me_adaptive_floor_recover_grace_secs`](#cfg-general-me_adaptive_floor_recover_grace_secs) | `u64` | `180` |
| [`me_adaptive_floor_writers_per_core_total`](#cfg-general-me_adaptive_floor_writers_per_core_total) | `u16` | `48` |
| [`me_adaptive_floor_cpu_cores_override`](#cfg-general-me_adaptive_floor_cpu_cores_override) | `u16` | `0` |
| [`me_adaptive_floor_max_extra_writers_single_per_core`](#cfg-general-me_adaptive_floor_max_extra_writers_single_per_core) | `u16` | `1` |
| [`me_adaptive_floor_max_extra_writers_multi_per_core`](#cfg-general-me_adaptive_floor_max_extra_writers_multi_per_core) | `u16` | `2` |
| [`me_adaptive_floor_max_active_writers_per_core`](#cfg-general-me_adaptive_floor_max_active_writers_per_core) | `u16` | `64` |
| [`me_adaptive_floor_max_warm_writers_per_core`](#cfg-general-me_adaptive_floor_max_warm_writers_per_core) | `u16` | `64` |
| [`me_adaptive_floor_max_active_writers_global`](#cfg-general-me_adaptive_floor_max_active_writers_global) | `u32` | `256` |
| [`me_adaptive_floor_max_warm_writers_global`](#cfg-general-me_adaptive_floor_max_warm_writers_global) | `u32` | `256` |
| [`upstream_connect_retry_attempts`](#cfg-general-upstream_connect_retry_attempts) | `u32` | `2` |
| [`upstream_connect_retry_backoff_ms`](#cfg-general-upstream_connect_retry_backoff_ms) | `u64` | `100` |
| [`upstream_connect_budget_ms`](#cfg-general-upstream_connect_budget_ms) | `u64` | `3000` |
| [`upstream_unhealthy_fail_threshold`](#cfg-general-upstream_unhealthy_fail_threshold) | `u32` | `5` |
| [`upstream_connect_failfast_hard_errors`](#cfg-general-upstream_connect_failfast_hard_errors) | `bool` | `false` |
| [`stun_iface_mismatch_ignore`](#cfg-general-stun_iface_mismatch_ignore) | `bool` | `false` |
| [`unknown_dc_log_path`](#cfg-general-unknown_dc_log_path) | `String` | `"unknown-dc.txt"` |
| [`unknown_dc_file_log_enabled`](#cfg-general-unknown_dc_file_log_enabled) | `bool` | `false` |
| [`log_level`](#cfg-general-log_level) | `"debug"`, `"verbose"`, `"normal"`, or `"silent"` | `"normal"` |
| [`disable_colors`](#cfg-general-disable_colors) | `bool` | `false` |
| [`me_socks_kdf_policy`](#cfg-general-me_socks_kdf_policy) | `"strict"` or `"compat"` | `"strict"` |
| [`me_route_backpressure_base_timeout_ms`](#cfg-general-me_route_backpressure_base_timeout_ms) | `u64` | `25` |
| [`me_route_backpressure_high_timeout_ms`](#cfg-general-me_route_backpressure_high_timeout_ms) | `u64` | `120` |
| [`me_route_backpressure_high_watermark_pct`](#cfg-general-me_route_backpressure_high_watermark_pct) | `u8` | `80` |
| [`me_health_interval_ms_unhealthy`](#cfg-general-me_health_interval_ms_unhealthy) | `u64` | `1000` |
| [`me_health_interval_ms_healthy`](#cfg-general-me_health_interval_ms_healthy) | `u64` | `3000` |
| [`me_admission_poll_ms`](#cfg-general-me_admission_poll_ms) | `u64` | `1000` |
| [`me_warn_rate_limit_ms`](#cfg-general-me_warn_rate_limit_ms) | `u64` | `5000` |
| [`me_route_no_writer_mode`](#cfg-general-me_route_no_writer_mode) | `"async_recovery_failfast"`, `"inline_recovery_legacy"`, or `"hybrid_async_persistent"` | `"hybrid_async_persistent"` |
| [`me_route_no_writer_wait_ms`](#cfg-general-me_route_no_writer_wait_ms) | `u64` | `250` |
| [`me_route_hybrid_max_wait_ms`](#cfg-general-me_route_hybrid_max_wait_ms) | `u64` | `3000` |
| [`me_route_blocking_send_timeout_ms`](#cfg-general-me_route_blocking_send_timeout_ms) | `u64` | `250` |
| [`me_route_inline_recovery_attempts`](#cfg-general-me_route_inline_recovery_attempts) | `u32` | `3` |
| [`me_route_inline_recovery_wait_ms`](#cfg-general-me_route_inline_recovery_wait_ms) | `u64` | `3000` |
| [`fast_mode_min_tls_record`](#cfg-general-fast_mode_min_tls_record) | `usize` | `0` |
| [`update_every`](#cfg-general-update_every) | `u64` | `300` |
| [`me_reinit_every_secs`](#cfg-general-me_reinit_every_secs) | `u64` | `900` |
| [`me_hardswap_warmup_delay_min_ms`](#cfg-general-me_hardswap_warmup_delay_min_ms) | `u64` | `1000` |
| [`me_hardswap_warmup_delay_max_ms`](#cfg-general-me_hardswap_warmup_delay_max_ms) | `u64` | `2000` |
| [`me_hardswap_warmup_extra_passes`](#cfg-general-me_hardswap_warmup_extra_passes) | `u8` | `3` |
| [`me_hardswap_warmup_pass_backoff_base_ms`](#cfg-general-me_hardswap_warmup_pass_backoff_base_ms) | `u64` | `500` |
| [`me_config_stable_snapshots`](#cfg-general-me_config_stable_snapshots) | `u8` | `2` |
| [`me_config_apply_cooldown_secs`](#cfg-general-me_config_apply_cooldown_secs) | `u64` | `300` |
| [`me_snapshot_require_http_2xx`](#cfg-general-me_snapshot_require_http_2xx) | `bool` | `true` |
| [`me_snapshot_reject_empty_map`](#cfg-general-me_snapshot_reject_empty_map) | `bool` | `true` |
| [`me_snapshot_min_proxy_for_lines`](#cfg-general-me_snapshot_min_proxy_for_lines) | `u32` | `1` |
| [`proxy_secret_stable_snapshots`](#cfg-general-proxy_secret_stable_snapshots) | `u8` | `2` |
| [`proxy_secret_rotate_runtime`](#cfg-general-proxy_secret_rotate_runtime) | `bool` | `true` |
| [`me_secret_atomic_snapshot`](#cfg-general-me_secret_atomic_snapshot) | `bool` | `true` |
| [`proxy_secret_len_max`](#cfg-general-proxy_secret_len_max) | `usize` | `256` |
| [`me_pool_drain_ttl_secs`](#cfg-general-me_pool_drain_ttl_secs) | `u64` | `90` |
| [`me_instadrain`](#cfg-general-me_instadrain) | `bool` | `false` |
| [`me_pool_drain_threshold`](#cfg-general-me_pool_drain_threshold) | `u64` | `32` |
| [`me_pool_drain_soft_evict_enabled`](#cfg-general-me_pool_drain_soft_evict_enabled) | `bool` | `true` |
| [`me_pool_drain_soft_evict_grace_secs`](#cfg-general-me_pool_drain_soft_evict_grace_secs) | `u64` | `10` |
| [`me_pool_drain_soft_evict_per_writer`](#cfg-general-me_pool_drain_soft_evict_per_writer) | `u8` | `2` |
| [`me_pool_drain_soft_evict_budget_per_core`](#cfg-general-me_pool_drain_soft_evict_budget_per_core) | `u16` | `16` |
| [`me_pool_drain_soft_evict_cooldown_ms`](#cfg-general-me_pool_drain_soft_evict_cooldown_ms) | `u64` | `1000` |
| [`me_bind_stale_mode`](#cfg-general-me_bind_stale_mode) | `"never"`, `"ttl"`, or `"always"` | `"ttl"` |
| [`me_bind_stale_ttl_secs`](#cfg-general-me_bind_stale_ttl_secs) | `u64` | `90` |
| [`me_pool_min_fresh_ratio`](#cfg-general-me_pool_min_fresh_ratio) | `f32` | `0.8` |
| [`me_reinit_drain_timeout_secs`](#cfg-general-me_reinit_drain_timeout_secs) | `u64` | `90` |
| [`proxy_secret_auto_reload_secs`](#cfg-general-proxy_secret_auto_reload_secs) | `u64` | `3600` |
| [`proxy_config_auto_reload_secs`](#cfg-general-proxy_config_auto_reload_secs) | `u64` | `3600` |
| [`me_reinit_singleflight`](#cfg-general-me_reinit_singleflight) | `bool` | `true` |
| [`me_reinit_trigger_channel`](#cfg-general-me_reinit_trigger_channel) | `usize` | `64` |
| [`me_reinit_coalesce_window_ms`](#cfg-general-me_reinit_coalesce_window_ms) | `u64` | `200` |
| [`me_deterministic_writer_sort`](#cfg-general-me_deterministic_writer_sort) | `bool` | `true` |
| [`me_writer_pick_mode`](#cfg-general-me_writer_pick_mode) | `"sorted_rr"` or `"p2c"` | `"p2c"` |
| [`me_writer_pick_sample_size`](#cfg-general-me_writer_pick_sample_size) | `u8` | `3` |
| [`ntp_check`](#cfg-general-ntp_check) | `bool` | `true` |
| [`ntp_servers`](#cfg-general-ntp_servers) | `String[]` | `["pool.ntp.org"]` |
| [`auto_degradation_enabled`](#cfg-general-auto_degradation_enabled) | `bool` | `true` |
| [`degradation_min_unavailable_dc_groups`](#cfg-general-degradation_min_unavailable_dc_groups) | `u8` | `2` |
<a id="cfg-general-data_path"></a>
- `data_path`
- **Ограничения / валидация**: `Строка` (необязательно).
- **Описание**: Необязательный путь к каталогу данных времени выполнения.
- **Пример**:
```toml
[general]
data_path = "/var/lib/telemt"
```
<a id="cfg-general-prefer_ipv6"></a>
- `prefer_ipv6`
- **Ограничения / валидация**: Устарело. Используйте `network.prefer`.
- **Описание**: Устаревший устаревший флаг предпочтения IPv6 перенесен в network.prefer.
- **Пример**:
```toml
[network]
prefer = 6
```
<a id="cfg-general-fast_mode"></a>
- `fast_mode`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает оптимизацию быстрого пути для обработки трафика.
- **Пример**:
```toml
[general]
fast_mode = true
```
<a id="cfg-general-use_middle_proxy"></a>
- `use_middle_proxy`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает транспортный режим ME; если значение false, среда выполнения возвращается к прямой маршрутизации постоянного тока.
- **Пример**:
```toml
[general]
use_middle_proxy = true
```
<a id="cfg-general-proxy_secret_path"></a>
- `proxy_secret_path`
- **Ограничения / валидация**: `Строка`. Если этот параметр опущен, путь по умолчанию — «proxy-secret». Пустые значения принимаются TOML/serde, но, скорее всего, во время выполнения произойдет ошибка (неверный путь к файлу).
- **Описание**: Путь к файлу кэша `proxy-secret` инфраструктуры Telegram, используемому ME-рукопожатием/аутентификацией RPC. Telemt всегда сначала пытается выполнить новую загрузку с https://core.telegram.org/getProxySecret, в случае успеха кэширует ее по этому пути и возвращается к чтению кэшированного файла (любого возраста) в случае сбоя загрузки.
- **Пример**:
```toml
[general]
proxy_secret_path = "proxy-secret"
```
<a id="cfg-general-proxy_config_v4_cache_path"></a>
- `proxy_config_v4_cache_path`
- **Ограничения / валидация**: `Строка`. Если установлено, оно не должно быть пустым или содержать только пробелы.
- **Описание**: Необязательный путь к дисковому кэшу для необработанного снимка getProxyConfig (IPv4). При запуске Telemt сначала пытается получить свежий снимок; в случае сбоя выборки или пустого снимка он возвращается к этому файлу кэша, если он присутствует и не пуст.
- **Пример**:
```toml
[general]
proxy_config_v4_cache_path = "cache/proxy-config-v4.txt"
```
<a id="cfg-general-proxy_config_v6_cache_path"></a>
- `proxy_config_v6_cache_path`
- **Ограничения / валидация**: `Строка`. Если установлено, оно не должно быть пустым или содержать только пробелы.
- **Описание**: Необязательный путь к дисковому кэшу для необработанного снимка getProxyConfigV6 (IPv6). При запуске Telemt сначала пытается получить свежий снимок; в случае сбоя выборки или пустого снимка он возвращается к этому файлу кэша, если он присутствует и не пуст.
- **Пример**:
```toml
[general]
proxy_config_v6_cache_path = "cache/proxy-config-v6.txt"
```
<a id="cfg-general-ad_tag"></a>
- `ad_tag`
- **Ограничения / валидация**: `Строка` (необязательно). Если установлено, должно быть ровно 32 шестнадцатеричных символа; недопустимые значения отключаются во время загрузки конфигурации.
- **Описание**: Глобальный резервный спонсируемый канал `ad_tag` (используется, когда у пользователя нет переопределения в `access.user_ad_tags`). Тег со всеми нулями принимается, но не имеет никакого эффекта (и о нем предупреждается), пока не будет заменен реальным тегом от `@MTProxybot`.
- **Пример**:
```toml
[general]
ad_tag = "00112233445566778899aabbccddeeff"
```
<a id="cfg-general-middle_proxy_nat_ip"></a>
- `middle_proxy_nat_ip`
- **Ограничения / валидация**: `IpAddr` (необязательно).
- **Описание**: Ручное переопределение общедоступного IP-адреса NAT используется в качестве материала ME-адреса, если оно установлено.
- **Пример**:
```toml
[general]
middle_proxy_nat_ip = "203.0.113.10"
```
<a id="cfg-general-middle_proxy_nat_probe"></a>
- `middle_proxy_nat_probe`
- **Ограничения / валидация**: `бул`. Эффективное зондирование ограничивается `network.stun_use` (когда `network.stun_use = false`, STUN-зондирование отключается, даже если этот флаг имеет значение `true`).
- **Описание**: Позволяет зондировать NAT на основе STUN для обнаружения общедоступного IP-порта, используемого при получении ключа ME в средах NAT.
- **Пример**:
```toml
[general]
middle_proxy_nat_probe = true
```
<a id="cfg-general-middle_proxy_nat_stun"></a>
- `middle_proxy_nat_stun`
- **Ограничения / валидация**: Устарело. Используйте `network.stun_servers`.
- **Описание**: Устаревший устаревший одиночный сервер STUN для проверки NAT. Во время загрузки конфигурации он объединяется с `network.stun_servers`, если `network.stun_servers` не задан явно.
- **Пример**:
```toml
[network]
stun_servers = ["stun.l.google.com:19302"]
```
<a id="cfg-general-middle_proxy_nat_stun_servers"></a>
- `middle_proxy_nat_stun_servers`
- **Ограничения / валидация**: Устарело. Используйте `network.stun_servers`.
- **Описание**: Устаревший устаревший список STUN для резервного копирования NAT. Во время загрузки конфигурации он объединяется с `network.stun_servers`, если `network.stun_servers` не задан явно.
- **Пример**:
```toml
[network]
stun_servers = ["stun.l.google.com:19302"]
```
<a id="cfg-general-stun_nat_probe_concurrency"></a>
- `stun_nat_probe_concurrency`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Максимальное количество параллельных тестов STUN во время обнаружения NAT/публичной конечной точки.
- **Пример**:
```toml
[general]
stun_nat_probe_concurrency = 8
```
<a id="cfg-general-middle_proxy_pool_size"></a>
- `middle_proxy_pool_size`
- **Ограничения / валидация**: `использовать`. Эффективное значение — «max(value, 1)» во время выполнения (поэтому «0» ведет себя как «1»).
- **Описание**: Целевой размер активного пула устройств записи ME.
- **Пример**:
```toml
[general]
middle_proxy_pool_size = 8
```
<a id="cfg-general-middle_proxy_warm_standby"></a>
- `middle_proxy_warm_standby`
- **Ограничения / валидация**: `использовать`.
- **Описание**: Количество подключений ME в теплом резерве, предварительно инициализированных.
- **Пример**:
```toml
[general]
middle_proxy_warm_standby = 16
```
<a id="cfg-general-me_init_retry_attempts"></a>
- `me_init_retry_attempts`
- **Ограничения / валидация**: `0..=1_000_000` (`0` означает неограниченное количество повторов).
- **Описание**: Повторные попытки инициализации пула ME.
- **Пример**:
```toml
[general]
me_init_retry_attempts = 0
```
<a id="cfg-general-me2dc_fallback"></a>
- `me2dc_fallback`
- **Ограничения / валидация**: `бул`.
- **Описание**: Позволяет перейти из режима ME в режим прямого постоянного тока в случае сбоя запуска ME.
- **Пример**:
```toml
[general]
me2dc_fallback = true
```
<a id="cfg-general-me2dc_fast"></a>
- `me2dc_fast`
- **Ограничения / валидация**: `бул`. Активен только тогда, когда `use_middle_proxy = true` и `me2dc_fallback = true`.
- **Описание**: Fast ME->Режим прямого возврата для новых сеансов.
- **Пример**:
```toml
[general]
use_middle_proxy = true
me2dc_fallback = true
me2dc_fast = false
```
<a id="cfg-general-me_keepalive_enabled"></a>
- `me_keepalive_enabled`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает периодические дополнительные кадры поддержки активности ME.
- **Пример**:
```toml
[general]
me_keepalive_enabled = true
```
<a id="cfg-general-me_keepalive_interval_secs"></a>
- `me_keepalive_interval_secs`
- **Ограничения / валидация**: `u64` (секунды).
- **Описание**: Базовый интервал поддержки активности ME в секундах.
- **Пример**:
```toml
[general]
me_keepalive_interval_secs = 8
```
<a id="cfg-general-me_keepalive_jitter_secs"></a>
- `me_keepalive_jitter_secs`
- **Ограничения / валидация**: `u64` (секунды).
- **Описание**: Джиттер Keepalive за считанные секунды для уменьшения синхронизированных пакетов.
- **Пример**:
```toml
[general]
me_keepalive_jitter_secs = 2
```
<a id="cfg-general-me_keepalive_payload_random"></a>
- `me_keepalive_payload_random`
- **Ограничения / валидация**: `бул`.
- **Описание**: Случайным образом изменяет байты полезной нагрузки поддержки активности вместо фиксированной нулевой полезной нагрузки.
- **Пример**:
```toml
[general]
me_keepalive_payload_random = true
```
<a id="cfg-general-rpc_proxy_req_every"></a>
- `rpc_proxy_req_every`
- **Ограничения / валидация**: `0` или в пределах `10..=300` (секунд).
- **Описание**: Интервал для сигналов активности службы `RPC_PROXY_REQ` для ME (`0` отключает).
- **Пример**:
```toml
[general]
rpc_proxy_req_every = 0
```
<a id="cfg-general-me_writer_cmd_channel_capacity"></a>
- `me_writer_cmd_channel_capacity`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Пропускная способность командного канала для каждого записывающего устройства.
- **Пример**:
```toml
[general]
me_writer_cmd_channel_capacity = 4096
```
<a id="cfg-general-me_route_channel_capacity"></a>
- `me_route_channel_capacity`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Пропускная способность канала маршрута ответа ME для каждого соединения.
- **Пример**:
```toml
[general]
me_route_channel_capacity = 768
```
<a id="cfg-general-me_c2me_channel_capacity"></a>
- `me_c2me_channel_capacity`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Емкость очереди команд для каждого клиента (читатель клиента -> отправитель ME).
- **Пример**:
```toml
[general]
me_c2me_channel_capacity = 1024
```
<a id="cfg-general-me_c2me_send_timeout_ms"></a>
- `me_c2me_send_timeout_ms`
- **Ограничения / валидация**: `0..=60000` (миллисекунды).
- **Описание**: Максимальное ожидание постановки в очередь команд клиент->ME, когда очередь для каждого клиента заполнена (`0` сохраняет устаревшее неограниченное ожидание).
- **Пример**:
```toml
[general]
me_c2me_send_timeout_ms = 4000
```
<a id="cfg-general-me_reader_route_data_wait_ms"></a>
- `me_reader_route_data_wait_ms`
- **Ограничения / валидация**: `0..=20` (миллисекунды).
- **Описание**: Ограниченное ожидание маршрутизации ME DATA в очередь для каждого соединения (`0` = нет ожидания).
- **Пример**:
```toml
[general]
me_reader_route_data_wait_ms = 2
```
<a id="cfg-general-me_d2c_flush_batch_max_frames"></a>
- `me_d2c_flush_batch_max_frames`
- **Ограничения / валидация**: Должно быть в пределах `1..=512`.
- **Описание**: Макс. ME->клиентские кадры объединяются перед очисткой.
- **Пример**:
```toml
[general]
me_d2c_flush_batch_max_frames = 32
```
<a id="cfg-general-me_d2c_flush_batch_max_bytes"></a>
- `me_d2c_flush_batch_max_bytes`
- **Ограничения / валидация**: Должно быть в пределах `4096..=2097152` (байт).
- **Описание**: Максимальное количество байтов полезной нагрузки ME->клиента, объединенных перед сбросом.
- **Пример**:
```toml
[general]
me_d2c_flush_batch_max_bytes = 131072
```
<a id="cfg-general-me_d2c_flush_batch_max_delay_us"></a>
- `me_d2c_flush_batch_max_delay_us`
- **Ограничения / валидация**: `0..=5000` (микросекунды).
- **Описание**: Максимальное время ожидания в микросекундах для объединения большего количества кадров ME->клиента (`0` отключает объединение по времени).
- **Пример**:
```toml
[general]
me_d2c_flush_batch_max_delay_us = 500
```
<a id="cfg-general-me_d2c_ack_flush_immediate"></a>
- `me_d2c_ack_flush_immediate`
- **Ограничения / валидация**: `бул`.
- **Описание**: Сбрасывает запись клиента сразу после записи быстрого подтверждения.
- **Пример**:
```toml
[general]
me_d2c_ack_flush_immediate = true
```
<a id="cfg-general-me_quota_soft_overshoot_bytes"></a>
- `me_quota_soft_overshoot_bytes`
- **Ограничения / валидация**: `0..=16777216` (байты).
- **Описание**: Дополнительные квоты для каждого маршрута (в байтах) допускаются до того, как принудительное применение квот на стороне записи отбрасывает данные маршрута.
- **Пример**:
```toml
[general]
me_quota_soft_overshoot_bytes = 65536
```
<a id="cfg-general-me_d2c_frame_buf_shrink_threshold_bytes"></a>
- `me_d2c_frame_buf_shrink_threshold_bytes`
- **Ограничения / валидация**: Должно быть в пределах `4096..=16777216` (байт).
- **Описание**: Пороговое значение для сжатия слишком больших буферов агрегации кадров ME->клиента после очистки.
- **Пример**:
```toml
[general]
me_d2c_frame_buf_shrink_threshold_bytes = 262144
```
<a id="cfg-general-direct_relay_copy_buf_c2s_bytes"></a>
- `direct_relay_copy_buf_c2s_bytes`
- **Ограничения / валидация**: Должно быть в пределах `4096..=1048576` (байт).
- **Описание**: Размер буфера копирования для направления клиент->DC в прямой ретрансляции.
- **Пример**:
```toml
[general]
direct_relay_copy_buf_c2s_bytes = 65536
```
<a id="cfg-general-direct_relay_copy_buf_s2c_bytes"></a>
- `direct_relay_copy_buf_s2c_bytes`
- **Ограничения / валидация**: Должно быть в пределах `8192..=2097152` (байт).
- **Описание**: Размер буфера копирования для направления DC->клиент при прямой ретрансляции.
- **Пример**:
```toml
[general]
direct_relay_copy_buf_s2c_bytes = 262144
```
<a id="cfg-general-crypto_pending_buffer"></a>
- `crypto_pending_buffer`
- **Ограничения / валидация**: `использовать` (байты).
- **Описание**: Максимальный буфер ожидающего зашифрованного текста на каждого клиента-писателя (в байтах).
- **Пример**:
```toml
[general]
crypto_pending_buffer = 262144
```
<a id="cfg-general-max_client_frame"></a>
- `max_client_frame`
- **Ограничения / валидация**: `использовать` (байты).
- **Описание**: Максимально допустимый размер кадра MTProto клиента (в байтах).
- **Пример**:
```toml
[general]
max_client_frame = 16777216
```
<a id="cfg-general-desync_all_full"></a>
- `desync_all_full`
- **Ограничения / валидация**: `бул`.
- **Описание**: Создает полные журналы крипто-рассинхронизации для каждого события.
- **Пример**:
```toml
[general]
desync_all_full = false
```
<a id="cfg-general-beobachten"></a>
- `beobachten`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает сегменты криминалистического наблюдения для каждого IP-адреса.
- **Пример**:
```toml
[general]
beobachten = true
```
<a id="cfg-general-beobachten_minutes"></a>
- `beobachten_minutes`
- **Ограничения / валидация**: Должно быть `> 0` (минуты).
- **Описание**: Окно хранения (минуты) для сегментов наблюдения по каждому IP-адресу.
- **Пример**:
```toml
[general]
beobachten_minutes = 10
```
<a id="cfg-general-beobachten_flush_secs"></a>
- `beobachten_flush_secs`
- **Ограничения / валидация**: Должно быть `> 0` (секунды).
- **Описание**: Интервал сброса моментального снимка (в секундах) для выходного файла наблюдения.
- **Пример**:
```toml
[general]
beobachten_flush_secs = 15
```
<a id="cfg-general-beobachten_file"></a>
- `beobachten_file`
- **Ограничения / валидация**: Не должно быть пустым или содержать только пробелы.
- **Описание**: Путь к выходному файлу снимка наблюдения.
- **Пример**:
```toml
[general]
beobachten_file = "cache/beobachten.txt"
```
<a id="cfg-general-hardswap"></a>
- `hardswap`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает стратегию жесткой замены ME на основе генерации.
- **Пример**:
```toml
[general]
hardswap = true
```
<a id="cfg-general-me_warmup_stagger_enabled"></a>
- `me_warmup_stagger_enabled`
- **Ограничения / валидация**: `бул`.
- **Описание**: Перемещает дополнительные шкалы прогрева ME, чтобы избежать всплесков соединения.
- **Пример**:
```toml
[general]
me_warmup_stagger_enabled = true
```
<a id="cfg-general-me_warmup_step_delay_ms"></a>
- `me_warmup_step_delay_ms`
- **Ограничения / валидация**: `u64` (миллисекунды).
- **Описание**: Базовая задержка в миллисекундах между этапами набора прогрева.
- **Пример**:
```toml
[general]
me_warmup_step_delay_ms = 500
```
<a id="cfg-general-me_warmup_step_jitter_ms"></a>
- `me_warmup_step_jitter_ms`
- **Ограничения / валидация**: `u64` (миллисекунды).
- **Описание**: Дополнительная случайная задержка в миллисекундах для шагов разминки.
- **Пример**:
```toml
[general]
me_warmup_step_jitter_ms = 300
```
<a id="cfg-general-me_reconnect_max_concurrent_per_dc"></a>
- `me_reconnect_max_concurrent_per_dc`
- **Ограничения / валидация**: `u32`. Эффективное значение — «max(value, 1)» во время выполнения (поэтому «0» ведет себя как «1»).
- **Описание**: Ограничивает число одновременных рабочих повторных подключений на каждый контроллер домена во время восстановления работоспособности.
- **Пример**:
```toml
[general]
me_reconnect_max_concurrent_per_dc = 8
```
<a id="cfg-general-me_reconnect_backoff_base_ms"></a>
- `me_reconnect_backoff_base_ms`
- **Ограничения / валидация**: `u64` (миллисекунды).
- **Описание**: Начальная задержка повторного подключения в миллисекундах.
- **Пример**:
```toml
[general]
me_reconnect_backoff_base_ms = 500
```
<a id="cfg-general-me_reconnect_backoff_cap_ms"></a>
- `me_reconnect_backoff_cap_ms`
- **Ограничения / валидация**: `u64` (миллисекунды).
- **Описание**: Максимальное ограничение задержки повторного подключения в миллисекундах.
- **Пример**:
```toml
[general]
me_reconnect_backoff_cap_ms = 30000
```
<a id="cfg-general-me_reconnect_fast_retry_count"></a>
- `me_reconnect_fast_retry_count`
- **Ограничения / валидация**: `u32`. Эффективное значение — «max(value, 1)» во время выполнения (поэтому «0» ведет себя как «1»).
- **Описание**: Немедленный бюджет повторных попыток, прежде чем применяется поведение длительной отсрочки.
- **Пример**:
```toml
[general]
me_reconnect_fast_retry_count = 16
```
<a id="cfg-general-me_single_endpoint_shadow_writers"></a>
- `me_single_endpoint_shadow_writers`
- **Ограничения / валидация**: Должно быть в пределах `0..=32`.
- **Описание**: Дополнительные резервные модули записи для групп DC только с одной конечной точкой.
- **Пример**:
```toml
[general]
me_single_endpoint_shadow_writers = 2
```
<a id="cfg-general-me_single_endpoint_outage_mode_enabled"></a>
- `me_single_endpoint_outage_mode_enabled`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает агрессивный режим восстановления после сбоя для групп DC только с одной конечной точкой.
- **Пример**:
```toml
[general]
me_single_endpoint_outage_mode_enabled = true
```
<a id="cfg-general-me_single_endpoint_outage_disable_quarantine"></a>
- `me_single_endpoint_outage_disable_quarantine`
- **Ограничения / валидация**: `бул`.
- **Описание**: Игнорирует карантин конечной точки в режиме отключения одной конечной точки.
- **Пример**:
```toml
[general]
me_single_endpoint_outage_disable_quarantine = true
```
<a id="cfg-general-me_single_endpoint_outage_backoff_min_ms"></a>
- `me_single_endpoint_outage_backoff_min_ms`
- **Ограничения / валидация**: Должно быть `> 0` (миллисекунды) и `<= me_single_endpoint_outage_backoff_max_ms`.
- **Описание**: Минимальная задержка повторного подключения в режиме отключения одной конечной точки.
- **Пример**:
```toml
[general]
me_single_endpoint_outage_backoff_min_ms = 250
```
<a id="cfg-general-me_single_endpoint_outage_backoff_max_ms"></a>
- `me_single_endpoint_outage_backoff_max_ms`
- **Ограничения / валидация**: Должно быть `> 0` (миллисекунды) и `>= me_single_endpoint_outage_backoff_min_ms`.
- **Описание**: Максимальная задержка повторного подключения в режиме отключения одной конечной точки.
- **Пример**:
```toml
[general]
me_single_endpoint_outage_backoff_max_ms = 3000
```
<a id="cfg-general-me_single_endpoint_shadow_rotate_every_secs"></a>
- `me_single_endpoint_shadow_rotate_every_secs`
- **Ограничения / валидация**: `u64` (секунды). `0` отключает периодическое вращение тени.
- **Описание**: Периодический интервал ротации теневого записывающего устройства для групп DC с одной конечной точкой.
- **Пример**:
```toml
[general]
me_single_endpoint_shadow_rotate_every_secs = 900
```
<a id="cfg-general-me_floor_mode"></a>
- `me_floor_mode`
- **Ограничения / валидация**: «статический» или «адаптивный».
- **Описание**: Режим политики пола для целей записи ME.
- **Пример**:
```toml
[general]
me_floor_mode = "adaptive"
```
<a id="cfg-general-me_adaptive_floor_idle_secs"></a>
- `me_adaptive_floor_idle_secs`
- **Ограничения / валидация**: `u64` (секунды).
- **Описание**: Время простоя перед адаптивным ограничением может уменьшить целевую задачу записи с одной конечной точкой.
- **Пример**:
```toml
[general]
me_adaptive_floor_idle_secs = 90
```
<a id="cfg-general-me_adaptive_floor_min_writers_single_endpoint"></a>
- `me_adaptive_floor_min_writers_single_endpoint`
- **Ограничения / валидация**: Должно быть в пределах `1..=32`.
- **Описание**: Минимальная цель записи для групп DC с одной конечной точкой в ​​адаптивном режиме пола.
- **Пример**:
```toml
[general]
me_adaptive_floor_min_writers_single_endpoint = 1
```
<a id="cfg-general-me_adaptive_floor_min_writers_multi_endpoint"></a>
- `me_adaptive_floor_min_writers_multi_endpoint`
- **Ограничения / валидация**: Должно быть в пределах `1..=32`.
- **Описание**: Минимальная цель записи для групп DC с несколькими конечными точками в адаптивном режиме пола.
- **Пример**:
```toml
[general]
me_adaptive_floor_min_writers_multi_endpoint = 1
```
<a id="cfg-general-me_adaptive_floor_recover_grace_secs"></a>
- `me_adaptive_floor_recover_grace_secs`
- **Ограничения / валидация**: `u64` (секунды).
- **Описание**: Льготный период для сохранения статического минимума после активности в адаптивном режиме.
- **Пример**:
```toml
[general]
me_adaptive_floor_recover_grace_secs = 180
```
<a id="cfg-general-me_adaptive_floor_writers_per_core_total"></a>
- `me_adaptive_floor_writers_per_core_total`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Глобальный бюджет записи ME на логическое ядро ​​ЦП в адаптивном режиме.
- **Пример**:
```toml
[general]
me_adaptive_floor_writers_per_core_total = 48
```
<a id="cfg-general-me_adaptive_floor_cpu_cores_override"></a>
- `me_adaptive_floor_cpu_cores_override`
- **Ограничения / валидация**: `u16`. `0` использует автоматическое обнаружение во время выполнения.
- **Описание**: Переопределить количество логических ядер ЦП, используемое для адаптивных вычислений минимального уровня.
- **Пример**:
```toml
[general]
me_adaptive_floor_cpu_cores_override = 0
```
<a id="cfg-general-me_adaptive_floor_max_extra_writers_single_per_core"></a>
- `me_adaptive_floor_max_extra_writers_single_per_core`
- **Ограничения / валидация**: `u16`.
- **Описание**: Максимальное количество дополнительных устройств записи на ядро ​​выше базового требуемого уровня для групп DC с одной конечной точкой.
- **Пример**:
```toml
[general]
me_adaptive_floor_max_extra_writers_single_per_core = 1
```
<a id="cfg-general-me_adaptive_floor_max_extra_writers_multi_per_core"></a>
- `me_adaptive_floor_max_extra_writers_multi_per_core`
- **Ограничения / валидация**: `u16`.
- **Описание**: Максимальное количество дополнительных устройств записи на ядро ​​выше базового требуемого уровня для групп DC с несколькими конечными точками.
- **Пример**:
```toml
[general]
me_adaptive_floor_max_extra_writers_multi_per_core = 2
```
<a id="cfg-general-me_adaptive_floor_max_active_writers_per_core"></a>
- `me_adaptive_floor_max_active_writers_per_core`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Жесткое ограничение для активных устройств записи ME на логическое ядро ​​ЦП.
- **Пример**:
```toml
[general]
me_adaptive_floor_max_active_writers_per_core = 64
```
<a id="cfg-general-me_adaptive_floor_max_warm_writers_per_core"></a>
- `me_adaptive_floor_max_warm_writers_per_core`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Жесткое ограничение для теплых авторов ME на логическое ядро ​​ЦП.
- **Пример**:
```toml
[general]
me_adaptive_floor_max_warm_writers_per_core = 64
```
<a id="cfg-general-me_adaptive_floor_max_active_writers_global"></a>
- `me_adaptive_floor_max_active_writers_global`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Жесткий глобальный лимит для активных авторов ME.
- **Пример**:
```toml
[general]
me_adaptive_floor_max_active_writers_global = 256
```
<a id="cfg-general-me_adaptive_floor_max_warm_writers_global"></a>
- `me_adaptive_floor_max_warm_writers_global`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Жесткий глобальный лимит для теплых писателей ME.
- **Пример**:
```toml
[general]
me_adaptive_floor_max_warm_writers_global = 256
```
<a id="cfg-general-upstream_connect_retry_attempts"></a>
- `upstream_connect_retry_attempts`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Попытки подключения для выбранного восходящего потока перед возвратом ошибки/резервного варианта.
- **Пример**:
```toml
[general]
upstream_connect_retry_attempts = 2
```
<a id="cfg-general-upstream_connect_retry_backoff_ms"></a>
- `upstream_connect_retry_backoff_ms`
- **Ограничения / валидация**: `u64` (миллисекунды). `0` отключает задержку отсрочки (повторные попытки становятся немедленными).
- **Описание**: Задержка в миллисекундах между попытками восходящего соединения.
- **Пример**:
```toml
[general]
upstream_connect_retry_backoff_ms = 100
```
<a id="cfg-general-upstream_connect_budget_ms"></a>
- `upstream_connect_budget_ms`
- **Ограничения / валидация**: Должно быть `> 0` (миллисекунды).
- **Описание**: Общий бюджет настенных часов в миллисекундах для одного запроса восходящего соединения при повторных попытках.
- **Пример**:
```toml
[general]
upstream_connect_budget_ms = 3000
```
<a id="cfg-general-upstream_unhealthy_fail_threshold"></a>
- `upstream_unhealthy_fail_threshold`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Последовательные неудачные запросы до того, как восходящий поток будет помечен как неработоспособный.
- **Пример**:
```toml
[general]
upstream_unhealthy_fail_threshold = 5
```
<a id="cfg-general-upstream_connect_failfast_hard_errors"></a>
- `upstream_connect_failfast_hard_errors`
- **Ограничения / валидация**: `бул`.
- **Описание**: Если установлено значение true, дополнительные попытки пропускаются при серьезных непереходных ошибках восходящего соединения.
- **Пример**:
```toml
[general]
upstream_connect_failfast_hard_errors = false
```
<a id="cfg-general-stun_iface_mismatch_ignore"></a>
- `stun_iface_mismatch_ignore`
- **Ограничения / валидация**: `бул`.
- **Описание**: Флаг совместимости зарезервирован для использования в будущем. В настоящее время этот ключ анализируется, но не используется средой выполнения.
- **Пример**:
```toml
[general]
stun_iface_mismatch_ignore = false
```
<a id="cfg-general-unknown_dc_log_path"></a>
- `unknown_dc_log_path`
- **Ограничения / валидация**: `Строка` (необязательно). Должен быть безопасный путь (никаких компонентов `..`, родительский каталог должен существовать); небезопасные пути отклоняются во время выполнения.
- **Описание**: Путь к файлу журнала для неизвестных (нестандартных) запросов DC, когда `unknown_dc_file_log_enabled = true`. Опустите этот ключ, чтобы отключить ведение журнала файлов.
- **Пример**:
```toml
[general]
unknown_dc_log_path = "unknown-dc.txt"
```
<a id="cfg-general-unknown_dc_file_log_enabled"></a>
- `unknown_dc_file_log_enabled`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает ведение журнала файла неизвестного DC (записывает строки `dc_idx=<N>`). Требуется установить `unknown_dc_log_path` и на платформах, отличных от Unix, может не поддерживаться. Ведение журналов дедуплицировано и ограничено (записываются только первые ~ 1024 различных неизвестных индекса DC).
- **Пример**:
```toml
[general]
unknown_dc_file_log_enabled = false
```
<a id="cfg-general-log_level"></a>
- `log_level`
- **Ограничения / валидация**: «отладка», «многословный», «нормальный» или «тихий».
- **Описание**: Уровень детализации журналирования во время выполнения (используется, если RUST_LOG не установлен). Если в среде установлен RUST_LOG, он имеет приоритет над этим параметром.
- **Пример**:
```toml
[general]
log_level = "normal"
```
<a id="cfg-general-disable_colors"></a>
- `disable_colors`
- **Ограничения / валидация**: `бул`.
- **Описание**: Отключает цвета ANSI в журналах (полезно для файлов/systemd). Это влияет только на форматирование журнала и не меняет уровень/фильтрацию журнала.
- **Пример**:
```toml
[general]
disable_colors = false
```
<a id="cfg-general-me_socks_kdf_policy"></a>
- `me_socks_kdf_policy`
- **Ограничения / валидация**: «строгий» или «совместимый».
- **Описание**: Резервная политика KDF, связанная с SOCKS, для рукопожатия среднего уровня.
- **Пример**:
```toml
[general]
me_socks_kdf_policy = "strict"
```
<a id="cfg-general-me_route_backpressure_base_timeout_ms"></a>
- `me_route_backpressure_base_timeout_ms`
- **Ограничения / валидация**: Должно быть в пределах `1..=5000` (миллисекунд).
- **Описание**: Тайм-аут базового противодавления в миллисекундах для отправки по каналу маршрута ME.
- **Пример**:
```toml
[general]
me_route_backpressure_base_timeout_ms = 25
```
<a id="cfg-general-me_route_backpressure_high_timeout_ms"></a>
- `me_route_backpressure_high_timeout_ms`
- **Ограничения / валидация**: Должно быть в пределах `1..=5000` (миллисекунды) и `>= me_route_backpressure_base_timeout_ms`.
- **Описание**: Тайм-аут высокого противодавления в миллисекундах, когда занятость очереди превышает водяной знак.
- **Пример**:
```toml
[general]
me_route_backpressure_high_timeout_ms = 120
```
<a id="cfg-general-me_route_backpressure_high_watermark_pct"></a>
- `me_route_backpressure_high_watermark_pct`
- **Ограничения / валидация**: Должно быть в пределах `1..=100` (процентов).
- **Описание**: Пороговое значение процента занятости очереди для переключения на тайм-аут высокого противодавления.
- **Пример**:
```toml
[general]
me_route_backpressure_high_watermark_pct = 80
```
<a id="cfg-general-me_health_interval_ms_unhealthy"></a>
- `me_health_interval_ms_unhealthy`
- **Ограничения / валидация**: Должно быть `> 0` (миллисекунды).
- **Описание**: Интервал мониторинга работоспособности, когда покрытие записи ME ухудшается.
- **Пример**:
```toml
[general]
me_health_interval_ms_unhealthy = 1000
```
<a id="cfg-general-me_health_interval_ms_healthy"></a>
- `me_health_interval_ms_healthy`
- **Ограничения / валидация**: Должно быть `> 0` (миллисекунды).
- **Описание**: Интервал мониторинга работоспособности, пока покрытие записи ME стабильно/работоспособно.
- **Пример**:
```toml
[general]
me_health_interval_ms_healthy = 3000
```
<a id="cfg-general-me_admission_poll_ms"></a>
- `me_admission_poll_ms`
- **Ограничения / валидация**: Должно быть `> 0` (миллисекунды).
- **Описание**: Интервал опроса для проверок состояния условного приема.
- **Пример**:
```toml
[general]
me_admission_poll_ms = 1000
```
<a id="cfg-general-me_warn_rate_limit_ms"></a>
- `me_warn_rate_limit_ms`
- **Ограничения / валидация**: Должно быть `> 0` (миллисекунды).
- **Описание**: Время восстановления повторяющихся журналов предупреждений ME.
- **Пример**:
```toml
[general]
me_warn_rate_limit_ms = 5000
```
<a id="cfg-general-me_route_no_writer_mode"></a>
- `me_route_no_writer_mode`
- **Ограничения / валидация**: `"async_recovery_failfast"`, `"inline_recovery_legacy"` или `"hybrid_async_persistent"`.
- **Описание**: Поведение маршрута ME, когда ни один писатель не доступен немедленно.
- **Пример**:
```toml
[general]
me_route_no_writer_mode = "hybrid_async_persistent"
```
<a id="cfg-general-me_route_no_writer_wait_ms"></a>
- `me_route_no_writer_wait_ms`
- **Ограничения / валидация**: Должно быть в пределах `10..=5000` (миллисекунд).
- **Описание**: Максимальное время ожидания, используемое в быстром режиме асинхронного восстановления перед откатом.
- **Пример**:
```toml
[general]
me_route_no_writer_wait_ms = 250
```
<a id="cfg-general-me_route_hybrid_max_wait_ms"></a>
- `me_route_hybrid_max_wait_ms`
- **Ограничения / валидация**: Должно быть в пределах `50..=60000` (миллисекунд).
- **Описание**: Максимальное совокупное время ожидания в гибридном режиме без записи перед отказоустойчивым переходом.
- **Пример**:
```toml
[general]
me_route_hybrid_max_wait_ms = 3000
```
<a id="cfg-general-me_route_blocking_send_timeout_ms"></a>
- `me_route_blocking_send_timeout_ms`
- **Ограничения / валидация**: Должно быть в пределах `0..=5000` (миллисекунд). `0` сохраняет устаревшее неограниченное поведение ожидания.
- **Описание**: Максимальное ожидание блокировки резервной отправки маршрутного канала.
- **Пример**:
```toml
[general]
me_route_blocking_send_timeout_ms = 250
```
<a id="cfg-general-me_route_inline_recovery_attempts"></a>
- `me_route_inline_recovery_attempts`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Количество попыток оперативного восстановления в устаревшем режиме.
- **Пример**:
```toml
[general]
me_route_inline_recovery_attempts = 3
```
<a id="cfg-general-me_route_inline_recovery_wait_ms"></a>
- `me_route_inline_recovery_wait_ms`
- **Ограничения / валидация**: Должно быть в пределах `10..=30000` (миллисекунд).
- **Описание**: Максимальное время ожидания встроенного восстановления в устаревшем режиме.
- **Пример**:
```toml
[general]
me_route_inline_recovery_wait_ms = 3000
```
<a id="cfg-general-fast_mode_min_tls_record"></a>
- `fast_mode_min_tls_record`
- **Ограничения / валидация**: `использовать` (байты). `0` отключает ограничение.
- **Описание**: Минимальный размер записи TLS при включенном объединении в быстром режиме.
- **Пример**:
```toml
[general]
fast_mode_min_tls_record = 0
```
<a id="cfg-general-update_every"></a>
- `update_every`
- **Ограничения / валидация**: `u64` (секунды). Если установлено, должно быть `> 0`. Если этот ключ не установлен явно, можно использовать устаревшие `proxy_secret_auto_reload_secs` и `proxy_config_auto_reload_secs` (их эффективный минимум должен быть `> 0`).
- **Описание**: Единый интервал обновления для задач обновления ME (getProxyConfig, getProxyConfigV6, getProxySecret). Если этот параметр установлен, он переопределяет устаревшие интервалы перезагрузки прокси-сервера.
- **Пример**:
```toml
[general]
update_every = 300
```
<a id="cfg-general-me_reinit_every_secs"></a>
- `me_reinit_every_secs`
- **Ограничения / валидация**: Должно быть `> 0` (секунды).
- **Описание**: Периодический интервал для цикла повторной инициализации ME с нулевым временем простоя.
- **Пример**:
```toml
[general]
me_reinit_every_secs = 900
```
<a id="cfg-general-me_hardswap_warmup_delay_min_ms"></a>
- `me_hardswap_warmup_delay_min_ms`
- **Ограничения / валидация**: `u64` (миллисекунды). Должно быть `<= me_hardswap_warmup_delay_max_ms`.
- **Описание**: Нижняя граница интервала прогрева жесткой замены.
- **Пример**:
```toml
[general]
me_hardswap_warmup_delay_min_ms = 1000
```
<a id="cfg-general-me_hardswap_warmup_delay_max_ms"></a>
- `me_hardswap_warmup_delay_max_ms`
- **Ограничения / валидация**: Должно быть `> 0` (миллисекунды).
- **Описание**: Верхняя граница интервала прогрева жесткой замены.
- **Пример**:
```toml
[general]
me_hardswap_warmup_delay_max_ms = 2000
```
<a id="cfg-general-me_hardswap_warmup_extra_passes"></a>
- `me_hardswap_warmup_extra_passes`
- **Ограничения / валидация**: Должно быть в пределах `[0, 10]`.
- **Описание**: Дополнительные прогрева проходят после базового прохода за один цикл жесткой замены.
- **Пример**:
```toml
[general]
# default: 3 (allowed range: 0..=10)
me_hardswap_warmup_extra_passes = 3
```
<a id="cfg-general-me_hardswap_warmup_pass_backoff_base_ms"></a>
- `me_hardswap_warmup_pass_backoff_base_ms`
- **Ограничения / валидация**: `u64` (миллисекунды). Должно быть `> 0`.
- **Описание**: Базовая задержка между дополнительными проходами по замене жесткого диска, когда пол еще не завершен.
- **Пример**:
```toml
[general]
# default: 500
me_hardswap_warmup_pass_backoff_base_ms = 500
```
<a id="cfg-general-me_config_stable_snapshots"></a>
- `me_config_stable_snapshots`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Количество идентичных снимков конфигурации ME, необходимое для применения.
- **Пример**:
```toml
[general]
# require 3 identical snapshots before applying ME endpoint map updates
me_config_stable_snapshots = 3
```
<a id="cfg-general-me_config_apply_cooldown_secs"></a>
- `me_config_apply_cooldown_secs`
- **Ограничения / валидация**: `u64`.
- **Описание**: Время восстановления между примененными обновлениями карты конечных точек ME. `0` отключает время восстановления.
- **Пример**:
```toml
[general]
# allow applying stable snapshots immediately (no cooldown)
me_config_apply_cooldown_secs = 0
```
<a id="cfg-general-me_snapshot_require_http_2xx"></a>
- `me_snapshot_require_http_2xx`
- **Ограничения / валидация**: `бул`.
- **Описание**: Для применения снимков конфигурации ME требуется 2xx HTTP-ответа. Если установлено значение «false», ответы, отличные от 2xx, все равно могут быть проанализированы/учтены программой обновления.
- **Пример**:
```toml
[general]
# allow applying snapshots even when the HTTP status is non-2xx
me_snapshot_require_http_2xx = false
```
<a id="cfg-general-me_snapshot_reject_empty_map"></a>
- `me_snapshot_reject_empty_map`
- **Ограничения / валидация**: `бул`.
- **Описание**: Отклоняет пустые снимки конфигурации ME (без конечных точек). Если установлено значение «false», может быть применен пустой снимок (с учетом других ворот), что может временно уменьшить/очистить карту ME.
- **Пример**:
```toml
[general]
# allow applying empty snapshots (use with care)
me_snapshot_reject_empty_map = false
```
<a id="cfg-general-me_snapshot_min_proxy_for_lines"></a>
- `me_snapshot_min_proxy_for_lines`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Минимальное количество проанализированных строк `proxy_for`, необходимое для принятия снимка.
- **Пример**:
```toml
[general]
# require at least 10 proxy_for rows before accepting a snapshot
me_snapshot_min_proxy_for_lines = 10
```
<a id="cfg-general-proxy_secret_stable_snapshots"></a>
- `proxy_secret_stable_snapshots`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Количество идентичных снимков с секретом прокси-сервера, необходимых перед ротацией.
- **Пример**:
```toml
[general]
# require 2 identical getProxySecret snapshots before rotating at runtime
proxy_secret_stable_snapshots = 2
```
<a id="cfg-general-proxy_secret_rotate_runtime"></a>
- `proxy_secret_rotate_runtime`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает ротацию секретов прокси-сервера во время выполнения из снимков средства обновления.
- **Пример**:
```toml
[general]
# disable runtime proxy-secret rotation (startup still uses proxy_secret_path/proxy_secret_len_max)
proxy_secret_rotate_runtime = false
```
<a id="cfg-general-me_secret_atomic_snapshot"></a>
- `me_secret_atomic_snapshot`
- **Ограничения / валидация**: `бул`.
- **Описание**: Сохраняет селекторные и секретные байты из одного и того же снимка атомарно. Если `general.use_middle_proxy = true`, это автоматически включается во время загрузки конфигурации, чтобы обеспечить согласованность материала ME KDF.
- **Пример**:
```toml
[general]
# NOTE: when use_middle_proxy=true, Telemt will auto-enable this during load
me_secret_atomic_snapshot = false
```
<a id="cfg-general-proxy_secret_len_max"></a>
- `proxy_secret_len_max`
- **Ограничения / валидация**: Должно быть в пределах `[32, 4096]`.
- **Описание**: Верхний предел длины (в байтах) принимаемого прокси-секрета во время запуска и обновления среды выполнения.
- **Пример**:
```toml
[general]
# default: 256 (bytes)
proxy_secret_len_max = 256
```
<a id="cfg-general-me_pool_drain_ttl_secs"></a>
- `me_pool_drain_ttl_secs`
- **Ограничения / валидация**: `u64` (секунды). `0` отключает окно дренажного TTL (и подавляет предупреждения дренажного TTL для непустых записывающих устройств дренажа).
- **Описание**: Временной интервал Drain-TTL для устаревших модулей записи ME после изменения карты конечных точек. Во время TTL устаревшие средства записи можно использовать только в качестве резерва для новых привязок (в зависимости от политики привязки).
- **Пример**:
```toml
[general]
# disable drain TTL (draining writers won't emit "past drain TTL" warnings)
me_pool_drain_ttl_secs = 0
```
<a id="cfg-general-me_instadrain"></a>
- `me_instadrain`
- **Ограничения / валидация**: `бул`.
- **Описание**: Принудительно удаляет устаревшие записи записи при следующем такте очистки, минуя ожидание TTL/крайнего срока.
- **Пример**:
```toml
[general]
# default: false
me_instadrain = false
```
<a id="cfg-general-me_pool_drain_threshold"></a>
- `me_pool_drain_threshold`
- **Ограничения / валидация**: `u64`. Установите значение «0», чтобы отключить очистку на основе пороговых значений.
- **Описание**: Максимальное количество устаревших источников записи, прежде чем самые старые из них будут принудительно закрыты в пакетном режиме.
- **Пример**:
```toml
[general]
# default: 32
me_pool_drain_threshold = 32
```
<a id="cfg-general-me_pool_drain_soft_evict_enabled"></a>
- `me_pool_drain_soft_evict_enabled`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает постепенное мягкое удаление устаревших средств записи во время очистки/повторной инициализации вместо немедленного жесткого закрытия.
- **Пример**:
```toml
[general]
# default: true
me_pool_drain_soft_evict_enabled = true
```
<a id="cfg-general-me_pool_drain_soft_evict_grace_secs"></a>
- `me_pool_drain_soft_evict_grace_secs`
- **Ограничения / валидация**: `u64` (секунды). Должно быть в пределах `[0, 3600]`.
- **Описание**: Дополнительная льгота (после слива TTL) перед началом этапа мягкого вытеснения.
- **Пример**:
```toml
[general]
# default: 10
me_pool_drain_soft_evict_grace_secs = 10
```
<a id="cfg-general-me_pool_drain_soft_evict_per_writer"></a>
- `me_pool_drain_soft_evict_per_writer`
- **Ограничения / валидация**: `1..=16`.
- **Описание**: Максимальное количество устаревших маршрутов, мягко вытесняемых на одного автора за один проход выселения.
- **Пример**:
```toml
[general]
# default: 2
me_pool_drain_soft_evict_per_writer = 2
```
<a id="cfg-general-me_pool_drain_soft_evict_budget_per_core"></a>
- `me_pool_drain_soft_evict_budget_per_core`
- **Ограничения / валидация**: `1..=64`.
- **Описание**: Бюджет на ядро ​​ограничивает совокупную работу по мягкому вытеснению за проход.
- **Пример**:
```toml
[general]
# default: 16
me_pool_drain_soft_evict_budget_per_core = 16
```
<a id="cfg-general-me_pool_drain_soft_evict_cooldown_ms"></a>
- `me_pool_drain_soft_evict_cooldown_ms`
- **Ограничения / валидация**: `u64` (миллисекунды). Должно быть `> 0`.
- **Описание**: Время восстановления между повторяющимися мягкими выселениями одного и того же автора.
- **Пример**:
```toml
[general]
# default: 1000
me_pool_drain_soft_evict_cooldown_ms = 1000
```
<a id="cfg-general-me_bind_stale_mode"></a>
- `me_bind_stale_mode`
- **Ограничения / валидация**: «никогда», «ttl» или «всегда».
- **Описание**: Политика в отношении новых ограничений для устаревших истощающих авторов.
- **Пример**:
```toml
[general]
# allow stale binds only for a limited time window
me_bind_stale_mode = "ttl"
```
<a id="cfg-general-me_bind_stale_ttl_secs"></a>
- `me_bind_stale_ttl_secs`
- **Ограничения / валидация**: `u64`.
- **Описание**: TTL для допуска устаревшей привязки, когда устаревший режим — «ttl».
- **Пример**:
```toml
[general]
me_bind_stale_mode = "ttl"
me_bind_stale_ttl_secs = 90
```
<a id="cfg-general-me_pool_min_fresh_ratio"></a>
- `me_pool_min_fresh_ratio`
- **Ограничения / валидация**: Должно быть в пределах `[0.0, 1.0]`.
- **Описание**: Минимальный коэффициент покрытия свежих желаемых DC, прежде чем устаревшие авторы будут истощены.
- **Пример**:
```toml
[general]
# require >=90% desired-DC coverage before draining stale writers
me_pool_min_fresh_ratio = 0.9
```
<a id="cfg-general-me_reinit_drain_timeout_secs"></a>
- `me_reinit_drain_timeout_secs`
- **Ограничения / валидация**: `u64`. `0` использует тайм-аут принудительного закрытия для обеспечения безопасности во время выполнения. Если `> 0` и `< me_pool_drain_ttl_secs`, среда выполнения увеличивает значение TTL.
- **Описание**: Тайм-аут принудительного закрытия для слива устаревших авторов. Если установлено значение «0», эффективный тайм-аут представляет собой резервный режим безопасности во время выполнения (300 секунд).
- **Пример**:
```toml
[general]
# use runtime safety fallback force-close timeout (300s)
me_reinit_drain_timeout_secs = 0
```
<a id="cfg-general-proxy_secret_auto_reload_secs"></a>
- `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` не установлен.
- **Пример**:
```toml
[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
```
<a id="cfg-general-proxy_config_auto_reload_secs"></a>
- `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` не установлен.
- **Пример**:
```toml
[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
```
<a id="cfg-general-me_reinit_singleflight"></a>
- `me_reinit_singleflight`
- **Ограничения / валидация**: `бул`.
- **Описание**: Сериализует циклы повторной инициализации ME по источникам триггера.
- **Пример**:
```toml
[general]
me_reinit_singleflight = true
```
<a id="cfg-general-me_reinit_trigger_channel"></a>
- `me_reinit_trigger_channel`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Емкость очереди триггеров для планировщика повторной инициализации.
- **Пример**:
```toml
[general]
me_reinit_trigger_channel = 64
```
<a id="cfg-general-me_reinit_coalesce_window_ms"></a>
- `me_reinit_coalesce_window_ms`
- **Ограничения / валидация**: `u64`.
- **Описание**: Запустить окно объединения триггеров перед началом повторной инициализации (мс).
- **Пример**:
```toml
[general]
me_reinit_coalesce_window_ms = 200
```
<a id="cfg-general-me_deterministic_writer_sort"></a>
- `me_deterministic_writer_sort`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает детерминированную сортировку кандидатов для пути привязки записи.
- **Пример**:
```toml
[general]
me_deterministic_writer_sort = true
```
<a id="cfg-general-me_writer_pick_mode"></a>
- `me_writer_pick_mode`
- **Ограничения / валидация**: `"sorted_rr"` или `"p2c"`.
- **Описание**: Режим выбора записывающего устройства для пути привязки маршрута.
- **Пример**:
```toml
[general]
me_writer_pick_mode = "p2c"
```
<a id="cfg-general-me_writer_pick_sample_size"></a>
- `me_writer_pick_sample_size`
- **Ограничения / валидация**: `2..=4`.
- **Описание**: Количество кандидатов, отобранных сборщиком в режиме p2c.
- **Пример**:
```toml
[general]
me_writer_pick_mode = "p2c"
me_writer_pick_sample_size = 3
```
<a id="cfg-general-ntp_check"></a>
- `ntp_check`
- **Ограничения / валидация**: `бул`.
- **Описание**: Зарезервировано для будущего использования. В настоящее время этот ключ анализируется, но не используется средой выполнения.
- **Пример**:
```toml
[general]
ntp_check = true
```
<a id="cfg-general-ntp_servers"></a>
- `ntp_servers`
- **Ограничения / валидация**: `Строка[]`.
- **Описание**: Зарезервировано для будущего использования. В настоящее время этот ключ анализируется, но не используется средой выполнения.
- **Пример**:
```toml
[general]
ntp_servers = ["pool.ntp.org"]
```
<a id="cfg-general-auto_degradation_enabled"></a>
- `auto_degradation_enabled`
- **Ограничения / валидация**: `бул`.
- **Описание**: Зарезервировано для будущего использования. В настоящее время этот ключ анализируется, но не используется средой выполнения.
- **Пример**:
```toml
[general]
auto_degradation_enabled = true
```
<a id="cfg-general-degradation_min_unavailable_dc_groups"></a>
- `degradation_min_unavailable_dc_groups`
- **Ограничения / валидация**: `u8`.
- **Описание**: Зарезервировано для будущего использования. В настоящее время этот ключ анализируется, но не используется средой выполнения.
- **Пример**:
```toml
[general]
degradation_min_unavailable_dc_groups = 2
```
## [general.modes]
| Ключ | Тип | По умолчанию |
| --- | ---- | ------- |
| [`classic`](#cfg-general-modes-classic) | `bool` | `false` |
| [`secure`](#cfg-general-modes-secure) | `bool` | `false` |
| [`tls`](#cfg-general-modes-tls) | `bool` | `true` |
<a id="cfg-general-modes-classic"></a>
- `classic`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает классический режим MTProxy.
- **Пример**:
```toml
[general.modes]
classic = true
```
<a id="cfg-general-modes-secure"></a>
- `secure`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает безопасный режим.
- **Пример**:
```toml
[general.modes]
secure = true
```
<a id="cfg-general-modes-tls"></a>
- `tls`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает режим TLS.
- **Пример**:
```toml
[general.modes]
tls = true
```
## [general.links]
| Ключ | Тип | По умолчанию |
| --- | ---- | ------- |
| [`show`](#cfg-general-links-show) | `"*"` or `String[]` | `"*"` |
| [`public_host`](#cfg-general-links-public_host) | `String` | — |
| [`public_port`](#cfg-general-links-public_port) | `u16` | — |
<a id="cfg-general-links-show"></a>
- `show`
- **Ограничения / валидация**: `"*"` или `String[]`. Пустой массив означает «не показывать ничего».
- **Описание**: Выбирает пользователей, чьи прокси-ссылки `tg://` отображаются при запуске.
- **Пример**:
```toml
[general.links]
show = "*"
# or:
# show = ["alice", "bob"]
```
<a id="cfg-general-links-public_host"></a>
- `public_host`
- **Ограничения / валидация**: `Строка` (необязательно).
- **Описание**: Переопределение общедоступного имени хоста/IP-адреса, используемое для сгенерированных ссылок `tg://` (переопределяет обнаруженный IP-адрес).
- **Пример**:
```toml
[general.links]
public_host = "proxy.example.com"
```
<a id="cfg-general-links-public_port"></a>
- `public_port`
- **Ограничения / валидация**: `u16` (необязательно).
- **Описание**: Переопределение общедоступного порта, используемое для сгенерированных ссылок `tg://` (переопределяет `server.port`).
- **Пример**:
```toml
[general.links]
public_port = 443
```
## [general.telemetry]
| Ключ | Тип | По умолчанию |
| --- | ---- | ------- |
| [`core_enabled`](#cfg-general-telemetry-core_enabled) | `bool` | `true` |
| [`user_enabled`](#cfg-general-telemetry-user_enabled) | `bool` | `true` |
| [`me_level`](#cfg-general-telemetry-me_level) | `"silent"`, `"normal"`, or `"debug"` | `"normal"` |
<a id="cfg-general-telemetry-core_enabled"></a>
- `core_enabled`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает основные счетчики телеметрии горячего пути.
- **Пример**:
```toml
[general.telemetry]
core_enabled = true
```
<a id="cfg-general-telemetry-user_enabled"></a>
- `user_enabled`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает счетчики телеметрии для каждого пользователя.
- **Пример**:
```toml
[general.telemetry]
user_enabled = true
```
<a id="cfg-general-telemetry-me_level"></a>
- `me_level`
- **Ограничения / валидация**: «тихий», «нормальный» или «отладка».
- **Описание**: Средний уровень детализации телеметрии.
- **Пример**:
```toml
[general.telemetry]
me_level = "normal"
```
## [network]
| Ключ | Тип | По умолчанию |
| --- | ---- | ------- |
| [`ipv4`](#cfg-network-ipv4) | `bool` | `true` |
| [`ipv6`](#cfg-network-ipv6) | `bool` | `false` |
| [`prefer`](#cfg-network-prefer) | `u8` | `4` |
| [`multipath`](#cfg-network-multipath) | `bool` | `false` |
| [`stun_use`](#cfg-network-stun_use) | `bool` | `true` |
| [`stun_servers`](#cfg-network-stun_servers) | `String[]` | Built-in STUN list (13 hosts) |
| [`stun_tcp_fallback`](#cfg-network-stun_tcp_fallback) | `bool` | `true` |
| [`http_ip_detect_urls`](#cfg-network-http_ip_detect_urls) | `String[]` | `["https://ifconfig.me/ip", "https://api.ipify.org"]` |
| [`cache_public_ip_path`](#cfg-network-cache_public_ip_path) | `String` | `"cache/public_ip.txt"` |
| [`dns_overrides`](#cfg-network-dns_overrides) | `String[]` | `[]` |
<a id="cfg-network-ipv4"></a>
- `ipv4`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает сеть IPv4.
- **Пример**:
```toml
[network]
ipv4 = true
```
<a id="cfg-network-ipv6"></a>
- `ipv6`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает/выключает сеть IPv6. Если этот параметр опущен, по умолчанию используется значение «false».
- **Пример**:
```toml
[network]
# enable IPv6 explicitly
ipv6 = true
# or: disable IPv6 explicitly
# ipv6 = false
```
<a id="cfg-network-prefer"></a>
- `prefer`
- **Ограничения / валидация**: Должно быть `4` или `6`. Если `prefer = 4`, а `ipv4 = false`, Telemt принудительно использует `prefer = 6`. Если `prefer = 6`, а `ipv6 = false`, Telemt принудительно использует `prefer = 4`.
- **Описание**: Предпочтительное семейство IP для выбора, если доступны оба семейства.
- **Пример**:
```toml
[network]
prefer = 6
```
<a id="cfg-network-multipath"></a>
- `multipath`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает многопутевое поведение, если это поддерживается платформой и средой выполнения.
- **Пример**:
```toml
[network]
multipath = true
```
<a id="cfg-network-stun_use"></a>
- `stun_use`
- **Ограничения / валидация**: `бул`.
- **Описание**: Глобальный переключатель STUN; если установлено значение «false», проверка STUN отключается и остается только обнаружение без STUN.
- **Пример**:
```toml
[network]
stun_use = false
```
<a id="cfg-network-stun_servers"></a>
- `stun_servers`
- **Ограничения / валидация**: `Строка[]`. Значения обрезаются; пустые значения удаляются; список дедуплицируется. Если этот ключ **не** установлен явно, Telemt сохраняет встроенный список STUN по умолчанию.
- **Описание**: Список серверов STUN для обнаружения общедоступных IP-адресов.
- **Пример**:
```toml
[network]
stun_servers = [
"stun.l.google.com:19302",
"stun.stunprotocol.org:3478",
]
```
<a id="cfg-network-stun_tcp_fallback"></a>
- `stun_tcp_fallback`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает резервный TCP для STUN, когда путь UDP заблокирован/недоступен.
- **Пример**:
```toml
[network]
stun_tcp_fallback = true
```
<a id="cfg-network-http_ip_detect_urls"></a>
- `http_ip_detect_urls`
- **Ограничения / валидация**: `Строка[]`.
- **Описание**: Конечные точки HTTP, используемые для обнаружения общедоступных IP-адресов (резервный вариант после STUN).
- **Пример**:
```toml
[network]
http_ip_detect_urls = ["https://ifconfig.me/ip", "https://api.ipify.org"]
```
<a id="cfg-network-cache_public_ip_path"></a>
- `cache_public_ip_path`
- **Ограничения / валидация**: `Строка`.
- **Описание**: Путь к файлу, используемый для кэширования обнаруженного общедоступного IP-адреса.
- **Пример**:
```toml
[network]
cache_public_ip_path = "cache/public_ip.txt"
```
<a id="cfg-network-dns_overrides"></a>
- `dns_overrides`
- **Ограничения / валидация**: `Строка[]`. Каждая запись должна использовать формат «хост:порт:ip».
- `host`: имя домена (должно быть непустым и не должно содержать `:`)
- `порт`: `u16`
- `ip`: IPv4 (`1.2.3.4`) или IPv6 в квадратных скобках (`[2001:db8::1]`). **IPv6 без скобок отклонен**.
- **Описание**: Переопределения DNS во время выполнения для целей `host:port`. Полезно для принудительного использования определенных IP-адресов для определенных вышестоящих доменов, не затрагивая системный DNS.
- **Пример**:
```toml
[network]
dns_overrides = [
"example.com:443:127.0.0.1",
"example.net:8443:[2001:db8::10]",
]
```
## [server]
| Ключ | Тип | По умолчанию |
| --- | ---- | ------- |
| [`port`](#cfg-server-port) | `u16` | `443` |
| [`listen_addr_ipv4`](#cfg-server-listen_addr_ipv4) | `String` | `"0.0.0.0"` |
| [`listen_addr_ipv6`](#cfg-server-listen_addr_ipv6) | `String` | `"::"` |
| [`listen_unix_sock`](#cfg-server-listen_unix_sock) | `String` | — |
| [`listen_unix_sock_perm`](#cfg-server-listen_unix_sock_perm) | `String` | — |
| [`listen_tcp`](#cfg-server-listen_tcp) | `bool` | — (auto) |
| [`proxy_protocol`](#cfg-server-proxy_protocol) | `bool` | `false` |
| [`proxy_protocol_header_timeout_ms`](#cfg-server-proxy_protocol_header_timeout_ms) | `u64` | `500` |
| [`proxy_protocol_trusted_cidrs`](#cfg-server-proxy_protocol_trusted_cidrs) | `IpNetwork[]` | `[]` |
| [`metrics_port`](#cfg-server-metrics_port) | `u16` | — |
| [`metrics_listen`](#cfg-server-metrics_listen) | `String` | — |
| [`metrics_whitelist`](#cfg-server-metrics_whitelist) | `IpNetwork[]` | `["127.0.0.1/32", "::1/128"]` |
| [`max_connections`](#cfg-server-max_connections) | `u32` | `10000` |
| [`accept_permit_timeout_ms`](#cfg-server-accept_permit_timeout_ms) | `u64` | `250` |
<a id="cfg-server-port"></a>
- `port`
- **Ограничения / валидация**: `u16`.
- **Описание**: Порт прослушивания основного прокси (TCP).
- **Пример**:
```toml
[server]
port = 443
```
<a id="cfg-server-listen_addr_ipv4"></a>
- `listen_addr_ipv4`
- **Ограничения / валидация**: `Строка` (необязательно). Если установлено, это должна быть действительная строка адреса IPv4.
- **Описание**: Адрес привязки IPv4 для прослушивателя TCP (опустите этот ключ, чтобы отключить привязку IPv4).
- **Пример**:
```toml
[server]
listen_addr_ipv4 = "0.0.0.0"
```
<a id="cfg-server-listen_addr_ipv6"></a>
- `listen_addr_ipv6`
- **Ограничения / валидация**: `Строка` (необязательно). Если установлено, это должна быть действительная строка адреса IPv6.
- **Описание**: Адрес привязки IPv6 для прослушивателя TCP (опустите этот ключ, чтобы отключить привязку IPv6).
- **Пример**:
```toml
[server]
listen_addr_ipv6 = "::"
```
<a id="cfg-server-listen_unix_sock"></a>
- `listen_unix_sock`
- **Ограничения / валидация**: `Строка` (необязательно). Не должно быть пустым, если установлено. Только Юникс.
- **Описание**: Путь сокета Unix для прослушивателя. Если установлено, `server.listen_tcp` по умолчанию имеет значение `false` (если не указано иное явно).
- **Пример**:
```toml
[server]
listen_unix_sock = "/run/telemt.sock"
```
<a id="cfg-server-listen_unix_sock_perm"></a>
- `listen_unix_sock_perm`
- **Ограничения / валидация**: `Строка` (необязательно). Если установлено, это должна быть восьмеричная строка разрешения, например `"0666"` или `"0777"`.
- **Описание**: Дополнительные разрешения для файлов сокетов Unix, применяемые после привязки (chmod). Если этот параметр опущен, разрешения не изменяются (наследует umask).
- **Пример**:
```toml
[server]
listen_unix_sock = "/run/telemt.sock"
listen_unix_sock_perm = "0666"
```
<a id="cfg-server-listen_tcp"></a>
- `listen_tcp`
- **Ограничения / валидация**: `bool` (необязательно). Если этот параметр опущен, Telemt автоматически обнаруживает:
- `true`, если `listen_unix_sock` не установлен
- «false», если установлен «listen_unix_sock».
- **Описание**: Явный прослушиватель TCP включает/отключает переопределение.
- **Пример**:
```toml
[server]
# force-enable TCP even when also binding a unix socket
listen_unix_sock = "/run/telemt.sock"
listen_tcp = true
```
<a id="cfg-server-proxy_protocol"></a>
- `proxy_protocol`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает анализ протокола HAProxy PROXY при входящих соединениях (PROXY v1/v2). Если этот параметр включен, исходный адрес клиента берется из заголовка PROXY.
- **Пример**:
```toml
[server]
proxy_protocol = true
```
<a id="cfg-server-proxy_protocol_header_timeout_ms"></a>
- `proxy_protocol_header_timeout_ms`
- **Ограничения / валидация**: Должно быть `> 0` (миллисекунды).
- **Описание**: Таймаут чтения и анализа заголовков протокола PROXY (мс).
- **Пример**:
```toml
[server]
proxy_protocol = true
proxy_protocol_header_timeout_ms = 500
```
<a id="cfg-server-proxy_protocol_trusted_cidrs"></a>
- `proxy_protocol_trusted_cidrs`
- **Ограничения / валидация**: `IpNetwork[]`.
- Если этот параметр опущен, по умолчанию используются доверительные все CIDR (`0.0.0.0/0` и `::/0`).
- Если явно задан пустой массив, все заголовки PROXY отклоняются.
- **Описание**: CIDR доверенного источника позволяют предоставлять заголовки протокола PROXY (контроль безопасности).
- **Пример**:
```toml
[server]
proxy_protocol = true
proxy_protocol_trusted_cidrs = ["127.0.0.1/32", "10.0.0.0/8"]
```
<a id="cfg-server-metrics_port"></a>
- `metrics_port`
- **Ограничения / валидация**: `u16` (необязательно).
- **Описание**: Порт конечной точки метрик, совместимый с Prometheus. Если установлено, включает прослушиватель метрик (поведение привязки можно переопределить с помощью `metrics_listen`).
- **Пример**:
```toml
[server]
metrics_port = 9090
```
<a id="cfg-server-metrics_listen"></a>
- `metrics_listen`
- **Ограничения / валидация**: `Строка` (необязательно). Если установлено, оно должно быть в формате IP:PORT.
- **Описание**: Полный адрес привязки метрик (`IP:PORT`) переопределяет `metrics_port` и привязывается только к указанному адресу.
- **Пример**:
```toml
[server]
metrics_listen = "127.0.0.1:9090"
```
<a id="cfg-server-metrics_whitelist"></a>
- `metrics_whitelist`
- **Ограничения / валидация**: `IpNetwork[]`.
- **Описание**: Белый список CIDR для доступа к конечной точке метрик.
- **Пример**:
```toml
[server]
metrics_port = 9090
metrics_whitelist = ["127.0.0.1/32", "::1/128"]
```
<a id="cfg-server-max_connections"></a>
- `max_connections`
- **Ограничения / валидация**: `u32`. `0` означает неограниченный.
- **Описание**: Максимальное количество одновременных клиентских подключений.
- **Пример**:
```toml
[server]
max_connections = 10000
```
<a id="cfg-server-accept_permit_timeout_ms"></a>
- `accept_permit_timeout_ms`
- **Ограничения / валидация**: `0..=60000` (миллисекунды). `0` сохраняет устаревшее неограниченное поведение ожидания.
- **Описание**: Максимальное время ожидания получения разрешения на слот подключения, прежде чем принятое соединение будет разорвано.
- **Пример**:
```toml
[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`](#cfg-server-conntrack_control-inline_conntrack_control) | `bool` | `true` |
| [`mode`](#cfg-server-conntrack_control-mode) | `String` | `"tracked"` |
| [`backend`](#cfg-server-conntrack_control-backend) | `String` | `"auto"` |
| [`profile`](#cfg-server-conntrack_control-profile) | `String` | `"balanced"` |
| [`hybrid_listener_ips`](#cfg-server-conntrack_control-hybrid_listener_ips) | `IpAddr[]` | `[]` |
| [`pressure_high_watermark_pct`](#cfg-server-conntrack_control-pressure_high_watermark_pct) | `u8` | `85` |
| [`pressure_low_watermark_pct`](#cfg-server-conntrack_control-pressure_low_watermark_pct) | `u8` | `70` |
| [`delete_budget_per_sec`](#cfg-server-conntrack_control-delete_budget_per_sec) | `u64` | `4096` |
<a id="cfg-server-conntrack_control-inline_conntrack_control"></a>
- `inline_conntrack_control`
- **Ограничения / валидация**: `бул`.
- **Описание**: Главный переключатель для задачи conntrack-control во время выполнения: согласовывает правила сетевого фильтра **raw/notrack** для входа прослушивателя (см. `mode`), образцы загружаются каждую секунду и может запускать **`conntrack -D`** удаления для квалификации событий закрытия, пока **pressure mode** активен (см. `delete_budget_per_sec`). Если установлено значение false, правила отслеживания очищаются, а принудительное удаление отключается.
- **Пример**:
```toml
[server.conntrack_control]
inline_conntrack_control = true
```
<a id="cfg-server-conntrack_control-mode"></a>
- `mode`
- **Ограничения / валидация**: Один из вариантов: «отслеживаемый», «без отслеживания», «гибридный» (регистронезависимый; сериализованный нижний регистр).
- **Описание**: **`tracked`**: не устанавливать правила telemt notrack (соединения остаются в состоянии conntrack). **`notrack`**: пометить совпадение входящего TCP с `server.port` как notrack — целевые объекты получаются из `[[server.listeners]]`, если таковые имеются, в противном случае из `server.listen_addr_ipv4` / `server.listen_addr_ipv6` (неуказанные адреса означают «любой» для этого семейства). **`hybrid`**: не отслеживать только адреса, перечисленные в `hybrid_listener_ips` (должно быть непустым; проверяется при загрузке).
- **Пример**:
```toml
[server.conntrack_control]
mode = "notrack"
```
<a id="cfg-server-conntrack_control-backend"></a>
- `backend`
- **Ограничения / валидация**: Один из `auto`, `nftables`, `iptables` (без учета регистра; сериализованный нижний регистр).
- **Описание**: Какой набор команд применяет правила отслеживания. **`auto`**: используйте `nft`, если он присутствует в `PATH`, иначе `iptables`/`ip6tables`, если он присутствует. **`nftables`** / **`iptables`**: принудительно использовать этот бэкэнд; отсутствие двоичного кода означает, что правила невозможно применить. Путь nft использует таблицу `inet telemt_conntrack` и необработанный перехват предварительной маршрутизации; iptables использует цепочку TELEMT_NOTRACK в таблице raw.
- **Пример**:
```toml
[server.conntrack_control]
backend = "auto"
```
<a id="cfg-server-conntrack_control-profile"></a>
- `profile`
- **Ограничения / валидация**: Один из «консервативных», «сбалансированных», «агрессивных» (без учета регистра; сериализованный нижний регистр).
- **Описание**: Когда **режим давления conntrack** активен (водяные знаки `pressure_*`), ограничиваются тайм-ауты простоя и активности, чтобы уменьшить отток коннтреков: например. **первый байт простоя клиента** (`client.rs`), **тайм-аут активности прямой ретрансляции** (`direct_relay.rs`) и **политика простоя среднего реле** (`middle_relay.rs` через `ConntrackPressureProfile::*_cap_secs` / `direct_activity_timeout_secs`). В более агрессивных профилях используются более короткие заглушки.
- **Пример**:
```toml
[server.conntrack_control]
profile = "balanced"
```
<a id="cfg-server-conntrack_control-hybrid_listener_ips"></a>
- `hybrid_listener_ips`
- **Ограничения / валидация**: `IpAddr[]`. Должно быть **непустым**, когда `mode = "hybrid"`. Игнорируется для отслеживаемых/безотслеживаемых сообщений.
- **Описание**: Явные адреса прослушивателя, которые получают правила nottrack в гибридном режиме (разделенные на правила IPv4 и IPv6 в зависимости от реализации).
- **Пример**:
```toml
[server.conntrack_control]
mode = "hybrid"
hybrid_listener_ips = ["203.0.113.10", "2001:db8::1"]
```
<a id="cfg-server-conntrack_control-pressure_high_watermark_pct"></a>
- `pressure_high_watermark_pct`
- **Ограничения / валидация**: Должно быть в пределах `[1, 100]`.
- **Описание**: Режим давления **входит** при любом из следующих событий: заполнение соединения или `server.max_connections` (в процентах, если `max_connections > 0`), **использование файлового дескриптора** и программное обеспечение процесса `RLIMIT_NOFILE`, **ненулевое** событие `accept_permit_timeout` в последнем окне примера или дельта счетчика **ME c2me send-full**. Ввод сравнивает соответствующие проценты с этой верхней отметкой (см. update_pressure_state в conntrack_control.rs).
- **Пример**:
```toml
[server.conntrack_control]
pressure_high_watermark_pct = 85
```
<a id="cfg-server-conntrack_control-pressure_low_watermark_pct"></a>
- `pressure_low_watermark_pct`
- **Ограничения / валидация**: Должно быть **строго меньше** `pressure_high_watermark_pct`.
- **Описание**: Режим давления **сбрасывается** только после **трех** последовательных односекундных выборок, когда все сигналы находятся на уровне этой нижней границы или ниже, а дельты времени ожидания приема/ME-очереди равны нулю (гистерезис).
- **Пример**:
```toml
[server.conntrack_control]
pressure_low_watermark_pct = 70
```
<a id="cfg-server-conntrack_control-delete_budget_per_sec"></a>
- `delete_budget_per_sec`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Максимальное количество попыток **`conntrack -D`** **в секунду** при активном режиме давления (корзина токенов пополняется каждую секунду). Удаление выполняется только для событий закрытия по причинам **тайм-аут**, **давление** или **сброс**; каждая попытка потребляет токен независимо от результата.
- **Пример**:
```toml
[server.conntrack_control]
delete_budget_per_sec = 4096
```
## [server.api]
Примечание. В этом разделе также принимается устаревший псевдоним `[server.admin_api]` (та же схема, что и `[server.api]`).
| Ключ | Тип | По умолчанию |
| --- | ---- | ------- |
| [`enabled`](#cfg-server-api-enabled) | `bool` | `true` |
| [`listen`](#cfg-server-api-listen) | `String` | `"0.0.0.0:9091"` |
| [`whitelist`](#cfg-server-api-whitelist) | `IpNetwork[]` | `["127.0.0.0/8"]` |
| [`auth_header`](#cfg-server-api-auth_header) | `String` | `""` |
| [`request_body_limit_bytes`](#cfg-server-api-request_body_limit_bytes) | `usize` | `65536` |
| [`minimal_runtime_enabled`](#cfg-server-api-minimal_runtime_enabled) | `bool` | `true` |
| [`minimal_runtime_cache_ttl_ms`](#cfg-server-api-minimal_runtime_cache_ttl_ms) | `u64` | `1000` |
| [`runtime_edge_enabled`](#cfg-server-api-runtime_edge_enabled) | `bool` | `false` |
| [`runtime_edge_cache_ttl_ms`](#cfg-server-api-runtime_edge_cache_ttl_ms) | `u64` | `1000` |
| [`runtime_edge_top_n`](#cfg-server-api-runtime_edge_top_n) | `usize` | `10` |
| [`runtime_edge_events_capacity`](#cfg-server-api-runtime_edge_events_capacity) | `usize` | `256` |
| [`read_only`](#cfg-server-api-read_only) | `bool` | `false` |
<a id="cfg-server-api-enabled"></a>
- `enabled`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает REST API плоскости управления.
- **Пример**:
```toml
[server.api]
enabled = true
```
<a id="cfg-server-api-listen"></a>
- `listen`
- **Ограничения / валидация**: `Строка`. Должен быть в формате IP:PORT.
- **Описание**: Адрес привязки API в формате IP:PORT.
- **Пример**:
```toml
[server.api]
listen = "0.0.0.0:9091"
```
<a id="cfg-server-api-whitelist"></a>
- `whitelist`
- **Ограничения / валидация**: `IpNetwork[]`.
- **Описание**: Белый список CIDR разрешил доступ к API.
- **Пример**:
```toml
[server.api]
whitelist = ["127.0.0.0/8"]
```
<a id="cfg-server-api-auth_header"></a>
- `auth_header`
- **Ограничения / валидация**: `Строка`. Пустая строка отключает проверку заголовка аутентификации.
- **Описание**: Точное ожидаемое значение заголовка `Authorization` (статический общий секрет).
- **Пример**:
```toml
[server.api]
auth_header = "Bearer MY_TOKEN"
```
<a id="cfg-server-api-request_body_limit_bytes"></a>
- `request_body_limit_bytes`
- **Ограничения / валидация**: Должно быть `> 0` (байты).
- **Описание**: Максимальный принимаемый размер тела HTTP-запроса (в байтах).
- **Пример**:
```toml
[server.api]
request_body_limit_bytes = 65536
```
<a id="cfg-server-api-minimal_runtime_enabled"></a>
- `minimal_runtime_enabled`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает минимальную логику конечной точки снимков времени выполнения.
- **Пример**:
```toml
[server.api]
minimal_runtime_enabled = true
```
<a id="cfg-server-api-minimal_runtime_cache_ttl_ms"></a>
- `minimal_runtime_cache_ttl_ms`
- **Ограничения / валидация**: `0..=60000` (миллисекунды). `0` отключает кеш.
- **Описание**: Срок жизни кэша для минимальных снимков времени выполнения (мс).
- **Пример**:
```toml
[server.api]
minimal_runtime_cache_ttl_ms = 1000
```
<a id="cfg-server-api-runtime_edge_enabled"></a>
- `runtime_edge_enabled`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает конечные точки границ среды выполнения.
- **Пример**:
```toml
[server.api]
runtime_edge_enabled = false
```
<a id="cfg-server-api-runtime_edge_cache_ttl_ms"></a>
- `runtime_edge_cache_ttl_ms`
- **Ограничения / валидация**: `0..=60000` (миллисекунды).
- **Описание**: Срок жизни кэша для полезных данных агрегации границ во время выполнения (мс).
- **Пример**:
```toml
[server.api]
runtime_edge_cache_ttl_ms = 1000
```
<a id="cfg-server-api-runtime_edge_top_n"></a>
- `runtime_edge_top_n`
- **Ограничения / валидация**: `1..=1000`.
- **Описание**: Размер Top-N для таблицы лидеров краевых соединений.
- **Пример**:
```toml
[server.api]
runtime_edge_top_n = 10
```
<a id="cfg-server-api-runtime_edge_events_capacity"></a>
- `runtime_edge_events_capacity`
- **Ограничения / валидация**: `16..=4096`.
- **Описание**: Емкость кольцевого буфера для пограничных событий во время выполнения.
- **Пример**:
```toml
[server.api]
runtime_edge_events_capacity = 256
```
<a id="cfg-server-api-read_only"></a>
- `read_only`
- **Ограничения / валидация**: `бул`.
- **Описание**: Отклоняет изменение конечных точек API, если оно включено.
- **Пример**:
```toml
[server.api]
read_only = false
```
## [[server.listeners]]
| Ключ | Тип | По умолчанию |
| --- | ---- | ------- |
| [`ip`](#cfg-server-listeners-ip) | `IpAddr` | — |
| [`announce`](#cfg-server-listeners-announce) | `String` | — |
| [`announce_ip`](#cfg-server-listeners-announce_ip) | `IpAddr` | — |
| [`proxy_protocol`](#cfg-server-listeners-proxy_protocol) | `bool` | — |
| [`reuse_allow`](#cfg-server-listeners-reuse_allow) | `bool` | `false` |
<a id="cfg-server-listeners-ip"></a>
- `ip`
- **Ограничения / валидация**: Обязательное поле. Должен быть IPAddr.
- **Описание**: IP-адрес привязки прослушивателя.
- **Пример**:
```toml
[[server.listeners]]
ip = "0.0.0.0"
```
<a id="cfg-server-listeners-announce"></a>
- `announce`
- **Ограничения / валидация**: `Строка` (необязательно). Не должно быть пустым, если установлено.
- **Описание**: Публичный IP-адрес/домен, объявленный в прокси-ссылках для этого прослушивателя. Имеет приоритет над announce_ip.
- **Пример**:
```toml
[[server.listeners]]
ip = "0.0.0.0"
announce = "proxy.example.com"
```
<a id="cfg-server-listeners-announce_ip"></a>
- `announce_ip`
- **Ограничения / валидация**: `IpAddr` (необязательно). Устарело. Используйте «объявить».
- **Описание**: Устаревший устаревший IP-адрес объявления. Во время загрузки конфигурации он переводится в «announce», если «announce» не установлен.
- **Пример**:
```toml
[[server.listeners]]
ip = "0.0.0.0"
announce_ip = "203.0.113.10"
```
<a id="cfg-server-listeners-proxy_protocol"></a>
- `proxy_protocol`
- **Ограничения / валидация**: `bool` (необязательно). Если установлено, переопределяет `server.proxy_protocol` для этого прослушивателя.
- **Описание**: Переопределение протокола PROXY для каждого слушателя.
- **Пример**:
```toml
[server]
proxy_protocol = false
[[server.listeners]]
ip = "0.0.0.0"
proxy_protocol = true
```
<a id="cfg-server-listeners-reuse_allow"></a>
- `reuse_allow`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает `SO_REUSEPORT` для совместного использования привязки нескольких экземпляров (позволяет нескольким экземплярам telemt прослушивать один и тот же `ip:port`).
- **Пример**:
```toml
[[server.listeners]]
ip = "0.0.0.0"
reuse_allow = false
```
## [timeouts]
| Ключ | Тип | По умолчанию |
| --- | ---- | ------- |
| [`client_handshake`](#cfg-timeouts-client_handshake) | `u64` | `30` |
| [`relay_idle_policy_v2_enabled`](#cfg-timeouts-relay_idle_policy_v2_enabled) | `bool` | `true` |
| [`relay_client_idle_soft_secs`](#cfg-timeouts-relay_client_idle_soft_secs) | `u64` | `120` |
| [`relay_client_idle_hard_secs`](#cfg-timeouts-relay_client_idle_hard_secs) | `u64` | `360` |
| [`relay_idle_grace_after_downstream_activity_secs`](#cfg-timeouts-relay_idle_grace_after_downstream_activity_secs) | `u64` | `30` |
| [`tg_connect`](#cfg-timeouts-tg_connect) | `u64` | `10` |
| [`client_keepalive`](#cfg-timeouts-client_keepalive) | `u64` | `15` |
| [`client_ack`](#cfg-timeouts-client_ack) | `u64` | `90` |
| [`me_one_retry`](#cfg-timeouts-me_one_retry) | `u8` | `12` |
| [`me_one_timeout_ms`](#cfg-timeouts-me_one_timeout_ms) | `u64` | `1200` |
<a id="cfg-timeouts-client_handshake"></a>
- `client_handshake`
- **Ограничения / валидация**: Должно быть `> 0`. Значение указано в секундах. Также используется в качестве верхней границы некоторых задержек эмуляции TLS (см. `censorship.server_hello_delay_max_ms`).
- **Описание**: Тайм-аут установления связи клиента (в секундах).
- **Пример**:
```toml
[timeouts]
client_handshake = 30
```
<a id="cfg-timeouts-relay_idle_policy_v2_enabled"></a>
- `relay_idle_policy_v2_enabled`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает политику простоя клиента среднего/жесткого промежуточного реле.
- **Пример**:
```toml
[timeouts]
relay_idle_policy_v2_enabled = true
```
<a id="cfg-timeouts-relay_client_idle_soft_secs"></a>
- `relay_client_idle_soft_secs`
- **Ограничения / валидация**: Должно быть `> 0`; должно быть `<=lay_client_idle_hard_secs`.
- **Описание**: Порог мягкого простоя (в секундах) для неактивности восходящей линии связи клиента среднего ретранслятора. Достижение этого порога отмечает сеанс как бездействующего кандидата (в зависимости от политики он может подлежать очистке).
- **Пример**:
```toml
[timeouts]
relay_client_idle_soft_secs = 120
```
<a id="cfg-timeouts-relay_client_idle_hard_secs"></a>
- `relay_client_idle_hard_secs`
- **Ограничения / валидация**: Должно быть `> 0`; должно быть `>=lay_client_idle_soft_secs`.
- **Описание**: Порог жесткого простоя (в секундах) для неактивности восходящей линии связи клиента среднего ретранслятора. Достижение этого порога закрывает сессию.
- **Пример**:
```toml
[timeouts]
relay_client_idle_hard_secs = 360
```
<a id="cfg-timeouts-relay_idle_grace_after_downstream_activity_secs"></a>
- `relay_idle_grace_after_downstream_activity_secs`
- **Ограничения / валидация**: Должно быть `<=lay_client_idle_hard_secs`.
- **Описание**: Дополнительный льготный период жесткого простоя (в секундах), добавленный после недавней активности в нисходящем направлении.
- **Пример**:
```toml
[timeouts]
relay_idle_grace_after_downstream_activity_secs = 30
```
<a id="cfg-timeouts-tg_connect"></a>
- `tg_connect`
- **Ограничения / валидация**: `u64`. Значение указано в секундах.
- **Описание**: Тайм-аут восходящего соединения Telegram (в секундах).
- **Пример**:
```toml
[timeouts]
tg_connect = 10
```
<a id="cfg-timeouts-client_keepalive"></a>
- `client_keepalive`
- **Ограничения / валидация**: `u64`. Значение указано в секундах.
- **Описание**: Тайм-аут поддержки активности клиента (в секундах).
- **Пример**:
```toml
[timeouts]
client_keepalive = 15
```
<a id="cfg-timeouts-client_ack"></a>
- `client_ack`
- **Ограничения / валидация**: `u64`. Значение указано в секундах.
- **Описание**: Таймаут подтверждения клиента (в секундах).
- **Пример**:
```toml
[timeouts]
client_ack = 90
```
<a id="cfg-timeouts-me_one_retry"></a>
- `me_one_retry`
- **Ограничения / валидация**: `u8`.
- **Описание**: Бюджет попыток быстрого повторного подключения для сценариев DC с одной конечной точкой.
- **Пример**:
```toml
[timeouts]
me_one_retry = 12
```
<a id="cfg-timeouts-me_one_timeout_ms"></a>
- `me_one_timeout_ms`
- **Ограничения / валидация**: `u64`. Значение указано в миллисекундах.
- **Описание**: Тайм-аут на быструю попытку (мс) для логики повторного подключения постоянного тока с одной конечной точкой.
- **Пример**:
```toml
[timeouts]
me_one_timeout_ms = 1200
```
## [censorship]
| Ключ | Тип | По умолчанию |
| --- | ---- | ------- |
| [`tls_domain`](#cfg-censorship-tls_domain) | `String` | `"petrovich.ru"` |
| [`tls_domains`](#cfg-censorship-tls_domains) | `String[]` | `[]` |
| [`unknown_sni_action`](#cfg-censorship-unknown_sni_action) | `"drop"` or `"mask"` | `"drop"` |
| [`tls_fetch_scope`](#cfg-censorship-tls_fetch_scope) | `String` | `""` |
| [`tls_fetch`](#cfg-censorship-tls_fetch) | `Table` | built-in defaults |
| [`mask`](#cfg-censorship-mask) | `bool` | `true` |
| [`mask_host`](#cfg-censorship-mask_host) | `String` | — |
| [`mask_port`](#cfg-censorship-mask_port) | `u16` | `443` |
| [`mask_unix_sock`](#cfg-censorship-mask_unix_sock) | `String` | — |
| [`fake_cert_len`](#cfg-censorship-fake_cert_len) | `usize` | `2048` |
| [`tls_emulation`](#cfg-censorship-tls_emulation) | `bool` | `true` |
| [`tls_front_dir`](#cfg-censorship-tls_front_dir) | `String` | `"tlsfront"` |
| [`server_hello_delay_min_ms`](#cfg-censorship-server_hello_delay_min_ms) | `u64` | `0` |
| [`server_hello_delay_max_ms`](#cfg-censorship-server_hello_delay_max_ms) | `u64` | `0` |
| [`tls_new_session_tickets`](#cfg-censorship-tls_new_session_tickets) | `u8` | `0` |
| [`tls_full_cert_ttl_secs`](#cfg-censorship-tls_full_cert_ttl_secs) | `u64` | `90` |
| [`alpn_enforce`](#cfg-censorship-alpn_enforce) | `bool` | `true` |
| [`mask_proxy_protocol`](#cfg-censorship-mask_proxy_protocol) | `u8` | `0` |
| [`mask_shape_hardening`](#cfg-censorship-mask_shape_hardening) | `bool` | `true` |
| [`mask_shape_hardening_aggressive_mode`](#cfg-censorship-mask_shape_hardening_aggressive_mode) | `bool` | `false` |
| [`mask_shape_bucket_floor_bytes`](#cfg-censorship-mask_shape_bucket_floor_bytes) | `usize` | `512` |
| [`mask_shape_bucket_cap_bytes`](#cfg-censorship-mask_shape_bucket_cap_bytes) | `usize` | `4096` |
| [`mask_shape_above_cap_blur`](#cfg-censorship-mask_shape_above_cap_blur) | `bool` | `false` |
| [`mask_shape_above_cap_blur_max_bytes`](#cfg-censorship-mask_shape_above_cap_blur_max_bytes) | `usize` | `512` |
| [`mask_relay_max_bytes`](#cfg-censorship-mask_relay_max_bytes) | `usize` | `5242880` |
| [`mask_classifier_prefetch_timeout_ms`](#cfg-censorship-mask_classifier_prefetch_timeout_ms) | `u64` | `5` |
| [`mask_timing_normalization_enabled`](#cfg-censorship-mask_timing_normalization_enabled) | `bool` | `false` |
| [`mask_timing_normalization_floor_ms`](#cfg-censorship-mask_timing_normalization_floor_ms) | `u64` | `0` |
| [`mask_timing_normalization_ceiling_ms`](#cfg-censorship-mask_timing_normalization_ceiling_ms) | `u64` | `0` |
<a id="cfg-censorship-tls_domain"></a>
- `tls_domain`
- **Ограничения / валидация**: Должно быть непустое доменное имя. Не должно содержать пробелов или `/`.
- **Описание**: Основной домен TLS, используемый в профиле подтверждения FakeTLS и в качестве домена SNI по умолчанию.
- **Пример**:
```toml
[censorship]
tls_domain = "example.com"
```
<a id="cfg-censorship-tls_domains"></a>
- `tls_domains`
- **Ограничения / валидация**: `Строка[]`. Если установлено, значения объединяются с tls_domain и дедуплицируются (первичный tls_domain всегда остается первым).
- **Описание**: Дополнительные домены TLS для создания нескольких прокси-ссылок.
- **Пример**:
```toml
[censorship]
tls_domain = "example.com"
tls_domains = ["example.net", "example.org"]
```
<a id="cfg-censorship-unknown_sni_action"></a>
- `unknown_sni_action`
- **Ограничения / валидация**: «капля» или «маска».
- **Описание**: Действие для TLS ClientHello с неизвестным/ненастроенным SNI.
- **Пример**:
```toml
[censorship]
unknown_sni_action = "drop"
```
<a id="cfg-censorship-tls_fetch_scope"></a>
- `tls_fetch_scope`
- **Ограничения / валидация**: `Строка`. Значение обрезается во время загрузки; whitespace-only становится пустым.
- **Описание**: Тег области восходящего потока, используемый для выборки метаданных TLS-фронт. Пустое значение сохраняет поведение восходящей маршрутизации по умолчанию.
- **Пример**:
```toml
[censorship]
tls_fetch_scope = "fetch"
```
<a id="cfg-censorship-tls_fetch"></a>
- `tls_fetch`
- **Ограничения / валидация**: Стол. См. раздел «[censorship.tls_fetch]» ниже.
- **Описание**: Настройки стратегии выборки метаданных TLS (начальная загрузка + поведение обновления для данных эмуляции TLS).
- **Пример**:
```toml
[censorship.tls_fetch]
strict_route = true
attempt_timeout_ms = 5000
total_budget_ms = 15000
```
<a id="cfg-censorship-mask"></a>
- `mask`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает режим маскировки/переднего реле.
- **Пример**:
```toml
[censorship]
mask = true
```
<a id="cfg-censorship-mask_host"></a>
- `mask_host`
- **Ограничения / валидация**: `Строка` (необязательно).
- Если установлена маска_unix_sock, маска_хост должна быть опущена (взаимоисключающая).
- Если `mask_host` не установлен и `mask_unix_sock` не установлен, Telemt по умолчанию устанавливает для `mask_host` значение `tls_domain`.
- **Описание**: Хост восходящей маски для фронтального реле TLS.
- **Пример**:
```toml
[censorship]
mask_host = "www.cloudflare.com"
```
<a id="cfg-censorship-mask_port"></a>
- `mask_port`
- **Ограничения / валидация**: `u16`.
- **Описание**: Восходящий порт маски для фронтального реле TLS.
- **Пример**:
```toml
[censorship]
mask_port = 443
```
<a id="cfg-censorship-mask_unix_sock"></a>
- `mask_unix_sock`
- **Ограничения / валидация**: `Строка` (необязательно).
- Не должно быть пустым, если установлено.
- Только Unix; отклонено на платформах, отличных от Unix.
- В Unix должно быть \(\le 107\) байт (ограничение длины пути).
- Взаимоисключающий с `mask_host`.
- **Описание**: Путь сокета Unix для серверной части маски вместо TCP `mask_host`/`mask_port`.
- **Пример**:
```toml
[censorship]
mask_unix_sock = "/run/telemt/mask.sock"
```
<a id="cfg-censorship-fake_cert_len"></a>
- `fake_cert_len`
- **Ограничения / валидация**: `использовать`. Когда `tls_emulation = false` и используется значение по умолчанию, Telemt может рандомизировать его при запуске для обеспечения вариативности.
- **Описание**: Длина полезных данных синтетического сертификата, когда данные эмуляции недоступны.
- **Пример**:
```toml
[censorship]
fake_cert_len = 2048
```
<a id="cfg-censorship-tls_emulation"></a>
- `tls_emulation`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает эмуляцию поведения сертификата/TLS из кэшированных реальных фронтов.
- **Пример**:
```toml
[censorship]
tls_emulation = true
```
<a id="cfg-censorship-tls_front_dir"></a>
- `tls_front_dir`
- **Ограничения / валидация**: `Строка`.
- **Описание**: Путь к каталогу для хранения переднего кэша TLS.
- **Пример**:
```toml
[censorship]
tls_front_dir = "tlsfront"
```
<a id="cfg-censorship-server_hello_delay_min_ms"></a>
- `server_hello_delay_min_ms`
- **Ограничения / валидация**: `u64` (миллисекунды).
- **Описание**: Минимальная задержка server_hello для защиты от отпечатков пальцев (мс).
- **Пример**:
```toml
[censorship]
server_hello_delay_min_ms = 0
```
<a id="cfg-censorship-server_hello_delay_max_ms"></a>
- `server_hello_delay_max_ms`
- **Ограничения / валидация**: `u64` (миллисекунды). Должно быть \(<\) `timeouts.client_handshake * 1000`.
- **Описание**: Максимальная задержка `server_hello` для защиты от отпечатков пальцев (мс).
- **Пример**:
```toml
[timeouts]
client_handshake = 30
[censorship]
server_hello_delay_max_ms = 0
```
<a id="cfg-censorship-tls_new_session_tickets"></a>
- `tls_new_session_tickets`
- **Ограничения / валидация**: `u8`.
- **Описание**: Количество сообщений NewSessionTicket, отправляемых после рукопожатия.
- **Пример**:
```toml
[censorship]
tls_new_session_tickets = 0
```
<a id="cfg-censorship-tls_full_cert_ttl_secs"></a>
- `tls_full_cert_ttl_secs`
- **Ограничения / валидация**: `u64` (секунды).
- **Описание**: TTL для отправки полной полезной нагрузки сертификата для каждого кортежа (домен, IP-адрес клиента).
- **Пример**:
```toml
[censorship]
tls_full_cert_ttl_secs = 90
```
<a id="cfg-censorship-alpn_enforce"></a>
- `alpn_enforce`
- **Ограничения / валидация**: `бул`.
- **Описание**: Обеспечивает поведение эха ALPN в зависимости от предпочтений клиента.
- **Пример**:
```toml
[censorship]
alpn_enforce = true
```
<a id="cfg-censorship-mask_proxy_protocol"></a>
- `mask_proxy_protocol`
- **Ограничения / валидация**: `u8`. `0` = отключено, `1` = v1 (текст), `2` = v2 (двоичный).
- **Описание**: Отправляет заголовок протокола PROXY при подключении к серверной части маски, позволяя серверной части видеть реальный IP-адрес клиента.
- **Пример**:
```toml
[censorship]
mask_proxy_protocol = 0
```
<a id="cfg-censorship-mask_shape_hardening"></a>
- `mask_shape_hardening`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает усиление жесткости канала формы клиента->маски путем применения контролируемого заполнения хвоста к границам сегмента при отключении реле маски.
- **Пример**:
```toml
[censorship]
mask_shape_hardening = true
```
<a id="cfg-censorship-mask_shape_hardening_aggressive_mode"></a>
- `mask_shape_hardening_aggressive_mode`
- **Ограничения / валидация**: Требуется «mask_shape_hardening = true».
- **Описание**: Включите агрессивный профиль формирования (более сильное антиклассификаторское поведение с различной семантикой формирования).
- **Пример**:
```toml
[censorship]
mask_shape_hardening = true
mask_shape_hardening_aggressive_mode = false
```
<a id="cfg-censorship-mask_shape_bucket_floor_bytes"></a>
- `mask_shape_bucket_floor_bytes`
- **Ограничения / валидация**: Должно быть `> 0`; должно быть `<= Mask_shape_bucket_cap_bytes`.
- **Описание**: Минимальный размер ковша, используемый при закалке в форме канала.
- **Пример**:
```toml
[censorship]
mask_shape_bucket_floor_bytes = 512
```
<a id="cfg-censorship-mask_shape_bucket_cap_bytes"></a>
- `mask_shape_bucket_cap_bytes`
- **Ограничения / валидация**: Должно быть `>= Mask_shape_bucket_floor_bytes`.
- **Описание**: Максимальный размер ковша, используемый при фасонно-канальной закалке; трафик, превышающий ограничение, не дополняется дальше.
- **Пример**:
```toml
[censorship]
mask_shape_bucket_cap_bytes = 4096
```
<a id="cfg-censorship-mask_shape_above_cap_blur"></a>
- `mask_shape_above_cap_blur`
- **Ограничения / валидация**: Требуется «mask_shape_hardening = true».
- **Описание**: Добавляет ограниченные рандомизированные хвостовые байты, даже если пересылаемый размер уже превышает ограничение.
- **Пример**:
```toml
[censorship]
mask_shape_hardening = true
mask_shape_above_cap_blur = false
```
<a id="cfg-censorship-mask_shape_above_cap_blur_max_bytes"></a>
- `mask_shape_above_cap_blur_max_bytes`
- **Ограничения / валидация**: Должно быть `<= 1048576`. Должно быть `> 0`, когда `mask_shape_above_cap_blur = true`.
- **Описание**: Максимальное количество случайных дополнительных байтов, добавляемых выше ограничения, если включено размытие выше ограничения.
- **Пример**:
```toml
[censorship]
mask_shape_above_cap_blur = true
mask_shape_above_cap_blur_max_bytes = 64
```
<a id="cfg-censorship-mask_relay_max_bytes"></a>
- `mask_relay_max_bytes`
- **Ограничения / валидация**: Должно быть `> 0`; должно быть `<= 67108864`.
- **Описание**: Максимальное количество ретранслируемых байтов в каждом направлении по резервному пути маскировки без аутентификации.
- **Пример**:
```toml
[censorship]
mask_relay_max_bytes = 5242880
```
<a id="cfg-censorship-mask_classifier_prefetch_timeout_ms"></a>
- `mask_classifier_prefetch_timeout_ms`
- **Ограничения / валидация**: Должно быть в пределах `[5, 50]` (миллисекунды).
- **Описание**: Бюджет тайм-аута (мс) для расширения фрагментированного начального окна классификатора при откате маскирования.
- **Пример**:
```toml
[censorship]
mask_classifier_prefetch_timeout_ms = 5
```
<a id="cfg-censorship-mask_timing_normalization_enabled"></a>
- `mask_timing_normalization_enabled`
- **Ограничения / валидация**: Если задано значение true, требуется маска_timing_normalization_floor_ms > 0 и маска_timing_normalization_ceiling_ms >= Mask_timing_normalization_floor_ms. Потолок должен быть `<= 60000`.
- **Описание**: Включает нормализацию временного конверта для результатов маскировки.
- **Пример**:
```toml
[censorship]
mask_timing_normalization_enabled = false
```
<a id="cfg-censorship-mask_timing_normalization_floor_ms"></a>
- `mask_timing_normalization_floor_ms`
- **Ограничения / валидация**: Должно быть `> 0`, если нормализация времени включена; должно быть `<= Mask_timing_normalization_ceiling_ms`.
- **Описание**: Нижняя граница (мс) для маскировки цели нормализации результата.
- **Пример**:
```toml
[censorship]
mask_timing_normalization_floor_ms = 0
```
<a id="cfg-censorship-mask_timing_normalization_ceiling_ms"></a>
- `mask_timing_normalization_ceiling_ms`
- **Ограничения / валидация**: Должно быть `>= Mask_timing_normalization_floor_ms`; должно быть `<= 60000`.
- **Описание**: Верхняя граница (мс) для маскировки цели нормализации результата.
- **Пример**:
```toml
[censorship]
mask_timing_normalization_ceiling_ms = 0
```
## [censorship.tls_fetch]
| Ключ | Тип | По умолчанию |
| --- | ---- | ------- |
| [`profiles`](#cfg-censorship-tls_fetch-profiles) | `String[]` | `["modern_chrome_like", "modern_firefox_like", "compat_tls12", "legacy_minimal"]` |
| [`strict_route`](#cfg-censorship-tls_fetch-strict_route) | `bool` | `true` |
| [`attempt_timeout_ms`](#cfg-censorship-tls_fetch-attempt_timeout_ms) | `u64` | `5000` |
| [`total_budget_ms`](#cfg-censorship-tls_fetch-total_budget_ms) | `u64` | `15000` |
| [`grease_enabled`](#cfg-censorship-tls_fetch-grease_enabled) | `bool` | `false` |
| [`deterministic`](#cfg-censorship-tls_fetch-deterministic) | `bool` | `false` |
| [`profile_cache_ttl_secs`](#cfg-censorship-tls_fetch-profile_cache_ttl_secs) | `u64` | `600` |
<a id="cfg-censorship-tls_fetch-profiles"></a>
- `profiles`
- **Ограничения / валидация**: `Строка[]`. Пустой список возвращает значения по умолчанию; значения дедуплицируются с сохранением порядка.
- **Описание**: Упорядоченная резервная цепочка профиля ClientHello для выборки метаданных TLS-фронт.
- **Пример**:
```toml
[censorship.tls_fetch]
profiles = ["modern_chrome_like", "compat_tls12"]
```
<a id="cfg-censorship-tls_fetch-strict_route"></a>
- `strict_route`
- **Ограничения / валидация**: `бул`.
- **Описание**: Если true и восходящий маршрут настроен, выборка TLS не закрывается из-за ошибок восходящего соединения вместо возврата к прямому TCP.
- **Пример**:
```toml
[censorship.tls_fetch]
strict_route = true
```
<a id="cfg-censorship-tls_fetch-attempt_timeout_ms"></a>
- `attempt_timeout_ms`
- **Ограничения / валидация**: Должно быть `> 0` (миллисекунды).
- **Описание**: Бюджет таймаута на одну попытку получения профиля TLS (мс).
- **Пример**:
```toml
[censorship.tls_fetch]
attempt_timeout_ms = 5000
```
<a id="cfg-censorship-tls_fetch-total_budget_ms"></a>
- `total_budget_ms`
- **Ограничения / валидация**: Должно быть `> 0` (миллисекунды).
- **Описание**: Общий бюджет настенных часов для всех попыток TLS-выборки (мс).
- **Пример**:
```toml
[censorship.tls_fetch]
total_budget_ms = 15000
```
<a id="cfg-censorship-tls_fetch-grease_enabled"></a>
- `grease_enabled`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает случайные значения в стиле GREASE в выбранных расширениях ClientHello для получения трафика.
- **Пример**:
```toml
[censorship.tls_fetch]
grease_enabled = false
```
<a id="cfg-censorship-tls_fetch-deterministic"></a>
- `deterministic`
- **Ограничения / валидация**: `бул`.
- **Описание**: Включает детерминированную случайность ClientHello для отладки/тестирования.
- **Пример**:
```toml
[censorship.tls_fetch]
deterministic = false
```
<a id="cfg-censorship-tls_fetch-profile_cache_ttl_secs"></a>
- `profile_cache_ttl_secs`
- **Ограничения / валидация**: `u64` (секунды). `0` отключает кеш.
- **Описание**: TTL для записей кэша профиля победителя, используемых путем выборки TLS.
- **Пример**:
```toml
[censorship.tls_fetch]
profile_cache_ttl_secs = 600
```
### Shape-channel hardening notes (`[censorship]`)
Эти параметры предназначены для уменьшения одного конкретного источника отпечатков пальцев во время маскировки: точного количества байтов, отправленных с прокси-сервера на «mask_host» для недействительного или пробного трафика.
Без усиления цензор часто может очень точно сопоставить входную длину зонда с длиной, наблюдаемой серверной частью (например: `5 + body_sent` на ранних путях отклонения TLS). Это создает сигнал классификатора на основе длины.
When `mask_shape_hardening = true`, Telemt pads the **client->mask** stream tail to a bucket boundary at relay shutdown:
- Сначала измеряется общее количество байтов, отправленных в маску.
- Ведро выбирается с использованием степеней двойки, начиная с «mask_shape_bucket_floor_bytes».
— Заполнение добавляется только в том случае, если общее количество байтов меньше «mask_shape_bucket_cap_bytes».
- Если байты уже превышают ограничение, дополнительное дополнение не добавляется.
Это означает, что несколько близлежащих размеров зондов объединяются в один и тот же класс размеров, наблюдаемый серверной частью, что усложняет активную классификацию.
Что каждый параметр меняет на практике:
- `mask_shape_hardening`
Включает или отключает весь этот этап формирования длины на резервном пути.
Если установлено значение «false», длина, наблюдаемая серверной частью, остается близкой к реальной длине пересылаемого зонда.
Если задано значение true, при чистом отключении реле могут добавляться случайные байты заполнения для перемещения итоговой суммы в корзину.
- `mask_shape_bucket_floor_bytes`
Устанавливает первую границу сегмента, используемую для небольших зондов.
Пример: с этажом «512» некорректный зонд, который в противном случае пересылал бы «37» байтов, может быть расширен до «512» байтов в чистом EOF.
Большие минимальные значения лучше скрывают очень маленькие зонды, но увеличивают стоимость выхода.
- `mask_shape_bucket_cap_bytes`
Устанавливает самый большой сегмент, который Telemt будет дополнять логикой сегмента.
Пример: с ограничением `4096` общее количество пересылаемых байтов `1800` может быть дополнено до `2048` или `4096` в зависимости от лестницы сегментов, но общее количество, уже превышающее `4096`, не будет дополняться дальше.
Большие значения ограничения увеличивают диапазон, в котором сворачиваются классы размеров, но также увеличивают накладные расходы в худшем случае.
- Чистый EOF имеет значение в консервативном режиме.
В профиле по умолчанию заполнение формы намеренно консервативно: оно применяется при чистом отключении реле, а не при каждом тайм-ауте или пути утечки.
Это позволяет избежать появления новых артефактов тайм-аута, которые некоторые серверные части или тесты интерпретируют как отдельные отпечатки пальцев.
Практические компромиссы:
- Улучшена защита от отпечатков пальцев на канале размера/формы.
- Немного выше выходные накладные расходы для небольших зондов из-за заполнения.
- Поведение намеренно консервативно и включено по умолчанию.
Рекомендуемый стартовый профиль:
- `mask_shape_hardening = true` (default)
- `mask_shape_bucket_floor_bytes = 512`
- `mask_shape_bucket_cap_bytes = 4096`
### Aggressive mode notes (`[censorship]`)
«mask_shape_hardening_aggressive_mode» — это дополнительный профиль для более высокого давления антиклассификатора.
- По умолчанию установлено значение «false», чтобы сохранить консервативное поведение по тайм-ауту/без хвоста.
- Requires `mask_shape_hardening = true`.
- Если этот параметр включен, могут формироваться бесшумные пути маскировки без EOF.
- При включении вместе с размытием над верхним пределом случайный дополнительный хвост использует `[1, max]` вместо `[0, max]`.
Что меняется при включении агрессивного режима:
- Могут быть сформированы пути тайм-аута, не требующие бэкенда.
В режиме по умолчанию клиент, который держит сокет полуоткрытым и имеет тайм-аут, обычно не будет получать заполнение формы по этому пути.
В агрессивном режиме Telemt все равно может формировать этот сеанс без звука, если никакие байты серверной части не были возвращены.
Это специально предназначено для активных зондов, которые пытаются избежать EOF, чтобы сохранить точную наблюдаемую длину.
- Размытие над заглавной буквой всегда добавляет хотя бы один байт.
В режиме по умолчанию для размытия над пределом может быть выбрано значение «0», поэтому некоторые зонды слишком большого размера по-прежнему попадают на точную базовую длину пересылки.
В агрессивном режиме эта базовая выборка удаляется автоматически.
- Компромисс
Агрессивный режим повышает устойчивость к активным классификаторам длины, но он более упрям ​​и менее консервативен.
Если в вашем развертывании приоритетом является строгая совместимость с семантикой тайм-аута/без хвоста, оставьте ее отключенной.
Если ваша модель угроз включает в себя повторяющиеся активные проверки цензором, этот режим является более сильным профилем.
Используйте этот режим только в том случае, если ваша модель угроз отдает приоритет устойчивости классификатора над строгой совместимостью с консервативной семантикой маскировки.
### Above-cap blur notes (`[censorship]`)
«mask_shape_above_cap_blur» добавляет размытие второго этапа для очень больших зондов, которые уже находятся выше «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» консервативным, чтобы избежать ненужного роста выходного сигнала.
Операционное значение:
- Без размытия над шапкой
Зонд, который пересылает 5005 байтов, по-прежнему будет выглядеть как 5005 байт на серверную часть, если он уже превышает ограничение.
- С включенным размытием над шапкой
Тот же самый зонд может выглядеть как любое значение в ограниченном окне, превышающем его базовую длину.
Example with `mask_shape_above_cap_blur_max_bytes = 64`:
наблюдаемый на сервере размер становится «5005..5069» в режиме по умолчанию или «5006..5069» в агрессивном режиме.
- Выбор `mask_shape_above_cap_blur_max_bytes`
Небольшие значения снижают затраты, но сохраняют большую степень разделения между удаленными друг от друга негабаритными классами.
Большие значения размывают слишком большие классы более агрессивно, но добавляют больше исходящих издержек и большую дисперсию выходных данных.
### Timing normalization envelope notes (`[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`
Если ваша серверная часть или сеть сильно ограничена в пропускной способности, сначала уменьшите ограничение. Если датчики все еще слишком различимы в вашей среде, постепенно увеличивайте минимальное значение.
## [access]
| Ключ | Тип | По умолчанию |
| --- | ---- | ------- |
| [`users`](#cfg-access-users) | `Map<String, String>` | `{"default": "000…000"}` |
| [`user_ad_tags`](#cfg-access-user_ad_tags) | `Map<String, String>` | `{}` |
| [`user_max_tcp_conns`](#cfg-access-user_max_tcp_conns) | `Map<String, usize>` | `{}` |
| [`user_max_tcp_conns_global_each`](#cfg-access-user_max_tcp_conns_global_each) | `usize` | `0` |
| [`user_expirations`](#cfg-access-user_expirations) | `Map<String, DateTime<Utc>>` | `{}` |
| [`user_data_quota`](#cfg-access-user_data_quota) | `Map<String, u64>` | `{}` |
| [`user_max_unique_ips`](#cfg-access-user_max_unique_ips) | `Map<String, usize>` | `{}` |
| [`user_max_unique_ips_global_each`](#cfg-access-user_max_unique_ips_global_each) | `usize` | `0` |
| [`user_max_unique_ips_mode`](#cfg-access-user_max_unique_ips_mode) | `"active_window"`, `"time_window"`, or `"combined"` | `"active_window"` |
| [`user_max_unique_ips_window_secs`](#cfg-access-user_max_unique_ips_window_secs) | `u64` | `30` |
| [`replay_check_len`](#cfg-access-replay_check_len) | `usize` | `65536` |
| [`replay_window_secs`](#cfg-access-replay_window_secs) | `u64` | `120` |
| [`ignore_time_skew`](#cfg-access-ignore_time_skew) | `bool` | `false` |
<a id="cfg-access-users"></a>
- `users`
- **Ограничения / валидация**: Не должно быть пустым (должен существовать хотя бы один пользователь). Каждое значение должно состоять **ровно из 32 шестнадцатеричных символов**.
- **Описание**: Карта учетных данных пользователя, используемая для аутентификации клиента. Ключи — это имена пользователей; значения являются секретами MTProxy.
- **Пример**:
```toml
[access.users]
alice = "00112233445566778899aabbccddeeff"
bob = "0123456789abcdef0123456789abcdef"
```
<a id="cfg-access-user_ad_tags"></a>
- `user_ad_tags`
- **Ограничения / валидация**: Каждое значение должно содержать **ровно 32 шестнадцатеричных символа** (тот же формат, что и `general.ad_tag`). Тег со всеми нулями разрешен, но регистрирует предупреждение.
- **Описание**: Переопределение рекламного тега спонсируемого канала для каждого пользователя. Когда у пользователя есть запись здесь, она имеет приоритет над `general.ad_tag`.
- **Пример**:
```toml
[general]
ad_tag = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
[access.user_ad_tags]
alice = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
```
<a id="cfg-access-user_max_tcp_conns"></a>
- `user_max_tcp_conns`
- **Ограничения / валидация**: `Карта<String, использовать>`.
- **Описание**: Максимальное количество одновременных TCP-соединений для каждого пользователя.
- **Пример**:
```toml
[access.user_max_tcp_conns]
alice = 500
```
<a id="cfg-access-user_max_tcp_conns_global_each"></a>
- `user_max_tcp_conns_global_each`
- **Ограничения / валидация**: `использовать`. `0` отключает унаследованный лимит.
- **Описание**: Глобальное максимальное количество одновременных TCP-соединений для каждого пользователя, применяется, когда у пользователя **нет положительной** записи в `[access.user_max_tcp_conns]` (отсутствующий ключ или значение `0` подпадают под этот параметр). Ограничения на пользователя, превышающие «0» в «user_max_tcp_conns», имеют приоритет.
- **Пример**:
```toml
[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
```
<a id="cfg-access-user_expirations"></a>
- `user_expirations`
- **Ограничения / валидация**: `Карта<String, DateTime<Utc>>`. Каждое значение должно быть допустимой датой и временем RFC3339/ISO-8601.
- **Описание**: Временные метки истечения срока действия учетной записи пользователя (UTC).
- **Пример**:
```toml
[access.user_expirations]
alice = "2026-12-31T23:59:59Z"
```
<a id="cfg-access-user_data_quota"></a>
- `user_data_quota`
- **Ограничения / валидация**: `Карта<String, u64>`.
- **Описание**: Квота трафика на пользователя в байтах.
- **Пример**:
```toml
[access.user_data_quota]
alice = 1073741824 # 1 GiB
```
<a id="cfg-access-user_max_unique_ips"></a>
- `user_max_unique_ips`
- **Ограничения / валидация**: `Карта<String, использовать>`.
- **Описание**: Ограничения на уникальные исходные IP-адреса для каждого пользователя.
- **Пример**:
```toml
[access.user_max_unique_ips]
alice = 16
```
<a id="cfg-access-user_max_unique_ips_global_each"></a>
- `user_max_unique_ips_global_each`
- **Ограничения / валидация**: `использовать`. `0` отключает унаследованный лимит.
- **Описание**: Глобальный лимит уникального IP-адреса для каждого пользователя применяется, когда у пользователя нет индивидуального переопределения в `[access.user_max_unique_ips]`.
- **Пример**:
```toml
[access]
user_max_unique_ips_global_each = 8
```
<a id="cfg-access-user_max_unique_ips_mode"></a>
- `user_max_unique_ips_mode`
- **Ограничения / валидация**: Должно быть одно из «active_window», «time_window», «combined».
- **Описание**: Режим учета лимита уникальных IP-адресов источника.
- **Пример**:
```toml
[access]
user_max_unique_ips_mode = "active_window"
```
<a id="cfg-access-user_max_unique_ips_window_secs"></a>
- `user_max_unique_ips_window_secs`
- **Ограничения / валидация**: Должно быть `> 0`.
- **Описание**: Размер окна (в секундах), используемый режимами учета уникальных IP-адресов, включающими временное окно («time_window» и «комбинированный»).
- **Пример**:
```toml
[access]
user_max_unique_ips_window_secs = 30
```
<a id="cfg-access-replay_check_len"></a>
- `replay_check_len`
- **Ограничения / валидация**: `использовать`.
- **Описание**: Длина хранилища для защиты от повторения (количество записей, отслеживаемых на предмет обнаружения дубликатов).
- **Пример**:
```toml
[access]
replay_check_len = 65536
```
<a id="cfg-access-replay_window_secs"></a>
- `replay_window_secs`
- **Ограничения / валидация**: `u64`.
- **Описание**: Временное окно защиты от повтора в секундах.
- **Пример**:
```toml
[access]
replay_window_secs = 120
```
<a id="cfg-access-ignore_time_skew"></a>
- `ignore_time_skew`
- **Ограничения / валидация**: `бул`.
- **Описание**: Отключает проверку перекоса временных меток клиента и сервера при проверке воспроизведения, если она включена.
- **Пример**:
```toml
[access]
ignore_time_skew = false
```
## [[upstreams]]
| Ключ | Тип | По умолчанию |
| --- | ---- | ------- |
| [`type`](#cfg-upstreams-type) | `"direct"`, `"socks4"`, `"socks5"`, or `"shadowsocks"` | — |
| [`weight`](#cfg-upstreams-weight) | `u16` | `1` |
| [`enabled`](#cfg-upstreams-enabled) | `bool` | `true` |
| [`scopes`](#cfg-upstreams-scopes) | `String` | `""` |
| [`interface`](#cfg-upstreams-interface) | `String` | — |
| [`bind_addresses`](#cfg-upstreams-bind_addresses) | `String[]` | — |
| [`url`](#cfg-upstreams-url) | `String` | — |
| [`address`](#cfg-upstreams-address) | `String` | — |
| [`user_id`](#cfg-upstreams-user_id) | `String` | — |
| [`username`](#cfg-upstreams-username) | `String` | — |
| [`password`](#cfg-upstreams-password) | `String` | — |
<a id="cfg-upstreams-type"></a>
- `type`
- **Ограничения / валидация**: Обязательное поле. Должен быть одним из: `"direct"`, `"socks4"`, `"socks5"`, `"shadowsocks"`.
- **Описание**: Выбирает реализацию восходящего транспорта для этой записи `[[upstreams]]`.
- **Пример**:
```toml
[[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"
```
<a id="cfg-upstreams-weight"></a>
- `weight`
- **Ограничения / валидация**: `u16` (0..=65535).
- **Описание**: Базовый вес, используемый взвешенно-случайным выбором в восходящем направлении (выше = выбирается чаще).
- **Пример**:
```toml
[[upstreams]]
type = "direct"
weight = 10
```
<a id="cfg-upstreams-enabled"></a>
- `enabled`
- **Ограничения / валидация**: `бул`.
- **Описание**: Если установлено значение false, эта запись игнорируется и не используется для выбора в восходящем направлении.
- **Пример**:
```toml
[[upstreams]]
type = "socks5"
address = "127.0.0.1:9050"
enabled = false
```
<a id="cfg-upstreams-scopes"></a>
- `scopes`
- **Ограничения / валидация**: `Строка`. Список, разделенный запятыми; пробелы обрезаются во время сопоставления.
- **Описание**: Теги области, используемые для восходящей фильтрации на уровне запроса. Если в запросе указана область, могут быть выбраны только восходящие потоки, чьи `области` содержат этот тег. Если в запросе не указана область, допускаются только восходящие потоки с пустыми «областями».
- **Пример**:
```toml
[[upstreams]]
type = "socks4"
address = "10.0.0.10:1080"
scopes = "me, fetch, dc2"
```
<a id="cfg-upstreams-interface"></a>
- `interface`
- **Ограничения / валидация**: `Строка` (необязательно).
- Для «прямого»: может быть IP-адрес (используемый как явная локальная привязка) или имя интерфейса ОС (преобразующееся в IP-адрес во время выполнения; только для Unix).
- Для `"socks4"`/`"socks5"`: поддерживается только тогда, когда `address` является литералом`IP:port`; когда `address` является именем хоста, привязка интерфейса игнорируется.
- Для `"shadowsocks"`: передается в коннектор Shadowsocks как необязательная подсказка для исходящей привязки.
- **Описание**: Необязательный исходящий интерфейс/подсказка локальной привязки для восходящего сокета подключения.
- **Пример**:
```toml
[[upstreams]]
type = "direct"
interface = "eth0"
[[upstreams]]
type = "socks5"
address = "203.0.113.10:1080"
interface = "192.0.2.10" # explicit local bind IP
```
<a id="cfg-upstreams-bind_addresses"></a>
- `bind_addresses`
- **Ограничения / валидация**: `String[]` (необязательно). Применяется только к `type = "direct"`.
- Каждая запись должна представлять собой строку IP-адреса.
- Во время выполнения Telemt выбирает адрес, соответствующий целевому семейству (IPv4 или IPv6). Если установлен параметр «bind_addresses», и ни один из них не соответствует целевому семейству, попытка подключения не удалась.
- **Описание**: Явные локальные адреса источника для исходящих прямых TCP-подключений. Если указано несколько адресов, выбор осуществляется по кругу.
- **Пример**:
```toml
[[upstreams]]
type = "direct"
bind_addresses = ["192.0.2.10", "192.0.2.11"]
```
<a id="cfg-upstreams-url"></a>
- `url`
- **Ограничения / валидация**: Применяется только к `type = "shadowsocks"`.
- Должен быть действительный URL-адрес Shadowsocks, принятый ящиком Shadowsocks.
- Плагины Shadowsocks не поддерживаются.
- Requires `general.use_middle_proxy = false` (shadowsocks upstreams are rejected in ME mode).
- **Описание**: URL-адрес сервера Shadowsocks, используемый для подключения к Telegram через ретранслятор Shadowsocks.
- **Пример**:
```toml
[general]
use_middle_proxy = false
[[upstreams]]
type = "shadowsocks"
url = "ss://2022-blake3-aes-256-gcm:BASE64PASSWORD@127.0.0.1:8388"
```
<a id="cfg-upstreams-address"></a>
- `address`
- **Ограничения / валидация**: Требуется для `type = "socks4"` и `type = "socks5"`. Должно быть `host:port` или `ip:port`.
- **Описание**: Конечная точка прокси-сервера SOCKS, используемая для восходящих подключений.
- **Пример**:
```toml
[[upstreams]]
type = "socks5"
address = "127.0.0.1:9050"
```
<a id="cfg-upstreams-user_id"></a>
- `user_id`
- **Ограничения / валидация**: `Строка` (необязательно). Только для `type="socks4"`.
- **Описание**: Идентификатор пользователя SOCKS4 CONNECT. Примечание. Когда выбрана область запроса, Telemt может переопределить ее с помощью выбранного значения области.
- **Пример**:
```toml
[[upstreams]]
type = "socks4"
address = "127.0.0.1:1080"
user_id = "telemt"
```
<a id="cfg-upstreams-username"></a>
- `username`
- **Ограничения / валидация**: `Строка` (необязательно). Только для `type="socks5"`.
- **Описание**: Имя пользователя SOCKS5 (для аутентификации по имени пользователя и паролю). Примечание. Когда выбрана область запроса, Telemt может переопределить ее с помощью выбранного значения области.
- **Пример**:
```toml
[[upstreams]]
type = "socks5"
address = "127.0.0.1:9050"
username = "alice"
```
<a id="cfg-upstreams-password"></a>
- `password`
- **Ограничения / валидация**: `Строка` (необязательно). Только для `type="socks5"`.
- **Описание**: Пароль SOCKS5 (для аутентификации по имени пользователя и паролю). Примечание. Когда выбрана область запроса, Telemt может переопределить ее с помощью выбранного значения области.
- **Пример**:
```toml
[[upstreams]]
type = "socks5"
address = "127.0.0.1:9050"
username = "alice"
password = "secret"
```