Основы

Что такое MTProto и MTProxy: как устроен прокси в Telegram

Как устроен протокол Telegram, что делает MTProxy, чем он отличается от VPN и из чего состоит ссылка.

Содержание 15 разд.

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

Что такое MTProto

По определению из документации Telegram, MTProto — протокол для доступа к серверному API из приложений на мобильных устройствах. Современные клиенты используют версию 2.0; первая версия считается устаревшей и выводится из обращения.

Протокол состоит из трёх уровней, и прокси работает только на последнем:

API-запросывызовы и ответы на языке TLШифрованиеauth_key, AES-256, SHA-256ТранспортTCP, WebSocket, HTTPпроксиработаетздесьключ шифрования есть только у клиента и сервера
Рис. 1. Три уровня MTProto. Прокси работает на уровне транспорта, а запросы зашифрованы ключом, которого у него нет.
  • API-запросы. Верхний уровень превращает вызовы и ответы в двоичные сообщения: запросы, ответы, подтверждения, контейнеры из нескольких сообщений.
  • Шифрование. Каждое сообщение шифруется до отправки. У сообщения есть открытый заголовок с идентификатором ключа и ключом сообщения; всё остальное зашифровано алгоритмом AES-256. Сам ключ авторизации создаётся обменом Diffie-Hellman и по сети не передаётся.
  • Транспорт. Нижний уровень переносит зашифрованные данные поверх обычного сетевого протокола: TCP, WebSocket, HTTP.

Для обычных чатов (облачных) шифрование идёт между клиентом и сервером Telegram. Секретные чаты используют сквозное шифрование и описаны отдельно; для прокси разницы нет: он работает на транспортном уровне и в любом случае видит только зашифрованные данные.

Что такое MTProxy

Прокси для Telegram — промежуточный сервер. Приложение подключается не к напрямую, а к прокси; тот открывает соединение с нужным дата-центром и передаёт данные в обе стороны. Для приложения всё выглядит так, будто оно говорит с Telegram, а для сети — как соединение с прокси.

Название MTProxy носит официальная реализация, которую Telegram выкладывает на GitHub. В разговорах так же называют любой прокси, говорящий на MTProto: помимо официального, есть mtg на Go и telemt на Rust. Сам Telegram в документации говорит о двух типах прокси, которые поддерживают приложения: SOCKS5 и MTProto.

Как идёт трафик

как обычный HTTPSMTProtoTelegramприложениефильтрТСПУ / DPIпроксипорт 443серверыTelegramсообщения зашифрованы, прокси их не читает
Рис. 2. Путь трафика через прокси: фильтр провайдера видит обычный HTTPS, а не Telegram, а сам прокси переписку не читает.
  1. Клиент берёт из ссылки адрес сервера, порт и секрет.
  2. Он устанавливает с прокси соединение с обфускацией: ключи для потока выводятся из случайного начального пакета и секрета.
  3. В начальном пакете клиент указывает номер , к которому нужно подключиться.
  4. Прокси открывает соединение с серверами Telegram и пересылает зашифрованные данные в обе стороны.

Куда именно прокси подключается дальше — к дата-центру напрямую или через промежуточные серверы Telegram (Middle-End) — зависит от реализации и настроек. Официальный MTProxy, например, берёт адреса из файла proxy-multi.conf, который скачивают с сайта Telegram, а telemt включает Middle-End параметром use_middle_proxy. Для клиента это незаметно.

Секрет здесь выполняет две роли: прокси принимает только тех, кто его знает, а в режиме FakeTLS в нём же записан домен маскировки. Об этом — в разделе про ссылку и в статье про .

Транспорты и первые 64 байта

Транспорт MTProto — это «обёртка», в которую упаковывают зашифрованные данные. Какая именно, клиент сообщает заголовком, который отправляет первым. В документации Telegram описаны четыре варианта:

ТранспортЗаголовокОсобенность
Abridgedбайт 0xefдлина — один байт (размер, делённый на 4), для больших пакетов — 0x7f и ещё три байта
Intermediate0xeeeeeeeeперед данными — 4-байтовая длина
Padded intermediate0xddddddddк данным добавляют от 0 до 15 случайных байт
Fullнетконверт из 12 байт: длина, порядковый номер, данные и контрольная сумма CRC32

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

  • в этих 64 байтах есть ограничения, чтобы они не совпали с заголовками других протоколов: первый байт не может быть 0xef, а первые четыре — 0xdddddddd, 0xeeeeeeee или началом HTTP-запроса;
  • по смещению 56 лежит идентификатор транспорта, а у прокси по смещению 60 — номер дата-центра;
  • ключ и вектор шифрования берутся из самих 64 байт, для обратного направления — из их «перевёрнутой» копии;
  • поток шифруется алгоритмом AES-256 в режиме CTR, а для прокси ключ дополнительно хешируется вместе с секретом.

Последний пункт и делает секрет паролем: без него клиент выведет другой ключ, и прокси не сможет расшифровать даже заголовок. В документации Telegram этот механизм называется transport obfuscation, а в разговорах о прокси его обычно зовут obfuscated2.

Что видит прокси

Это главный вопрос недоверия: можно ли читать мою переписку через прокси? Нет. Содержимое шифруется ключом авторизации, которого у прокси нет, поэтому он передаёт непрозрачные для него данные. Документация Telegram формулирует это так: оператор прокси не может видеть ваш список чатов и активность в Telegram.

Но кое-что прокси знать всё же может:

  • ваш IP-адрес — к нему он отправляет ответы;
  • объём и время трафика;
  • на какой дата-центр вы подключаетесь.

Поэтому Telegram советует брать данные прокси только из надёжных источников. Прокси из публичного списка в интернете может принадлежать кому угодно, и IP-адрес его владельцу вы отдаёте.

Чем прокси отличается от VPN

MTProto-проксиVPN
Что пропускаетТолько трафик TelegramВесь трафик устройства
Как подключаютСсылка или три параметра в настройках TelegramОтдельное приложение и подписка
Остальные приложенияИдут как обычноИдут через VPN
Звонки в TelegramЧерез MTProto-прокси не работаютРаботают, пока VPN подключён
Что видит сетьСоединение с прокси, обфусцированное или под видом TLSСоединение с VPN-сервером, его протокол

Простое правило: если нужно только пользоваться Telegram, прокси проще и быстрее. Если нужен доступ к другим сервисам, звонки или вы подключаетесь к мобильному интернету с белыми списками, нужен VPN.

Когда прокси нужен, а когда нет

  • Нужен, если блокируют именно Telegram, а остальной интернет работает как обычно и менять его не требуется.
  • Не нужен, если Telegram и без него работает: прокси добавит лишний узел и может замедлить соединение.
  • Не поможет, если нужны звонки, другие приложения или вы находитесь в сети с белыми списками.

Из чего состоит ссылка

Ссылка на MTProto-прокси имеет один формат в двух записях. Для приложения подходит tg://proxy, а в браузере и мессенджерах работает t.me/proxy: по ней Telegram открывает окно подключения.

tg://proxy?server=proxy.example.com&port=443&secret=ee…

Все три параметра обязательны. server — адрес или IP сервера, port — порт, secret — секрет. Секрет — 16 случайных байт в шестнадцатеричной записи; к нему могут добавляться префикс режима и домен.

Режимы прокси

Три режима различаются тем, как прячется соединение:

  • обычный — поток шифруется (obfuscated2), но начало соединения и ритм пакетов остаются узнаваемыми;
  • dd — к пакетам добавляется случайное дополнение, чтобы размеры не выдавали прокси;
  • ee — режим : соединение начинается как обычный HTTPS-обмен с настоящим сайтом.

Реализации прокси

Прокси поднимают на собственном сервере разными программами. Основные три:

  • MTProxy — официальная реализация Telegram: собирается из исходников или запускается в Docker. В её README описан режим dd (padding);
  • mtg — минималистичный прокси на Go для режима FakeTLS: один секрет, без управления пользователями;
  • telemt — реализация на Rust: поддерживает все три режима и спонсорский канал.

Telegram разрешает владельцу прокси продвигать канал: он появляется в списке чатов тех, кто подключился через этот прокси, и помогает покрыть расходы на сервер. Владелец при этом не видит ни списка чатов, ни активности подключённых.

Словарь в одной таблице

ТерминЧто это
serverадрес или IP-адрес прокси; в ссылке — параметр server
portпорт прокси; чаще всего 443
secretключ прокси: 16 байт, режим работы и, для FakeTLS, домен маскировки
DCдата-центр Telegram, на который прокси передаёт трафик
ad_tag / тегидентификатор, который выдаёт бот @MTProxybot и который включает показ спонсорского канала
paddingслучайное дополнение пакетов; включается префиксом dd
FakeTLSрежим, который маскирует соединение под TLS-обмен с сайтом; префикс ee

Где в Telegram настройки прокси

По документации Telegram, пункт меню зависит от платформы. На Android это «Настройки» → «Данные и память» → «Настройки прокси» (Settings → Data and Storage → Proxy Settings), на iPhone — «Данные и память» → «Прокси», в Telegram Desktop — «Настройки» → «Продвинутые настройки» → «Тип соединения», в приложении для macOS — «Данные и память» → «Использовать прокси».

Когда прокси подключён, над списком чатов появляется значок щита: нажатие открывает настройки прокси. В списке можно держать несколько прокси; функция автоматического переключения (Auto-Switch Proxies) переходит к следующему, если текущий отключился. Пошаговые инструкции — для Android, iPhone и компьютера.

Ограничения

  • Через MTProto-прокси не работают звонки в Telegram — по FAQ проекта telemt, это ограничение архитектуры.
  • Прокси не защищает остальные приложения устройства.
  • У прокси ограниченный срок жизни: его адрес, порт или форму трафика может заблокировать оператор.
  • Скорость и стабильность зависят от сервера и числа пользователей на нём.

Частые вопросы

Что такое MTProxy простыми словами?

Это промежуточный сервер для Telegram. Приложение подключается не к серверам мессенджера напрямую, а к прокси, и он передаёт зашифрованный трафик дальше. Название MTProxy носит официальная реализация Telegram; в разговорах так же называют любой прокси, говорящий на протоколе MTProto.

Чем MTProto-прокси отличается от VPN?

MTProto-прокси работает только внутри Telegram: другие приложения идут по сети как обычно. VPN пропускает через себя весь трафик устройства. Прокси проще подключить и он не требует отдельного приложения, но не защищает остальной трафик.

Видит ли владелец прокси мою переписку?

Нет. Сообщения шифруются ключом, который есть только у клиента и сервера Telegram. Владелец прокси видит IP-адрес подключающегося и объём трафика. По документации Telegram, оператор не видит ни списка чатов, ни активности в аккаунте.

Из чего состоит ссылка на MTProto-прокси?

Из трёх обязательных параметров: server (адрес сервера), port (порт) и secret (секрет). Формат: tg://proxy?server=…&port=…&secret=… либо такая же ссылка вида t.me/proxy.

Источники

  1. Telegram: MTProto Mobile Protocol — общее описание
  2. Telegram: MTProto — подробное описание
  3. Telegram: MTProto transports
  4. Telegram: прокси
  5. Telegram: ссылки на прокси
  6. Telegram: дата-центры
  7. MTProxy — официальная реализация (GitHub)
  8. mtg (GitHub)
  9. telemt (GitHub)