Я решил погрузиться в мир собственных VPN серверов, после того как очередной раз сервис, за который я платил деньги перестал качественно работать, а поддержка из-за перегруженности отвечала шаблонами, в духе "Надо подождать, мы скоро все починим".
Набрав в поиске "VDS в Германии аренда" я с удивлением обнаружил, что арендовать такой сервер можно с российской карты и за вполне вменяемые деньги. Арендовав сервер на неделю, я принялся поднимать собственный MTProto для телеги. Использовал я образ https://github.com/telemt/telemt
Я поднял свой контейнер с прокси, проверил, что все работает и обрадовался. Но сразу же встал следующий вопрос - CLI это хорошо, но хотелось бы какой-то GUI для управления прокси. Я перепробовал несколько панелей и остановился на https://github.com/MaksimTMB/mtg-adminpanel. её суть в том, что панель можно установить на любой сервер или вообще локально, а на сервер, где будет развернут прокси ставится агент, который будет выполнять команды панели. Такое решение мне понравилось, так как в будущем можно будет расширить сеть до нескольких узлов, во избежание тотальной блокировки.
Я раздал несколько ссылок на прокси своим друзьям и коллегам. Суммарно 3 ссылками пользовалось 15-20 человек. Но вернувшись к проекту после выходных я обнаружил, что с офисного wifi прокси работать перестали, спросив у других пользователей, оказалось что у кого-то они не работали дома, а у кого-то по мобильной сети. Явно ТСПУ у каких-то провайдеров определил мои прокси и внес в черные списки.
Для меня это стало неожиданностью, так как на это понадобилось меньше 4х дней. Но дальше хуже - при создании нового прокси через панель он сразу же не работал. Я решил, что мой ip сервера уже в черном списке полностью, но в этот момент, я замечаю, что из трех прокси в телеграм работает один. Тот самый, который я поднимал вручную в докер контейнере. До меня дошло, что панель создает прокси с каким-то паттерном, который легко распознался.
Недолго покопавшись в коде панели, я нашел, что все прокси создавались с одним SNI - google.com. Из-за чего распознать мое соединение, скорее всего и получилось. Так как я не нашел как сменить SNI в панели, я решил что могу создать аналогичную панель сам, добавив в нее нужные мне функции. Мое решение так же разделено на 2 части - панель и сервис-нода.
Так же я решил, что проблема может быть в нестандартном порте - прокси были на портах 4443-4447. В моей панели прокси запускаются всегда на 443 порту, а уже дальше nginx разводит соединения по разным контейнерам. Но тут появилось ограничение - обычно несколько прокси на одном сервере разделяются по портам. А как разделить их если порт и ip один и тот же. Выход нашелся - роутинг по SNI.

user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 4096; } stream { resolver 127.0.0.11 valid=10s; log_format proxy '$remote_addr [$time_local] $ssl_preread_server_name $status'; access_log /dev/stdout proxy; map $ssl_preread_server_name $backend { en.wikipedia.org mtproto-proxy-3d9d46ba:443; netflix.com mtproto-proxy-475ecb29:443; assets.msn.com mtproto-proxy-3f8875a4:443; default mtproto-proxy-3d9d46ba:443; } server { listen 443; proxy_pass $backend; ssl_preread on; proxy_connect_timeout 10s; proxy_timeout 300s; } }
Как видно на примере, nginx смотрит каким доменом прикрывается соединение и направляет его к нужному контейнеру. У этого подхода есть ограничение - для одного соединения нужно использовать один уникальный домен. Я завел пул доменов, которые вытягиваются случайным образом при создании нового прокси.
На данный момент все прокси (3) которые я создал живут уже больше недели, хотя суммарное количество устройств которые подключались к ним больше 50.
Я буду продолжать развитие панели по мере своих сил и потребностей. Этой статьей я хотел поделиться своими результатами и получить обратную связь от тех, кто делал что-то подобное.
Ссылка на репу
Комментарии (40)

Timmek
04.04.2026 20:30Насколько это актуально? Ибо Роскомнадзор научился блокировать работу MTProxy. И даже больше, внутри страны перестал работать HTTP и SOCS5 прокси. Не везде конечно, но во многих регионах это так

Maxim_Q
04.04.2026 20:30На днях Телеграмм выкатил обновление и пофиксил баги с обнаружением, значит должно работать нормально. В теории это актульно, как на практике посмотрим в ближайшие пару недель.

Abyss777
04.04.2026 20:30Всмысле телеграм? Всмысле выкатил? https://habr.com/ru/articles/1019200/
Ничего не пофикшено, да, стало чуть чаще подключаться, но если подключилось, то всё равно картинки не грузятся.

aleksandr55575
04.04.2026 20:30Уже разучился

Volkodlak
04.04.2026 20:30на десктопе работает, на бета версии в андроиде тоже (ну да, официально в плеймаркете еще нет), у вас точно мтпрото с fake-tls?

aleksandr55575
04.04.2026 20:30У меня да, а к чему вопрос?

Volkodlak
04.04.2026 20:30к тому что не разучился, а вполне себе работает после выпуска фикса

aleksandr55575
04.04.2026 20:30Человек пишет - роскомнадзор научился блокировать мтпрокси, я отвечаю - уже разучился.

handhok
04.04.2026 20:30Хотел бы уточнить, что старые mtproto исправно работают при условии, что ты будешь пользоваться beta версией клиента. В данный момент есть версии на ПК и на андроид. На ПК - 7.6.2, на андроид - 12.6.4. p.s. Зарегистрировался, чтобы тебе ответить

Daniel_DF Автор
04.04.2026 20:30Действительно, есть некоторые проблемы, у некоторых операторов отваливается. Но я добавил ещё возможность разместить ноду внутри РФ, а трафик за границу пускать через vless. Такой прокси у меня работает даже если обычный MTProto не работает

Cerb
04.04.2026 20:30Я для управления telemt, заставил квен мне страничку написать, с простой аутентификацией. Посадил ее за nginx на location /$(openssl rand -hex 32/ { proxy_pass localhost:12345;...
}
Сама страничка выполняет api команды telemt, и один баш скрипт для создания нового. Плюс генерирует QR. Доступна из интернета. Вероятность, что её обнаружат крайне мала. Но даже если вдруг, то там пароль, а заменить location - 1 минута.
Ничего нигде не нужно устанавливать, кроме nginx ничего не требуется.

Daniel_DF Автор
04.04.2026 20:30Звучит круто, но мне захотелось создать решение, которое будет удовлетворять меня по функционалу. Плюс послушать, что умные люди подскажут

pingo
04.04.2026 20:30ну да, только к сожалению с полпинка не завелось, после логина следом 502 Bad Gateway, а задумка годная конечно.


Kenya-West
04.04.2026 20:30Сразу видно, что по SNI фейс-контроль ваша панель не прошла, сервер думает, что левак стучится, и отдаёт для него легитимный HTML.

Daniel_DF Автор
04.04.2026 20:30Одному пользователю при этой ошибке помог перезапуск контейнера. И проверьте, что порт на котором запущен бэк панели открыт

Renaissance
04.04.2026 20:30Если кому-то нужна просто панель для управления конкретно telemt: https://github.com/amirotin/telemt_panel

Tpyn
04.04.2026 20:30Unexpected token '<', "<html> <h"... is not valid JSON
в панели при попытке войти

Daniel_DF Автор
04.04.2026 20:30Попробуйте перезапустить контейнер бэка и проверить доступность порта панели. Так же проверьте логи контейнера на предмет ошибок

Siboc
04.04.2026 20:30Не знаю у кого какие ошибки, но у меня ошибка из-за того что back и db не могут договориться и в логах бека: "Failed to start panel backend: error: password authentication failed for user “mtproto” и БД "password authentication failed for user “mtproto”

Daniel_DF Автор
04.04.2026 20:30Такое происходит, если запуск с первого раза не удался. Выполните
cd /opt/mtproto-panel
docker compose down -v
docker compose up -d --build

Maxim_Q
Сколько весь сервер кушает RAM? насколько много требуется RAM чтобы запутить все ваши 4 докер контейнера? У меня есть сервер и там очень мало памяти и хочется знать потянет ли такое дело мой сервер с 512 Мб RAM?
Zloymopga
Maxim_Q
Почему выбор пал на Docker, а не на простой запуск через systemd? Можно было создать несколько конфигов и запускать через:
systemctl start tmproto@conf1.service
systemctl start tmproto@conf2.service
Памяти кушает намного меньше и все намного проще по настройке.
webself
Потому что это модно )
Кстать, а сколько "в граммах" докер больше памяти кушает?
Сам противник докера в таких инсталлах, но точных цифр не вымерял.
igorhak
Обычно у докера оверхед на линукс в 60-70 мб, что как будто бы не так уж и много
navrocky
Докер память не кушает. Что запустили внутри, то и кушает.
navrocky
Интересно, в чём я не прав? В линуксе процесс в докере кушает ровно столько же сколько и не в докере. Докер это просто изоляция процесса от хостовой системы. Ну да, сам докер демон потребляет какие-то ресурсы.
Daniel_DF Автор
По привычке. Всегда всё оборачиваю в контейнер, проще становится через docker сеть подключать их между собой
igorhak
Я именно для этого написал свой sni proxy на go , который занимает 5мб и благополучно работает https://github.com/igorhakk/sni-proxy
shirmanov
Чем он удобней nginx или haproxy?
igorhak
Минимальное потребление ресурсов
shirmanov
На сколько меньше и каких?
igorhak
Я не производил никаких замеров, изначальный вопрос был про vds с 512мб памяти. Nginx на старте по минимум требуется 100-150 мб, и при повышении трафика будет повышаться потребление памяти, плюс несколько контейнеров mtp proxy… В моем случае сам бинарник после компиляции весит 5 мб, да и в целом само приложение, кроме как проксированием http по sni, ни чем другим не занимается. Мне, когда я писал, требовалось на 512 мб запустить пару mtp proxy и панельку 3x-ui, что бы это все работало на 443 порту, весь остальной трафик слать на внешний nginx proxy manager.
Daniel_DF Автор
Вот статистика одного контейнера с прокси. В среднем по памяти 60mb