image

Наконец-то дождались, после пристального рассматривания и реверс инжениринга протокола MTProto Proxy, Telegram решил выпустить официальный вариант, с поддержкой монетизации promoted каналов, да еще и сразу в Docker образе.

Что такое MTProto Proxy


Это специфический прокси-сервер и протокол от создателей Telegram позволяющий обходить блокировки и монетизировать его использование.

Официальный прокси


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

Теперь же у нас есть и официальный вариант:

github.com/TelegramMessenger/MTProxy

hub.docker.com/r/telegrammessenger/proxy

Что он может?


  1. Поддерживает до 16 разных ключей на 1 прокси
  2. До 60000 подключений на 1 ядро
  3. Имеет API для сбора статистики (доступно только локально)
  4. Готовый образ в Docker
  5. Показ Promoted Каналов

Как настроить?


До безобразия просто:

docker run -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data telegrammessenger/proxy:latest

После этого делаем:

docker logs mtproto-proxy

В качестве вывода вы получите:


####
#### Telegram Proxy
####

[+] No secret passed. Will generate 1 random ones.
[*] Final configuration:
[*]   Secret 1: afajkfhjksajkahkhkjkkk
[*]   tg:// link for secret 1 auto configuration: tg://proxy?server=127.0.0.1&port=443&secret= afajkfhjksajkahkhkjkkk
[*]   t.me link for secret 1: https://t.me/proxy?server=127.0.0.1&port=443&secret= afajkfhjksajkahkhkjkkk
[*]   Tag: no tag
[*]   External IP: 127.0.0.1
[*]   Make sure to fix the links in case you run the proxy on a different port.

[+] Starting proxy...


Собственно базовая настройка закончена.

Показ Promoted канала


Eсли вы хотите показывать канал при подключении к прокси, прокси нужно зарегистрировать:
С этим поможет официальный бот @MTProxybot

Ему следует отправить IP:Port + ключ, в ответ вы получите рекламный tag.

Этот tag нужно передать как параметр при запуске контейнера:

docker run -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data -e TAG=ВАШ_TAG telegrammessenger/proxy:latest

Далее возвращаемся к боту, выбираем свой прокси и «Set promotion» — теперь осталось только отправить любой канал для отображения.

Вот собственно и все, теперь у вас есть официальный Telegram Proxy с Promotion каналом, который будет показыватся всем пользователям.

Дополнительные настройки
По умолчанию, при запуске будет автоматически сгенерирован ключ и сохранён в томе Docker, если вы хотите вы можете указать друой ключ:
-e SECRET=00baadf00d15abad1deaa51sbaadcafe
docker run -d -p443:443 -v proxy-config:/data -e SECRET=00baadf00d15abad1deaa51sbaadcafe telegrammessenger/proxy:latest


Или несколько:


docker run -d -p443:443 -v proxy-config:/data -e SECRET=935ddceb2f6bbbb78363b224099f75c8,2084c7e58d8213296a3206da70356c81 telegrammessenger/proxy:latest

А можете попросить сгенерировать вам несколько ключей:

docker run -d -p443:443 -v proxy-config:/data -e SECRET_COUNT=4 telegrammessenger/proxy:latest

По умолчанию запускает 2 worker'a, изменить настройку можно следующим образом:
WORKERS=16

docker run -d -p443:443 -v proxy-config:/data -e WORKERS=16 telegrammessenger/proxy:latest

Мониторинг доступен по адресу: localhost:2398/stats

Получить статистику можно следующим образом:

docker exec mtproto-proxy curl http://localhost:2398/stats

ready_targets: Количество Telegram серверов которые готовы обслужить запросы с прокси
active_targets: Количество Telegram серверов обслуживающие запросы с прокси
total_special_connections: Количество входящих соединений
total_max_special_connections: Лимит входящих соединений


Бот умеет показывать еще и статистику использования вашего прокси:


docker-compose


Вместо написания длинных команд в одну строку, можно воспользоватся docker-compose.

Вам также может быть интересно


Комментарии (80)


  1. vconst
    30.05.2018 20:20

    Отличная новость! Будем пробовать.


  1. VIRT_nsk
    30.05.2018 21:29
    +2

    Отличное решение! И по монетизации — для быстрого и массового распространения, и по ограничению — только телеграм.


  1. neonzoff
    30.05.2018 21:39
    +1

    Спасибо за перевод, однако так и не понял что такое «WORKERS»


    1. shifttstas Автор
      30.05.2018 21:39
      +1

      Workers — это фактически поток, т.е сколько потоков хотите запустить


  1. Theasdq
    30.05.2018 21:40

    И тут можно кастомить порт как захотим?


    1. shifttstas Автор
      30.05.2018 21:40

      докер же, можно при запуске выбрать любой другой порт, а не 443


  1. rail-ka
    30.05.2018 22:35

    Что-то не запускается образ, ошибка:

    [41][2018-05-30 19:28:32.081285 local] failed to set rlimit for open files. Try running as root or requesting smaller maxconns value.
    [41][2018-05-30 19:28:32.081329 local] fatal: cannot raise open file limit to 65552
    

    Может кто знает почему?


    1. rail-ka
      30.05.2018 22:41
      +1

      Помог запуск в привилегированном режиме:

      docker run -d -p 443:443 --name=mtproto-proxy --privileged --restart=always -v proxy-config:/data telegrammessenger/proxy


      1. anton1234
        31.05.2018 00:26
        +1

        Если что-то не работает запусти его в privileged!


      1. SlavniyTeo
        31.05.2018 08:35
        +1

        Иногда опасно запускать контейнеры, собранные кем-то другим, в привилегированном режиме.
        Не делайте так больше.


    1. shifttstas Автор
      30.05.2018 22:43
      +1

      Можно попробовать добавить в аргументы:

      --ulimit nofile=98304:98304


  1. Ten
    30.05.2018 22:39
    +1

    Собрал, настроил, запустил. Не в докере которая.
    Работает!
    К сожалению, десктопная версия не поддерживает MTProto Proxy, а мобильные — всё ок.


    1. shifttstas Автор
      30.05.2018 22:44

      Догадываюсь, десктопная версия обновится вместе с iOS и тогда и будет пост от Павла


      1. Ten
        30.05.2018 22:48
        +1

        Вероятно. Подождём.


      1. Ten
        30.05.2018 22:53
        +2

        В альфе, кстати, уже есть github.com/telegramdesktop/tdesktop/tree/dev/Telegram


      1. Azlentor
        31.05.2018 16:06

        С iOS не всё так однозначно. «Unfortunately, some Telegram features, such as stickers, don’t work correctly under iOS 11.4 that was just released – even though we fixed this issue weeks ago.

        Apple has been preventing Telegram from updating its iOS apps globally ever since the Russian authorities ordered Apple to remove Telegram from the App Store. Russia banned Telegram on its territory in April because we refused to provide decryption keys for all our users’ communications to Russia’s security agencies. We believe we did the only possible thing, preserving the right of our users to privacy in a troubled country.

        Unfortunately, Apple didn’t side with us. While Russia makes up only 7% of Telegram’s userbase, Apple is restricting updates for all Telegram users around the world since mid-April. As a result, we’ve also been unable to fully comply with GDPR for our EU-users by the deadline of May 25, 2018. We are continuing our efforts to resolve the situation and will keep you updated.
        Sorry for the inconvenience and thank you for your patience.»
        t.me/durov/87


    1. arandomic
      31.05.2018 15:39

      дубль комментария



  1. korjavin
    30.05.2018 22:52
    -1

    Поторопились они. попробуйте порт например поменять. Не работает.
    И ссылку кривую даёт.


    1. shifttstas Автор
      30.05.2018 22:53
      +1

      Так он и не может правильную ссылку дать, внутрянка контейнера не подозревает какой порт ему пробросили, а поменять порт — можно, достаточно при запуске поменять аргумент


      1. korjavin
        30.05.2018 22:57
        -1

        ну, да, но поменяйте таки порт для пробы.
        Клиент висит в статусе checking бесконечно
        В tcpdump пакеты с ответами нулевой длины.
        Ничего никуда не конектится.


        1. shifttstas Автор
          30.05.2018 23:02
          +1

          Проверил, работает, в Telegram OS X / Telegram X


          1. korjavin
            30.05.2018 23:04

            хм, в официальном телеграме на андроиде у меня никак.


            1. shifttstas Автор
              30.05.2018 23:05

              Проверьте, что вы меняете именно первый порт а не второй в конфиге докера


              1. korjavin
                31.05.2018 09:55

                Много раз проверил, и я tcpdump -ом вижу обмен, но коннекта так и не происходит.


                1. shifttstas Автор
                  31.05.2018 09:58

                  Приведите пример строки запуска докера (часть с портом)


                  1. korjavin
                    31.05.2018 22:50

                    -p 4443:443
                    да где там ошибешься то.

                    Чего я только не перепробовал, на том хосте не работает (обычный vds)
                    поставил на другой — взлетело сразу.


                    1. shifttstas Автор
                      01.06.2018 00:03

                      тогда действительно был или косяк в OS или в докере


        1. Vladicka
          30.05.2018 23:05

          Запустил прокси на 4433 порту (через Докер), 443 порт слушает Апач — все работает.


  1. Newton
    30.05.2018 23:11

    У меня довольно нубский вопрос — а завести это вместе с sslh не реально?


    1. Ten
      30.05.2018 23:33
      +1

      Думаю, нет.
      Нужна поддержка в самом sslh чтобы была. Он ведь в пакеты заглядывает.


      1. rogoz
        31.05.2018 00:41

        В sslh есть anyprot, который нужно ставить последним. Так можно и tor обрабатывать.


        1. shifttstas Автор
          31.05.2018 01:02

          Проверил, sslh не отличает https от telegram трафика => нельзя их совместить, а вот ssh+telegram — вполне


          1. shifttstas Автор
            31.05.2018 01:34

            а, нет, наврал, частично можно


          1. rogoz
            31.05.2018 01:36

            Я думаю можно поиграться с SNI и/или ALPN TLS трафика до anyprot, если TLS нужен.


      1. shifttstas Автор
        31.05.2018 09:52
        +1

        получилось habr.com/post/412779


        1. Ten
          31.05.2018 10:03

          Отлично же!
          Был не прав.


          1. shifttstas Автор
            31.05.2018 10:04

            Конечно круто)


    1. shifttstas Автор
      31.05.2018 00:30

      Да, SSH + Telegram можно:
      sslh-select -f --listen PUBLIC_IP:8443 --ssl 127.0.0.1:443 --ssh 127.0.0.1:23


    1. shifttstas Автор
      31.05.2018 09:52
      +1

      Благодаря вам я открыл для себя это приложение, написал о том, как вместе запустить habr.com/post/412779


  1. riot26
    30.05.2018 23:56
    +1

    А реально сделать доступ только с поддомена? Например, на site.ru порт 443 оставляем апачу, а proxy.site.ru займёт прокси сервер.


    1. shifttstas Автор
      31.05.2018 00:31

      я думаю да, правилами apache/nginx заворачивать трафик на этот порт


    1. Massacre
      31.05.2018 00:43

      Не вижу тут проблемы — главное, чтобы IP в этом случае был разным.


      1. shifttstas Автор
        31.05.2018 01:00

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


        1. Massacre
          31.05.2018 01:06

          Да не, там же писалось, что на одном и том же IP можно, но используя разные порты для прокси и веб-сервера. А маршрутизировать средствами веб-сервера — разве что какой-то патч или плагин к нему напишут. Там же не через веб прокси работает.


          1. shifttstas Автор
            31.05.2018 01:34

            ну это тогда совсем тривиальное решение =)


    1. buldo
      31.05.2018 12:45

      Если поставить перед ними HAProxy, то можно.


  1. chuikoffru
    31.05.2018 03:04

    А можно рекламировать только каналы? Или ботов тоже?


    1. shifttstas Автор
      31.05.2018 03:12

      Только каналы


      1. chuikoffru
        31.05.2018 06:37

        Жаль… :( Мне кажется некоторые боты тоже нуждаются в рекламе, надеюсь это учтут в будущем.


        1. istepan
          31.05.2018 09:36

          Напиши в ТП


  1. zeosar
    31.05.2018 09:36

    Не знаете в чём проблема?
    [F] Cannot download proxy configuration from Telegram servers.
    ####
    #### Telegram Proxy
    ####

    Получаю после docker logs mtproto-proxy


    1. shifttstas Автор
      31.05.2018 09:36

      Сервера телеграмм не доступны с вашего сервера


  1. Mogwaika
    31.05.2018 11:45

    А только для себя без рекламы такой прокси можно установить?
    Докер это какой-то пакет, его достаточно установить или нужно настраивать как-то?


    1. shifttstas Автор
      31.05.2018 12:06
      +1

      Конечно можно, рекламу можете не настраивать через бота, можете просто поднять прокси и вообще боту не сообщать об этом.

      Докер — система виртуализации которая облегчает запуск, посмотрите в репозитории по ссылке внизу поста, там инструкция и как докер установить и как сразу запустить прокси.


  1. iminusd
    31.05.2018 12:06

    а есть работающие прокси каналы на которые уже можно подписаться и использовать их как прокси?


    1. shifttstas Автор
      31.05.2018 12:11

      Тут наоборот, вначале вы подключаетесь к прокси, а прокси дает вам уже канал для подписи (формально это не подпись но это не важно) в посте есть информация


    1. TonTools
      31.05.2018 16:58

      Есть просто канал, на котором публикуются новости нового MTProto прокси, в частности поддержка клиентскими приложениями.


  1. AlexeyNadezhin
    31.05.2018 13:21

    docker.com у МГТС GPON заблокирован.
    А как этим всем пользоваться простому пользователю Телеграм?


    1. shifttstas Автор
      31.05.2018 13:57

      а зачем ставить докер и сервер там где что-то заблокировано?


    1. imm
      31.05.2018 15:15


      линк скопировать и ткнуть внутри приложения
      после тыка применится прокси (у меня так)


    1. amarao
      31.05.2018 16:07

      А вы не знаете, почему в России заблокирован Докер? У меня теперь сложные когнитивные проблемы. С одной стороны — цензура зло, с другой стороны, запрет использования докера в Россиии… в этом что-то есть.


      1. vconst
        31.05.2018 16:41
        +1

        С докером можно в два клика поднимать ВПН и всякие прокси, это опасно и может травмировать детскую психику суицидными статьями. И наркотиками через них торгуют, а еще там террористы и пираты. Какие еще версии были у бешеного принтера?


        1. amarao
          31.05.2018 17:01

          Низкая производительность и сложность в отладке для оверлейных сетей? Проблема с chain of trust для образов, отсутствие своевременных обновлений безопасности для образов ОС, которые используются для ребилда приложений.

          С общеинженерной точки зрения приносить свою ОС с собой — дурной тон. Та же 'vm appliance', только слегка замаскированная.


          1. vconst
            31.05.2018 17:03

            Ээээ… Вы точно мне хотели ответить? :)


            1. amarao
              31.05.2018 17:05

              Да. Это альтернативная версия за что Государственная Дума могла решить запретить использование Докера в продакшене.


              1. vconst
                31.05.2018 17:07

                Они и слов таких не знают, не надо их произносить. Они все незнакомое, просто на всякий случай, считают опасным и подлежащим неподлежанию.


                1. amarao
                  31.05.2018 17:09

                  Они пригласили экспертов и лидеров ИТ индустрии, которые сказали, что для сохранения высокого уровня инженерной культуры в ИТ-индустрии России Докер следует ограничить, а вместо этого следует прививать best practices по software engineering.

                  Доверившись экспертному мнению Дума решила отрегулировать ситуацию на диком рынке CI/CD и направить её в русло повышения квалификации (вместо гентрификационного карго-культа).


                  1. vconst
                    31.05.2018 17:11

                    Здорово ))
                    А за что они блокировали гитхаб?


                    1. amarao
                      31.05.2018 17:20

                      А они блокировали гитхаб? Хм… Мои предположения, основывающиеся на здравом смысле и разуме на этом месте заканчиваются.


                      1. vconst
                        31.05.2018 17:29

                        Вот и я о том же…


                      1. GamePad64
                        31.05.2018 19:26

                        Возможно, они не согласны с ситуацией, когда бОльшая часть opensource-разработки сконцентрирована на одном сайте, который является потенциальной точкой отказа?


                        1. amarao
                          31.05.2018 21:27
                          +2

                          Этот вопрос многократно обсуждался — так как git имеет копии на каждом из ноутбуков разработчиков, то точкой отказа он не является. Организовать свой git-репозиторий — вопрос единиц минут, нужен только ssh.

                          Хотя игра мне нравится — придумай высокоумное объяснение каждой происходящей глупости.


  1. 90azat
    31.05.2018 16:59

    Подскажите пожалуйста, как диагностировать почему не работает. Все сделал по инструкции, logs выхлоп pastebin.com/xFTbyJpT
    Статистику курлом взял там ничего интересного нет. Клиент (1.2.24.alpha ) уходит в бесконечный реконектинг.


    1. shifttstas Автор
      31.05.2018 17:00

      выглядит как вполне рабочий лог, может порт не пробрасывается? хотя если вечный connect/дёргается — проблема в ключах, я бы предложил взять новый ключ и с ним запустить образ или попросить сгенерировать новый


      1. 90azat
        31.05.2018 17:44

        Ставил на Centos 7.4
        Первое что пришло на ум: docker exec mtproto-proxy curl https://telegram.org
        В ответ пришла страница сайта. Вроде как у докера доступ к инету есть, ничего не блочит, selinux и firewalld отключен. А есть какая то страница техподдержки?
        tg://proxy?server=51.15.230.106&port=443&secret=282b7036627720f357022fe493bbdc27
        Кто нибудь может протестить? Тоже бесконечный реконнект?


        1. shifttstas Автор
          31.05.2018 17:59

          попробуйте для начала посмотреть открыт ли вообще порт на сервере и сделайте openssl коннект (или браузером) к этому порту, в случае с браузером должен быть долгий коннект а не моментальный reject


  1. Foxcool
    31.05.2018 17:27

    Блин, круто. 10 минут и впска куплена, а на ней крутится твой докеркомпоуз!
    Вот вам telegram proxy:
    t.me/proxy?server=telegram.darkfox.info&port=443&secret=4f40612293dcd9ce3b04e6ec19011a58


    1. Foxcool
      31.05.2018 17:33

      Кстати, shifttstas, у меня в паре групп про распределенные системы и прочий криптоанархизм тебя не хватает (:


      1. shifttstas Автор
        31.05.2018 17:59

        Кидай мне в ЛС, гляну, сейчас, к сожалению стало нехватать времени на рапределенные сети =(