MTProto-прокси – это прокси, который понимает собственный протокол Telegram. Его поддерживают все официальные приложения Telegram, поэтому достаточно открыть одну ссылку, и мессенджер начнёт работать через ваш сервер, без VPN и без отдельных программ. В этой статье мы поднимем прокси на mtg, одной из самых известных реализаций MTProto-прокси, включим маскировку FakeTLS и получим ссылку, которую можно отправить близким. Все команды мы проверили на нашем тестовом сервере с Debian 12, а версия mtg на момент проверки 2.2.8.
Почему свой прокси лучше бесплатных списков
Бесплатные MTProto-прокси из каналов и списков работают, но у них есть общая беда. Ими одновременно пользуются тысячи людей, поэтому они медленные, живут недолго и быстро попадают под блокировку, ведь их адреса публикуются открыто. Свой прокси на VPS принадлежит только вам, его адрес никто не публикует, и скорость зависит лишь от вашего сервера.
Важно понимать, что именно делает такой прокси. Трафик между приложением Telegram и серверами Telegram зашифрован самим мессенджером, а прокси лишь пересылает его дальше. Поэтому прокси не видит содержимое переписки, даже если им пользуются другие люди.
Как работает маскировка FakeTLS
Чтобы понять, зачем нужен FakeTLS, полезно посмотреть, как прокси выглядит со стороны провайдера. Обычное соединение с MTProto-прокси несложно распознать по характерному началу обмена, и системы фильтрации трафика научились это делать. FakeTLS решает эту задачу так же, как многие современные VPN-протоколы. Соединение с прокси оформляется как обычное защищённое подключение (TLS) к известному сайту, например www.microsoft.com, и со стороны оно выглядит как посещение этого сайта.
Какой сайт изображать, задаётся прямо в секрете, то есть в ключе, по которому Telegram подключается к прокси. Секрет FakeTLS всегда начинается с букв ee, а в его конце закодировано имя выбранного сайта. У mtg есть ещё одна полезная защита, которая называется domain fronting. Если к прокси подключается не Telegram, а, например, проверяющая система или обычный браузер, mtg не обрывает соединение, а прозрачно передаёт его настоящему сайту. Мы проверили это на тестовом сервере. При обращении к порту 443 нашего прокси по имени www.microsoft.com в ответ пришёл настоящий сертификат Microsoft, ровно такой же, как у самого сайта.
Что понадобится
- Сервер с Debian 12 или Ubuntu 24.04. Прокси почти не нагружает сервер, поэтому хватит самого простого тарифа, например DE-Promo. Если сервера ещё нет, закажите его по инструкции или попробуйте бесплатный тестовый сервер.
- Подключение к серверу по SSH, например через Termius. Все команды ниже выполняются от имени
root. - Свободный порт 443. Если на сервере уже работает сайт или VPN на этом порту, возьмите для прокси другой порт, как описано в разделе Если что-то не работает.
1. Установите Docker
mtg удобнее всего запускать в Docker, так его легко обновить и удалить без следов. Установите Docker официальным скриптом.
# Устанавливаем Docker официальным скриптом с сайта Docker
curl -fsSL https://get.docker.com | sh
# Проверяем, что Docker работает
docker --versionПоследняя команда выведет версию, например Docker version 29.9.1.
2. Создайте секрет
Секрет генерирует сам mtg. В конце команды укажите сайт, под который будет маскироваться прокси.
# Генерируем секрет FakeTLS для маскировки под www.microsoft.com
docker run --rm nineseconds/mtg:2 generate-secret --hex www.microsoft.comКоманда выведет длинную строку из цифр и букв, которая начинается с ee. Это и есть секрет, скопируйте его, он понадобится на следующем шаге.
Какой сайт выбрать для маскировки
Подойдёт крупный зарубежный сайт, который открывается по HTTPS, например www.microsoft.com. Разработчик mtg советует выбирать сайт, который логично связан с вашим сервером, и не использовать google.com, ведь у Google известный список собственных сетей, и подмену легко заметить. Если у вас есть свой домен на этом же сервере, его тоже можно использовать.
Секрет – это пароль от вашего прокси
Любой, у кого есть секрет и адрес сервера, сможет подключиться к прокси. Не публикуйте его в открытых каналах и чатах.
3. Создайте файл настроек
mtg хранит настройки в небольшом файле. Создайте для него папку и сам файл, вставив вместо ВАШ_СЕКРЕТ строку из предыдущего шага.
# Папка для настроек прокси
mkdir -p /opt/mtg
# Файл настроек с секретом и портом
cat > /opt/mtg/config.toml <<'EOF'
secret = "ВАШ_СЕКРЕТ"
bind-to = "0.0.0.0:443"
EOFВ файле всего две строки. В secret хранится секрет, а bind-to говорит mtg принимать подключения на порту 443, как обычный HTTPS-сайт. Остальные параметры у mtg уже настроены разумно, и менять их не нужно.
4. Запустите прокси
# Запускаем mtg в фоне с автозапуском после перезагрузки сервера
docker run -d --name mtg-proxy --restart=unless-stopped \
-v /opt/mtg/config.toml:/config.toml \
-p 443:443 \
nineseconds/mtg:2
# Проверяем, что контейнер работает
docker psВ выводе docker ps должна появиться строка mtg-proxy со статусом Up и портом 0.0.0.0:443->443/tcp. Ключ --restart=unless-stopped поднимет прокси сам после перезагрузки сервера.
Порт внутри и снаружи должен совпадать
В инструкции к mtg прокси внутри контейнера слушает порт 3128, а снаружи открывается порт 443. Работает это так же, но тогда команда из следующего шага выдаст ссылку с портом 3128, и Telegram к ней не подключится. Мы проверили это на тестовом сервере, поэтому в нашем варианте прокси и внутри, и снаружи работает на 443, и ссылка сразу получается правильной.
5. Получите ссылку для подключения
mtg сам соберёт готовые ссылки.
# Выводим ссылки для подключения к прокси
docker exec mtg-proxy /mtg access /config.tomlВ ответе будет блок ipv4 с адресом сервера, портом 443 и несколькими ссылками.
tme_url, ссылка видаhttps://t.me/proxy?.... Её удобнее всего отправлять другим людям, она открывается и в браузере, и в Telegram.tg_url, ссылка видаtg://proxy?..., которая сразу открывает Telegram.
QR-код без сторонних сервисов
В ответе mtg есть и ссылки на QR-коды, но они создаются на внешнем сайте, и секрет при этом уходит туда же. Надёжнее нарисовать QR-код прямо в терминале. Установите программу командой apt install -y qrencode и выполните qrencode -t ansiutf8 'ссылка_tme_url'. QR-код можно отсканировать камерой телефона.
6. Подключите Telegram
Откройте ссылку tme_url на устройстве, где установлен Telegram, например отправьте её себе в «Избранное» и нажмите на неё. Telegram покажет окно с данными прокси, подтвердите в нём подключение. С этого момента мессенджер работает через ваш сервер.
Добавить прокси можно и вручную. Откройте в настройках Telegram раздел с прокси, выберите тип MTProto и введите адрес сервера, порт 443 и секрет.
Если нужен рекламный тег или установка без терминала
- Рекламный тег, то есть продвижение своего канала через специального бота Telegram, mtg версии 2 не поддерживает. Сам автор mtg советует для этого проект telemt.
- Без терминала прокси для Telegram умеет ставить приложение AmneziaVPN версии 5.0.0.5 и новее, на вкладке Сервисы. Подробно это описано в документации Amnezia. Если вы уже подняли VPN по нашей инструкции, так получится быстрее всего.
Как обновить или удалить прокси
Чтобы обновить mtg до новой версии, скачайте свежий образ и пересоздайте контейнер. Настройки и секрет хранятся в файле /opt/mtg/config.toml, поэтому ссылка для подключения не изменится.
# Скачиваем новую версию mtg
docker pull nineseconds/mtg:2
# Удаляем старый контейнер и запускаем новый с теми же настройками
docker rm -f mtg-proxy
docker run -d --name mtg-proxy --restart=unless-stopped \
-v /opt/mtg/config.toml:/config.toml \
-p 443:443 \
nineseconds/mtg:2Чтобы удалить прокси полностью, выполните docker rm -f mtg-proxy и удалите папку командой rm -rf /opt/mtg. Все выданные ссылки после этого перестанут работать.
Если что-то не работает
Контейнер не запускается, порт 443 занят
Проверьте, какая программа уже занимает порт.
# Кто слушает порт 443
ss -lntp | grep ':443 'Если там веб-сервер или VPN, выберите для прокси другой порт, например 8443. Поменяйте его в файле настроек в строке bind-to = "0.0.0.0:8443", а при запуске контейнера укажите -p 8443:8443. Ссылка из шага 5 сама получит новый порт.
В ссылке указан порт 3128
Значит, внутри контейнера прокси слушает 3128, а снаружи открыт другой порт. Проверьте строку bind-to в файле /opt/mtg/config.toml и параметр -p у контейнера, номера портов слева и справа должны совпадать с портом в bind-to. После исправления пересоздайте контейнер, как описано в разделе об обновлении.
Telegram не подключается к прокси
Проверьте по порядку.
- Контейнер работает. В выводе
docker psуmtg-proxyстатус Up. - Порт открыт в брандмауэре сервера. Если вы включали UFW по нашей инструкции, разрешите порт командой
ufw allow 443/tcp. - В ссылке правильный IP-адрес сервера и порт.
Если всё в порядке, а подключения нет, возможно, ваш провайдер ограничивает соединения с этим сайтом-маскировкой или с портом. Создайте новый секрет с другим сайтом, поменяйте его в файле настроек и пересоздайте контейнер. Старые ссылки после смены секрета перестанут работать, раздайте новые.
Как посмотреть, что происходит с прокси
mtg пишет события в журнал контейнера.
# Последние 50 строк журнала прокси
docker logs --tail 50 mtg-proxyПустой журнал не означает поломку, mtg пишет в него только заметные события, например ошибки и блокировки адресов.
Наши ресурсы
Telegram-канал: https://t.me/f3cloud_news
Официальный сайт: https://f3cloud.com