Telegram Proxy (MTProxy): как создать прокси для Телеграм

/articles/tg_proxy/images/feature.png

Дисклеймер: Материал носит исключительно информационный характер. Автор не призывает к каким-либо действиям.

Статья-гайд, посвящённая установке и настройке своего Telegram proxy на сервере.

Если вам не хочется возиться с настройкой, а нужно подключение в пару кликов, переходите к разделу Бесплатный прокси.

Привет, читатели! В связи со скачком популярности темы, я тоже решил хайпануть и вновь проверить свой навык жать по клавишам в правильном порядке. Сразу оговорюсь, что тут не будет рассказываться, как купить сервер и как его настроить должным образом. Об этом можете почитать в другой части интернета, либо взглянуть на мои предыдущие статьи: аренда сервера, настройка сервера.

Растянем хронометраж базовыми понятиями и пояснениями, чтобы все понимали, о чём речь.

Telegram прокси

Саму суть проксирования, думаю, уже все знают. Вместо того, чтобы данные шли от ПК до конечной точки (в данном случае, сервера Telegram), мы вклиниваем сервер, который будет стоять посередине.

Telegram предоставляет возможность работать через два вида прокси — SOCKS и MTProxy. Первый рассматривать не будем, поскольку он никак не защищён от DPI (устройства/программы для анализа трафика, с помощью которых РКН и замедляет Telegram), поэтому сразу перейдём ко второму.

MTProxy

MTProxy — это программа, которая перенаправляет только MTProto пакеты. Помимо того, чтобы прятать конечный IP от провайдера, он умеет обфусцировать трафик, запутывая DPI.

Инфо
MTProto — криптографический протокол, разработанный и использующийся в Telegram. Именно благодаря нему шифруются наши сообщения, картинки и пр, и именно с ним работает MTProxy, поэтому прокси будет действовать исключительно в Telegram и нигде больше.

Но вот беда, MTProxy давно не обновлялся, и на данный момент имеет характерные паттерны, из-за которых он при желании будет легко детектироваться DPI, а значит нужен немного другой подход.

Telemt

Telemt — это усовершенствованная реализация MTProxy, позволяющая маскироваться под другие сайты. При попытке достучаться до сервера, не имея секретного ключа для подключения, Telemt будет пересылать на сайт, который вы указали в конфиге.

FAQ

  1. В ходе прочтения у вас мог возникнуть вопрос: “А если я буду использовать чужой MTProxy, владелец увидит мои сообщения?”.

    Ответ: однозначно нет. Как раз благодаря MTProto вас не смогут идентифицировать и тем более не смогут расшифровать трафик, поскольку ключи шифрования находятся только на клиентах (приложения Telegram) и на официальных серверах Telegram.

    Всё, что увидит MTProxy, это:

    • Ваш IP;
    • Время подключения.
  2. Можно ли совершать звонки? Ответ: нет. Звонить не получится по той же причине: проксируется только MTProto, а звонки в Telegram не работают на этом протоколе.

Telega

Небольшое отступление от общей темы. Вероятно, многие уже слышали о таком клиенте/клоне тг, как Telega. В прошлом году на Habr вышла статья с разбором декомпилированного и деобфусцированного кода, в котором выявились детали, после которых, вы, возможно, передумаете использовать этот мессенджер. Статья уже удалена, но сохранилась в архивах: https://web.archive.org/web/20251106064704/https://habr.com/ru/articles/959534/.


Установка Telemt

Итак, ознакомились, пора за дело.

Инфо
Самая актуальная информация по проекту тут: https://github.com/telemt/telemt.

Как обычно, будем использовать Docker. Пока в репозитории проекта нет инструкции по запуску в контейнере, но есть сторонний репозиторий с инструкцией, также постоянно обновляющийся: https://github.com/An0nX/telemt-docker.

Выполняем следующие команды:

1
2
sudo curl -fsSL https://get.docker.com | sudo sh
mkdir telemt && cd telemt

Создадим docker-compose: nano docker-compose.yml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
services:
  telemt:
    image: whn0thacked/telemt-docker:latest
    container_name: telemt
    restart: unless-stopped

    environment:
      RUST_LOG: "info"

    volumes:
      - ./telemt.toml:/etc/telemt.toml:ro

    ports:
      - "443:443/tcp"
      # If you enable metrics_port=9090 in config:
      # - "127.0.0.1:9090:9090/tcp"

    # Hardening
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
    read_only: true
    tmpfs:
      - /tmp:rw,nosuid,nodev,noexec,size=16m

    ulimits:
      nofile:
        soft: 65536
        hard: 65536

    # Resource limits (optional)
    # deploy:
    #   resources:
    #     limits:
    #       cpus: "0.50"
    #       memory: 256M

    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

Сгенерируем секретный ключ: openssl rand -hex 16 — вывод копируем и сохраняем.

Предупреждение
Секрет на то и секрет, что это.. секрет. Поэтому не раздавайте его, как и итоговую ссылку, кому попало

Создадим конфиг прокси-сервера: nano telemt.toml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# === UI ===
# Users to show in the startup log (tg:// links)
show_link = ["hello"]

# === General Settings ===
[general]
prefer_ipv6 = false
fast_mode = true
use_middle_proxy = false
# ad_tag = "..."

[general.modes]
classic = false
secure = false
tls = true

# === Server Binding ===
[server]
port = 443
listen_addr_ipv4 = "0.0.0.0"
listen_addr_ipv6 = "::"
# metrics_port = 9090
# metrics_whitelist = ["127.0.0.1", "::1"]

# Listen on multiple interfaces/IPs (overrides listen_addr_*)
[[server.listeners]]
ip = "0.0.0.0"
# announce_ip = "1.2.3.4" # Optional: Public IP for tg:// links

[[server.listeners]]
ip = "::"

# Users to show in the startup log (tg:// links)
[general.links]
show = ["hello"] # Users to show in the startup log (tg:// links)
# public_host = "proxy.example.com"  # Host (IP or domain) for tg:// links
# public_port = 443                  # Port for tg:// links (default: server.port)

# === Timeouts (in seconds) ===
[timeouts]
client_handshake = 15
tg_connect = 10
client_keepalive = 60
client_ack = 300

# === Anti-Censorship & Masking ===
[censorship]
tls_domain = "petrovich.ru"
mask = true
mask_port = 443
# mask_host = "petrovich.ru" # Defaults to tls_domain if not set
# mask_unix_sock = "/var/run/nginx.sock" # Unix socket (mutually exclusive with mask_host)
fake_cert_len = 2048

# === Access Control & Users ===
# username "hello" is used for example
[access]
replay_check_len = 65536
ignore_time_skew = false

[access.users]
# format: "username" = "32_hex_chars_secret"
hello = "<SECRET>"

# [access.user_max_tcp_conns]
# hello = 50

# [access.user_data_quota]
# hello = 1073741824 # 1 GB

# === Upstreams & Routing ===
# By default, direct connection is used, but you can add SOCKS proxy

# Direct - Default
[[upstreams]]
type = "direct"
enabled = true
weight = 10

# SOCKS5
# [[upstreams]]
# type = "socks5"
# address = "127.0.0.1:9050"
# enabled = false
# weight = 1

# === DC Address Overrides ===
# [dc_overrides]
# "203" = "91.105.192.100:443"

В блоке [access.users] меняем <SECRET> на секретный ключ, сгенерированный предыдущей командой.

В блоке [censorship] параметр tls_domain нужно заменить на любой HTTPS‑домен. Домен для TLS‑маскировки должен быть популярным и правдоподобным для региона, где расположен сервер. Важно, чтобы выбранный домен не выглядел аномально относительно IP‑адреса VPS.

Например, если сервер расположен в РФ, логично использовать домен, характерный для российского сегмента интернета. Если сервер находится в Европе — подойдёт популярный международный домен.

Готово! Запускаем контейнер: sudo docker compose up -d && sudo docker compose logs -ft. В логах ищем первую ссылку tg://… и копируем её.

/articles/tg_proxy/images/tg_link.png

Вставим скопированную ссылку в поисковую строку браузера -> он предложит нам открыть Telegram, соглашаемся -> в приложении появится всплывающее окно, жмём “Включить”.

/articles/tg_proxy/images/tg_connect.png

В десктопной версии Telegram внизу в колонке с чатами появится значок щита, означающий, что прокси успешно подключен.

/articles/tg_proxy/images/tg_shield.png
Инфо
Если вы хотите видеть домен вместо IP в ссылке, просто привяжите нужный домен и замените на него IP в исходной ссылке

Чтобы отключиться:

  • В десктопной версии нажмите на значок щита -> выберите пункт “Использовать системные прокси настройки”;
  • На Андроид в разделе с чатами нажмите три точки -> “Прокси” -> Выключите “Использовать прокси”;
  • На Айфоне в разделе с чатами нажмите на значок щита -> Выключите “Использовать прокси”.

Установка MTProxy

Зачем он вообще нужен, если есть Telemt? Дело в том, что при включенном VPN Telemt зачастую не даёт соединиться, и хотя это можно пофиксить (напишу об этом в ближайшее время), есть вариант использовать менее защищённый от DPI MTProxy.

Поднять этот прокси ещё проще, чем предыдущий. Достаточно лишь одного docker-compose:

1
2
mkdir mtproxy && cd mtproxy
nano docker-compose.yml

Вставляем:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
services:
  mtproto:
    image: telegrammessenger/proxy:latest
    container_name: mtproto
    restart: unless-stopped
    ports:
      - "443:443/tcp"
    environment:
      - SECRET=<SECRET>
    volumes:
      - proxy-config:/data

volumes:
  proxy-config:

Также заменяем <SECRET> на своё значение. Для перезапуска контейнера используем команду: sudo docker compose down && sudo docker compose up -d && sudo docker compose logs -ft — как и в прошлом варианте, копируем ссылку и подключаемся.


Бесплатный прокси

Если вы так и не разобрались или вам лень делать это всё самому, у нашего проекта NoVPN есть небольшое количество собственных прокси-серверов специально для вас! Это абсолютно бесплатно!

Просто запустите бота, и нажмите на кнопку “NoVPN Proxy” — на сайте будет вся необходимая информация.

/articles/tg_proxy/images/novpn_logo.png

The end

Вот гайд и подошёл к концу! Опять же, немного позже добавлю сюда информацию о telemt за ревёрс-прокси. Если у вас возникнут трудности/вопросы/предложения, добро пожаловать в комментарии под постом!

Спасибо, что читаете! 🌱

Поддержать автора
NoisyCake cloudtipscloudtips
0%