В этой статье подробно разберем, как работает технология MTProto FakeTLS, почему она так эффективна для Telegram, и пошагово настроим собственный неуязвимый прокси-сервер.
Что такое MTProto?
MTProto - это специализированный криптографический протокол, разработанный командой Telegram для безопасной передачи данных. Благодаря ему все ваши переписки надежно зашифрованы (как в прочном сейфе), и никто не может прочитать их содержимое. Однако обычный MTProto-прокси легко обнаруживается провайдерами: они не могут прочитать трафик, но видят его специфическую структуру и просто блокируют соединение.
Что такое FakeTLS?
Чтобы обмануть DPI, была придумана надстройка FakeTLS. Её задача - маскировка. FakeTLS берет зашифрованный трафик Telegram и оборачивает его так, чтобы внешне он выглядел как абсолютно стандартное, безопасное HTTPS-соединение с популярным сайтом (например, с серверами Google, Microsoft или Apple).
Представьте, что вы отправляете секретный документ (ваше сообщение). Обычный прокси - это прозрачный конверт: почтальон (провайдер) не может прочесть текст, но видит, что письмо адресовано в Telegram, и выбрасывает его. С FakeTLS вы кладете документ в стандартную коробку из-под популярного интернет-магазина. Почтальон видит обычную посылку, ничего не подозревает и свободно пропускает её.
Ограничения: почему не работают звонки?
Важно понимать, что MTProto идеально подходит для передачи текста, фото, видео и кружочков (используется надежный протокол TCP). Однако голосовые и видеозвонки в Telegram требуют максимальной скорости без задержек, поэтому для них используется протокол UDP. MTProto-прокси не умеет маршрутизировать UDP-трафик. При попытке позвонить приложение попытается установить прямое соединение в обход прокси, и провайдер его заблокирует. (Для звонков лучше использовать полноценные VPN-решения, такие как Outline или WireGuard).
Пошаговая настройка сервера VPS/VDS
Для настройки нам понадобится виртуальный сервер (VPS/VDS) с установленной ОС Linux (рекомендуется Ubuntu) и доступом по SSH. Мы будем использовать современный и легковесный сервер mtg версии 2, работающий через Docker.
1. Подготовка сервера и установка Docker Подключитесь к вашему серверу по SSH. Для маскировки под HTTPS-трафик нам обязательно нужен свободный порт 443. Проверим, не занят ли он:
ss -tulnp | grep :443
Если вывод пустой - порт свободен.
Установим Docker одной командой (если он еще не установлен):
curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh
2. Генерация криптографического ключа (FakeTLS)
Нам нужно создать специальный секрет, который заставит наш прокси притворяться сервером Google (dl.google.com). Выполните команду:
docker run --rm nineseconds/mtg:2 generate-secret --hex dl.google.com
В терминале появится длинная строка, начинающаяся с букв ee (например: ee123456789...dl.google.com). Скопируйте и сохраните её! Это ваш секретный ключ.
3. Создание файла конфигурации
Современная версия mtg требует отдельного файла настроек. Создадим его. Скопируйте приведенный ниже блок целиком, заменив ВАШ_СЕКРЕТ_ИЗ_ШАГА_2 на скопированный ранее длинный ключ (кавычки вокруг ключа нужно оставить!):
Нажмите Enter. Файл config.toml успешно создан в вашей текущей директории.
4. Запуск прокси-сервера
Теперь запустим сам сервер в фоновом режиме. Команда пробросит нужные порты и применит наш файл настроек:
docker run -d --name mtproto-proxy \
-p 443:3128 \
-v $(pwd)/config.toml:/config.toml \
--restart unless-stopped \
nineseconds/mtg:2 run /config.toml
Чтобы убедиться, что всё запустилось без ошибок, проверьте логи:
docker logs mtproto-proxy
Если вы не видите сообщений об ошибках, значит сервер успешно работает!
5. Настройка Firewall (UFW) Обязательно нужно разрешить входящий трафик на наш порт маскировки. Внимание: Если вы используете UFW, сначала обязательно разрешите порт SSH (22), чтобы не потерять доступ к серверу!