mirror of https://github.com/telemt/telemt.git
286 lines
16 KiB
Markdown
286 lines
16 KiB
Markdown
## Как настроить канал "спонсор прокси" и статистику через бота @MTProxybot
|
||
|
||
1. Зайдите в бота @MTProxybot.
|
||
2. Введите команду `/newproxy`.
|
||
3. Отправьте IP-адрес и порт сервера. Например: `1.2.3.4:443`.
|
||
4. Откройте файл конфигурации: `nano /etc/telemt/telemt.toml`.
|
||
5. Скопируйте и отправьте боту секрет пользователя из раздела `[access.users]`.
|
||
6. Скопируйте тег (tag), который выдаст бот. Например: `1234567890abcdef1234567890abcdef`.
|
||
> [!WARNING]
|
||
> Ссылка, которую выдает бот, работать не будет. Не копируйте и не используйте её!
|
||
7. Раскомментируйте параметр `ad_tag` и впишите тег, полученный от бота.
|
||
8. Раскомментируйте или добавьте параметр `use_middle_proxy = true`.
|
||
|
||
Пример конфигурации:
|
||
```toml
|
||
[general]
|
||
ad_tag = "1234567890abcdef1234567890abcdef"
|
||
use_middle_proxy = true
|
||
```
|
||
9. Сохраните изменения (в nano: Ctrl+S -> Ctrl+X).
|
||
10. Перезапустите службу telemt: `systemctl restart telemt`.
|
||
11. В боте отправьте команду `/myproxies` и выберите добавленный сервер.
|
||
12. Нажмите кнопку «Set promotion».
|
||
13. Отправьте **публичную ссылку** на канал. Приватные каналы добавлять нельзя!
|
||
14. Подождите примерно 1 час, пока информация обновится на серверах Telegram.
|
||
> [!WARNING]
|
||
> Спонсорский канал не будет у вас отображаться, если вы уже на него подписаны.
|
||
|
||
**Вы также можете настроить разные спонсорские каналы для разных пользователей:**
|
||
```toml
|
||
[access.user_ad_tags]
|
||
hello = "ad_tag"
|
||
hello2 = "ad_tag2"
|
||
```
|
||
## Распознаваемость для DPI и сканеров
|
||
|
||
1 апреля 2026 года нам стало известно о методе обнаружения MTProxy Fake-TLS, основанном на расширении ECH и порядке набора шифров,
|
||
а также об общем уникальном отпечатке JA3/JA4, который не встречается в современных браузерах: мы уже отправили первоначальные изменения разработчикам Telegram Desktop и работаем над обновлениями для других клиентов.
|
||
|
||
- Мы считаем это прорывом, которому на сегодняшний день нет стабильных аналогов;
|
||
- Исходя из этого: если `telemt` настроен правильно, **режим TLS полностью идентичен реальному «рукопожатию» + обмену данными** с указанным хостом;
|
||
- Вот наши доказательства:
|
||
- 212.220.88.77 — «фиктивный» хост, на котором запущен `telemt`;
|
||
- `petrovich.ru` — хост с `tls` + `masking`, в HEX: `706574726f766963682e7275`;
|
||
- **Без MITM + без поддельных сертификатов/шифрования** = чистое прозрачное *TCP Splice* к «лучшему» исходному серверу: MTProxy или tls/mask-host:
|
||
- DPI видит легитимный HTTPS к `tls_host`, включая *достоверную цепочку доверия* и энтропию;
|
||
- Краулеры полностью удовлетворены получением ответов от `mask_host`.
|
||
|
||
### Клиент С секретным ключом получает доступ к ресурсу MTProxy:
|
||
|
||
<img width="360" height="439" alt="telemt" src="https://github.com/user-attachments/assets/39352afb-4a11-4ecc-9d91-9e8cfb20607d" />
|
||
|
||
### Клиент БЕЗ секретного ключа получает прозрачный доступ к указанному ресурсу:
|
||
- с доверенным сертификатом;
|
||
- с исходным «рукопожатием»;
|
||
- с полным циклом запрос-ответ;
|
||
- с низкой задержкой.
|
||
|
||
```bash
|
||
root@debian:~/telemt# curl -v -I --resolve petrovich.ru:443:212.220.88.77 https://petrovich.ru/
|
||
* Added petrovich.ru:443:212.220.88.77 to DNS cache
|
||
* Hostname petrovich.ru was found in DNS cache
|
||
* Trying 212.220.88.77:443...
|
||
* Connected to petrovich.ru (212.220.88.77) port 443 (#0)
|
||
* ALPN: offers h2,http/1.1
|
||
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
|
||
* CAfile: /etc/ssl/certs/ca-certificates.crt
|
||
* CApath: /etc/ssl/certs
|
||
* TLSv1.3 (IN), TLS handshake, Server hello (2):
|
||
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
|
||
* TLSv1.3 (IN), TLS handshake, Certificate (11):
|
||
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
|
||
* TLSv1.3 (IN), TLS handshake, Finished (20):
|
||
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
|
||
* TLSv1.3 (OUT), TLS handshake, Finished (20):
|
||
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
|
||
* ALPN: server did not agree on a protocol. Uses default.
|
||
* Server certificate:
|
||
* subject: C=RU; ST=Saint Petersburg; L=Saint Petersburg; O=STD Petrovich; CN=*.petrovich.ru
|
||
* start date: Jan 28 11:21:01 2025 GMT
|
||
* expire date: Mar 1 11:21:00 2026 GMT
|
||
* subjectAltName: host "petrovich.ru" matched cert's "petrovich.ru"
|
||
* issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign RSA OV SSL CA 2018
|
||
* SSL certificate verify ok.
|
||
* using HTTP/1.x
|
||
> HEAD / HTTP/1.1
|
||
> Host: petrovich.ru
|
||
> User-Agent: curl/7.88.1
|
||
> Accept: */*
|
||
>
|
||
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
|
||
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
|
||
* old SSL session ID is stale, removing
|
||
< HTTP/1.1 200 OK
|
||
HTTP/1.1 200 OK
|
||
< Server: Variti/0.9.3a
|
||
Server: Variti/0.9.3a
|
||
< Date: Thu, 01 Jan 2026 00:0000 GMT
|
||
Date: Thu, 01 Jan 2026 00:0000 GMT
|
||
< Access-Control-Allow-Origin: *
|
||
Access-Control-Allow-Origin: *
|
||
< Content-Type: text/html
|
||
Content-Type: text/html
|
||
< Cache-Control: no-store
|
||
Cache-Control: no-store
|
||
< Expires: Thu, 01 Jan 2026 00:0000 GMT
|
||
Expires: Thu, 01 Jan 2026 00:0000 GMT
|
||
< Pragma: no-cache
|
||
Pragma: no-cache
|
||
< Set-Cookie: ipp_uid=XXXXX/XXXXX/XXXXX==; Expires=Tue, 31 Dec 2040 23:59:59 GMT; Domain=.petrovich.ru; Path=/
|
||
Set-Cookie: ipp_uid=XXXXX/XXXXX/XXXXX==; Expires=Tue, 31 Dec 2040 23:59:59 GMT; Domain=.petrovich.ru; Path=/
|
||
< Content-Type: text/html
|
||
Content-Type: text/html
|
||
< Content-Length: 31253
|
||
Content-Length: 31253
|
||
< Connection: keep-alive
|
||
Connection: keep-alive
|
||
< Keep-Alive: timeout=60
|
||
Keep-Alive: timeout=60
|
||
|
||
<
|
||
* Connection #0 to host petrovich.ru left intact
|
||
|
||
```
|
||
- Мы поставили перед собой задачу, не сдавались и не просто «бились в пустоту»: теперь у нас есть что вам показать.
|
||
- Не верите нам на слово? — Это прекрасно, и мы уважаем ваше решение: вы можете собрать свой собственный `telemt` или скачать готовую сборку и проверить её прямо сейчас.
|
||
|
||
### Звонки в Telegram через MTProxy
|
||
- Архитектура Telegram **НЕ поддерживает звонки через MTProxy**, а только через SOCKS5, который невозможно замаскировать
|
||
|
||
### Как DPI распознает TLS-соединение MTProxy?
|
||
- DPI распознает MTProxy в режиме Fake TLS (ee) как TLS 1.3
|
||
- указанный вами SNI отправляется как клиентом, так и сервером;
|
||
- ALPN аналогичен HTTP 1.1/2;
|
||
- высокая энтропия, что нормально для трафика, зашифрованного AES;
|
||
|
||
### Белый список по IP
|
||
- MTProxy не может работать, если:
|
||
- отсутствует IP-связь с целевым хостом: российский белый список в мобильных сетях — «Белый список»;
|
||
- ИЛИ весь TCP-трафик заблокирован;
|
||
- ИЛИ трафик с высокой энтропией/зашифрованный трафик заблокирован: контент-фильтры в университетах и критически важной инфраструктуре;
|
||
- ИЛИ весь TLS-трафик заблокирован;
|
||
- ИЛИ заблокирован указанный порт: используйте 443, чтобы сделать его «как настоящий»;
|
||
- ИЛИ заблокирован предоставленный SNI: используйте «официально одобренное»/безобидное имя;
|
||
- как и большинство протоколов в Интернете;
|
||
- такие ситуации наблюдаются:
|
||
- в Китае за Великим файрволом;
|
||
- в России в мобильных сетях, реже в проводных сетях;
|
||
- в Иране во время «активности».
|
||
|
||
|
||
## Зачем нужен middle proxy (ME)
|
||
https://github.com/telemt/telemt/discussions/167
|
||
|
||
|
||
## Что такое dd и ee в контексте MTProxy?
|
||
|
||
Это два разных режима работы прокси. Понять, какой режим используется, можно взглянув на начало секрета — там будет dd или ee, вот пример:
|
||
tg://proxy?server=s1.dimasssss.space&port=443&secret=eebe3007e927acd147dde12bee8b1a7c9364726976652e676f6f676c652e636f6d
|
||
|
||
dd — режим с мусорным трафиком, обфускацией данных, похожий на shadowsocks. У такого трафика есть заметный паттерн, который DPI умеют распознавать и впоследствии блокировать. Использовать этот режим на текущий момент не рекомендуется.
|
||
|
||
ee — режим маскировки под существующий домен (FakeTLS), словно вы сёрфите в интернете через браузер. На текущий момент не попадает под блокировку.
|
||
|
||
### Где эти режимы настраиваются?
|
||
|
||
```toml
|
||
В конфиге telemt.toml в разделе [general.modes]:
|
||
classic = false # классический режим, давно стал бесполезным
|
||
secure = false # переменная dd-режима
|
||
tls = true # переменная ee-режима
|
||
```
|
||
|
||
## Сколько человек может пользоваться одной ссылкой
|
||
|
||
По умолчанию одной ссылкой может пользоваться неограниченное число людей.
|
||
Однако вы можете ограничить количество уникальных IP-адресов для каждого пользователя:
|
||
```toml
|
||
[access.user_max_unique_ips]
|
||
hello = 1
|
||
```
|
||
Этот параметр задает максимальное количество уникальных IP-адресов, с которых можно одновременно использовать одну ссылку. Если первый пользователь отключится, второй сможет подключиться. При этом с одного IP-адреса могут подключаться несколько пользователей одновременно (например, устройства в одной Wi-Fi сети).
|
||
|
||
## Как создать несколько разных ссылок
|
||
|
||
1. Сгенерируйте необходимое количество секретов с помощью команды: `openssl rand -hex 16`.
|
||
2. Откройте файл конфигурации: `nano /etc/telemt/telemt.toml`.
|
||
3. Добавьте новых пользователей в секцию `[access.users]`:
|
||
```toml
|
||
[access.users]
|
||
user1 = "00000000000000000000000000000001"
|
||
user2 = "00000000000000000000000000000002"
|
||
user3 = "00000000000000000000000000000003"
|
||
```
|
||
4. Сохраните конфигурацию (Ctrl+S -> Ctrl+X). Перезапускать службу telemt не нужно.
|
||
5. Получите готовые ссылки с помощью команды:
|
||
```bash
|
||
curl -s http://127.0.0.1:9091/v1/users | jq
|
||
```
|
||
|
||
## Ошибка "Unknown TLS SNI"
|
||
Обычно эта ошибка возникает, если вы изменили параметр `tls_domain`, но пользователи продолжают подключаться по старым ссылкам с прежним доменом.
|
||
|
||
Если необходимо разрешить подключение с любыми доменами (игнорируя несовпадения SNI), добавьте следующие параметры:
|
||
```toml
|
||
[censorship]
|
||
unknown_sni_action = "mask"
|
||
```
|
||
|
||
## Как посмотреть метрики
|
||
|
||
1. Откройте файл конфигурации: `nano /etc/telemt/telemt.toml`.
|
||
2. Добавьте следующие параметры:
|
||
```toml
|
||
[server]
|
||
metrics_port = 9090
|
||
metrics_whitelist = ["127.0.0.1/32", "::1/128", "0.0.0.0/0"]
|
||
```
|
||
3. Сохраните изменения (Ctrl+S -> Ctrl+X).
|
||
4. После этого метрики будут доступны по адресу: `SERVER_IP:9090/metrics`.
|
||
> [!WARNING]
|
||
> Значение `"0.0.0.0/0"` в `metrics_whitelist` открывает доступ к метрикам с любого IP-адреса. Рекомендуется заменить его на ваш личный IP, например: `"1.2.3.4/32"`.
|
||
|
||
## Дополнительные параметры
|
||
|
||
### Домен в ссылке вместо IP
|
||
Чтобы в ссылках для подключения отображался домен вместо IP-адреса, добавьте следующие строки в файл конфигурации:
|
||
```toml
|
||
[general.links]
|
||
public_host = "proxy.example.com"
|
||
```
|
||
|
||
### Общий лимит подключений к серверу
|
||
Этот параметр ограничивает общее количество активных подключений к серверу:
|
||
```toml
|
||
[server]
|
||
max_connections = 10000 # 0 - без ограничений, 10000 - по умолчанию
|
||
```
|
||
|
||
### Upstream Manager
|
||
Для настройки исходящих подключений (Upstreams) добавьте соответствующие параметры в секцию `[[upstreams]]` файла конфигурации:
|
||
|
||
#### Привязка к исходящему IP-адресу
|
||
```toml
|
||
[[upstreams]]
|
||
type = "direct"
|
||
weight = 1
|
||
enabled = true
|
||
interface = "192.168.1.100" # Замените на ваш исходящий IP
|
||
```
|
||
|
||
#### Использование SOCKS4/5 в качестве Upstream
|
||
- Без авторизации:
|
||
```toml
|
||
[[upstreams]]
|
||
type = "socks5" # выбор типа SOCKS4 или SOCKS5
|
||
address = "1.2.3.4:1234" # адрес сервера SOCKS
|
||
weight = 1 # вес
|
||
enabled = true
|
||
```
|
||
|
||
- С авторизацией:
|
||
```toml
|
||
[[upstreams]]
|
||
type = "socks5" # выбор типа SOCKS4 или SOCKS5
|
||
address = "1.2.3.4:1234" # адрес сервера SOCKS
|
||
username = "user" # имя пользователя
|
||
password = "pass" # пароль
|
||
weight = 1 # вес
|
||
enabled = true
|
||
```
|
||
|
||
#### Использование Shadowsocks в качестве Upstream
|
||
Для работы этого метода требуется установить параметр `use_middle_proxy = false`.
|
||
|
||
```toml
|
||
[general]
|
||
use_middle_proxy = false
|
||
|
||
[[upstreams]]
|
||
type = "shadowsocks"
|
||
url = "ss://2022-blake3-aes-256-gcm:BASE64_KEY@1.2.3.4:8388"
|
||
weight = 1
|
||
enabled = true
|
||
```
|