mirror of
https://github.com/telemt/telemt.git
synced 2026-04-14 17:14:09 +03:00
Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
286662fc51 | ||
|
|
c5390baaf1 | ||
|
|
1cd1e96079 | ||
|
|
2b995c31b0 | ||
|
|
442320302d | ||
|
|
ac0dde567b | ||
|
|
b2fe9b78d8 | ||
|
|
f039ce1827 | ||
|
|
5f5a3e3fa0 | ||
|
|
f9e54ee739 | ||
|
|
d477d6ee29 | ||
|
|
1383dfcbb1 | ||
|
|
107a7cc758 | ||
|
|
4f3193fdaa | ||
|
|
d6be691c67 | ||
|
|
0b0be07a9c |
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
   [](https://t.me/telemtrs)
|
   [](https://t.me/telemtrs)
|
||||||
|
|
||||||
|
[🇷🇺 README на русском](https://github.com/telemt/telemt/blob/main/README.ru.md)
|
||||||
|
|
||||||
***Löst Probleme, bevor andere überhaupt wissen, dass sie existieren*** / ***It solves problems before others even realize they exist***
|
***Löst Probleme, bevor andere überhaupt wissen, dass sie existieren*** / ***It solves problems before others even realize they exist***
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
@@ -25,6 +27,7 @@ curl -fsSL https://raw.githubusercontent.com/telemt/telemt/main/install.sh | sh
|
|||||||
- [Quick Start Guide](docs/Quick_start/QUICK_START_GUIDE.en.md)
|
- [Quick Start Guide](docs/Quick_start/QUICK_START_GUIDE.en.md)
|
||||||
- [Инструкция по быстрому запуску](docs/Quick_start/QUICK_START_GUIDE.ru.md)
|
- [Инструкция по быстрому запуску](docs/Quick_start/QUICK_START_GUIDE.ru.md)
|
||||||
|
|
||||||
|
## Features
|
||||||
Our implementation of **TLS-fronting** is one of the most deeply debugged, focused, advanced and *almost* **"behaviorally consistent to real"**: we are confident we have it right - [see evidence on our validation and traces](docs/FAQ.en.md#recognizability-for-dpi-and-crawler)
|
Our implementation of **TLS-fronting** is one of the most deeply debugged, focused, advanced and *almost* **"behaviorally consistent to real"**: we are confident we have it right - [see evidence on our validation and traces](docs/FAQ.en.md#recognizability-for-dpi-and-crawler)
|
||||||
|
|
||||||
Our ***Middle-End Pool*** is fastest by design in standard scenarios, compared to other implementations of connecting to the Middle-End Proxy: non dramatically, but usual
|
Our ***Middle-End Pool*** is fastest by design in standard scenarios, compared to other implementations of connecting to the Middle-End Proxy: non dramatically, but usual
|
||||||
|
|||||||
23
README.ru.md
23
README.ru.md
@@ -54,7 +54,6 @@ curl -fsSL https://raw.githubusercontent.com/telemt/telemt/main/install.sh | sh
|
|||||||
- [FAQ EN](docs/FAQ.en.md)
|
- [FAQ EN](docs/FAQ.en.md)
|
||||||
|
|
||||||
## Сборка
|
## Сборка
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Клонируйте репозиторий
|
# Клонируйте репозиторий
|
||||||
git clone https://github.com/telemt/telemt
|
git clone https://github.com/telemt/telemt
|
||||||
@@ -63,7 +62,6 @@ cd telemt
|
|||||||
# Начните процесс сборки
|
# Начните процесс сборки
|
||||||
cargo build --release
|
cargo build --release
|
||||||
|
|
||||||
# Устройства с небольшим объёмом оперативной памяти (1 ГБ, например NanoPi Neo3 / Raspberry Pi Zero 2):
|
|
||||||
# В текущем release-профиле используется lto = "fat" для максимальной оптимизации (см. Cargo.toml).
|
# В текущем release-профиле используется lto = "fat" для максимальной оптимизации (см. Cargo.toml).
|
||||||
# На системах с малым объёмом RAM (~1 ГБ) можно переопределить это значение на "thin".
|
# На системах с малым объёмом RAM (~1 ГБ) можно переопределить это значение на "thin".
|
||||||
|
|
||||||
@@ -87,4 +85,25 @@ telemt config.toml
|
|||||||
- Безопасность памяти;
|
- Безопасность памяти;
|
||||||
- Асинхронная архитектура Tokio.
|
- Асинхронная архитектура Tokio.
|
||||||
|
|
||||||
|
## Поддержать Telemt
|
||||||
|
|
||||||
|
Telemt — это бесплатное программное обеспечение с открытым исходным кодом, разработанное в свободное время.
|
||||||
|
Если оно оказалось вам полезным, вы можете поддержать дальнейшую разработку.
|
||||||
|
|
||||||
|
Принимаемые криптовалюты (BTC, ETH, USDT, 350+ и другие):
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://nowpayments.io/donation?api_key=2bf1afd2-abc2-49f9-a012-f1e715b37223" target="_blank" rel="noreferrer noopener">
|
||||||
|
<img src="https://nowpayments.io/images/embeds/donation-button-white.svg" alt="Cryptocurrency & Bitcoin donation button by NOWPayments" height="80">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
Monero (XMR) напрямую:
|
||||||
|
|
||||||
|
```
|
||||||
|
8Bk4tZEYPQWSypeD2hrUXG2rKbAKF16GqEN942ZdAP5cFdSqW6h4DwkP5cJMAdszzuPeHeHZPTyjWWFwzeFdjuci3ktfMoB
|
||||||
|
```
|
||||||
|
|
||||||
|
Все пожертвования пойдут на инфраструктуру, разработку и исследования.
|
||||||
|
|
||||||

|

|
||||||
|
|||||||
13
config.toml
13
config.toml
@@ -32,13 +32,13 @@ show = "*"
|
|||||||
port = 443
|
port = 443
|
||||||
# proxy_protocol = false # Enable if behind HAProxy/nginx with PROXY protocol
|
# proxy_protocol = false # Enable if behind HAProxy/nginx with PROXY protocol
|
||||||
# metrics_port = 9090
|
# metrics_port = 9090
|
||||||
# metrics_listen = "0.0.0.0:9090" # Listen address for metrics (overrides metrics_port)
|
# metrics_listen = "127.0.0.1:9090" # Listen address for metrics (overrides metrics_port)
|
||||||
# metrics_whitelist = ["127.0.0.1", "::1", "0.0.0.0/0"]
|
# metrics_whitelist = ["127.0.0.1/32", "::1/128"]
|
||||||
|
|
||||||
[server.api]
|
[server.api]
|
||||||
enabled = true
|
enabled = true
|
||||||
listen = "0.0.0.0:9091"
|
listen = "127.0.0.1:9091"
|
||||||
whitelist = ["127.0.0.0/8"]
|
whitelist = ["127.0.0.1/32", "::1/128"]
|
||||||
minimal_runtime_enabled = false
|
minimal_runtime_enabled = false
|
||||||
minimal_runtime_cache_ttl_ms = 1000
|
minimal_runtime_cache_ttl_ms = 1000
|
||||||
|
|
||||||
@@ -48,9 +48,12 @@ ip = "0.0.0.0"
|
|||||||
|
|
||||||
# === Anti-Censorship & Masking ===
|
# === Anti-Censorship & Masking ===
|
||||||
[censorship]
|
[censorship]
|
||||||
|
# Fake-TLS / SNI masking domain used in generated ee-links.
|
||||||
|
# Changing tls_domain invalidates previously generated TLS links.
|
||||||
tls_domain = "petrovich.ru"
|
tls_domain = "petrovich.ru"
|
||||||
|
|
||||||
mask = true
|
mask = true
|
||||||
tls_emulation = true # Fetch real cert lengths and emulate TLS records
|
tls_emulation = true # Fetch real cert lengths and emulate TLS records
|
||||||
tls_front_dir = "tlsfront" # Cache directory for TLS emulation
|
tls_front_dir = "tlsfront" # Cache directory for TLS emulation
|
||||||
|
|
||||||
[access.users]
|
[access.users]
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ API runtime is configured in `[server.api]`.
|
|||||||
|
|
||||||
| Field | Type | Default | Description |
|
| Field | Type | Default | Description |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| `enabled` | `bool` | `false` | Enables REST API listener. |
|
| `enabled` | `bool` | `true` | Enables REST API listener. |
|
||||||
| `listen` | `string` (`IP:PORT`) | `127.0.0.1:9091` | API bind address. |
|
| `listen` | `string` (`IP:PORT`) | `0.0.0.0:9091` | API bind address. |
|
||||||
| `whitelist` | `CIDR[]` | `127.0.0.1/32, ::1/128` | Source IP allowlist. Empty list means allow all. |
|
| `whitelist` | `CIDR[]` | `127.0.0.0/8` | Source IP allowlist. Empty list means allow all. |
|
||||||
| `auth_header` | `string` | `""` | Exact value for `Authorization` header. Empty disables header auth. |
|
| `auth_header` | `string` | `""` | Exact value for `Authorization` header. Empty disables header auth. |
|
||||||
| `request_body_limit_bytes` | `usize` | `65536` | Maximum request body size. Must be `> 0`. |
|
| `request_body_limit_bytes` | `usize` | `65536` | Maximum request body size. Must be `> 0`. |
|
||||||
| `minimal_runtime_enabled` | `bool` | `false` | Enables runtime snapshot endpoints requiring ME pool read-lock aggregation. |
|
| `minimal_runtime_enabled` | `bool` | `true` | Enables runtime snapshot endpoints requiring ME pool read-lock aggregation. |
|
||||||
| `minimal_runtime_cache_ttl_ms` | `u64` | `1000` | Cache TTL for minimal snapshots. `0` disables cache; valid range is `[0, 60000]`. |
|
| `minimal_runtime_cache_ttl_ms` | `u64` | `1000` | Cache TTL for minimal snapshots. `0` disables cache; valid range is `[0, 60000]`. |
|
||||||
| `runtime_edge_enabled` | `bool` | `false` | Enables runtime edge endpoints with cached aggregation payloads. |
|
| `runtime_edge_enabled` | `bool` | `false` | Enables runtime edge endpoints with cached aggregation payloads. |
|
||||||
| `runtime_edge_cache_ttl_ms` | `u64` | `1000` | Cache TTL for runtime edge summary payloads. `0` disables cache. |
|
| `runtime_edge_cache_ttl_ms` | `u64` | `1000` | Cache TTL for runtime edge summary payloads. `0` disables cache. |
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -27,7 +27,8 @@ cargo build --release
|
|||||||
./target/release/telemt --version
|
./target/release/telemt --version
|
||||||
```
|
```
|
||||||
|
|
||||||
For low-RAM systems, this repository already uses `lto = "thin"` in release profile.
|
For low-RAM systems, note that this repository currently uses `lto = "fat"` in release profile.
|
||||||
|
On constrained builders, a local override to `lto = "thin"` may be more practical.
|
||||||
|
|
||||||
## 3. Install binary and config
|
## 3. Install binary and config
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,36 @@
|
|||||||
|
# Installation Options
|
||||||
|
There are three options for installing Telemt:
|
||||||
|
- [Automated installation using a script](#very-quick-start).
|
||||||
|
- [Manual installation of Telemt as a service](#telemt-via-systemd).
|
||||||
|
- [Installation using Docker Compose](#telemt-via-docker-compose).
|
||||||
|
|
||||||
# Very quick start
|
# Very quick start
|
||||||
|
|
||||||
### One-command installation / update on re-run
|
### One-command installation / update on re-run
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://raw.githubusercontent.com/telemt/telemt/main/install.sh | sh
|
curl -fsSL https://raw.githubusercontent.com/telemt/telemt/main/install.sh | sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
After starting, the script will prompt for:
|
||||||
|
- Your language (1 - English, 2 - Russian);
|
||||||
|
- Your TLS domain (press Enter for petrovich.ru).
|
||||||
|
|
||||||
|
The script checks if the port (default **443**) is free. If the port is already in use, installation will fail. You need to free up the port or use the **-p** flag with a different port to retry the installation.
|
||||||
|
|
||||||
|
To modify the script’s startup parameters, you can use the following flags:
|
||||||
|
- **-d, --domain** - TLS domain;
|
||||||
|
- **-p, --port** - server port (1–65535);
|
||||||
|
- **-s, --secret** - 32 hex secret;
|
||||||
|
- **-a, --ad-tag** - ad_tag;
|
||||||
|
- **-l, --lan**g - language (1/en or 2/ru);
|
||||||
|
|
||||||
|
Providing all options skips interactive prompts.
|
||||||
|
|
||||||
|
After completion, the script will provide a link for client connections:
|
||||||
|
```bash
|
||||||
|
tg://proxy?server=IP&port=PORT&secret=SECRET
|
||||||
|
```
|
||||||
|
|
||||||
### Installing a specific version
|
### Installing a specific version
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://raw.githubusercontent.com/telemt/telemt/main/install.sh | sh -s -- 3.3.39
|
curl -fsSL https://raw.githubusercontent.com/telemt/telemt/main/install.sh | sh -s -- 3.3.39
|
||||||
@@ -110,15 +137,15 @@ show = "*"
|
|||||||
# === Server Binding ===
|
# === Server Binding ===
|
||||||
[server]
|
[server]
|
||||||
port = 443
|
port = 443
|
||||||
# proxy_protocol = false # Enable if behind HAProxy/nginx with PROXY protocol
|
# proxy_protocol = false # Enable if behind HAProxy/nginx with PROXY protocol
|
||||||
# metrics_port = 9090
|
# metrics_port = 9090
|
||||||
# metrics_listen = "0.0.0.0:9090" # Listen address for metrics (overrides metrics_port)
|
# metrics_listen = "127.0.0.1:9090" # Listen address for metrics (overrides metrics_port)
|
||||||
# metrics_whitelist = ["127.0.0.1", "::1", "0.0.0.0/0"]
|
# metrics_whitelist = ["127.0.0.1/32", "::1/128"]
|
||||||
|
|
||||||
[server.api]
|
[server.api]
|
||||||
enabled = true
|
enabled = true
|
||||||
listen = "0.0.0.0:9091"
|
listen = "127.0.0.1:9091"
|
||||||
whitelist = ["127.0.0.0/8"]
|
whitelist = ["127.0.0.1/32", "::1/128"]
|
||||||
minimal_runtime_enabled = false
|
minimal_runtime_enabled = false
|
||||||
minimal_runtime_cache_ttl_ms = 1000
|
minimal_runtime_cache_ttl_ms = 1000
|
||||||
|
|
||||||
@@ -128,9 +155,9 @@ ip = "0.0.0.0"
|
|||||||
|
|
||||||
# === Anti-Censorship & Masking ===
|
# === Anti-Censorship & Masking ===
|
||||||
[censorship]
|
[censorship]
|
||||||
tls_domain = "petrovich.ru"
|
tls_domain = "petrovich.ru" # Fake-TLS / SNI masking domain used in generated ee-links
|
||||||
mask = true
|
mask = true
|
||||||
tls_emulation = true # Fetch real cert lengths and emulate TLS records
|
tls_emulation = true # Fetch real cert lengths and emulate TLS records
|
||||||
tls_front_dir = "tlsfront" # Cache directory for TLS emulation
|
tls_front_dir = "tlsfront" # Cache directory for TLS emulation
|
||||||
|
|
||||||
[access.users]
|
[access.users]
|
||||||
@@ -141,9 +168,9 @@ hello = "00000000000000000000000000000000"
|
|||||||
then Ctrl+S -> Ctrl+X to save
|
then Ctrl+S -> Ctrl+X to save
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Replace the value of the hello parameter with the value you obtained in step 0.
|
> Replace the value of the `hello` parameter with the value you obtained in step 0.
|
||||||
> Additionally, change the value of the tls_domain parameter to a different website.
|
> Additionally, change the value of the `tls_domain` parameter to a different website.
|
||||||
> Changing the tls_domain parameter will break all links that use the old domain!
|
> Changing the `tls_domain` parameter will break all links that use the old domain!
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,35 @@
|
|||||||
|
# Варианты установки
|
||||||
|
Имеется три варианта установки Telemt:
|
||||||
|
- [Автоматизированная установка с помощью скрипта](#очень-быстрый-старт).
|
||||||
|
- [Ручная установка Telemt в качестве службы](#telemt-через-systemd-вручную).
|
||||||
|
- [Установка через Docker Compose](#telemt-через-docker-compose).
|
||||||
|
|
||||||
# Очень быстрый старт
|
# Очень быстрый старт
|
||||||
|
|
||||||
### Установка одной командой / обновление при повторном запуске
|
### Установка одной командой / обновление при повторном запуске
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://raw.githubusercontent.com/telemt/telemt/main/install.sh | sh
|
curl -fsSL https://raw.githubusercontent.com/telemt/telemt/main/install.sh | sh
|
||||||
```
|
```
|
||||||
|
После запуска скрипт запросит:
|
||||||
|
- ваш язык (1 - English, 2 - Русский);
|
||||||
|
- ваш TLS-домен (нажмите Enter для petrovich.ru).
|
||||||
|
|
||||||
|
Во время установки скрипт проверяет, свободен ли порт (по умолчанию **443**). Если порт занят другим процессом - установка завершится с ошибкой. Для повторной установки необходимо освободить порт или указать другой через флаг **-p**.
|
||||||
|
|
||||||
|
Для изменения параметров запуска скрипта можно использовать следующие флаги:
|
||||||
|
- **-d, --domain** - TLS-домен;
|
||||||
|
- **-p, --port** - порт (1–65535);
|
||||||
|
- **-s, --secret** - секрет (32 hex символа);
|
||||||
|
- **-a, --ad-tag** - ad_tag;
|
||||||
|
- **-l, --lang** - язык (1/en или 2/ru).
|
||||||
|
|
||||||
|
Если заданы флаги для языка и домена, интерактивных вопросов не будет.
|
||||||
|
|
||||||
|
После завершения установки скрипт выдаст ссылку для подключения клиентов:
|
||||||
|
```bash
|
||||||
|
tg://proxy?server=IP&port=PORT&secret=SECRET
|
||||||
|
```
|
||||||
|
|
||||||
### Установка нужной версии
|
### Установка нужной версии
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://raw.githubusercontent.com/telemt/telemt/main/install.sh | sh -s -- 3.3.39
|
curl -fsSL https://raw.githubusercontent.com/telemt/telemt/main/install.sh | sh -s -- 3.3.39
|
||||||
@@ -103,22 +129,22 @@ tls = true
|
|||||||
[general.links]
|
[general.links]
|
||||||
show = "*"
|
show = "*"
|
||||||
# show = ["alice", "bob"] # Показывать ссылки только для alice и bob
|
# show = ["alice", "bob"] # Показывать ссылки только для alice и bob
|
||||||
# show = "*" # Показывать ссылки для всех пользователей
|
# show = "*" # Показывать ссылки для всех пользователей
|
||||||
# public_host = "proxy.example.com" # Хост (IP-адрес или домен) для ссылок tg://
|
# public_host = "proxy.example.com" # Хост (IP-адрес или домен) для ссылок tg://
|
||||||
# public_port = 443 # Порт для ссылок tg:// (по умолчанию: server.port)
|
# public_port = 443 # Порт для ссылок tg:// (по умолчанию: server.port)
|
||||||
|
|
||||||
# === Привязка сервера ===
|
# === Привязка сервера ===
|
||||||
[server]
|
[server]
|
||||||
port = 443
|
port = 443
|
||||||
# proxy_protocol = false # Включите, если сервер находится за HAProxy/nginx с протоколом PROXY
|
# proxy_protocol = false # Включите, если сервер находится за HAProxy/nginx с протоколом PROXY
|
||||||
# metrics_port = 9090
|
# metrics_port = 9090
|
||||||
# metrics_listen = "0.0.0.0:9090" # Адрес прослушивания для метрик (переопределяет metrics_port)
|
# metrics_listen = "127.0.0.1:9090" # Адрес прослушивания для метрик (переопределяет metrics_port)
|
||||||
# metrics_whitelist = ["127.0.0.1", "::1", "0.0.0.0/0"]
|
# metrics_whitelist = ["127.0.0.1/32", "::1/128"]
|
||||||
|
|
||||||
[server.api]
|
[server.api]
|
||||||
enabled = true
|
enabled = true
|
||||||
listen = "0.0.0.0:9091"
|
listen = "127.0.0.1:9091"
|
||||||
whitelist = ["127.0.0.0/8"]
|
whitelist = ["127.0.0.1/32", "::1/128"]
|
||||||
minimal_runtime_enabled = false
|
minimal_runtime_enabled = false
|
||||||
minimal_runtime_cache_ttl_ms = 1000
|
minimal_runtime_cache_ttl_ms = 1000
|
||||||
|
|
||||||
@@ -128,9 +154,9 @@ ip = "0.0.0.0"
|
|||||||
|
|
||||||
# === Обход блокировок и маскировка ===
|
# === Обход блокировок и маскировка ===
|
||||||
[censorship]
|
[censorship]
|
||||||
tls_domain = "petrovich.ru"
|
tls_domain = "petrovich.ru" # Домен Fake-TLS / SNI, который будет использоваться в сгенерированных ee-ссылках
|
||||||
mask = true
|
mask = true
|
||||||
tls_emulation = true # Получить реальную длину сертификата и эмулировать запись TLS
|
tls_emulation = true # Получить реальную длину сертификата и эмулировать запись TLS
|
||||||
tls_front_dir = "tlsfront" # Директория кэша для эмуляции TLS
|
tls_front_dir = "tlsfront" # Директория кэша для эмуляции TLS
|
||||||
|
|
||||||
[access.users]
|
[access.users]
|
||||||
@@ -141,9 +167,9 @@ hello = "00000000000000000000000000000000"
|
|||||||
Затем нажмите Ctrl+S -> Ctrl+X, чтобы сохранить
|
Затем нажмите Ctrl+S -> Ctrl+X, чтобы сохранить
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Замените значение параметра hello на значение, которое вы получили в пункте 0.
|
> Замените значение параметра `hello` на значение, которое вы получили в пункте 0.
|
||||||
> Так же замените значение параметра tls_domain на другой сайт.
|
> Так же замените значение параметра `tls_domain` на другой сайт.
|
||||||
> Изменение параметра tls_domain сделает нерабочими все ссылки, использующие старый домен!
|
> Изменение параметра `tls_domain` сделает нерабочими все ссылки, использующие старый домен!
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user