Я решил погрузиться в мир собственных 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)


  1. Maxim_Q
    04.04.2026 20:30

    Сколько весь сервер кушает RAM? насколько много требуется RAM чтобы запутить все ваши 4 докер контейнера? У меня есть сервер и там очень мало памяти и хочется знать потянет ли такое дело мой сервер с 512 Мб RAM?


    1. Zloymopga
      04.04.2026 20:30

      vless + вся обвязка. без docker прослойки. работает стабильнее чем прокси, еще ни разу не попал в блокировку. полет - почти год уже.
      vless + вся обвязка. без docker прослойки. работает стабильнее чем прокси, еще ни разу не попал в блокировку. полет - почти год уже.


      1. Maxim_Q
        04.04.2026 20:30

        Почему выбор пал на Docker, а не на простой запуск через systemd? Можно было создать несколько конфигов и запускать через:
        systemctl start tmproto@conf1.service
        systemctl start tmproto@conf2.service
        Памяти кушает намного меньше и все намного проще по настройке.


        1. webself
          04.04.2026 20:30

          Потому что это модно )

          Кстать, а сколько "в граммах" докер больше памяти кушает?

          Сам противник докера в таких инсталлах, но точных цифр не вымерял.


          1. igorhak
            04.04.2026 20:30

            Обычно у докера оверхед на линукс в 60-70 мб, что как будто бы не так уж и много


        1. navrocky
          04.04.2026 20:30

          Докер память не кушает. Что запустили внутри, то и кушает.


          1. navrocky
            04.04.2026 20:30

            Интересно, в чём я не прав? В линуксе процесс в докере кушает ровно столько же сколько и не в докере. Докер это просто изоляция процесса от хостовой системы. Ну да, сам докер демон потребляет какие-то ресурсы.


        1. Daniel_DF Автор
          04.04.2026 20:30

          По привычке. Всегда всё оборачиваю в контейнер, проще становится через docker сеть подключать их между собой


    1. igorhak
      04.04.2026 20:30

      Я именно для этого написал свой sni proxy на go , который занимает 5мб и благополучно работает https://github.com/igorhakk/sni-proxy


      1. shirmanov
        04.04.2026 20:30

        Чем он удобней nginx или haproxy?


        1. igorhak
          04.04.2026 20:30

          Минимальное потребление ресурсов


          1. shirmanov
            04.04.2026 20:30

            На сколько меньше и каких?


            1. igorhak
              04.04.2026 20:30

              Я не производил никаких замеров, изначальный вопрос был про vds с 512мб памяти. Nginx на старте по минимум требуется 100-150 мб, и при повышении трафика будет повышаться потребление памяти, плюс несколько контейнеров mtp proxy… В моем случае сам бинарник после компиляции весит 5 мб, да и в целом само приложение, кроме как проксированием http по sni, ни чем другим не занимается. Мне, когда я писал, требовалось на 512 мб запустить пару mtp proxy и панельку 3x-ui, что бы это все работало на 443 порту, весь остальной трафик слать на внешний nginx proxy manager.


    1. Daniel_DF Автор
      04.04.2026 20:30

      Вот статистика одного контейнера с прокси. В среднем по памяти 60mb


  1. Timmek
    04.04.2026 20:30

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


    1. Maxim_Q
      04.04.2026 20:30

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


      1. Abyss777
        04.04.2026 20:30

        Всмысле телеграм? Всмысле выкатил? https://habr.com/ru/articles/1019200/

        Ничего не пофикшено, да, стало чуть чаще подключаться, но если подключилось, то всё равно картинки не грузятся.


        1. Prologos
          04.04.2026 20:30

          Включай дополнительно byebyedpi


    1. aleksandr55575
      04.04.2026 20:30

      Уже разучился


      1. Volkodlak
        04.04.2026 20:30

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


        1. aleksandr55575
          04.04.2026 20:30

          У меня да, а к чему вопрос?


          1. Volkodlak
            04.04.2026 20:30

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


            1. aleksandr55575
              04.04.2026 20:30

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


    1. handhok
      04.04.2026 20:30

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


      1. Daniel_DF Автор
        04.04.2026 20:30

        Спасибо


    1. Daniel_DF Автор
      04.04.2026 20:30

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


  1. SidVisceos
    04.04.2026 20:30

    Узнаю почерк deepseek.

    По крайней мере readme.md он помогал. Верно?


    1. Daniel_DF Автор
      04.04.2026 20:30

      Нет, клод


  1. Cerb
    04.04.2026 20:30

    Я для управления telemt, заставил квен мне страничку написать, с простой аутентификацией. Посадил ее за nginx на location /$(openssl rand -hex 32/ { proxy_pass localhost:12345;...

    }

    Сама страничка выполняет api команды telemt, и один баш скрипт для создания нового. Плюс генерирует QR. Доступна из интернета. Вероятность, что её обнаружат крайне мала. Но даже если вдруг, то там пароль, а заменить location - 1 минута.

    Ничего нигде не нужно устанавливать, кроме nginx ничего не требуется.


    1. Daniel_DF Автор
      04.04.2026 20:30

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


  1. pingo
    04.04.2026 20:30

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


    1. Kenya-West
      04.04.2026 20:30

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


    1. forestrg
      04.04.2026 20:30

      тоже ошибка при копировании ссылки на ноду, все правда на одном сервере находится и панель и нода


      1. Daniel_DF Автор
        04.04.2026 20:30

        Извиняюсь, это из-за того что панель не на https. Апи копирования в браузере работает при защищенном соединении или на localhost


    1. Daniel_DF Автор
      04.04.2026 20:30

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


  1. Renaissance
    04.04.2026 20:30

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


  1. Tpyn
    04.04.2026 20:30

    Unexpected token '<', "<html> <h"... is not valid JSON

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


    1. Daniel_DF Автор
      04.04.2026 20:30

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


      1. 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”


        1. Daniel_DF Автор
          04.04.2026 20:30

          Такое происходит, если запуск с первого раза не удался. Выполните

          cd /opt/mtproto-panel

          docker compose down -v

          docker compose up -d --build