153 KiB
Telemt-Referenz der Konfigurationsparameter
Dieses Dokument listet alle Konfigurationsschlüssel auf, die config.toml akzeptiert.
Note
Diese Referenz wurde mit Unterstützung von KI erstellt und gegen die Codebasis geprüft (Config-Schema, Default-Werte und Validierungslogik).
Warning
Die in diesem Dokument beschriebenen Konfigurationsparameter richten sich an erfahrene Nutzer und dienen dem Feintuning. Änderungen ohne klares Verständnis der jeweiligen Funktion können zu Instabilität oder anderem unerwarteten Verhalten führen. Gehen Sie entsprechend vorsichtig und auf eigenes Risiko vor.
Hot-Reloadzeigt an, ob ein geänderter Wert vom Config-Watcher ohne Prozessneustart übernommen wird;✘bedeutet, dass für den Runtime-Effekt ein Neustart erforderlich ist.
Inhaltsverzeichnis
- Schlüssel auf oberster Ebene
- logging
- general
- general.modes
- general.links
- general.telemetry
- network
- server
- server.conntrack_control
- server.api
- server.listeners
- timeouts
- censorship
- censorship.tls_fetch
- access
- upstreams
Schlüssel auf oberster Ebene
| Schlüssel | Typ | Default | Hot-Reload |
|---|---|---|---|
include |
String (Proberdirektive) |
— | ✔ |
show_link |
"*" oder String[] |
[] (ShowLink::None) |
✘ |
logging |
Tabelle | Default-Werte | ✘ |
dc_overrides |
Map<String, String or String[]> |
{} |
✘ |
default_dc |
u8 |
— (effektiver Fallback: 2 im ME-Routing) |
✘ |
beobachten |
bool |
true |
✘ |
beobachten_minutes |
u64 |
10 |
✘ |
beobachten_flush_secs |
u64 |
15 |
✘ |
beobachten_file |
String |
"cache/beobachten.txt" |
✘ |
include
-
Einschränkungen / Validierung: Muss eine einzeilige Direktive in der Form
include = "path/to/file.toml"sein. Includes werden vor dem Parsen von TOML erweitert. Die maximale Einschlusstiefe beträgt 10. -
Beschreibung: Fügt eine weitere TOML-Datei mit
include = "relative/or/absolute/path.toml"hinzu; Includes werden vor dem Parsen rekursiv verarbeitet. -
Beispiel:
include = "secrets.toml"
show_link
-
Einschränkungen / Validierung: Akzeptiert
"*"oder ein Array von Usernamen. Leeres Array bedeutet „keine anzeigen“. -
Beschreibung: Alter Link-Sichtbarkeitsselektor der obersten Ebene (
"*"für alle User oder explizite Usernamenliste). -
Beispiel:
# Links für alle konfigurierten User anzeigen show_link = "*" # oder: Links nur für ausgewählte User anzeigen # show_link = ["alice", "bob"]
dc_overrides
-
Einschränkungen / Validierung: Schlüssel muss ein positiver ganzzahliger DC-Index sein, der als String codiert ist (z. B.
"203"). Werte müssen alsSocketAddr(ip:port) geparst werden. Leere Strings werden ignoriert. -
Beschreibung: Überschreibt DC-Endpunkte für nicht standardisierte DCs; der Schlüssel ist der DC-Index als String, der Wert ist eine oder mehrere
ip:port-Adressen. -
Beispiel:
[dc_overrides] "201" = "149.154.175.50:443" "203" = ["149.154.175.100:443", "91.105.192.100:443"]
default_dc
-
Einschränkungen / Validierung: Vorgesehener Bereich ist
1..=5. Wenn der Wert außerhalb dieses Bereichs liegt, fällt die Runtime im Direct-Relay auf DC1-Verhalten zurück; Middle-End-Routing fällt auf2zurück, wenn kein Wert gesetzt ist. -
Beschreibung: Default-DC-Index, der für nicht zugeordnete, nicht standardisierte DCs verwendet wird.
-
Beispiel:
# Wenn ein Client ein unbekanntes/nicht standardisiertes DC ohne Override anfordert, # wird er an diesen Default-Cluster weitergeleitet (1..=5). default_dc = 2
[logging]
| Schlüssel | Typ | Default | Hot-Reload |
|---|---|---|---|
destination |
"stderr" / "syslog" / "file" |
"stderr" |
✘ |
path |
String |
— | ✘ |
rotation |
"never" / "minutely" / "hourly" / "daily" / "weekly" |
"never" |
✘ |
max_size_bytes |
u64 |
0 |
✘ |
max_files |
usize |
0 |
✘ |
max_age_secs |
u64 |
0 |
✘ |
logging.destination
-
Einschränkungen / Validierung: Muss
stderr,syslogoderfilesein.syslogwird nur auf Unix-Plattformen unterstützt.fileerfordertlogging.path. -
Beschreibung: Wählt das Runtime-Log-Ziel aus. CLI-Flags überschreiben diesen Wert.
-
Beispiel:
[logging] destination = "file" path = "/var/log/telemt.log"
logging.path
-
Einschränkungen / Validierung: Erforderlich, wenn
logging.destination = "file"; darf nicht leer sein. -
Beschreibung: Dateipfad, der für die File-Logging verwendet wird. Bei der Zeitrotation wird der Dateiname als rollierendes Präfix verwendet.
-
Beispiel:
[logging] destination = "file" path = "/var/log/telemt.log"
logging.rotation
-
Einschränkungen / Validierung: Muss
never,minutely,hourly,dailyoderweeklysein. -
Beschreibung: Zeitbasiertes Dateirotationsintervall.
weeklyrotiert an der sonntäglichen UTC-Grenze.neverschreibt genau auflogging.path, es sei denn, die Größenrotation ist aktiviert. -
Beispiel:
[logging] destination = "file" path = "/var/log/telemt.log" rotation = "daily"
logging.max_size_bytes
-
Einschränkungen / Validierung:
0deaktiviert die Größenrotation. -
Beschreibung: Rotiert Logdateien vor dem Schreiben des nächsten Datensatzes, wenn die aktive Datei nicht leer ist und dieser Datensatz diese Byte-Grenze überschreiten würde. Datensätze werden als Ganzes geschrieben und nicht aufgeteilt.
-
Beispiel:
[logging] destination = "file" path = "/var/log/telemt.log" max_size_bytes = 104857600
logging.max_files
-
Einschränkungen / Validierung:
0deaktiviert die zählungsbasierte Aufbewahrung. -
Beschreibung: Behält höchstens so viele übereinstimmende Logdateien, wobei die aktive Datei und die rotierten Archive gezählt werden. Die aktive Datei wird durch die Aufbewahrungsbereinigung niemals gelöscht.
-
Beispiel:
[logging] destination = "file" path = "/var/log/telemt.log" rotation = "daily" max_files = 14
logging.max_age_secs
-
Einschränkungen / Validierung:
0deaktiviert die altersbasierte Aufbewahrung. -
Beschreibung: Entfernt rotierte Logdateien, die älter als diese Anzahl von Sekunden sind, basierend auf der Dateiänderungszeit. Die aktive Datei wird durch die Aufbewahrungsbereinigung niemals gelöscht.
-
Beispiel:
[logging] destination = "file" path = "/var/log/telemt.log" rotation = "daily" max_age_secs = 1209600
[general]
data_path
-
Einschränkungen / Validierung:
String(optional). -
Beschreibung: Optionaler Runtimedatenverzeichnispfad.
-
Beispiel:
[general] data_path = "/var/lib/telemt"
quota_state_path
-
Einschränkungen / Validierung:
Path. Relative Pfade werden aus dem Arbeitsverzeichnis des Prozesses aufgelöst. -
Beschreibung: JSON-Statusdatei, die verwendet wird, um den Kontingentverbrauch pro User während der Runtime beizubehalten.
-
Beispiel:
[general] quota_state_path = "telemt.limit.json"
config_strict
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Lehnt unbekannte TOML-Schlüssel während des Ladens der Konfiguration ab. Der Start schlägt schnell fehl; Hot-Reload lehnt den neuen Snapshot ab und behält die aktuelle Konfiguration bei.
-
Beispiel:
[general] config_strict = true
prefer_ipv6
-
Einschränkungen / Validierung: Veraltet. Verwenden Sie
network.prefer. -
Beschreibung: Veraltetes Legacy-Einstellungsflag IPv6 wurde nach
network.prefermigriert. -
Beispiel:
[network] prefer = 6
fast_mode
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Ermöglicht Fast-Path-Optimierungen für die Traffic-Verarbeitung.
-
Beispiel:
[general] fast_mode = true
use_middle_proxy
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert den Transportmodus ME; Wenn
false, greift die Runtime auf direktes DC-Routing zurück. -
Beispiel:
[general] use_middle_proxy = true
proxy_secret_path
-
Einschränkungen / Validierung:
String. Wenn ausgelassen, lautet der Standardpfad"proxy-secret". Leere Werte werden von TOML/serde akzeptiert, schlagen jedoch wahrscheinlich zur Runtime fehl (ungültiger Dateipfad). -
Beschreibung: Pfad zur Telegram-Infrastruktur
proxy-secretCache-Datei, die von ME Handshake/RPC-Authentifizierung verwendet wird. Telemt versucht immer zuerst einen neuen Download vonhttps://core.telegram.org/getProxySecret(es sei denn,proxy_secret_urlist festgelegt), speichert ihn bei Erfolg auf diesem Pfad zwischen und greift bei einem Download-Fehler auf das Lesen der zwischengespeicherten Datei (beliebiges Alter) zurück. -
Beispiel:
[general] proxy_secret_path = "proxy-secret"
proxy_secret_url
-
Einschränkungen / Validierung:
String. Wenn ausgelassen, wird"https://core.telegram.org/getProxySecret"verwendet. -
Beschreibung: Optionale URL zum Abrufen der von ME Handshake/RPC-Authentifizierung verwendeten Datei
proxy-secret. Telemt versucht immer zuerst einen neuen Download von dieser URL (mit Fallback aufhttps://core.telegram.org/getProxySecret, falls nicht vorhanden). -
Beispiel:
[general] proxy_secret_url = "https://core.telegram.org/getProxySecret"
proxy_config_v4_cache_path
-
Einschränkungen / Validierung:
String. Wenn gesetzt, darf es nicht leer/nur Leerzeichen sein. -
Beschreibung: Optionaler Disk-Cache-Pfad für den Raw-Snapshot
getProxyConfig(IPv4). Beim Start versucht Telemt zunächst, einen neuen Snapshot abzurufen; Bei einem Abruffehler oder einem leeren Snapshot wird auf diese Cache-Datei zurückgegriffen, sofern vorhanden und nicht leer. -
Beispiel:
[general] proxy_config_v4_cache_path = "cache/proxy-config-v4.txt"
proxy_config_v4_url
-
Einschränkungen / Validierung:
String. Wenn ausgelassen, wird"https://core.telegram.org/getProxyConfig"verwendet. -
Beschreibung: Optionale URL zum Abrufen von Raw-
getProxyConfig(IPv4). Telemt versucht immer zuerst einen neuen Download von dieser URL (mit Fallback aufhttps://core.telegram.org/getProxyConfig, falls nicht vorhanden). -
Beispiel:
[general] proxy_config_v4_url = "https://core.telegram.org/getProxyConfig"
proxy_config_v6_cache_path
-
Einschränkungen / Validierung:
String. Wenn gesetzt, darf es nicht leer/nur Leerzeichen sein. -
Beschreibung: Optionaler Disk-Cache-Pfad für den Raw-Snapshot
getProxyConfigV6(IPv6). Beim Start versucht Telemt zunächst, einen neuen Snapshot abzurufen; Bei einem Abruffehler oder einem leeren Snapshot wird auf diese Cache-Datei zurückgegriffen, sofern vorhanden und nicht leer. -
Beispiel:
[general] proxy_config_v6_cache_path = "cache/proxy-config-v6.txt"
proxy_config_v6_url
-
Einschränkungen / Validierung:
String. Wenn ausgelassen, wird"https://core.telegram.org/getProxyConfigV6"verwendet. -
Beschreibung: Optionale URL zum Abrufen von Raw-
getProxyConfigV6(IPv6). Telemt versucht immer zuerst einen neuen Download von dieser URL (mit Fallback aufhttps://core.telegram.org/getProxyConfigV6, falls nicht vorhanden). -
Beispiel:
[general] proxy_config_v6_url = "https://core.telegram.org/getProxyConfigV6"
ad_tag
-
Einschränkungen / Validierung:
String(optional). Wenn gesetzt, müssen genau 32 Hexadezimalzeichen vorhanden sein. Ungültige Werte werden während des Ladens der Konfiguration deaktiviert. -
Beschreibung: Globaler Fallback-Sponsored-Channel
ad_tag(wird verwendet, wenn der User keine Override inaccess.user_ad_tagshat). Ein Tag, der nur aus Nullen besteht, wird akzeptiert, hat aber keine Auswirkung (und es wird davor gewarnt), bis er durch einen echten Tag von@MTProxybot. -
Beispiel:
[general] ad_tag = "00112233445566778899aabbccddeeff"
middle_proxy_nat_ip
-
Einschränkungen / Validierung:
IpAddr(optional). -
Beschreibung: Manuelle öffentliche NAT IP-Override, die bei Festlegung als ME-Adressmaterial verwendet wird.
-
Beispiel:
[general] middle_proxy_nat_ip = "203.0.113.10"
middle_proxy_nat_probe
-
Einschränkungen / Validierung:
bool. Die effektive Prüfung wird durchnetwork.stun_usebegrenzt (beinetwork.stun_use = falseist die Prüfung mit STUN deaktiviert, auch wenn dieses Flagtrueist). -
Beschreibung: Ermöglicht STUN-basierte NAT-Prüfungen zur Erkennung des öffentlichen IP:Ports, der von der ME-Schlüsselableitung in NAT-Umgebungen verwendet wird.
-
Beispiel:
[general] middle_proxy_nat_probe = true
middle_proxy_nat_stun
-
Einschränkungen / Validierung: Veraltet. Verwenden Sie
network.stun_servers. -
Beschreibung: Veralteter älterer einzelner STUN-Server für NAT-Prüfungen. Während des Ladens der Konfiguration wird es in
network.stun_serverszusammengeführt, es sei denn,network.stun_serversist explizit festgelegt. -
Beispiel:
[network] stun_servers = ["stun.l.google.com:19302"]
middle_proxy_nat_stun_servers
-
Einschränkungen / Validierung: Veraltet. Verwenden Sie
network.stun_servers. -
Beschreibung: Veraltete Legacy-STUN-Liste für NAT-Probing-Fallback. Während des Ladens der Konfiguration wird es in
network.stun_serverszusammengeführt, es sei denn,network.stun_serversist explizit festgelegt. -
Beispiel:
[network] stun_servers = ["stun.l.google.com:19302"]
stun_nat_probe_concurrency
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Maximale Anzahl paralleler STUN-Prüfungen während der NAT/öffentlichen Endpunkterkennung.
-
Beispiel:
[general] stun_nat_probe_concurrency = 8
middle_proxy_pool_size
-
Einschränkungen / Validierung:
usize. Der effektive Wert istmax(value, 1)zur Runtime (daher verhält sich0wie1). -
Beschreibung: Zielgröße des aktiven ME Writer-Pools.
-
Beispiel:
[general] middle_proxy_pool_size = 8
middle_proxy_warm_standby
-
Einschränkungen / Validierung:
usize. -
Beschreibung: Anzahl der Warm-Standby-Verbindungen ME, die vorinitialisiert bleiben.
-
Beispiel:
[general] middle_proxy_warm_standby = 16
me_init_retry_attempts
-
Einschränkungen / Validierung:
0..=1_000_000(0bedeutet unbegrenzte Wiederholungsversuche). -
Beschreibung: Startversuche für ME-Poolinitialisierung.
-
Beispiel:
[general] me_init_retry_attempts = 0
me2dc_fallback
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Ermöglicht Direct-DC Fallback, wenn ME nicht verfügbar ist. Mit
use_middle_proxy = trueöffnet der Startup zuerst das Direct-DC-Routing und verschiebt neue Sitzungen nach ME, nachdem die ME-Bereitschaft festgestellt wurde. -
Beispiel:
[general] me2dc_fallback = true
me2dc_fast
-
Einschränkungen / Validierung:
bool. Nur aktiv, wennuse_middle_proxy = trueundme2dc_fallback = true. -
Beschreibung: Schneller ME->Direct Fallback-Modus für neue Sitzungen, nachdem ME mindestens einmal bereit war. Der anfängliche Direct-First-Start-Fallback wird durch
me2dc_fallback. -
Beispiel:
[general] use_middle_proxy = true me2dc_fallback = true me2dc_fast = true
me_keepalive_enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert regelmäßige ME Keepalive-Padding-Frames.
-
Beispiel:
[general] me_keepalive_enabled = true
me_keepalive_interval_secs
-
Einschränkungen / Validierung:
u64(Sekunden). -
Beschreibung: Basis ME Keepalive-Intervall in Sekunden.
-
Beispiel:
[general] me_keepalive_interval_secs = 8
me_keepalive_jitter_secs
-
Einschränkungen / Validierung:
u64(Sekunden). -
Beschreibung: Keepalive Jitter in Sekunden, um synchronisierte Bursts zu reduzieren.
-
Beispiel:
[general] me_keepalive_jitter_secs = 2
me_keepalive_payload_random
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Zufällige Anzahl der Keepalive-Payloadbytes anstelle einer festen Null-Payload.
-
Beispiel:
[general] me_keepalive_payload_random = true
rpc_proxy_req_every
-
Einschränkungen / Validierung:
0oder innerhalb von10..=300(Sekunden). -
Beschreibung: Intervall für Service-
RPC_PROXY_REQ-Aktivitätssignale an ME (0deaktiviert). -
Beispiel:
[general] rpc_proxy_req_every = 0
me_writer_cmd_channel_capacity
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Kapazität des Befehlskanals pro Autor.
-
Beispiel:
[general] me_writer_cmd_channel_capacity = 4096
me_route_channel_capacity
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Kapazität des ME-Antwortroutenkanals pro Verbindung.
-
Beispiel:
[general] me_route_channel_capacity = 768
me_c2me_channel_capacity
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Kapazität der Befehlswarteschlange pro Client (Client-Leser -> ME Absender).
-
Beispiel:
[general] me_c2me_channel_capacity = 1024
me_c2me_send_timeout_ms
-
Einschränkungen / Validierung:
0..=60000(Millisekunden). -
Beschreibung: Maximale Wartezeit für das Einreihen von Client-Befehlen in die Warteschlange ME, wenn die Warteschlange pro Client voll ist (
0behält die veraltete unbegrenzte Wartezeit bei). -
Beispiel:
[general] me_c2me_send_timeout_ms = 4000
me_reader_route_data_wait_ms
-
Einschränkungen / Validierung:
0..=20(Millisekunden). -
Beschreibung: Begrenzte Wartezeit für die Weiterleitung von ME DATEN an die Warteschlange pro Verbindung (
0= keine Wartezeit). -
Beispiel:
[general] me_reader_route_data_wait_ms = 2
me_d2c_flush_batch_max_frames
-
Einschränkungen / Validierung: Muss innerhalb von
1..=512liegen. -
Beschreibung: Max ME->Client-Frames wurden vor dem Flush zusammengeführt.
-
Beispiel:
[general] me_d2c_flush_batch_max_frames = 32
me_d2c_flush_batch_max_bytes
-
Einschränkungen / Validierung: Muss innerhalb von
4096..=2097152(Bytes) liegen. -
Beschreibung: Max. ME->Client-Payloadbytes, die vor dem Leeren zusammengeführt werden.
-
Beispiel:
[general] me_d2c_flush_batch_max_bytes = 131072
me_d2c_flush_batch_max_delay_us
-
Einschränkungen / Validierung:
0..=5000(Mikrosekunden). -
Beschreibung: Maximale Mikrosekunden-Wartezeit für die Zusammenführung weiterer ME->Client-Frames (
0deaktiviert die zeitgesteuerte Zusammenführung). -
Beispiel:
[general] me_d2c_flush_batch_max_delay_us = 500
me_d2c_ack_flush_immediate
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Leert den Client-Writer sofort nach dem Quick-Ack-Schreiben.
-
Beispiel:
[general] me_d2c_ack_flush_immediate = true
me_quota_soft_overshoot_bytes
-
Einschränkungen / Validierung:
0..=16777216(Byte). -
Beschreibung: Zusätzliches Kontingent pro Route (Bytes) wird toleriert, bevor die schreiberseitige Kontingentdurchsetzung Routendaten löscht.
-
Beispiel:
[general] me_quota_soft_overshoot_bytes = 65536
me_d2c_frame_buf_shrink_threshold_bytes
-
Einschränkungen / Validierung: Muss innerhalb von
4096..=16777216(Bytes) liegen. -
Beschreibung: Schwellenwert für die Verkleinerung übergroßer ME->Client-Frame-Aggregationspuffer nach dem Leeren.
-
Beispiel:
[general] me_d2c_frame_buf_shrink_threshold_bytes = 262144
direct_relay_copy_buf_c2s_bytes
-
Einschränkungen / Validierung: Muss innerhalb von
4096..=1048576(Bytes) liegen. -
Beschreibung: Puffergröße für Client->DC-Richtung im direkten Relay kopieren.
-
Beispiel:
[general] direct_relay_copy_buf_c2s_bytes = 65536
direct_relay_copy_buf_s2c_bytes
-
Einschränkungen / Validierung: Muss innerhalb von
8192..=2097152(Bytes) liegen. -
Beschreibung: Puffergröße für DC->Client-Richtung im direkten Relay kopieren.
-
Beispiel:
[general] direct_relay_copy_buf_s2c_bytes = 262144
crypto_pending_buffer
-
Einschränkungen / Validierung:
usize(Byte). -
Beschreibung: Maximaler Puffer für ausstehenden Chiffretext pro Client-Writer (Byte).
-
Beispiel:
[general] crypto_pending_buffer = 262144
max_client_frame
-
Einschränkungen / Validierung:
usize(Byte). -
Beschreibung: Maximal zulässige Client-Framegröße MTProto (Byte).
-
Beispiel:
[general] max_client_frame = 16777216
desync_all_full
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Gibt vollständige forensische Krypto-Desync-Protokolle für jedes Ereignis aus.
-
Beispiel:
[general] desync_all_full = false
beobachten
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert forensische Beobachtungs-Buckets pro IP und hängt TLS JA3/JA4-Fingerprint-Snapshots an die Beobachten-Ausgabe an, sofern verfügbar.
-
Beispiel:
[general] beobachten = true
beobachten_minutes
-
Einschränkungen / Validierung: Muss
> 0(Minuten) sein. -
Beschreibung: Aufbewahrungsfenster (Minuten) für Per-IP-Beobachtungs-Buckets und speicherinterne TLS Fingerprint-Buckets.
-
Beispiel:
[general] beobachten_minutes = 10
beobachten_flush_secs
-
Einschränkungen / Validierung: Muss
> 0(Sekunden) sein. -
Beschreibung: Snapshot Spülintervall (Sekunden) für die Beobachtungsausgabedatei.
-
Beispiel:
[general] beobachten_flush_secs = 15
beobachten_file
-
Einschränkungen / Validierung: Darf nicht leer/nur Leerzeichen sein.
-
Beschreibung: Pfad der Beobachtungs-Snapshot-Ausgabedatei.
-
Beispiel:
[general] beobachten_file = "cache/beobachten.txt"
hardswap
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Ermöglicht generationsbasierte ME Hardswap-Strategie.
-
Beispiel:
[general] hardswap = true
me_warmup_stagger_enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Staggers zusätzliche ME Warmup-Zyklen, um Verbindungsspitzen zu vermeiden.
-
Beispiel:
[general] me_warmup_stagger_enabled = true
me_warmup_step_delay_ms
-
Einschränkungen / Validierung:
u64(Millisekunden). -
Beschreibung: Basisverzögerung in Millisekunden zwischen Warmup-Dial-Schritten.
-
Beispiel:
[general] me_warmup_step_delay_ms = 500
me_warmup_step_jitter_ms
-
Einschränkungen / Validierung:
u64(Millisekunden). -
Beschreibung: Zusätzliche zufällige Verzögerung in Millisekunden für Warmup-Schritte.
-
Beispiel:
[general] me_warmup_step_jitter_ms = 300
me_reconnect_max_concurrent_per_dc
-
Einschränkungen / Validierung:
u32. Der effektive Wert istmax(value, 1)zur Runtime (daher verhält sich0wie1). -
Beschreibung: Begrenzt gleichzeitige Reconnect-Worker pro DC während der Gesundheitswiederherstellung.
-
Beispiel:
[general] me_reconnect_max_concurrent_per_dc = 8
me_reconnect_backoff_base_ms
-
Einschränkungen / Validierung:
u64(Millisekunden). -
Beschreibung: Anfänglicher Reconnect-Backoff in Millisekunden.
-
Beispiel:
[general] me_reconnect_backoff_base_ms = 500
me_reconnect_backoff_cap_ms
-
Einschränkungen / Validierung:
u64(Millisekunden). -
Beschreibung: Maximale Reconnect-Backoff-Obergrenze in Millisekunden.
-
Beispiel:
[general] me_reconnect_backoff_cap_ms = 30000
me_reconnect_fast_retry_count
-
Einschränkungen / Validierung:
u32. Der effektive Wert istmax(value, 1)zur Runtime (daher verhält sich0wie1). -
Beschreibung: Sofortiges Retry-Budget, bevor langes Backoff-Verhalten angewendet wird.
-
Beispiel:
[general] me_reconnect_fast_retry_count = 16
me_single_endpoint_shadow_writers
-
Einschränkungen / Validierung: Muss innerhalb von
0..=32liegen. -
Beschreibung: Zusätzliche Reserve-Writer für DC Gruppen mit genau einem Endpunkt.
-
Beispiel:
[general] me_single_endpoint_shadow_writers = 2
me_single_endpoint_outage_mode_enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert den aggressiven Ausfallwiederherstellungsmodus für DC Gruppen mit genau einem Endpunkt.
-
Beispiel:
[general] me_single_endpoint_outage_mode_enabled = true
me_single_endpoint_outage_disable_quarantine
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Ignoriert die Endpunktquarantäne im Einzelendpunkt-Ausfallmodus.
-
Beispiel:
[general] me_single_endpoint_outage_disable_quarantine = true
me_single_endpoint_outage_backoff_min_ms
-
Einschränkungen / Validierung: Muss
> 0(Millisekunden) und<= me_single_endpoint_outage_backoff_max_mssein. -
Beschreibung: Mindestwiederverbindungs-Backoff im Single-Endpoint-Ausfallmodus.
-
Beispiel:
[general] me_single_endpoint_outage_backoff_min_ms = 250
me_single_endpoint_outage_backoff_max_ms
-
Einschränkungen / Validierung: Muss
> 0(Millisekunden) und>= me_single_endpoint_outage_backoff_min_mssein. -
Beschreibung: Maximaler Reconnect-Backoff im Single-Endpoint-Ausfallmodus.
-
Beispiel:
[general] me_single_endpoint_outage_backoff_max_ms = 3000
me_single_endpoint_shadow_rotate_every_secs
-
Einschränkungen / Validierung:
u64(Sekunden).0deaktiviert die periodische Schattenrotation. -
Beschreibung: Periodisches Shadow-Writer-Rotationsintervall für Einzelendpunkt-DC-Gruppen.
-
Beispiel:
[general] me_single_endpoint_shadow_rotate_every_secs = 900
me_floor_mode
-
Einschränkungen / Validierung:
"static"oder"adaptive". -
Beschreibung: Floor-Policy-Modus für ME Writer-Ziele.
-
Beispiel:
[general] me_floor_mode = "adaptive"
me_adaptive_floor_idle_secs
-
Einschränkungen / Validierung:
u64(Sekunden). -
Beschreibung: Die Leerlaufzeit vor der adaptiven Untergrenze kann das Ziel des Single-Endpoint-Writers verringern.
-
Beispiel:
[general] me_adaptive_floor_idle_secs = 90
me_adaptive_floor_min_writers_single_endpoint
-
Einschränkungen / Validierung: Muss innerhalb von
1..=32liegen. -
Beschreibung: Mindest-Writer-Ziel für Einzelendpunkt-DC-Gruppen im adaptiven Floor-Modus.
-
Beispiel:
[general] me_adaptive_floor_min_writers_single_endpoint = 1
me_adaptive_floor_min_writers_multi_endpoint
-
Einschränkungen / Validierung: Muss innerhalb von
1..=32liegen. -
Beschreibung: Mindest-Writer-Ziel für DC-Gruppen mit mehreren Endpunkten im adaptiven Floor-Modus.
-
Beispiel:
[general] me_adaptive_floor_min_writers_multi_endpoint = 1
me_adaptive_floor_recover_grace_secs
-
Einschränkungen / Validierung:
u64(Sekunden). -
Beschreibung: Schonfrist zum Beibehalten des Static-Floor nach der Aktivität im adaptiven Modus.
-
Beispiel:
[general] me_adaptive_floor_recover_grace_secs = 180
me_adaptive_floor_writers_per_core_total
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Globales ME-Writer-Budget pro logischem CPU-Kern im adaptiven Modus.
-
Beispiel:
[general] me_adaptive_floor_writers_per_core_total = 48
me_adaptive_floor_cpu_cores_override
-
Einschränkungen / Validierung:
u16.0verwendet die automatische Runtime-Erkennung. -
Beschreibung: Logische CPU-Kernanzahl überschreiben, die für adaptive Floor-Berechnungen verwendet wird.
-
Beispiel:
[general] me_adaptive_floor_cpu_cores_override = 0
me_adaptive_floor_max_extra_writers_single_per_core
-
Einschränkungen / Validierung:
u16. -
Beschreibung: Max. zusätzliche Writer pro Kern über der erforderlichen Baseline-Floor für Einzelendpunkt-DC-Gruppen.
-
Beispiel:
[general] me_adaptive_floor_max_extra_writers_single_per_core = 1
me_adaptive_floor_max_extra_writers_multi_per_core
-
Einschränkungen / Validierung:
u16. -
Beschreibung: Max. zusätzliche Writer pro Kern über der erforderlichen Baseline-Floor für DC-Gruppen mit mehreren Endpunkten.
-
Beispiel:
[general] me_adaptive_floor_max_extra_writers_multi_per_core = 2
me_adaptive_floor_max_active_writers_per_core
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Feste Obergrenze für aktive ME-Writer pro logischem CPU-Kern.
-
Beispiel:
[general] me_adaptive_floor_max_active_writers_per_core = 64
me_adaptive_floor_max_warm_writers_per_core
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Feste Obergrenze für warme ME-Writer pro logischem CPU-Kern.
-
Beispiel:
[general] me_adaptive_floor_max_warm_writers_per_core = 64
me_adaptive_floor_max_active_writers_global
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Feste globale Obergrenze für aktive ME-Writer.
-
Beispiel:
[general] me_adaptive_floor_max_active_writers_global = 256
me_adaptive_floor_max_warm_writers_global
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Feste globale Obergrenze für warme ME-Writer.
-
Beispiel:
[general] me_adaptive_floor_max_warm_writers_global = 256
upstream_connect_retry_attempts
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Verbindungsversuche für den ausgewählten Upstream, bevor ein Fehler/Fallback zurückgegeben wird.
-
Beispiel:
[general] upstream_connect_retry_attempts = 2
upstream_connect_retry_backoff_ms
-
Einschränkungen / Validierung:
u64(Millisekunden).0deaktiviert die Backoff-Verzögerung (Wiederholungsversuche erfolgen sofort). -
Beschreibung: Verzögerung in Millisekunden zwischen Upstream-Verbindungsversuchen.
-
Beispiel:
[general] upstream_connect_retry_backoff_ms = 100
upstream_connect_budget_ms
-
Einschränkungen / Validierung: Muss
> 0(Millisekunden) sein. -
Beschreibung: Gesamtwanduhrbudget in Millisekunden für eine Upstream-Verbindungsanforderung über mehrere Wiederholungsversuche hinweg.
-
Beispiel:
[general] upstream_connect_budget_ms = 3000
tg_connect
-
Einschränkungen / Validierung: Muss
> 0(Sekunden) sein. -
Beschreibung: Upstream Telegram-Verbindungszeitüberschreitung.
-
Beispiel:
[general] tg_connect = 10
upstream_unhealthy_fail_threshold
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Aufeinanderfolgende fehlgeschlagene Anfragen, bevor der Upstream als fehlerhaft markiert wird.
-
Beispiel:
[general] upstream_unhealthy_fail_threshold = 5
upstream_connect_failfast_hard_errors
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Wenn „true“, werden zusätzliche Wiederholungsversuche für schwere, nicht vorübergehende Upstream-Verbindungsfehler übersprungen.
-
Beispiel:
[general] upstream_connect_failfast_hard_errors = false
stun_iface_mismatch_ignore
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Kompatibilitätsflag für zukünftige Verwendung reserviert. Derzeit wird dieser Schlüssel geparst, aber nicht von der Runtime verwendet.
-
Beispiel:
[general] stun_iface_mismatch_ignore = false
unknown_dc_log_path
-
Einschränkungen / Validierung:
String(optional). Muss ein sicherer Pfad sein (keine..-Komponenten, übergeordnetes Verzeichnis muss vorhanden sein); Unsichere Pfade werden zur Runtime abgelehnt. -
Beschreibung: Logdateipfad für unbekannte (nicht standardisierte) DC-Anfragen, wenn
unknown_dc_file_log_enabled = true. Lassen Sie diesen Schlüssel weg, um die File-Logging zu deaktivieren. -
Beispiel:
[general] unknown_dc_log_path = "unknown-dc.txt"
unknown_dc_file_log_enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert die Logging unbekannter DC-Dateien (schreibt
dc_idx=<N>Zeilen). Erfordert die Einstellung vonunknown_dc_log_pathund wird auf Nicht-Unix-Plattformen möglicherweise nicht unterstützt. Die Logging erfolgt dedupliziert und begrenzt (nur die ersten ~1024 eindeutigen unbekannten DC-Indizes werden aufgezeichnet). -
Beispiel:
[general] unknown_dc_file_log_enabled = false
log_level
-
Einschränkungen / Validierung:
"debug","verbose","normal"oder"silent". -
Beschreibung: Runtime Ausführlichkeitsstufe der Logging (wird verwendet, wenn
RUST_LOGnicht festgelegt ist). WennRUST_LOGin der Umgebung festgelegt ist, hat es Vorrang vor dieser Einstellung. -
Beispiel:
[general] log_level = "normal"
disable_colors
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Deaktiviert ANSI-Farben in Protokollen (nützlich für files/systemd). Dies betrifft nur die Protokollformatierung und ändert nicht die Protokollebene/Filterung.
-
Beispiel:
[general] disable_colors = false
me_socks_kdf_policy
-
Einschränkungen / Validierung:
"strict"oder"compat". -
Beschreibung: SOCKS-gebundene KDF-Fallback-Richtlinie für Middle-End-Handshake.
-
Beispiel:
[general] me_socks_kdf_policy = "strict"
me_route_backpressure_enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Ermöglicht Kanaldruck-abhängige Routensende-Timeouts.
-
Beispiel:
[general] me_route_backpressure_enabled = false
me_route_fairshare_enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Ermöglicht die Fair-Share-Routing-Zulassung für alle Writer.
-
Beispiel:
[general] me_route_fairshare_enabled = false
me_route_backpressure_base_timeout_ms
-
Einschränkungen / Validierung: Muss innerhalb von
1..=5000(Millisekunden) liegen. -
Beschreibung: Basis-Gegendruck-Timeout in Millisekunden für ME Route-Channel-Senden.
-
Beispiel:
[general] me_route_backpressure_base_timeout_ms = 25
me_route_backpressure_high_timeout_ms
-
Einschränkungen / Validierung: Muss innerhalb von
1..=5000(Millisekunden) und>= me_route_backpressure_base_timeout_msliegen. -
Beschreibung: Zeitüberschreitung bei hohem Gegendruck in Millisekunden, wenn die Queue-Belegung über dem Watermark liegt.
-
Beispiel:
[general] me_route_backpressure_high_timeout_ms = 120
me_route_backpressure_high_watermark_pct
-
Einschränkungen / Validierung: Muss innerhalb von
1..=100(Prozent) liegen. -
Beschreibung: Prozentualer Schwellenwert für die Queue-Belegung für den Wechsel zum Zeitlimit für hohen Gegendruck.
-
Beispiel:
[general] me_route_backpressure_high_watermark_pct = 80
me_health_interval_ms_unhealthy
-
Einschränkungen / Validierung: Muss
> 0(Millisekunden) sein. -
Beschreibung: Integritätsüberwachungsintervall, während die Writer-Abdeckung von ME herabgesetzt ist.
-
Beispiel:
[general] me_health_interval_ms_unhealthy = 1000
me_health_interval_ms_healthy
-
Einschränkungen / Validierung: Muss
> 0(Millisekunden) sein. -
Beschreibung: Integritätsüberwachungsintervall, während die ME Writer-Abdeckung stabil/fehlerfrei ist.
-
Beispiel:
[general] me_health_interval_ms_healthy = 3000
me_admission_poll_ms
-
Einschränkungen / Validierung: Muss
> 0(Millisekunden) sein. -
Beschreibung: Abfrageintervall für Statusprüfungen bei bedingter Zulassung.
-
Beispiel:
[general] me_admission_poll_ms = 1000
me_warn_rate_limit_ms
-
Einschränkungen / Validierung: Muss
> 0(Millisekunden) sein. -
Beschreibung: Abklingzeit für sich wiederholende ME-Warnungsprotokolle.
-
Beispiel:
[general] me_warn_rate_limit_ms = 5000
me_route_no_writer_mode
-
Einschränkungen / Validierung:
"async_recovery_failfast","inline_recovery_legacy"oder"hybrid_async_persistent". -
Beschreibung: ME Routenverhalten, wenn kein Writer sofort verfügbar ist.
-
Beispiel:
[general] me_route_no_writer_mode = "hybrid_async_persistent"
me_route_no_writer_wait_ms
-
Einschränkungen / Validierung: Muss innerhalb von
10..=5000(Millisekunden) liegen. -
Beschreibung: Maximale Wartezeit, die vom Async-Recovery-Failfast-Modus verwendet wird, bevor ein Rückfall erfolgt.
-
Beispiel:
[general] me_route_no_writer_wait_ms = 250
me_route_hybrid_max_wait_ms
-
Einschränkungen / Validierung: Muss innerhalb von
50..=60000(Millisekunden) liegen. -
Beschreibung: Maximale kumulative Wartezeit im Hybrid-No-Writer-Modus vor Failfast-Fallback.
-
Beispiel:
[general] me_route_hybrid_max_wait_ms = 3000
me_route_blocking_send_timeout_ms
-
Einschränkungen / Validierung: Muss innerhalb von
0..=5000(Millisekunden) liegen.0behält das alte unbegrenzte Warteverhalten bei. -
Beschreibung: Maximale Wartezeit für das Blockieren des Route-Channel-Sende-Fallbacks.
-
Beispiel:
[general] me_route_blocking_send_timeout_ms = 250
me_route_inline_recovery_attempts
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Anzahl der Inline-Wiederherstellungsversuche im Legacy-Modus.
-
Beispiel:
[general] me_route_inline_recovery_attempts = 3
me_route_inline_recovery_wait_ms
-
Einschränkungen / Validierung: Muss innerhalb von
10..=30000(Millisekunden) liegen. -
Beschreibung: Maximale Inline-Wiederherstellungswartezeit im Legacy-Modus.
-
Beispiel:
[general] me_route_inline_recovery_wait_ms = 3000
fast_mode_min_tls_record
-
Einschränkungen / Validierung:
usize(Byte).0deaktiviert das Limit. -
Beschreibung: Minimale TLS-Datensatzgröße, wenn die Zusammenführung im Schnellmodus aktiviert ist.
-
Beispiel:
[general] fast_mode_min_tls_record = 0
update_every
-
Einschränkungen / Validierung:
u64(Sekunden). Wenn gesetzt, muss> 0sein. Wenn dieser Schlüssel nicht explizit festgelegt ist, können die alten Versionenproxy_secret_auto_reload_secsundproxy_config_auto_reload_secsverwendet werden (ihr effektives Minimum muss> 0sein). -
Beschreibung: Einheitliches Aktualisierungsintervall für ME Updater-Aufgaben (
getProxyConfig,getProxyConfigV6,getProxySecret). Wenn es festgelegt ist, überschreibt es die Neuladeintervalle des Legacy-Proxys. -
Beispiel:
[general] update_every = 300
me_reinit_every_secs
-
Einschränkungen / Validierung: Muss
> 0(Sekunden) sein. -
Beschreibung: Periodisches Intervall für einen Reinitialisierungszyklus ohne Ausfallzeit ME.
-
Beispiel:
[general] me_reinit_every_secs = 900
me_hardswap_warmup_delay_min_ms
-
Einschränkungen / Validierung:
u64(Millisekunden). Muss<= me_hardswap_warmup_delay_max_mssein. -
Beschreibung: Untergrenze für den Hardswap-Warmup-Dial-Abstand.
-
Beispiel:
[general] me_hardswap_warmup_delay_min_ms = 1000
me_hardswap_warmup_delay_max_ms
-
Einschränkungen / Validierung: Muss
> 0(Millisekunden) sein. -
Beschreibung: Obergrenze für den Hardswap-Warmup-Dial-Abstand.
-
Beispiel:
[general] me_hardswap_warmup_delay_max_ms = 2000
me_hardswap_warmup_extra_passes
-
Einschränkungen / Validierung: Muss innerhalb von
[0, 10]liegen. -
Beschreibung: Zusätzliche Warmup-Passes nach dem Basispass in einem Hardswap-Zyklus.
-
Beispiel:
[general] # Standard: 3 (erlaubter Bereich: 0..=10) me_hardswap_warmup_extra_passes = 3
me_hardswap_warmup_pass_backoff_base_ms
-
Einschränkungen / Validierung:
u64(Millisekunden). Muss> 0sein. -
Beschreibung: Basis-Backoff zwischen zusätzlichen Hardswap-Warmup-Passes, wenn der Floor noch unvollständig ist.
-
Beispiel:
[general] # Standard: 500 me_hardswap_warmup_pass_backoff_base_ms = 500
me_config_stable_snapshots
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Anzahl identischer ME Config-Snapshots, die vor der Anwendung erforderlich sind.
-
Beispiel:
[general] # erfordern drei identische Snapshots, bevor ME Endpunktkartenaktualisierungen angewendet werden me_config_stable_snapshots = 3
me_config_apply_cooldown_secs
-
Einschränkungen / Validierung:
u64. -
Beschreibung: Abklingzeit zwischen angewendeten ME Endpoint-Map-Updates.
0deaktiviert die Abklingzeit. -
Beispiel:
[general] # erlaubt die sofortige Anwendung stabiler Snapshots (keine Abklingzeit) me_config_apply_cooldown_secs = 0
me_snapshot_require_http_2xx
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Erfordert 2xx HTTP-Antworten zum Anwenden von ME-Config-Snapshots. Bei
falsekönnen Nicht-2xx-Antworten weiterhin vom Updater geparst/berücksichtigt werden. -
Beispiel:
[general] # ermöglicht das Anwenden von Snapshots, auch wenn der HTTP-Status nicht 2xx ist me_snapshot_require_http_2xx = false
me_snapshot_reject_empty_map
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Lehnt leere ME-Config-Snapshots ab (keine Endpunkte). Bei
falsekann ein leerer Snapshot angewendet werden (vorbehaltlich anderer Gates), wodurch die ME-Map möglicherweise vorübergehend reduziert/löscht wird. -
Beispiel:
[general] # Anwenden leerer Snapshots zulassen (mit Vorsicht verwenden) me_snapshot_reject_empty_map = false
me_snapshot_min_proxy_for_lines
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Mindestens geparste
proxy_forZeilen erforderlich, um Snapshots zu akzeptieren. -
Beispiel:
[general] # erfordern mindestens 10 Proxy_for-Zeilen, bevor ein Snapshot akzeptiert wird me_snapshot_min_proxy_for_lines = 10
proxy_secret_stable_snapshots
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Anzahl identischer Proxy-Secret-Snapshots, die vor der Rotation erforderlich sind.
-
Beispiel:
[general] # erfordern zwei identische getProxySecret-Snapshots, bevor sie zur Runtime rotieren proxy_secret_stable_snapshots = 2
proxy_secret_rotate_runtime
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Ermöglicht die Rotation von Proxy-Geheimnissen zur Runtime aus Updater-Snapshots.
-
Beispiel:
[general] # Deaktivieren Sie die Proxy-Secret-Rotation zur Runtime (Start verwendet weiterhin Proxy_secret_path/proxy_secret_len_max) proxy_secret_rotate_runtime = false
me_secret_atomic_snapshot
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Behält Selektor- und Secret-Bytes atomar aus demselben Snapshot. Bei
general.use_middle_proxy = truewird dies beim Laden der Konfiguration automatisch aktiviert, um die Kohärenz des ME KDF-Materials zu gewährleisten. -
Beispiel:
[general] # HINWEIS: Wenn use_middle_proxy=true, wird Telemt dies beim Laden automatisch aktivieren me_secret_atomic_snapshot = false
proxy_secret_len_max
-
Einschränkungen / Validierung: Muss innerhalb von
[32, 4096]liegen. -
Beschreibung: Obere Längenbeschränkung (Byte) für akzeptiertes Proxy-Geheimnis während des Starts und der Runtimeaktualisierung.
-
Beispiel:
[general] # Standard: 256 (Byte) proxy_secret_len_max = 256
me_pool_drain_ttl_secs
-
Einschränkungen / Validierung:
u64(Sekunden).0deaktiviert das Drain-TTL-Fenster (und unterdrückt Drain-TTL-Warnungen für nicht leere Draining-Writer). -
Beschreibung: Drain-TTL-Zeitfenster für stale ME-Writer nach Änderungen der Endpoint-Map. Während der TTL dürfen stale Writer nur als Fallback für neue Bindungen verwendet werden (abhängig von der Bindungsrichtlinie).
-
Beispiel:
[general] # Drain TTL deaktivieren (Draining Writer geben keine „Past Drain TTL“-Warnungen aus) me_pool_drain_ttl_secs = 0
me_instadrain
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Erzwingt, dass stale Writer beim nächsten Bereinigungsschritt entfernt werden, wodurch die TTL/Deadline-Wartezeit umgangen wird.
-
Beispiel:
[general] # Standard: false me_instadrain = false
me_pool_drain_threshold
-
Einschränkungen / Validierung:
u64. Auf0setzen, um die schwellenwertbasierte Bereinigung zu deaktivieren. -
Beschreibung: Maximale Anzahl stale Writer, bevor die ältesten stapelweise geschlossen werden.
-
Beispiel:
[general] # default: 32 me_pool_drain_threshold = 32
me_pool_drain_soft_evict_enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Ermöglicht schrittweise Soft-Eviction von stale Writern während des Drain/Reinit anstelle eines sofortigen harten Schließens.
-
Beispiel:
[general] # default: true me_pool_drain_soft_evict_enabled = true
me_pool_drain_soft_evict_grace_secs
-
Einschränkungen / Validierung:
u64(seconds). Must be within[0, 3600]. -
Beschreibung: Zusätzliche Grace nach der Drain-TTL, bevor die Soft-Eviction-Phase beginnt.
-
Beispiel:
[general] # default: 10 me_pool_drain_soft_evict_grace_secs = 10
me_pool_drain_soft_evict_per_writer
-
Einschränkungen / Validierung:
1..=16. -
Beschreibung: Maximale Anzahl stale Routes, die pro Writer in einem Eviction-Pass soft-evicted werden.
-
Beispiel:
[general] # default: 2 me_pool_drain_soft_evict_per_writer = 2
me_pool_drain_soft_evict_budget_per_core
-
Einschränkungen / Validierung:
1..=64. -
Beschreibung: Budget pro Kern begrenzt die gesamte Soft-Eviction-Arbeit pro Durchgang.
-
Beispiel:
[general] # default: 16 me_pool_drain_soft_evict_budget_per_core = 16
me_pool_drain_soft_evict_cooldown_ms
-
Einschränkungen / Validierung:
u64(Millisekunden). Muss> 0sein. -
Beschreibung: Cooldown zwischen wiederholter Soft-Eviction auf demselben Writer.
-
Beispiel:
[general] # default: 1000 me_pool_drain_soft_evict_cooldown_ms = 1000
me_bind_stale_mode
-
Einschränkungen / Validierung:
"never","ttl"oder"always". -
Beschreibung: Policy für neue Binds auf stale draining Writern.
-
Beispiel:
[general] # veraltete Bindungen nur für ein begrenztes Zeitfenster zulassen me_bind_stale_mode = "ttl"
me_bind_stale_ttl_secs
-
Einschränkungen / Validierung:
u64. -
Beschreibung: TTL für stale Bind-Zulassung, wenn der stale mode
ttlist. -
Beispiel:
[general] me_bind_stale_mode = "ttl" me_bind_stale_ttl_secs = 90
me_pool_min_fresh_ratio
-
Einschränkungen / Validierung: Muss innerhalb von
[0.0, 1.0]liegen. -
Beschreibung: Mindestanteil frischer Desired-DC-Coverage, bevor stale Writer gedraint werden.
-
Beispiel:
[general] # erfordern >=90 % der gewünschten DC-Abdeckung, bevor stale Writer gedraint werden me_pool_min_fresh_ratio = 0.9
me_reinit_drain_timeout_secs
-
Einschränkungen / Validierung:
u64.0verwendet das Runtime-Sicherheits-Fallback-Timeout für erzwungenes Schließen. Wenn> 0und< me_pool_drain_ttl_secs, erhöht die Runtime den Wert auf TTL. -
Beschreibung: Force-Close-Timeout für draining stale Writer. Bei der Einstellung
0entspricht das effektive Timeout dem Runtime-Safety-Fallback (300 Sekunden). -
Beispiel:
[general] # Runtime-Safety-Fallback-Force-Close-Timeout (300 s) verwenden me_reinit_drain_timeout_secs = 0
proxy_secret_auto_reload_secs
-
Einschränkungen / Validierung: Veraltet. Verwenden Sie
general.update_every. Wenngeneral.update_everynicht explizit festgelegt ist, beträgt das effektive Legacy-Aktualisierungsintervallmin(proxy_secret_auto_reload_secs, proxy_config_auto_reload_secs)und muss> 0betragen. -
Beschreibung: Veraltetes Aktualisierungsintervall für Legacy-Proxy-Geheimnisse. Wird nur verwendet, wenn
general.update_everynicht festgelegt ist. -
Beispiel:
[general] # Legacy-Modus: update_every weglassen, um Proxy_*_auto_reload_secs zu verwenden proxy_secret_auto_reload_secs = 600 proxy_config_auto_reload_secs = 120 # effektives Aktualisierungsintervall = min(600, 120) = 120 Sekunden
proxy_config_auto_reload_secs
-
Einschränkungen / Validierung: Veraltet. Verwenden Sie
general.update_every. Wenngeneral.update_everynicht explizit festgelegt ist, beträgt das effektive Legacy-Aktualisierungsintervallmin(proxy_secret_auto_reload_secs, proxy_config_auto_reload_secs)und muss> 0betragen. -
Beschreibung: Veraltetes Legacy-Konfigurationsaktualisierungsintervall ME. Wird nur verwendet, wenn
general.update_everynicht festgelegt ist. -
Beispiel:
[general] # Legacy-Modus: update_every weglassen, um Proxy_*_auto_reload_secs zu verwenden proxy_secret_auto_reload_secs = 600 proxy_config_auto_reload_secs = 120 # effektives Aktualisierungsintervall = min(600, 120) = 120 Sekunden
me_reinit_singleflight
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Serialisiert ME Neuinitialisierungszyklen über Triggerquellen hinweg.
-
Beispiel:
[general] me_reinit_singleflight = true
me_reinit_trigger_channel
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Trigger-Queue-Kapazität für Reinit-Planer.
-
Beispiel:
[general] me_reinit_trigger_channel = 64
me_reinit_coalesce_window_ms
-
Einschränkungen / Validierung:
u64. -
Beschreibung: Zusammenführungsfenster auslösen, bevor Reinit gestartet wird (ms).
-
Beispiel:
[general] me_reinit_coalesce_window_ms = 200
me_deterministic_writer_sort
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Ermöglicht die deterministische Kandidatensortierung für den Writer-Bindungspfad.
-
Beispiel:
[general] me_deterministic_writer_sort = true
me_writer_pick_mode
-
Einschränkungen / Validierung:
"sorted_rr"oder"p2c". -
Beschreibung: Writer-Auswahlmodus für Routenbindungspfad.
-
Beispiel:
[general] me_writer_pick_mode = "p2c"
me_writer_pick_sample_size
-
Einschränkungen / Validierung:
2..=4. -
Beschreibung: Anzahl der Kandidaten, die vom Picker im
p2c-Modus ausgewählt wurden. -
Beispiel:
[general] me_writer_pick_mode = "p2c" me_writer_pick_sample_size = 3
ntp_check
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Reserviert für zukünftige Verwendung. Derzeit wird dieser Schlüssel geparst, aber nicht von der Runtime verwendet.
-
Beispiel:
[general] ntp_check = true
ntp_servers
-
Einschränkungen / Validierung:
String[]. -
Beschreibung: Reserviert für zukünftige Verwendung. Derzeit wird dieser Schlüssel geparst, aber nicht von der Runtime verwendet.
-
Beispiel:
[general] ntp_servers = ["pool.ntp.org"]
auto_degradation_enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Reserviert für zukünftige Verwendung. Derzeit wird dieser Schlüssel geparst, aber nicht von der Runtime verwendet.
-
Beispiel:
[general] auto_degradation_enabled = true
degradation_min_unavailable_dc_groups
-
Einschränkungen / Validierung:
u8. -
Beschreibung: Reserviert für zukünftige Verwendung. Derzeit wird dieser Schlüssel geparst, aber nicht von der Runtime verwendet.
-
Beispiel:
[general] degradation_min_unavailable_dc_groups = 2
rst_on_close
-
Einschränkungen / Validierung: einer von
"off","errors","always". -
Beschreibung: Steuert das
SO_LINGER(0)-Verhalten auf akzeptierten Client-TCP-Sockets. Proxyserver mit hohem Traffic sammelnFIN-WAIT-1und verwaiste Sockets von Verbindungen an, die den Telegram-Handshake nie abschließen (Scanner, DPI-Probes, Bots). Diese Option ermöglicht das Senden eines sofortigenRSTanstelle eines ordnungsgemäßenFINfür solche Verbindungen, wodurch Kernelressourcen sofort freigegeben werden. –"off"– Standard. NormalFINbei allen Schließungen; Keine Verhaltensänderung. –"errors"–SO_LINGER(0)ist aufaccept()festgelegt. Wenn der Client die Authentifizierung erfolgreich abschließt, wird die Verzögerung gelöscht und die Relay-Sitzung wird ordnungsgemäß mitFINgeschlossen. Verbindungen, die vor Abschluss des Handshakes geschlossen wurden (Zeitüberschreitungen, fehlerhafte Verschlüsselung, Scanner), sendenRST. –"always"–SO_LINGER(0)ist aufaccept()festgelegt und wird nie gelöscht. Alle Schließungen sendenRSTunabhängig vom Handshake-Ergebnis. -
Beispiel:
[general] rst_on_close = "errors"
[general.modes]
| Schlüssel | Typ | Default | Hot-Reload |
|---|---|---|---|
classic |
bool |
false |
✘ |
secure |
bool |
false |
✘ |
tls |
bool |
true |
✘ |
classic
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert den klassischen MTProxy-Modus.
-
Beispiel:
[general.modes] classic = true
secure
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert den sicheren Modus.
-
Beispiel:
[general.modes] secure = true
tls
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert den TLS-Modus.
-
Beispiel:
[general.modes] tls = true
[general.links]
| Schlüssel | Typ | Default | Hot-Reload |
|---|---|---|---|
show |
"*" oder String[] |
"*" |
✘ |
public_host |
String |
— | ✘ |
public_port |
u16 |
— | ✘ |
show
-
Einschränkungen / Validierung:
"*"oderString[]. Ein leeres Array bedeutet „keine anzeigen“. -
Beschreibung: Wählt User aus, deren
tg://Proxy-Links beim Start angezeigt werden. -
Beispiel:
[general.links] show = "*" # oder: # show = ["alice", "bob"]
public_host
-
Einschränkungen / Validierung:
String(optional). -
Beschreibung: Öffentliche Hostname-/IP-Override, die für generierte
tg://-Links verwendet wird (überschreibt erkannte IP). -
Beispiel:
[general.links] public_host = "proxy.example.com"
public_port
-
Einschränkungen / Validierung:
u16(optional). -
Beschreibung: Override des öffentlichen Ports, die für generierte
tg://-Links verwendet wird (überschreibtserver.port). -
Beispiel:
[general.links] public_port = 443
[general.telemetry]
| Schlüssel | Typ | Default | Hot-Reload |
|---|---|---|---|
core_enabled |
bool |
true |
✔ |
user_enabled |
bool |
true |
✔ |
me_level |
"silent", "normal" oder "debug" |
"normal" |
✔ |
core_enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert Kern-Hot-Path-Telemetriezähler.
-
Beispiel:
[general.telemetry] core_enabled = true
user_enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert Telemetriezähler pro User.
-
Beispiel:
[general.telemetry] user_enabled = true
me_level
-
Einschränkungen / Validierung:
"silent","normal"oder"debug". -
Beschreibung: Middle-End Ausführlichkeitsgrad der Telemetrie.
-
Beispiel:
[general.telemetry] me_level = "normal"
[network]
| Schlüssel | Typ | Default | Hot-Reload |
|---|---|---|---|
ipv4 |
bool |
true |
✘ |
ipv6 |
bool |
false |
✘ |
prefer |
u8 |
4 |
✘ |
multipath |
bool |
false |
✘ |
stun_use |
bool |
true |
✘ |
stun_servers |
String[] |
Integrierte STUN-Liste (13 Hosts) | ✘ |
stun_tcp_fallback |
bool |
true |
✘ |
http_ip_detect_urls |
String[] |
["https://ifconfig.me/ip", "https://api.ipify.org"] |
✘ |
cache_public_ip_path |
String |
"cache/public_ip.txt" |
✘ |
dns_overrides |
String[] |
[] |
✔ |
ipv4
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert IPv4 Netzwerk.
-
Beispiel:
[network] ipv4 = true
ipv6
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert/deaktiviert IPv6 Netzwerk. Wenn ausgelassen, wird standardmäßig
false. -
Beispiel:
[network] # IPv6 explizit aktivieren ipv6 = true # oder: IPv6 explizit deaktivieren # ipv6 = false
prefer
-
Einschränkungen / Validierung: Muss
4oder6sein. Wennprefer = 4währendipv4 = false, erzwingt Telemtprefer = 6. Wennprefer = 6währendipv6 = false, erzwingt Telemtprefer = 4. -
Beschreibung: Bevorzugte IP-Familie zur Auswahl, wenn beide Familien verfügbar sind.
-
Beispiel:
[network] prefer = 6
multipath
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Ermöglicht Multipath-Verhalten, sofern von der Plattform und der Runtime unterstützt.
-
Beispiel:
[network] multipath = true
stun_use
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Globaler STUN-Schalter; Wenn
false, ist die STUN-Prüfung deaktiviert und es bleibt nur die Nicht-STUN-Erkennung übrig. -
Beispiel:
[network] stun_use = false
stun_servers
-
Einschränkungen / Validierung:
String[]. Werte werden gekürzt; leere Werte werden entfernt; Liste ist dedupliziert. Wenn dieser Schlüssel nicht explizit festgelegt ist, behält Telemt die integrierte Standardliste STUN bei. -
Beschreibung: STUN Serverliste für öffentliche IP-Erkennung.
-
Beispiel:
[network] stun_servers = [ "stun.l.google.com:19302", "stun.stunprotocol.org:3478", ]
stun_tcp_fallback
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert TCP Fallback für STUN, wenn der UDP-Pfad blockiert/nicht verfügbar ist.
-
Beispiel:
[network] stun_tcp_fallback = true
http_ip_detect_urls
-
Einschränkungen / Validierung:
String[]. -
Beschreibung: HTTP Endpunkte, die für die öffentliche IP-Erkennung verwendet werden (Fallback nach STUN).
-
Beispiel:
[network] http_ip_detect_urls = ["https://ifconfig.me/ip", "https://api.ipify.org"]
cache_public_ip_path
-
Einschränkungen / Validierung:
String. -
Beschreibung: Dateipfad, der zum Zwischenspeichern der erkannten öffentlichen IP verwendet wird.
-
Beispiel:
[network] cache_public_ip_path = "cache/public_ip.txt"
dns_overrides
-
Einschränkungen / Validierung:
String[]. Jeder Eintrag muss das Formathost:port:ipverwenden. –host: Domänenname (darf nicht leer sein und darf nicht:enthalten) –port:u16–ip: IPv4 (1.2.3.4) oder in Klammern IPv6 ([2001:db8::1]). Ungeklammertes IPv6 wird abgelehnt. -
Beschreibung: Runtime DNS-Overrideen für
host:port-Ziele. Nützlich, um bestimmte IP-Adressen für bestimmte Upstream-Domänen zu erzwingen, ohne das System-DNS zu berühren. -
Beispiel:
[network] dns_overrides = [ "example.com:443:127.0.0.1", "example.net:8443:[2001:db8::10]", ]
[server]
| Schlüssel | Typ | Default | Hot-Reload |
|---|---|---|---|
port |
u16 |
443 |
✘ |
listen_addr_ipv4 |
String |
"0.0.0.0" |
✘ |
listen_addr_ipv6 |
String |
"::" |
✘ |
listen_unix_sock |
String |
— | ✘ |
listen_unix_sock_perm |
String |
— | ✘ |
listen_tcp |
bool |
— (automatisch) | ✘ |
client_mss |
String |
"" |
✘ |
client_mss_bulk |
String |
"" |
✘ |
proxy_protocol |
bool |
false |
✘ |
proxy_protocol_header_timeout_ms |
u64 |
500 |
✘ |
proxy_protocol_trusted_cidrs |
IpNetwork[] |
[] |
✘ |
metrics_port |
u16 |
— | ✘ |
metrics_listen |
String |
— | ✘ |
metrics_whitelist |
IpNetwork[] |
["127.0.0.1/32", "::1/128"] |
✘ |
api |
Table |
integrierte Standardeinstellungen | ✘ |
admin_api |
Table |
Alias für api |
✘ |
listeners |
Table[] |
abgeleitet von Legacy-Listener-Feldern | ✘ |
max_connections |
u32 |
10000 |
✘ |
accept_permit_timeout_ms |
u64 |
250 |
✘ |
listen_backlog |
u32 |
1024 |
✘ |
conntrack_control |
Table |
integrierte Standardeinstellungen | ✘ |
port
-
Einschränkungen / Validierung:
u16. -
Beschreibung: Haupt-Proxy-Abhörport (TCP).
-
Beispiel:
[server] port = 443
listen_backlog
-
Einschränkungen / Validierung:
u32.0verwendet das Standard-Backlog-Verhalten des Betriebssystems. -
Beschreibung: Listen-Backlog, der an
listen(2)für TCP Sockets übergeben wird. -
Beispiel:
[server] listen_backlog = 1024
listen_addr_ipv4
-
Einschränkungen / Validierung:
String(optional). Wenn gesetzt, muss es sich um eine gültige IPv4-Adresszeichenfolge handeln. -
Beschreibung: IPv4-Bindungsadresse für TCP-Listener (lassen Sie diesen Schlüssel weg, um die IPv4-Bindung zu deaktivieren).
-
Beispiel:
[server] listen_addr_ipv4 = "0.0.0.0"
listen_addr_ipv6
-
Einschränkungen / Validierung:
String(optional). Wenn gesetzt, muss es sich um eine gültige IPv6-Adresszeichenfolge handeln. -
Beschreibung: IPv6-Bindungsadresse für TCP-Listener (lassen Sie diesen Schlüssel weg, um die IPv6-Bindung zu deaktivieren).
-
Beispiel:
[server] listen_addr_ipv6 = "::"
listen_unix_sock
-
Einschränkungen / Validierung:
String(optional). Darf beim Festlegen nicht leer sein. Nur Unix. -
Beschreibung: Unix Socket-Pfad für den Listener. Wenn gesetzt, ist
server.listen_tcpstandardmäßigfalse(sofern nicht explizit überschrieben). -
Beispiel:
[server] listen_unix_sock = "/run/telemt.sock"
listen_unix_sock_perm
-
Einschränkungen / Validierung:
String(optional). Wenn gesetzt, sollte es sich um eine oktale Berechtigungszeichenfolge wie"0666"oder"0777"handeln. -
Beschreibung: Optionale Unix-Socketdateiberechtigungen, die nach der Bindung (chmod) angewendet werden. Wenn ausgelassen, werden die Berechtigungen nicht geändert (erbt umask).
-
Beispiel:
[server] listen_unix_sock = "/run/telemt.sock" listen_unix_sock_perm = "0666"
listen_tcp
-
Einschränkungen / Validierung:
bool(optional). Wenn ausgelassen, erkennt Telemt automatisch Folgendes: –truewennlisten_unix_socknicht festgelegt ist –falsewennlisten_unix_sockfestgelegt ist -
Beschreibung: Explizite TCP-Listener-Aktivierungs-/Deaktivierungsüberschreibung.
-
Beispiel:
[server] # Erzwingen Sie die Aktivierung von TCP, auch wenn auch ein Unix-Socket gebunden wird listen_unix_sock = "/run/telemt.sock" listen_tcp = true
client_mss
-
Einschränkungen / Validierung:
String. Leer oder ausgelassen bedeutet: Kernel-MSS nicht verändern. Presets:"extreme-low"=88,"tspu"=92,"2in8"=256. Benutzerdefinierte Dezimalwerte müssen im Bereich88..=4096liegen. -
Beschreibung: Client-facing TCP-MSS, das vor
listen(2)auf TCP-Listener-Sockets gesetzt wird, damit Linux den Wert im SYN/ACK annoncieren kann. Betrifft nur die clientseitigen Proxy-TCP-Listener, nicht API, Metriken, Unix-Sockets, Telegram-Upstreams, ME-Sockets oder Mask-Backend-Verbindungen. Änderungen erfordern Listener-Neustart/Rebind. -
Betreiberhinweis: Das zweistufige
synlimit-Profil verlangt nicht, dass Telemt MSS automatisch deaktiviert. Betreiber, die externe Host-Tuning-Rezepte übernehmen, sollten bewusst entscheiden, ob MSS-Shaping für Handshake-Fragmentierung aktiv bleibt oder zugunsten höheren Medien-Durchsatzes deaktiviert wird. -
Performance-Hinweis: Niedriges MSS erhöht die Paketanzahl vorhersehbar. Der ungefähre Segmentmultiplikator ist
ceil(1460 / client_mss). -
Beispiel:
[server] client_mss = "tspu"
client_mss_bulk
-
Einschränkungen / Validierung:
String. Gleiche Grammatik wieclient_mss: leer/ausgelassen, Presets"extreme-low"/"tspu"/"2in8"oder ein Dezimalwert in88..=4096. -
Beschreibung: Optionale MSS für die Bulk-Phase. Wenn gesetzt, gilt das niedrige
client_mssnur während der TLS-Handshake gesendet wird, einschließlich des von DPI inspizierten ServerHello. Sobald die Verbindung in den Relay-Betrieb wechselt, wird das MSS des Client-Sockets für die Bulk-Datenphase aufclient_mss_bulkerhöht. So bleibt die Anti-DPI-Handshake-Fragmentierung erhalten, während Payload wieder in normal großen Paketen läuft; die ausgehende Paketanzahl sinkt ungefähr um denclient_mss-Segmentmultiplikator (z. B. ~10x mit"tspu"). Nützlich auf Hosts, deren Abuse-Erkennung Pakete pro Sekunde statt Bandbreite zählt. Leer/ausgelassen bedeutet: Handshake-MSS für die gesamte Verbindung beibehalten (bisheriges Verhalten). Nur Linux; auf anderen Plattformen ein No-Op. -
Beispiel:
[server] client_mss = "tspu" client_mss_bulk = "1400"
proxy_protocol
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert die Analyse des HAProxy PROXY-Protokolls für eingehende Verbindungen (PROXY v1/v2). Wenn diese Option aktiviert ist, wird die Client-Source-Adresse aus dem PROXY-Header übernommen.
-
Beispiel:
[server] proxy_protocol = true
proxy_protocol_header_timeout_ms
-
Einschränkungen / Validierung: Muss
> 0(Millisekunden) sein. -
Beschreibung: Timeout für das Lesen und Parsen von PROXY Protokoll-Headern (ms).
-
Beispiel:
[server] proxy_protocol = true proxy_protocol_header_timeout_ms = 500
proxy_protocol_trusted_cidrs
- Einschränkungen / Validierung:
IpNetwork[]. – Wenn ausgelassen, werden standardmäßig „All Trust-CIDRs“ (0.0.0.0/0und::/0) verwendet.
In der Produktion hinter HAProxy/nginx sollten Sie lieber explizite vertrauenswürdige CIDRs festlegen, anstatt sich auf diesen Fallback zu verlassen. – Wenn explizit auf ein leeres Array festgelegt, werden alle PROXY-Header abgelehnt.
-
Beschreibung: Vertrauenswürdige Quell-CIDRs dürfen PROXY Protokollheader bereitstellen (Sicherheitskontrolle).
-
Beispiel:
[server] proxy_protocol = true proxy_protocol_trusted_cidrs = ["127.0.0.1/32", "10.0.0.0/8"]
metrics_port
-
Einschränkungen / Validierung:
u16(optional). -
Beschreibung: Prometheus-kompatibler Metrik-Endpunktport. Wenn gesetzt, wird der Metrik-Listener aktiviert (Bindungsverhalten kann durch
metrics_listenüberschrieben werden). -
Beispiel:
[server] metrics_port = 9090
metrics_listen
-
Einschränkungen / Validierung:
String(optional). Wenn gesetzt, muss es imIP:PORT-Format vorliegen. -
Beschreibung: Vollständige Messwertbindungsadresse (
IP:PORT), überschreibtmetrics_portund bindet nur an die angegebene Adresse. -
Beispiel:
[server] metrics_listen = "127.0.0.1:9090"
metrics_whitelist
-
Einschränkungen / Validierung:
IpNetwork[]. -
Beschreibung: CIDR-Allowlist für Metrik-Endpunktzugriff.
-
Beispiel:
[server] metrics_port = 9090 metrics_whitelist = ["127.0.0.1/32", "::1/128"]
max_connections
-
Einschränkungen / Validierung:
u32.0bedeutet unbegrenzt. -
Beschreibung: Maximale Anzahl gleichzeitiger Clientverbindungen.
-
Beispiel:
[server] max_connections = 10000
accept_permit_timeout_ms
-
Einschränkungen / Validierung:
0..=60000(Millisekunden).0behält das alte unbegrenzte Warteverhalten bei. -
Beschreibung: Maximale Wartezeit für den Erhalt einer Verbindungs-Slot-Genehmigung, bevor die akzeptierte Verbindung getrennt wird.
-
Beispiel:
[server] accept_permit_timeout_ms = 250
Hinweis: Wenn server.proxy_protocol aktiviert ist, werden eingehende PROXY-Protokollheader aus den ersten Bytes der Verbindung geparst und die Client-Source-Adresse wird durch src_addr aus dem Header ersetzt. Aus Sicherheitsgründen wird die Peer-Source-IP (die direkte Verbindungsadresse) anhand von server.proxy_protocol_trusted_cidrs überprüft. Wenn diese Liste leer ist, werden PROXY-Header abgelehnt und die Verbindung gilt als nicht vertrauenswürdig.
[server.conntrack_control]
Hinweis: Der conntrack-control Worker wird nur auf Linux ausgeführt. Auf anderen Betriebssystemen wird es nicht gestartet; Wenn inline_conntrack_control den Wert true hat, wird eine Warnung protokolliert. Für einen effektiven Betrieb sind außerdem CAP_NET_ADMIN und ein nutzbares Backend (nft oder iptables / ip6tables auf PATH erforderlich. Das Dienstprogramm conntrack wird zum optionalen Löschen von Tabelleneinträgen unter Druck verwendet.
| Schlüssel | Typ | Default | Hot-Reload |
|---|---|---|---|
inline_conntrack_control |
bool |
true |
✘ |
mode |
String |
"tracked" |
✘ |
backend |
String |
"auto" |
✘ |
profile |
String |
"balanced" |
✘ |
hybrid_listener_ips |
IpAddr[] |
[] |
✘ |
pressure_high_watermark_pct |
u8 |
85 |
✘ |
pressure_low_watermark_pct |
u8 |
70 |
✘ |
delete_budget_per_sec |
u64 |
4096 |
✘ |
inline_conntrack_control
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Hauptschalter für die Runtime-conntrack-Kontrollaufgabe: gleicht raw/notrack netfilter-Regeln für den Listener-Eingang ab (siehe
mode), lädt jede Sekunde Samples und kannconntrack -DDeletes für qualifizierende Close-Events ausführen, während der Pressure-Modus aktiv ist (siehedelete_budget_per_sec). Beifalsewerden die Notrack-Regeln gelöscht und pressure-gesteuerte Deletes deaktiviert. -
Beispiel:
[server.conntrack_control] inline_conntrack_control = true
mode
-
Einschränkungen / Validierung: Einer von
tracked,notrack,hybrid(Groß- und Kleinschreibung wird nicht beachtet; serialisierte Kleinschreibung). -
Beschreibung:
tracked: Telemt-Notrack-Regeln nicht installieren (Verbindungen bleiben in conntrack).notrack: Markieren Sie passenden Eingang TCP zuserver.portals notrack – Ziele werden von[[server.listeners]]abgeleitet, falls vorhanden, andernfalls vonserver.listen_addr_ipv4/server.listen_addr_ipv6(nicht angegebene Adressen bedeuten „beliebig“ für diese Familie).hybrid: notrack nur für Adressen, die inhybrid_listener_ipsaufgeführt sind (darf nicht leer sein; beim Laden validiert). -
Beispiel:
[server.conntrack_control] mode = "notrack"
backend
-
Einschränkungen / Validierung: Einer von
auto,nftables,iptables(Groß-/Kleinschreibung wird nicht beachtet; serialisierte Kleinschreibung). -
Beschreibung: Welches Command-Set wendet Notrack-Regeln an?
auto:nftverwenden, falls vorhanden aufPATH, sonstiptables/ip6tables, falls vorhanden.nftables/iptables: dieses Backend erzwingen; Fehlende Binaries bedeuten, dass Regeln nicht angewendet werden können. Der NFT-Pfad verwendet die Tabelleinet telemt_conntrackund einen Prerouting-Raw-Hook; iptables verwendet die KetteTELEMT_NOTRACKin der Tabelleraw. -
Beispiel:
[server.conntrack_control] backend = "auto"
profile
-
Einschränkungen / Validierung: Einer von
conservative,balanced,aggressive(Groß- und Kleinschreibung wird nicht berücksichtigt; serialisierte Kleinschreibung). -
Beschreibung: Wenn conntrack Pressure-Modus aktiv ist (
pressure_*Watermark), werden Leerlauf- und Aktivitäts-Timeouts begrenzt, um conntrack churn zu reduzieren: z. B. Client-Leerlauf im ersten Byte (client.rs), Timeout für direkte Relay-Aktivität (direct_relay.rs) und Idle-Policy-Caps im mittleren Relay (middle_relay.rsüberConntrackPressureProfile::*_cap_secs/direct_activity_timeout_secs). Aggressivere Profile verwenden kürzere Caps. -
Beispiel:
[server.conntrack_control] profile = "balanced"
hybrid_listener_ips
-
Einschränkungen / Validierung:
IpAddr[]. Muss nicht leer sein, wennmode = "hybrid". Ignoriert fürtracked/notrack. -
Beschreibung: Explizite Listener-Adressen, die Notrack-Regeln im Hybridmodus empfangen (aufgeteilt in IPv4 vs. IPv6 Regeln durch die Implementierung).
-
Beispiel:
[server.conntrack_control] mode = "hybrid" hybrid_listener_ips = ["203.0.113.10", "2001:db8::1"]
pressure_high_watermark_pct
-
Einschränkungen / Validierung: Muss innerhalb von
[1, 100]liegen. -
Beschreibung: Der Pressure-Modus tritt ein, wenn Folgendes zutrifft: Verbindungsfüllung vs.
server.max_connections(Prozentsatz, wennmax_connections > 0), File-Descriptor-Nutzung vs. Prozess-SoftRLIMIT_NOFILE, ungleich Nullaccept_permit_timeout-Ereignisse im letzten Sample-Fenster oder ME c2me send-full-Zählerdelta. Der Eintrag vergleicht relevante Prozentsätze mit dieser Obergrenze (sieheupdate_pressure_stateinconntrack_control.rs). -
Beispiel:
[server.conntrack_control] pressure_high_watermark_pct = 85
pressure_low_watermark_pct
-
Einschränkungen / Validierung: Muss unbedingt kleiner als
pressure_high_watermark_pctsein. -
Beschreibung: Der Pressure-Modus verlässt den Pressure-Zustand erst nach drei aufeinanderfolgenden Ein-Sekunden-Samples, bei denen alle Signale bei oder unter diesem Low-Watermark liegen und die Accept-Timeout-/ME-Queue-Deltas Null sind (Hysterese).
-
Beispiel:
[server.conntrack_control] pressure_low_watermark_pct = 70
delete_budget_per_sec
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Maximale Anzahl von
conntrack -DVersuchen pro Sekunde, während der Pressure-Modus aktiv ist (Token-Bucket wird jede Sekunde aufgefüllt). Deletes laufen nur für Close-Events mit den Gründen Timeout, Pressure oder Reset ausgeführt. Jeder Versuch verbraucht einen Token, unabhängig vom Ergebnis. -
Beispiel:
[server.conntrack_control] delete_budget_per_sec = 4096
[server.api]
Hinweis: Dieser Abschnitt akzeptiert auch den Legacy-Alias [server.admin_api] (gleiches Schema wie [server.api]).
| Schlüssel | Typ | Default | Hot-Reload |
|---|---|---|---|
enabled |
bool |
true |
✘ |
listen |
String |
"0.0.0.0:9091" |
✘ |
whitelist |
IpNetwork[] |
["127.0.0.0/8"] |
✘ |
auth_header |
String |
"" |
✘ |
request_body_limit_bytes |
usize |
65536 |
✘ |
minimal_runtime_enabled |
bool |
true |
✘ |
minimal_runtime_cache_ttl_ms |
u64 |
1000 |
✘ |
runtime_edge_enabled |
bool |
false |
✘ |
runtime_edge_cache_ttl_ms |
u64 |
1000 |
✘ |
runtime_edge_top_n |
usize |
10 |
✘ |
runtime_edge_events_capacity |
usize |
256 |
✘ |
read_only |
bool |
false |
✘ |
gray_action |
"drop", "api" oder "200" |
"drop" |
✘ |
enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert die Steuerungsebene REST API.
-
Beispiel:
[server.api] enabled = true
gray_action
-
Einschränkungen / Validierung:
"drop","api"oder"200". -
Beschreibung: API-Antwortrichtlinie für graue/eingeschränkte Staaten: Anfrage verwerfen, normale API-Antwort bereitstellen oder
200 OKerzwingen. -
Beispiel:
[server.api] gray_action = "drop"
listen
-
Einschränkungen / Validierung:
String. Muss imIP:PORT-Format vorliegen. -
Beschreibung: API Bindungsadresse im
IP:PORT-Format. -
Beispiel:
[server.api] listen = "0.0.0.0:9091"
whitelist
-
Einschränkungen / Validierung:
IpNetwork[]. -
Beschreibung: CIDR-Allowlist darf auf API zugreifen.
-
Beispiel:
[server.api] whitelist = ["127.0.0.0/8"]
auth_header
-
Einschränkungen / Validierung:
String. Eine leere String deaktiviert die Authentifizierungsheader-Validierung. -
Beschreibung: Genauer erwarteter
Authorization-Headerwert (statisches gemeinsames Geheimnis). -
Beispiel:
[server.api] auth_header = "Bearer MY_TOKEN"
request_body_limit_bytes
-
Einschränkungen / Validierung: Muss
> 0(Byte) sein. -
Beschreibung: Maximal akzeptierte HTTP-Anfragetextgröße (Byte).
-
Beispiel:
[server.api] request_body_limit_bytes = 65536
minimal_runtime_enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Ermöglicht minimale Runtime-Snapshots-Endpunktlogik.
-
Beispiel:
[server.api] minimal_runtime_enabled = true
minimal_runtime_cache_ttl_ms
-
Einschränkungen / Validierung:
0..=60000(Millisekunden).0deaktiviert den Cache. -
Beschreibung: Cache TTL für minimale Runtime-Snapshots (ms).
-
Beispiel:
[server.api] minimal_runtime_cache_ttl_ms = 1000
runtime_edge_enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert Runtime-Edge-Endpunkte.
-
Beispiel:
[server.api] runtime_edge_enabled = false
runtime_edge_cache_ttl_ms
-
Einschränkungen / Validierung:
0..=60000(Millisekunden). -
Beschreibung: Cache TTL für Runtime-Edge-Aggregation-Payloaden (ms).
-
Beispiel:
[server.api] runtime_edge_cache_ttl_ms = 1000
runtime_edge_top_n
-
Einschränkungen / Validierung:
1..=1000. -
Beschreibung: Top-N-Größe für Edge-Verbindung und TLS Fingerprint-Bestenlisten-Snapshots.
-
Beispiel:
[server.api] runtime_edge_top_n = 10
runtime_edge_events_capacity
-
Einschränkungen / Validierung:
16..=4096. -
Beschreibung: Ringpufferkapazität für Runtime-Edge-Ereignisse.
-
Beispiel:
[server.api] runtime_edge_events_capacity = 256
read_only
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Lehnt mutierende API-Endpunkte ab, wenn diese aktiviert sind.
-
Beispiel:
[server.api] read_only = false
server.listeners
| Schlüssel | Typ | Default | Hot-Reload |
|---|---|---|---|
ip |
IpAddr |
— | ✘ |
port |
u16 |
server.port |
✘ |
client_mss |
String |
[server].client_mss |
✘ |
synlimit |
false, "iptables" oder "nftables" |
false |
✔ |
synlimit_seconds |
u32 |
60 |
✔ |
synlimit_hitcount |
u32 |
48 |
✔ |
synlimit_burst |
u32 |
1 |
✔ |
synlimit_ios_seconds |
u32 |
1 |
✔ |
synlimit_ios_hitcount |
u32 |
12 |
✔ |
synlimit_ios_burst |
u32 |
24 |
✔ |
synlimit_hashlimit_expire_ms |
u32 |
60000 |
✔ |
synlimit_hashlimit_size |
u32 |
32768 |
✔ |
announce |
String |
— | ✘ |
announce_ip |
IpAddr |
— | ✘ |
proxy_protocol |
bool |
— | ✘ |
reuse_allow |
bool |
false |
✘ |
ip
-
Einschränkungen / Validierung: Erforderliches Feld. Muss ein
IpAddrsein. -
Beschreibung: Listener-Bindungs-IP.
-
Beispiel:
[[server.listeners]] ip = "0.0.0.0"
port (server.listeners)
-
Einschränkungen / Validierung:
u16(optional). Wenn ausgelassen, wird aufserver.port. -
Beschreibung: Port pro Listener TCP.
-
Beispiel:
[[server.listeners]] ip = "0.0.0.0" port = 443
client_mss (server.listeners)
-
Einschränkungen / Validierung:
String(optional). Gleiche Werte wie[server].client_mss. -
Beschreibung: Pro-Listener-MSS-Override. Wenn ausgelassen, erbt
[server].client_mss; Wenn es auf eine leere String festgelegt ist, wird das MSS-Shaping für diesen Listener deaktiviert, selbst wenn der globale Wert festgelegt ist. Änderungen erfordern einen Neustart/eine erneute Bindung des Listeners. -
Beispiel:
[[server.listeners]] ip = "0.0.0.0" port = 443 client_mss = "256"
synlimit (server.listeners)
-
Einschränkungen / Validierung:
false,"iptables"oder"nftables". Ausgelassen oderfalsedeaktiviert SYN-Limiting für diesen Listener. -
Beschreibung: Installiert pro Listener zweistufige Linux-netfilter-SYN-Fix-Regeln für den Listener-Port.
"iptables"nutztiptables/ip6tables-Filterregeln mithashlimit,lengthund TTL/hop-limit Matches."nftables"nutzt Telemt-eigene Tabellen mit per-sourcemeter-Regeln und äquivalenten IPv4/IPv6-Classifieren. Die Regeln werden früh inINPUTeingefügt, akzeptieren SYN-Pakete unterhalb des Limits und lehnen SYN-Pakete oberhalb des Limits mit TCP RST ab, damit Clients zügig retryen statt auf ein stilles DROP-Timeout zu warten. Der generische Bucket wird übersynlimit_seconds,synlimit_hitcountundsynlimit_burstgesteuert; der iOS-ähnliche TTL/length-Bucket übersynlimit_ios_*. Regeln werden zur Runtime reconciled und beim graceful Telemt-Shutdown entfernt; nachSIGKILLkann der Prozess sie nicht mehr bereinigen. Erfordert CAP_NET_ADMIN.synlimit*ist für vorhandene Listener-Endpunkte hot-reloadfähig; Änderungen an Listener-ipoderporterfordern weiterhin Restart/Rebind. -
Betreiberhinweis: Telemt persistiert keine Regeln mit
iptables-persistent, schreibt nicht nach/etc/sysctl.d, ändert keine systemd-Limits und modifiziertclient_mssnicht. Host-Level-Tuning muss manuell angewendet werden, falls die Deployment-Policy es verlangt. -
Beispiel:
[[server.listeners]] ip = "0.0.0.0" port = 443 synlimit = "iptables" [[server.listeners]] ip = "::" port = 443 synlimit = "nftables"
synlimit_seconds (server.listeners)
-
Einschränkungen / Validierung:
u32, muss> 0sein. Der Default ist60. -
Beschreibung: Generisches SYN-Fix-Token-Bucket-Intervall. Die Rate beträgt
synlimit_hitcount / synlimit_secondsund wird in native netfilter-Rateneinheiten (second,minute,houroderdaygerendert. Dieser Bucket verarbeitet SYN-Pakete, die nicht mit dem iOS-ähnlichen Klassifizierer TTL/length übereinstimmen. -
Beispiel:
[[server.listeners]] ip = "0.0.0.0" port = 443 synlimit = "iptables" synlimit_seconds = 60
synlimit_hitcount (server.listeners)
-
Einschränkungen / Validierung:
u32, muss> 0sein. Der Default ist48. -
Beschreibung: Generischer SYN-Fix-Token-Bucket-Ratenbetrag. Zusammen mit
synlimit_secondsdefiniert es die zulässige Source-IP-SYN-Rate, bevor überschüssige SYN-Pakete TCP RST empfangen. -
Beispiel:
[[server.listeners]] ip = "0.0.0.0" port = 443 synlimit = "iptables" synlimit_hitcount = 48
synlimit_burst (server.listeners)
-
Einschränkungen / Validierung:
u32, muss> 0sein. Der Default ist1. -
Beschreibung: Generische SYN-Fix-Token-Bucket-Burst-Größe. Höhere Werte ermöglichen kurze Verbindungsstöße von derselben Source-IP, bevor die stabile
synlimit_hitcount / synlimit_seconds-Rate durchgesetzt wird. -
Beispiel:
[[server.listeners]] ip = "0.0.0.0" port = 443 synlimit = "iptables" synlimit_burst = 1
synlimit_ios_seconds (server.listeners)
-
Einschränkungen / Validierung:
u32, muss> 0sein. Der Default ist1. -
Beschreibung: Token-Bucket-Intervall für SYN-Pakete, die dem iOS-ähnlichen Classifier entsprechen. IPv4 entspricht der Paketlänge
64und TTL< 65; IPv6 entspricht der Paketlänge84und dem Hop-Limit< 65. -
Beispiel:
[[server.listeners]] ip = "0.0.0.0" port = 443 synlimit = "iptables" synlimit_ios_seconds = 1
synlimit_ios_hitcount (server.listeners)
-
Einschränkungen / Validierung:
u32, muss> 0sein. Der Default ist12. -
Beschreibung: Token-Bucket-Ratenbetrag für den iOS-ähnlichen SYN-Classifier.
-
Beispiel:
[[server.listeners]] ip = "0.0.0.0" port = 443 synlimit = "iptables" synlimit_ios_hitcount = 12
synlimit_ios_burst (server.listeners)
-
Einschränkungen / Validierung:
u32, muss> 0sein. Der Default ist24. -
Beschreibung: Token-Bucket-Burst-Größe für den iOS-ähnlichen SYN-Classifier.
-
Beispiel:
[[server.listeners]] ip = "0.0.0.0" port = 443 synlimit = "iptables" synlimit_ios_burst = 24
synlimit_hashlimit_expire_ms (server.listeners)
-
Einschränkungen / Validierung:
u32, muss> 0sein. Der Default ist60000. -
Beschreibung: Eintragsablauf in Millisekunden für iptables/ip6tables Hashlimit-Buckets. nftables-Messgeräte verwenden den vom Kernel verwalteten Zustand und machen diesen genauen Knopf nicht verfügbar.
-
Beispiel:
[[server.listeners]] ip = "0.0.0.0" port = 443 synlimit = "iptables" synlimit_hashlimit_expire_ms = 60000
synlimit_hashlimit_size (server.listeners)
-
Einschränkungen / Validierung:
u32, muss> 0sein. Der Default ist32768. -
Beschreibung: Hash-Tabellengröße für iptables/ip6tables Hashlimit-Buckets. nftables-Messgeräte verwenden den vom Kernel verwalteten Zustand und machen diesen genauen Knopf nicht verfügbar.
-
Beispiel:
[[server.listeners]] ip = "0.0.0.0" port = 443 synlimit = "iptables" synlimit_hashlimit_size = 32768
announce
-
Einschränkungen / Validierung:
String(optional). Darf beim Setzen nicht leer sein. -
Beschreibung: Öffentliche IP/Domäne in Proxy-Links für diesen Listener angekündigt. Hat Vorrang vor
announce_ip. -
Beispiel:
[[server.listeners]] ip = "0.0.0.0" announce = "proxy.example.com"
announce_ip
-
Einschränkungen / Validierung:
IpAddr(optional). Veraltet. Verwenden Sieannounce. -
Beschreibung: Veraltete Legacy-Ankündigungs-IP. Während des Ladens der Konfiguration wird es nach
announcemigriert, wennannouncenicht festgelegt ist. -
Beispiel:
[[server.listeners]] ip = "0.0.0.0" announce_ip = "203.0.113.10"
proxy_protocol
-
Einschränkungen / Validierung:
bool(optional). Wenn gesetzt, wirdserver.proxy_protocolfür diesen Listener überschrieben. -
Beschreibung: Pro-Listener-PROXY-Protokollüberschreibung.
-
Beispiel:
[server] proxy_protocol = false [[server.listeners]] ip = "0.0.0.0" proxy_protocol = true
reuse_allow
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert
SO_REUSEPORTfür die Bind-Freigabe mehrerer Instanzen (ermöglicht mehreren Telemt-Instanzen, auf demselbenip:portzu lauschen). -
Beispiel:
[[server.listeners]] ip = "0.0.0.0" reuse_allow = false
[timeouts]
| Schlüssel | Typ | Default | Hot-Reload |
|---|---|---|---|
client_first_byte_idle_secs |
u64 |
300 |
✘ |
client_handshake |
u64 |
30 |
✘ |
relay_idle_policy_v2_enabled |
bool |
true |
✘ |
relay_client_idle_soft_secs |
u64 |
120 |
✘ |
relay_client_idle_hard_secs |
u64 |
360 |
✘ |
relay_idle_grace_after_downstream_activity_secs |
u64 |
30 |
✘ |
client_keepalive |
u64 |
15 |
✘ |
client_ack |
u64 |
90 |
✘ |
me_one_retry |
u8 |
12 |
✘ |
me_one_timeout_ms |
u64 |
1200 |
✘ |
client_handshake
-
Einschränkungen / Validierung: Muss
> 0sein. Der Wert wird in Sekunden angegeben. Wird auch als Obergrenze für einige TLS Emulationsverzögerungen verwendet (siehecensorship.server_hello_delay_max_ms). -
Beschreibung: Client-Handshake-Timeout (Sekunden).
-
Beispiel:
[timeouts] client_handshake = 30
client_first_byte_idle_secs
-
Einschränkungen / Validierung:
u64(Sekunden).0deaktiviert die Erzwingung des Leerlaufs im ersten Byte. -
Beschreibung: Maximale Leerlaufzeit zum Warten auf das erste Client-Payloadbyte nach dem Sitzungsaufbau.
-
Beispiel:
[timeouts] client_first_byte_idle_secs = 300
relay_idle_policy_v2_enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert Soft-/Hard-Middle-Relay-Client-Leerlaufrichtlinie.
-
Beispiel:
[timeouts] relay_idle_policy_v2_enabled = true
relay_client_idle_soft_secs
-
Einschränkungen / Validierung: Muss
> 0sein; muss<= relay_client_idle_hard_secssein. -
Beschreibung: Soft-Idle-Schwellenwert (Sekunden) für Inaktivität des Middle-Relay-Client-Uplinks. Das Erreichen dieses Schwellenwerts markiert die Sitzung als Leerlaufkandidaten (je nach Richtlinie kann sie möglicherweise bereinigt werden).
-
Beispiel:
[timeouts] relay_client_idle_soft_secs = 120
relay_client_idle_hard_secs
-
Einschränkungen / Validierung: Muss
> 0sein; muss>= relay_client_idle_soft_secssein. -
Beschreibung: Harter Leerlaufschwellenwert (Sekunden) für Inaktivität des Middle-Relay-Client-Uplinks. Wenn dieser Schwellenwert erreicht wird, wird die Sitzung geschlossen.
-
Beispiel:
[timeouts] relay_client_idle_hard_secs = 360
relay_idle_grace_after_downstream_activity_secs
-
Einschränkungen / Validierung: Muss
<= relay_client_idle_hard_secssein. -
Beschreibung: Zusätzliche Hard-Idle-Kulanzfrist (Sekunden) wurde nach der letzten Downstream-Aktivität hinzugefügt.
-
Beispiel:
[timeouts] relay_idle_grace_after_downstream_activity_secs = 30
client_keepalive
-
Einschränkungen / Validierung:
u64. Der Wert wird in Sekunden angegeben. -
Beschreibung: Client-Keepalive-Timeout (Sekunden).
-
Beispiel:
[timeouts] client_keepalive = 15
client_ack
-
Einschränkungen / Validierung:
u64. Der Wert wird in Sekunden angegeben. -
Beschreibung: Client ACK Timeout (Sekunden).
-
Beispiel:
[timeouts] client_ack = 90
me_one_retry
-
Einschränkungen / Validierung:
u8. -
Beschreibung: Budget für schnelle Wiederverbindungsversuche für Einzelendpunkt-DC-Szenarien.
-
Beispiel:
[timeouts] me_one_retry = 12
me_one_timeout_ms
-
Einschränkungen / Validierung:
u64. Der Wert wird in Millisekunden angegeben. -
Beschreibung: Timeout pro Schnellversuch (ms) für DC-Wiederverbindungslogik für einen einzelnen Endpunkt.
-
Beispiel:
[timeouts] me_one_timeout_ms = 1200
[censorship]
tls_domain
-
Einschränkungen / Validierung: Muss ein nicht leerer Domainname sein. Darf keine Leerzeichen und kein
/enthalten. -
Beschreibung: Primäre Domäne, die für das Fake-TLS-Masking-/Fronting-Profil verwendet wird und als Standard-SNI-Domäne für Clients angezeigt wird. Dieser Wert wird Teil der generierten
ee-Links; eine Änderung macht zuvor generierte Links ungültig. -
Beispiel:
[censorship] tls_domain = "example.com"
tls_domains
-
Einschränkungen / Validierung:
String[]. Wenn gesetzt, werden Werte mittls_domainzusammengeführt und dedupliziert (primärestls_domainbleibt immer zuerst). -
Beschreibung: Zusätzliche TLS-Domänen zum Generieren mehrerer Proxy-Links.
-
Beispiel:
[censorship] tls_domain = "example.com" tls_domains = ["example.net", "example.org"]
unknown_sni_action
-
Einschränkungen / Validierung:
"drop","mask","accept"oder"reject_handshake". -
Beschreibung: Aktion für TLS ClientHello mit unbekanntem/nicht konfiguriertem SNI.
drop— schließt die Verbindung ohne Antwort (stilles FIN nach Anwendung vonserver_hello_delay). Timing-identisch zum Success-Zweig, aber auf dem Wire leiser als ein echter Webserver.mask— proxyt die Verbindung transparent zumask_host:mask_port(TLS-Fronting). Der Client erhält ein echtes ServerHello vom Backend mit dessen echtem Zertifikat. Maximale Tarnung, öffnet aber für jede fehlgeleitete Anfrage eine ausgehende Verbindung.accept— behandelt SNI so, als wäre es gültig, und fährt im Auth-Pfad fort. Schwächt die Resistenz gegen aktives Probing; nur in engen Szenarien sinnvoll.reject_handshake— sendet einen fatalen TLS-Alertunrecognized_name(RFC 6066, AlertDescription = 112) und schließt die Verbindung. Auf dem Wire identisch zu einem modernen nginx mitssl_reject_handshake on;im Default-vhost: wirkt wie ein gewöhnlicher HTTPS-Server, der den angefragten Namen schlicht nicht hostet. Empfohlen, wenn maximale Parität mit einem Standard-Webserver wichtiger ist als TLS-Fronting.server_hello_delaywird absichtlich nicht auf diesen Zweig angewendet, sodass der Alert wie bei Referenz-nginx „sofort“ gesendet wird.
-
Beispiel:
[censorship] unknown_sni_action = "reject_handshake"
tls_fetch_scope
-
Einschränkungen / Validierung:
String. Der Wert wird beim Laden getrimmt; whitespace-only wird leer. -
Beschreibung: Upstream-Scope-Tag für TLS-Front-Metadatenabrufe. Ein leerer Wert behält das Default-Upstream-Routing bei.
-
Beispiel:
[censorship] tls_fetch_scope = "fetch"
tls_fetch
-
Einschränkungen / Validierung: Tabelle. Siehe Abschnitt
[censorship.tls_fetch]unten. -
Beschreibung: Einstellungen für die TLS-Front-Metadatenstrategie (Bootstrap + Refresh-Verhalten für TLS-Emulationsdaten).
-
Beispiel:
[censorship.tls_fetch] strict_route = true attempt_timeout_ms = 5000 total_budget_ms = 15000
mask
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert den Masking-/Fronting-Relay-Modus.
-
Beispiel:
[censorship] mask = true
mask_host
-
Einschränkungen / Validierung:
String(optional).- Wenn
mask_unix_sockgesetzt ist, mussmask_hostausgelassen werden (mutually exclusive). - Wenn weder
mask_hostnochmask_unix_sockgesetzt ist, verwendet Telemt standardmäßigtls_domainalsmask_host.
- Wenn
-
Beschreibung: Upstream-Mask-Host für das TLS-Fronting-Relay.
-
Beispiel:
[censorship] mask_host = "www.cloudflare.com"
mask_port
-
Einschränkungen / Validierung:
u16. -
Beschreibung: Upstream-Mask-Port für das TLS-Fronting-Relay.
-
Beispiel:
[censorship] mask_port = 443
exclusive_mask
-
Einschränkungen / Validierung: TOML-Map. Schlüssel müssen SNI-Domainnamen sein. Werte müssen
host:portmitport > 0sein; IPv6-Literale müssen geklammert sein. -
Beschreibung: Per-SNI TCP-Mask-Ziele für Fallback-Traffic. Wenn die SNI eines TLS ClientHello einen Schlüssel trifft, relayed Telemt diese nicht authentifizierte Verbindung zum gemappten Ziel. Sonstiger Fallback-Traffic nutzt weiterhin das vorhandene
mask_host/mask_portoder das SNI-aware Default-Masking-Verhalten. -
Beispiel:
[censorship] tls_domains = ["petrovich.ru", "bsi.bund.de", "telekom.com"] [censorship.exclusive_mask] "bsi.bund.de" = "127.0.0.1:443"
mask_unix_sock
-
Einschränkungen / Validierung:
String(optional).- Darf nicht leer sein, wenn gesetzt.
- Nur Unix; auf Nicht-Unix-Plattformen abgelehnt.
- Auf Unix muss der Pfad (\le 107) Bytes lang sein.
- Mutually exclusive mit
mask_host.
-
Beschreibung: Unix-Socket-Pfad für das Mask-Backend statt TCP
mask_host/mask_port. -
Beispiel:
[censorship] mask_unix_sock = "/run/telemt/mask.sock"
fake_cert_len
-
Einschränkungen / Validierung:
usize. Wenntls_emulation = falseund der Default-Wert verwendet wird, kann Telemt diesen Wert beim Start für mehr Varianz randomisieren. -
Beschreibung: Länge der Payload des synthetischen Zertifikats, wenn Emulationsdaten nicht verfügbar sind.
-
Beispiel:
[censorship] fake_cert_len = 2048
tls_emulation
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Ermöglicht die Verhaltensemulation von Zertifikaten/TLS von zwischengespeicherten realen Fronten.
-
Beispiel:
[censorship] tls_emulation = true
tls_front_dir
-
Einschränkungen / Validierung:
String. -
Beschreibung: Verzeichnispfad für TLS-Front-Cache-Speicher.
-
Beispiel:
[censorship] tls_front_dir = "tlsfront"
server_hello_delay_min_ms
-
Einschränkungen / Validierung:
u64(Millisekunden). -
Beschreibung: Mindestverzögerung von
server_hellofür Anti-Fingerprint-Verhalten (ms). -
Beispiel:
[censorship] server_hello_delay_min_ms = 0
server_hello_delay_max_ms
-
Einschränkungen / Validierung:
u64(Millisekunden). Muss (<)timeouts.client_handshake * 1000. -
Beschreibung: Maximale
server_helloVerzögerung für Anti-Fingerprint-Verhalten (ms). -
Beispiel:
[timeouts] client_handshake = 30 [censorship] server_hello_delay_max_ms = 0
tls_new_session_tickets
-
Einschränkungen / Validierung:
u8. -
Beschreibung: Anzahl der
NewSessionTicketNachrichten, die nach dem Handshake ausgegeben werden sollen. -
Beispiel:
[censorship] tls_new_session_tickets = 0
tls_full_cert_ttl_secs
-
Einschränkungen / Validierung:
u64(Sekunden). -
Beschreibung: TTL zum Senden der vollständigen Zertifikat-Payload pro (Domäne, Client-IP)-Tupel.
-
Beispiel:
[censorship] tls_full_cert_ttl_secs = 90
serverhello_compact
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Ermöglicht das kompakte ServerHello/Fake-TLS-Profil, um die Signatur der Antwortgröße zu reduzieren.
-
Beispiel:
[censorship] serverhello_compact = false
alpn_enforce
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Erzwingt das Echoverhalten von ALPN basierend auf der Clientpräferenz.
-
Beispiel:
[censorship] alpn_enforce = true
mask_proxy_protocol
-
Einschränkungen / Validierung:
u8.0= deaktiviert,1= v1 (Text),2= v2 (binär). -
Beschreibung: Sendet den Protokoll-Header PROXY, wenn eine Verbindung zum Mask-Backend hergestellt wird, sodass das Backend die echte Client-IP sehen kann.
-
Beispiel:
[censorship] mask_proxy_protocol = 0
mask_shape_hardening
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert Client->Mask Shape-Channel-Hardening, indem beim Shutdown des Mask-Relay kontrolliertes Tail-Padding auf Bucket-Grenzen angewendet wird.
-
Beispiel:
[censorship] mask_shape_hardening = true
mask_shape_hardening_aggressive_mode
-
Einschränkungen / Validierung: Erfordert
mask_shape_hardening = true. -
Beschreibung: Aggressives Shaping-Profil aktivieren (stärkeres Anti-Classifier-Verhalten mit unterschiedlicher Shaping-Semantik).
-
Beispiel:
[censorship] mask_shape_hardening = true mask_shape_hardening_aggressive_mode = false
mask_shape_bucket_floor_bytes
-
Einschränkungen / Validierung: Muss
> 0sein; muss<= mask_shape_bucket_cap_bytessein. -
Beschreibung: Minimale Bucket-Größe für Shape-Channel-Hardening.
-
Beispiel:
[censorship] mask_shape_bucket_floor_bytes = 512
mask_shape_bucket_cap_bytes
-
Einschränkungen / Validierung: Muss
>= mask_shape_bucket_floor_bytessein. -
Beschreibung: Maximale Bucket-Größe für Shape-Channel-Hardening; Traffic oberhalb des Caps wird nicht weiter bucket-gepaddet.
-
Beispiel:
[censorship] mask_shape_bucket_cap_bytes = 4096
mask_shape_above_cap_blur
-
Einschränkungen / Validierung: Erfordert
mask_shape_hardening = true. -
Beschreibung: Fügt begrenzte, randomisierte Endbytes hinzu, selbst wenn die weitergeleitete Größe bereits die Obergrenze überschreitet.
-
Beispiel:
[censorship] mask_shape_hardening = true mask_shape_above_cap_blur = false
mask_shape_above_cap_blur_max_bytes
-
Einschränkungen / Validierung: Muss
<= 1048576sein. Muss> 0sein, wennmask_shape_above_cap_blur = true. -
Beschreibung: Maximale Anzahl zufälliger Zusatzbytes oberhalb des Caps, wenn above-cap blur aktiv ist.
-
Beispiel:
[censorship] mask_shape_above_cap_blur = true mask_shape_above_cap_blur_max_bytes = 64
mask_relay_max_bytes
-
Einschränkungen / Validierung: Muss
> 0sein; muss<= 67108864sein. -
Beschreibung: Maximal weitergeleitete Bytes pro Richtung auf dem nicht authentifizierten Masking-Fallback-Pfad.
-
Beispiel:
[censorship] mask_relay_max_bytes = 5242880
mask_relay_timeout_ms
-
Einschränkungen / Validierung: Sollte
>= mask_relay_idle_timeout_mssein. -
Beschreibung: Wall-clock-Obergrenze für das komplette Mask-Relay auf Nicht-MTProto-Fallbackpfaden. Erhöhen, wenn das Mask-Ziel ein langlebiger Dienst ist (z. B. WebSocket). Default: 60.000 ms (1 Minute).
-
Beispiel:
[censorship] mask_relay_timeout_ms = 60000
mask_relay_idle_timeout_ms
-
Einschränkungen / Validierung: Sollte
<= mask_relay_timeout_mssein. -
Beschreibung: Per-read idle timeout für Mask-Relay- und Drain-Pfade. Begrenzt Ressourcenverbrauch durch Slow-Loris-Angriffe und Port-Scanner. Ein Read, der länger als dieser Wert hängt, gilt als abgebrochene Verbindung. Default: 5.000 ms (5 s).
-
Beispiel:
[censorship] mask_relay_idle_timeout_ms = 5000
mask_classifier_prefetch_timeout_ms
-
Einschränkungen / Validierung: Muss innerhalb von
[5, 50](Millisekunden) liegen. -
Beschreibung: Timeout-Budget (ms) für die Erweiterung des fragmentierten anfänglichen Classifierfensters beim Masking-Fallback.
-
Beispiel:
[censorship] mask_classifier_prefetch_timeout_ms = 5
mask_timing_normalization_enabled
-
Einschränkungen / Validierung: Wenn
true, sindmask_timing_normalization_floor_ms > 0undmask_timing_normalization_ceiling_ms >= mask_timing_normalization_floor_mserforderlich. Die Obergrenze muss<= 60000. -
Beschreibung: Aktiviert die Normalisierung der Timing-Hüllkurve für Masking-Ergebnisse.
-
Beispiel:
[censorship] mask_timing_normalization_enabled = false
mask_timing_normalization_floor_ms
-
Einschränkungen / Validierung: Muss
> 0sein, wenn die Timing-Normalisierung aktiviert ist; muss<= mask_timing_normalization_ceiling_mssein. -
Beschreibung: Untergrenze (ms) für das Normalisierungsziel von Masking-Ergebnissen.
-
Beispiel:
[censorship] mask_timing_normalization_floor_ms = 0
mask_timing_normalization_ceiling_ms
-
Einschränkungen / Validierung: Muss
>= mask_timing_normalization_floor_mssein; muss<= 60000sein. -
Beschreibung: Obergrenze (ms) für das Normalisierungsziel von Masking-Ergebnissen.
-
Beispiel:
[censorship] mask_timing_normalization_ceiling_ms = 0
Shape-channel hardening notes ([censorship])
Diese Parameter reduzieren eine konkrete Fingerprint-Quelle im Masking-Pfad: die exakte Bytezahl, die der Proxy bei ungültigem oder sondierendem Traffic an mask_host sendet.
Ohne Hardening kann ein Zensor die Länge der Probe häufig sehr genau mit der vom Backend beobachteten Länge korrelieren, zum Beispiel 5 + body_sent auf frühen TLS-Reject-Pfaden. Daraus entsteht ein längenbasiertes Classifiersignal.
Wenn mask_shape_hardening = true, padded Telemt das Ende des client->mask-Streams beim Relay-Shutdown auf eine Bucket-Grenze:
- Zuerst wird die Gesamtzahl der an das Mask-Ziel gesendeten Bytes gemessen.
- Der Bucket wird über Zweierpotenzen ab
mask_shape_bucket_floor_bytesgewählt. - Padding wird nur hinzugefügt, wenn die Gesamtzahl unter
mask_shape_bucket_cap_bytesliegt. - Wenn die Bytezahl bereits über dem Cap liegt, wird kein weiteres Padding hinzugefügt.
Dadurch fallen mehrere nahe Probe-Größen in dieselbe vom Backend beobachtete Größenklasse, was aktive Klassifizierung erschwert.
Was jeder Parameter in der Praxis ändert:
mask_shape_hardeningAktiviert oder deaktiviert diese gesamte Length-Shaping-Phase auf dem Fallback-Pfad. Beifalsebleibt die vom Backend beobachtete Länge nah an der tatsächlich weitergeleiteten Probe-Länge. Beitruekann ein sauberer Relay-Shutdown zufällige Padding-Bytes anhängen, um die Summe in einen Bucket zu verschieben.mask_shape_bucket_floor_bytesLegt die erste Bucket-Grenze für kleine Probes fest. Beispiel: Mit Floor512kann eine fehlerhafte Probe, die sonst37Bytes weiterleiten würde, bei sauberem EOF auf512Bytes erweitert werden. Größere Floor-Werte verstecken sehr kleine Probes besser, erhöhen aber die Egress-Kosten.mask_shape_bucket_cap_bytesLegt den größten Bucket fest, bis zu dem Telemt mit Bucket-Logik padded. Beispiel: Mit Cap4096kann eine weitergeleitete Gesamtlänge von1800Bytes je nach Bucket-Leiter auf2048oder4096gepaddet werden; eine Summe, die bereits über4096liegt, wird nicht weiter gepaddet. Größere Caps erweitern den Bereich, in dem Größenklassen reduziert werden, erhöhen aber auch den Worst-Case-Overhead.- Sauberes EOF ist im konservativen Modus wichtig Im Default-Profil ist Shape-Padding bewusst konservativ: Es wird beim sauberen Relay-Shutdown angewendet, nicht auf jedem Timeout-/Drop-Pfad. So werden neue Timeout-Tail-Artefakte vermieden, die manche Backends oder Tests als separaten Fingerprint interpretieren könnten.
Praktische Kompromisse:
- Besserer Schutz gegen Fingerprinting über Größen-/Shape-Kanäle.
- Durch Padding etwas höherer Egress-Overhead bei kleinen Probes.
- Das Verhalten ist absichtlich konservativ und standardmäßig aktiviert.
Empfohlenes Startprofil:
mask_shape_hardening = true(Standard)mask_shape_bucket_floor_bytes = 512mask_shape_bucket_cap_bytes = 4096
Aggressive mode notes ([censorship])
mask_shape_hardening_aggressive_mode ist ein Opt-in-Profil für stärkeren Anti-Classifier-Druck.
- Die Standardeinstellung ist
false, um ein konservatives Timeout-/No-Tail-Verhalten beizubehalten. - Erfordert
mask_shape_hardening = true. - Wenn aktiviert, können backend-stille Nicht-EOF-Masking-Pfade geshaped werden.
- Zusammen mit above-cap blur nutzt der zufällige Zusatz-Tail
[1, max]statt[0, max].
Was ändert sich, wenn der aggressive Modus aktiviert ist:
- Backend-silent Timeout-Pfade können geshaped werden Im Default-Modus erhält ein Client, der den Socket halb offen hält und einen Timeout auslöst, auf diesem Pfad normalerweise kein Shape-Padding. Im aggressiven Modus kann Telemt eine solche backend-silent Session trotzdem shapen, sofern keine Backend-Bytes zurückgegeben wurden. Das zielt speziell auf aktive Probes, die EOF vermeiden wollen, um eine exakte vom Backend beobachtete Länge zu behalten.
- Above-cap blur hängt immer mindestens ein Byte an
Im Default-Modus darf above-cap blur
0wählen, sodass manche übergroßen Probes weiterhin auf ihrer exakten weitergeleiteten Basislänge landen. Im aggressiven Modus wird dieses exakte Basis-Sample durch Konstruktion entfernt. - Kompromiss Der aggressive Modus verbessert die Resistenz gegen aktive Length-Classifier, ist aber weniger konservativ. Wenn Ihr Deployment strikte Kompatibilität mit Timeout-/No-Tail-Semantik priorisiert, lassen Sie ihn deaktiviert. Wenn Ihr Threat Model wiederholte aktive Probes durch einen Zensor umfasst, ist dieser Modus das stärkere Profil.
Verwenden Sie diesen Modus nur, wenn Ihr Threat Model Classifier-Resistenz höher priorisiert als strikte Kompatibilität mit konservativer Masking-Semantik.
Above-cap blur notes ([censorship])
mask_shape_above_cap_blur fügt eine zweite Blur-Stufe für sehr große Probes hinzu, die bereits über mask_shape_bucket_cap_bytes liegen.
- Im Standardmodus wird ein zufälliges Ende in
[0, mask_shape_above_cap_blur_max_bytes]angehängt. - Im aggressiven Modus ist der zufällige Tail strikt positiv:
[1, mask_shape_above_cap_blur_max_bytes]. - Das reduziert exakte Leakage oberhalb des Caps bei begrenztem Overhead.
- Halten Sie
mask_shape_above_cap_blur_max_byteskonservativ, um unnötiges Egress-Wachstum zu vermeiden.
Betriebliche Bedeutung:
- Ohne above-cap blur
Eine Probe, die
5005Bytes weiterleitet, sieht für das Backend weiterhin wie5005Bytes aus, wenn sie bereits über dem Cap liegt. - Mit aktiviertem above-cap blur
Dieselbe Probe kann wie jeder Wert in einem begrenzten Fenster oberhalb ihrer Basislänge aussehen.
Beispiel mit
mask_shape_above_cap_blur_max_bytes = 64: Die vom Backend beobachtete Größe wird im Default-Modus zu5005..5069oder im aggressiven Modus zu5006..5069. - Auswahl von
mask_shape_above_cap_blur_max_bytesKleine Werte senken Kosten, lassen weit auseinanderliegende übergroße Klassen aber besser trennbar. Größere Werte verwischen übergroße Klassen stärker, verursachen aber mehr Egress-Overhead und mehr Output-Varianz.
Timing normalization envelope notes ([censorship])
mask_timing_normalization_enabled glättet zeitliche Unterschiede zwischen Masking-Ergebnissen durch eine Ziel-Dauer-Hüllkurve.
- Ein zufälliges Ziel wird in
[mask_timing_normalization_floor_ms, mask_timing_normalization_ceiling_ms]ausgewählt. - Schnelle Pfade werden bis zum ausgewählten Ziel verzögert.
- Langsame Pfade werden nicht hart auf das Ceiling gezwungen; die Hüllkurve wird best-effort geshaped, nicht abgeschnitten.
Empfohlenes Startprofil für Timing-Shaping:
mask_timing_normalization_enabled = truemask_timing_normalization_floor_ms = 180mask_timing_normalization_ceiling_ms = 320
Wenn Backend oder Netzwerk stark bandbreitenbeschränkt sind, reduzieren Sie zuerst das Ceiling. Wenn Probes in Ihrer Umgebung weiterhin zu gut unterscheidbar sind, erhöhen Sie den Floor schrittweise.
[censorship.tls_fetch]
| Schlüssel | Typ | Default | Hot-Reload |
|---|---|---|---|
profiles |
String[] |
["modern_chrome_like", "modern_firefox_like", "compat_tls12", "legacy_minimal"] |
✘ |
strict_route |
bool |
true |
✘ |
attempt_timeout_ms |
u64 |
5000 |
✘ |
total_budget_ms |
u64 |
15000 |
✘ |
grease_enabled |
bool |
false |
✘ |
deterministic |
bool |
false |
✘ |
profile_cache_ttl_secs |
u64 |
600 |
✘ |
profiles
-
Einschränkungen / Validierung:
String[]. Bei leerer Liste werden die Default-Werte wiederhergestellt. Werte werden unter Beibehaltung der Reihenfolge dedupliziert. -
Beschreibung: Angeordnete ClientHello-Profil-Fallback-Kette für TLS-Front-Metadatenabruf.
-
Beispiel:
[censorship.tls_fetch] profiles = ["modern_chrome_like", "compat_tls12"]
strict_route
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Wenn
trueund eine Upstream-Route konfiguriert ist, schlägt der Abruf von TLS bei Upstream-Verbindungsfehlern fehl, anstatt auf die direkte Route TCP zurückzugreifen. -
Beispiel:
[censorship.tls_fetch] strict_route = true
attempt_timeout_ms
-
Einschränkungen / Validierung: Muss
> 0(Millisekunden) sein. -
Beschreibung: Timeout-Budget pro TLS-Profilabrufversuch (ms).
-
Beispiel:
[censorship.tls_fetch] attempt_timeout_ms = 5000
total_budget_ms
-
Einschränkungen / Validierung: Muss
> 0(Millisekunden) sein. -
Beschreibung: Gesamtwanduhrbudget über alle TLS-Abrufversuche (ms).
-
Beispiel:
[censorship.tls_fetch] total_budget_ms = 15000
grease_enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Aktiviert Zufallswerte im GREASE-Stil in ausgewählten ClientHello-Erweiterungen für den Abrufverkehr.
-
Beispiel:
[censorship.tls_fetch] grease_enabled = false
deterministic
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Ermöglicht deterministische ClientHello Zufälligkeit für Debugging/Tests.
-
Beispiel:
[censorship.tls_fetch] deterministic = false
profile_cache_ttl_secs
-
Einschränkungen / Validierung:
u64(Sekunden).0deaktiviert den Cache. -
Beschreibung: TTL für Gewinnerprofil-Cache-Einträge, die vom TLS-Abrufpfad verwendet werden.
-
Beispiel:
[censorship.tls_fetch] profile_cache_ttl_secs = 600
[access]
| Schlüssel | Typ | Default | Hot-Reload |
|---|---|---|---|
users |
Map<String, String> |
{"default": "000…000"} |
✔ |
user_enabled |
Map<String, bool> |
{} |
✔ |
user_ad_tags |
Map<String, String> |
{} |
✔ |
user_max_tcp_conns |
Map<String, usize> |
{} |
✔ |
user_max_tcp_conns_global_each |
usize |
0 |
✔ |
user_expirations |
Map<String, DateTime<Utc>> |
{} |
✔ |
user_data_quota |
Map<String, u64> |
{} |
✔ |
user_max_unique_ips |
Map<String, usize> |
{} |
✔ |
user_max_unique_ips_global_each |
usize |
0 |
✔ |
user_max_unique_ips_mode |
"active_window", "time_window" oder "combined" |
"active_window" |
✔ |
user_max_unique_ips_window_secs |
u64 |
30 |
✔ |
user_source_deny |
Map<String, IpNetwork[]> |
{} |
✘ |
replay_check_len |
usize |
65536 |
✘ |
replay_window_secs |
u64 |
120 |
✘ |
ignore_time_skew |
bool |
false |
✘ |
user_rate_limits |
Map<String, RateLimitBps> |
{} |
✔ |
cidr_rate_limits |
Map<CidrRateLimitKey, RateLimitBps> |
{} |
✔ |
users
-
Einschränkungen / Validierung: Darf nicht leer sein (mindestens ein User muss vorhanden sein). Jeder Wert muss genau 32 Hexadezimalzeichen umfassen.
-
Beschreibung: Zuordnung der Useranmeldeinformationen, die für die Clientauthentifizierung verwendet wird. Schlüssel sind Usernamen; Werte sind MTProxy Geheimnisse.
-
Beispiel:
[access.users] alice = "00112233445566778899aabbccddeeff" bob = "0123456789abcdef0123456789abcdef"
user_enabled
-
Einschränkungen / Validierung:
Map<String, bool>. -
Beschreibung: Optionale Aktivierungsüberschreibungen pro User. Fehlende User sind standardmäßig aktiviert. Ein Wert von
falsedeaktiviert neue Sitzungen für diesen User; Das Festlegen des Werts auftruewird akzeptiert, entspricht jedoch dem Entfernen der Override. API Aktivierungsoperationen entfernen die Override, während Deaktivierungsoperationenfalseschreiben. – Runtime Verhalten: Beim Hot-Reload wird diese Karte sofort angewendet. Durch API oder Neuladen der Konfiguration deaktivierte User werden nach erfolgreicher Authentifizierung abgelehnt und aktive Runtimesitzungen für diesen Usernamen werden abgebrochen. -
Beispiel:
[access.user_enabled] alice = false
user_ad_tags
-
Einschränkungen / Validierung: Jeder Wert muss aus genau 32 Hexadezimalzeichen bestehen (gleiches Format wie
general.ad_tag). Ein All-Null-Tag ist zulässig, protokolliert jedoch eine Warnung. -
Beschreibung: Override des Anzeigen-Tags für gesponserte Kanäle pro User. Wenn ein User hier einen Eintrag hat, hat dieser Vorrang vor
general.ad_tag. -
Beispiel:
[general] ad_tag = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" [access.user_ad_tags] alice = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
user_max_tcp_conns
-
Einschränkungen / Validierung:
Map<String, usize>. -
Beschreibung: Maximale Anzahl gleichzeitiger TCP-Verbindungen pro User.
-
Beispiel:
[access.user_max_tcp_conns] alice = 500
user_max_tcp_conns_global_each
-
Einschränkungen / Validierung:
usize.0deaktiviert das geerbte Limit. -
Beschreibung: Globale maximale Anzahl gleichzeitiger TCP-Verbindungen pro User, angewendet, wenn ein User keinen positiven Eintrag in
[access.user_max_tcp_conns]hat (ein fehlender Schlüssel oder ein Wert von0, beides fällt auf diese Einstellung). Grenzwerte pro User, die größer als0inuser_max_tcp_connssind, haben Vorrang. -
Beispiel:
[access] user_max_tcp_conns_global_each = 200 [access.user_max_tcp_conns] alice = 500 # uses 500, not the global cap # bob hat keinen Eintrag → verwendet 200
user_expirations
-
Einschränkungen / Validierung:
Map<String, DateTime<Utc>>. Jeder Wert muss eine gültige RFC3339/ISO-8601-Datumszeit sein. -
Beschreibung: Ablaufzeitstempel pro Userkonto (UTC).
-
Beispiel:
[access.user_expirations] alice = "2026-12-31T23:59:59Z"
user_data_quota
-
Einschränkungen / Validierung:
Map<String, u64>. -
Beschreibung: Trafficskontingent pro User in Bytes.
-
Beispiel:
[access.user_data_quota] alice = 1073741824 # 1 GiB
user_max_unique_ips
-
Einschränkungen / Validierung:
Map<String, usize>. -
Beschreibung: Eindeutige Source-IP-Limits pro User.
-
Beispiel:
[access.user_max_unique_ips] alice = 16
user_max_unique_ips_global_each
-
Einschränkungen / Validierung:
usize.0deaktiviert das geerbte Limit. -
Beschreibung: Globales eindeutiges IP-Limit pro User, das angewendet wird, wenn ein User in
[access.user_max_unique_ips]keine individuelle Override hat. -
Beispiel:
[access] user_max_unique_ips_global_each = 8
user_max_unique_ips_mode
-
Einschränkungen / Validierung: Muss einer von
"active_window","time_window","combined"sein. -
Beschreibung: Eindeutiger Source-IP-Limit-Abrechnungsmodus.
-
Beispiel:
[access] user_max_unique_ips_mode = "active_window"
user_max_unique_ips_window_secs
-
Einschränkungen / Validierung: Muss
> 0sein. -
Beschreibung: Fenstergröße (Sekunden), die von Abrechnungsmodi mit eindeutiger IP verwendet wird, die ein Zeitfenster enthalten (
"time_window"und"combined"). -
Beispiel:
[access] user_max_unique_ips_window_secs = 30
user_source_deny
-
Einschränkungen / Validierung: Tabelle
username -> IpNetwork[]. Jedes Netzwerk muss als CIDR parsen (zum Beispiel203.0.113.0/24oder2001:db8::/32). -
Beschreibung: Source-IP/CIDR-Verweigerungsliste pro User wird nach erfolgreicher Authentifizierung in den Handshake-Pfaden TLS und MTProto angewendet. Eine übereinstimmende Source-IP wird über denselben Fail-Closed-Pfad wie eine ungültige Authentifizierung abgelehnt.
-
Beispiel:
[access.user_source_deny] alice = ["203.0.113.0/24", "2001:db8:abcd::/48"] bob = ["198.51.100.42/32"]
– Wie es funktioniert (kurze Überprüfung):
– Verbindung von User alice und Quelle 203.0.113.55 -> abgelehnt (entspricht 203.0.113.0/24)
– Verbindung von User alice und Quelle 198.51.100.10 -> durch diesen Regelsatz zulässig (keine Übereinstimmung)
replay_check_len
-
Einschränkungen / Validierung:
usize. -
Beschreibung: Speicherlänge des Wiedergabeschutzes (Anzahl der Einträge, die zur Duplikaterkennung verfolgt werden).
-
Beispiel:
[access] replay_check_len = 65536
replay_window_secs
-
Einschränkungen / Validierung:
u64. -
Beschreibung: Wiedergabeschutz-Zeitfenster in Sekunden.
-
Beispiel:
[access] replay_window_secs = 120
ignore_time_skew
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Deaktiviert Client/Server-Zeitstempelabweichungsprüfungen bei der Wiedergabevalidierung, wenn aktiviert.
-
Beispiel:
[access] ignore_time_skew = false
user_rate_limits
-
Einschränkungen / Validierung: Tabelle
username -> { up_bps, down_bps }. Mindestens eine Richtung muss ungleich Null sein. -
Beschreibung: Bandbreitenobergrenzen pro User in Bits/Sekunde für Upload (
up_bps) und Download (down_bps). -
Beispiel:
[access.user_rate_limits] alice = { up_bps = 1048576, down_bps = 2097152 }
cidr_rate_limits
-
Einschränkungen / Validierung: Tabelle
CIDR oder Auto-Template -> { up_bps, down_bps }. Explizite CIDR-Schlüssel müssen alsIpNetworkparsbar sein; Auto-Template-Schlüssel müssen*4/N(N=0..32),*6/N(N=0..128) oder*/N(N=0..32) verwenden. Mindestens eine Richtung muss ungleich Null sein. Doppelte normalisierte Auto-Templates werden abgelehnt. -
Beschreibung: Source-Subnetz-Bandbreitenlimits, die zusätzlich zu Per-User-Limits greifen. Explizite CIDR-Regeln verwenden Longest-Prefix-Wins und haben Vorrang vor Auto-Templates. Auto-Templates erzeugen Buckets lazy pro passendem Source-Subnetz:
*4/Nfür IPv4,*6/Nfür IPv6 und*/Nals Dual-Stack-Shorthand, bei dem IPv4/Nund IPv6/(N * 4)nutzt. -
Beispiel:
[access.cidr_rate_limits] "203.0.113.0/24" = { up_bps = 0, down_bps = 1048576 } "*4/32" = { up_bps = 262144, down_bps = 1048576 } "*6/64" = { up_bps = 262144, down_bps = 1048576 }
upstreams
| Schlüssel | Typ | Default | Hot-Reload |
|---|---|---|---|
type |
"direct", "socks4", "socks5" oder "shadowsocks" |
— | ✘ |
weight |
u16 |
1 |
✘ |
enabled |
bool |
true |
✘ |
scopes |
String |
"" |
✘ |
ipv4 |
bool |
— (automatisch) | ✘ |
ipv6 |
bool |
— (automatisch) | ✘ |
prefer |
4 oder 6 |
gültig [network].prefer |
✘ |
interface |
String |
— | ✘ |
bind_addresses |
String[] |
— | ✘ |
bindtodevice |
String |
— | ✘ |
force_bind |
String |
— | ✘ |
url |
String |
— | ✘ |
address |
String |
— | ✘ |
user_id |
String |
— | ✘ |
username |
String |
— | ✘ |
password |
String |
— | ✘ |
type
-
Einschränkungen / Validierung: Erforderliches Feld. Muss einer von sein:
"direct","socks4","socks5","shadowsocks". -
Beschreibung: Wählt die Upstream-Transportimplementierung für diesen
[[upstreams]]-Eintrag aus. -
Beispiel:
[[upstreams]] type = "direct" [[upstreams]] type = "socks5" address = "127.0.0.1:9050" [[upstreams]] type = "shadowsocks" url = "ss://2022-blake3-aes-256-gcm:BASE64PASSWORD@127.0.0.1:8388"
weight
-
Einschränkungen / Validierung:
u16(0..=65535). -
Beschreibung: Basisgewichtung, die von der gewichteten zufälligen Upstream-Auswahl verwendet wird (höher = häufiger ausgewählt).
-
Beispiel:
[[upstreams]] type = "direct" weight = 10
enabled
-
Einschränkungen / Validierung:
bool. -
Beschreibung: Bei
falsewird dieser Eintrag ignoriert und nicht für eine Upstream-Auswahl verwendet. -
Beispiel:
[[upstreams]] type = "socks5" address = "127.0.0.1:9050" enabled = false
scopes
-
Einschränkungen / Validierung:
String. Durch Kommas getrennte Liste; Leerzeichen werden beim Abgleich entfernt. -
Beschreibung: Scope-Tags, die für die Upstream-Filterung auf Anfrageebene verwendet werden. Wenn eine Anfrage einen Bereich angibt, können nur Upstreams ausgewählt werden, deren
scopesdieses Tag enthält. Wenn eine Anfrage keinen Bereich angibt, sind nur Upstreams mit leeremscopesberechtigt. -
Beispiel:
[[upstreams]] type = "socks4" address = "10.0.0.10:1080" scopes = "me, fetch, dc2"
ipv4 (upstreams)
-
Einschränkungen / Validierung:
bool(optional). -
Beschreibung: Erlaubt IPv4 DC Ziele für diesen Upstream. Wenn ausgelassen, erkennt Telemt die Unterstützung automatisch anhand des Runtimekonnektivitätsstatus.
-
Beispiel:
[[upstreams]] type = "direct" ipv4 = true
ipv6 (upstreams)
-
Einschränkungen / Validierung:
bool(optional). -
Beschreibung: Erlaubt IPv6 DC Ziele für diesen Upstream. Wenn ausgelassen, erkennt Telemt die Unterstützung automatisch anhand des Runtimekonnektivitätsstatus. Legen Sie dies auf
truefest, wenn der Upstream-Proxy vom lokalen Host über IPv4 erreichbar ist, der Proxy selbst jedoch über IPv6 eine Verbindung zu Telegram-DCs herstellen kann. -
Beispiel:
[[upstreams]] type = "direct" ipv6 = false
prefer (upstreams)
-
Einschränkungen / Validierung: Optionale Ganzzahl. Muss
4oder6sein. -
Beschreibung: Überschreibt die IP-Familienpräferenz für Telegram-DC-Ziele, die über diesen Upstream ausgewählt wurden. Wenn ausgelassen, erbt der Upstream die effektive globale
[network].prefer-Entscheidung. Verwenden Sieprefer = 6zusammen mitipv6 = truefür einen SOCKS- oder Shadowsocks-Upstream, der über IPv6 ausgehen kann, selbst wenn der lokale Telemt-Host nur IPv4 ist. -
Beispiel:
[[upstreams]] type = "socks5" address = "192.0.2.10:1080" ipv6 = true prefer = 6
interface
-
Einschränkungen / Validierung:
String(optional). – Für"direct": kann eine IP-Adresse (wird als explizite lokale Bindung verwendet) oder ein Betriebssystemschnittstellenname (zur Runtime in eine IP aufgelöst; nur Unix) sein. – Für"socks4"/"socks5": wird nur unterstützt, wennaddresseinIP:port-Literal ist; Wennaddressein Hostname ist, wird die Schnittstellenbindung ignoriert. – Für"shadowsocks": als optionaler ausgehender Bindungshinweis an den Shadowsocks-Connector übergeben. -
Beschreibung: Optionale ausgehende Schnittstelle/lokaler Bindungshinweis für den Upstream-Verbindungssocket.
-
Beispiel:
[[upstreams]] type = "direct" interface = "eth0" [[upstreams]] type = "socks5" address = "203.0.113.10:1080" interface = "192.0.2.10" # explicit local bind IP
bind_addresses
-
Einschränkungen / Validierung:
String[](optional). Gilt nur fürtype = "direct". – Jeder Eintrag sollte eine IP-Adresszeichenfolge sein. – Zur Runtime wählt Telemt eine Adresse aus, die der Zielfamilie entspricht (IPv4 vs. IPv6). Wennbind_addressesfestgelegt ist und keiner der Zielfamilie entspricht, schlägt der Verbindungsversuch fehl. -
Beschreibung: Explizite lokale Source-Adressen für ausgehende direkte TCP-Verbindungen. Wenn mehrere Adressen angegeben werden, erfolgt die Auswahl im Round-Robin-Verfahren.
-
Beispiel:
[[upstreams]] type = "direct" bind_addresses = ["192.0.2.10", "192.0.2.11"]
bindtodevice
-
Einschränkungen / Validierung:
String(optional). Gilt nur fürtype = "direct"und ist nur Linux. -
Beschreibung: Hartes Schnittstellen-Pinning über
SO_BINDTODEVICEfür ausgehende direkte TCP-Verbindungen. -
Beispiel:
[[upstreams]] type = "direct" bindtodevice = "eth0"
force_bind
-
Einschränkungen / Validierung:
String(optional). Alias fürbindtodevice. -
Beschreibung: Abwärtskompatibler Alias für Linux
SO_BINDTODEVICEHard-Interface-Pinning. -
Beispiel:
[[upstreams]] type = "direct" force_bind = "eth0"
url
-
Einschränkungen / Validierung: Gilt nur für
type = "shadowsocks". – Muss eine gültige Shadowsocks-URL sein, die von dershadowsocks-Kiste akzeptiert wird. – Shadowsocks Plugins werden nicht unterstützt. – Erfordertgeneral.use_middle_proxy = false(Shadowsocks-Upstreams werden im ME-Modus abgelehnt). -
Beschreibung: Shadowsocks Server-URL, die für die Verbindung zu Telegram über ein Shadowsocks-Relay verwendet wird.
-
Beispiel:
[general] use_middle_proxy = false [[upstreams]] type = "shadowsocks" url = "ss://2022-blake3-aes-256-gcm:BASE64PASSWORD@127.0.0.1:8388"
address
-
Einschränkungen / Validierung: Erforderlich für
type = "socks4"undtype = "socks5". Musshost:portoderip:portsein. -
Beschreibung: SOCKS-Proxyserver-Endpunkt, der für Upstream-Verbindungen verwendet wird.
-
Beispiel:
[[upstreams]] type = "socks5" address = "127.0.0.1:9050"
user_id
-
Einschränkungen / Validierung:
String(optional). Nur fürtype = "socks4". -
Beschreibung: SOCKS4 CONNECT-User-ID. Hinweis: Wenn ein Anforderungsbereich ausgewählt ist, kann Telemt diesen möglicherweise mit dem ausgewählten Bereichswert überschreiben.
-
Beispiel:
[[upstreams]] type = "socks4" address = "127.0.0.1:1080" user_id = "telemt"
username
-
Einschränkungen / Validierung:
String(optional). Nur fürtype = "socks5". -
Beschreibung: SOCKS5 Username (für Username/Passwort-Authentifizierung). Hinweis: Wenn ein Anforderungsbereich ausgewählt ist, kann Telemt diesen möglicherweise mit dem ausgewählten Bereichswert überschreiben.
-
Beispiel:
[[upstreams]] type = "socks5" address = "127.0.0.1:9050" username = "alice"
password
-
Einschränkungen / Validierung:
String(optional). Nur fürtype = "socks5". -
Beschreibung: SOCKS5 Passwort (für Username/Passwort-Authentifizierung). Hinweis: Wenn ein Anforderungsbereich ausgewählt ist, kann Telemt diesen möglicherweise mit dem ausgewählten Bereichswert überschreiben.
-
Beispiel:
[[upstreams]] type = "socks5" address = "127.0.0.1:9050" username = "alice" password = "secret"