Новый MTProto-прокси сервер от Telegram

  • Tutorial
Прокси-сервер является посредником между клиентом и сервером. Для обхода ограничений прокси-сервер должен быть установлен там, где нет ограничений доступа к требуемой информации, при этом не должно быть таковых ограничений и между клиентом и прокси-сервером.

image

Обновлённая поддержка прокси-серверов в клиентах Telegram


  • Новый MTProto-прокси. Работает с родным для Telegram протоколом MTProto
  • Открытый исходный код сервера на GitHub
  • Docker-образ на DockerHub
  • В мобильных клиентах появилась возможность добавлять несколько прокси-серверов каждого типа. Пользователь может выбрать наиболее подходящий

image

MTProto-прокси


  • MTProto-прокси работает только с Telegram
  • Клиент и сервер не имеют фазы открытого обмена информацией
  • В реализации MTProto-прокси сервера от Telegram прокси-сервер и его владелец не имеют прямого доступа к метаинформации протокола MTProxy (логины, например).
  • Для всевозможных фильтров и анализаторов обмен данными с MTProto-прокси сервером выглядит как неструктурированный бинарный двунаправленный поток данных между клиентом и сервером. Это затрудняет распознавание протокола с целью ограничения.

Быстрый старт


Для запуска собственного MTProto-прокси сервера требуется только машина с установленным Docker и доступом в сеть. На порту 443 не должно ничего быть (nginx, apache). При первом запуске прокси-сервера будет создан секретный ключ, который будет запомнен. Запуск одной командой:

$ docker run -d --net=host --name=mtproto-proxy --restart=always \
    -v proxy-config:/data telegrammessenger/proxy

Для просмотра информации о секретном ключе и специальных ссылках посмотрите журнал контейнера командой:

$ docker logs mtproto-proxy

[+] Using the explicitly passed secret: 'b7e70329dcf3721c4239b86ad32a90b8'.
[+] Saving it to /data/secret.
[*] Final configuration:
[*]   Secret 1: b7e70329dcf3721c4239b86ad32a90b8
[*]   tg:// link for secret 1 auto configuration: : tg://proxy?server=81.177.103.94&port=443&secret=b7e70329dcf3721c4239b86ad32a90b8
[*]   t.me link for secret 1: tg://proxy?server=81.177.103.94&port=443&secret=b7e70329dcf3721c4239b86ad32a90b8
[*]   Tag: no tag
[*]   External IP: 81.177.103.94
[*]   Make sure to fix the links in case you run the proxy on a different port.

Надо учитывать, что прокси-сервер будет пытаться «угадать» параметры для ссылок, поэтому IP и порт могут быть неточными и требовать коррекции.

Секретный ключ


Можно устанавливать свой собственный секретный ключ через переменную окружения SECRET:

$ docker run -d --net=host --name=mtproto-proxy --restart=always \
    -v proxy-config:/data -e SECRET=b7e70329dcf3721c4239b86ad32a90b8 \
    telegrammessenger/proxy

При корпоративном использовании прокси-сервера (группами пользователей) можно использовать несколько ключей (до 16). Например, я для корпоративных установок выделяю такие группы пользователей: boss, managers, users. Для каждой из них генерирую свой ключ. В случае компрометации (утечки на сторону) ключа, меняю его для группы. В чем проблема компрометации ключа? В трафике. Количество подключений может полностью заполнить канал к вашей машине. Также можно сделать систему ротации ключей.

Для установки нескольких ключей их надо перечислить через запятую:

$ docker run -d --net=host --name=mtproto-proxy --restart=always \
    -v proxy-config:/data -e SECRET=b7e70329dcf3721c4239b86ad32a90b8,afccd434fb32248f29f033b189bd8541,878397a50627deb349d4c296bd9dc3c2 \
     telegrammessenger/proxy

Или можно задать желаемое количество ключей для автогенерации через переменную SECRET_COUNT (не больше 16):

$ docker run -d --net=host --name=mtproto-proxy --restart=always \
    -v proxy-config:/data -e SECRET_COUNT=5 telegrammessenger/proxy

Для генерации своего ключа можно воспользоваться, например, одной из команд в Linux:

# работает даже на busybox:
$ tr -dc 'a-f0-9' < /dev/urandom | dd bs=1 count=32 2>/dev/null
$ hexdump -n 16 -e '4/4 "%08x" 1 "\n"' /dev/random    # требуется программа hexdump
$ openssl rand -hex 16    # требуется openssl

Производительность


Каждый процесс прокси-сервера может обрабатывать десятки тысяч подключений. Для лучшей производительности стоит ограничение 60000 подключений на одно ядро процессора. По умолчанию запускается два процесса прокси-сервера (с предположением, что каждому система выделит по ядру). Можно увеличить количество запускаемых процессов через переменную WORKERS. Не следует запускать их больше, чем на процессоре имеется ядер:

$ docker run -d --net=host --name=mtproto-proxy --restart=always \
    -v proxy-config:/data -e WORKERS=16 telegrammessenger/proxy

Использование сети


В примере специально дан ключ --net=host. Это позволяет избежать избыточной трансляции адресов и позволяет использовать IPv6 прямо из коробки без настройки, если он есть на той машине, на которой запускается proxy-server.

Конечно же, можно запустить и более классическим способом, указав проброс портов:

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

Можно указать и какой-нибудь другой порт, например:

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

Учтите, что прокси-сервер ничего не знает о «настоящем» порте и ссылка будет неправильная, её надо будет корректировать.

Мониторинг


MTProto-прокси сервер представляет некоторую статистику по своей работе. Статистика предоставляется только на localhost: http://localhost:2398/stats.

При запуске прокси-сервера через docker с параметром --net=host для получения статистики достаточно команды: curl http://localhost:2398/stats, или проксирования через, например, nginx куда-нибудь наружу. При запуске прокси-сервера через docker с пробрасыванием портов статистику можно получить командой:

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

Некоторые метрики:
  • ready_targets — количество серверов Telegram, c которыми будет пытаться соединиться прокси-сервер
  • active_targets — количество подключений к серверам Telegram (в теории должно совпадать с ready_targets)
  • total_special_connections — количество входящих соединений клиентов
  • total_max_special_connections — максимальное возможное количество одновременных соединений

Реклама


Telegram позволяет монетизировать прокси-сервер через подписку на Promoted-канал. Promoted-канал — это такой канал, на который вы автоматически будете подписаны при подключении к прокси-серверу. Он будет закреплен наверху списка чатов и его нельзя удалить пока вы не отключитесь от данного прокси-сервера.

Для настройки Promoted-канала следует у специального бота @MTProxybot получить код и передать его в переменной TAG при запуске сервера:

$ docker run -d --net=host --name=mtproto-proxy --restart=always \
    -v proxy-config:/data -e TAG=85174e9e0ffa43c0d3a7167e52175268 \
    telegrammessenger/proxy:latest

Этот параметр не запоминается, его надо задавать каждый раз при создании и пересоздании контейнера.

Promoted-канал будет показываться наверху с соответствующей пометкой для тех клиентов, которые используют данный прокси-сервер. Если подписаться на канал, то пометки не будет.

image

Обновление прокси-сервера


Разработчики MTProto-прокси будут стараться делать минимум изменений, но рекомендуют обновлять прокси-сервер хотя бы раз в сутки:

$ docker pull telegrammessenger/proxy    # обновить образ
$ docker stop mtproto-proxy    # остановить контейнер
$ docker rm mtproto-proxy     # удалить контейнер
$ docker run ....  # создать из обновленного образа и запустить контейнер заново
$ docker logs -f --tail=30 mtproto-proxy    # посмотреть журнал контейнера

Docker Compose


Пример docker-compose.yml:

version: '3.0'

services:
        mtproxy:
                image: telegrammessenger/proxy:latest
                hostname: mtproxy
                container_name: mtproxy.local
                volumes:
                        - proxy-config:/data
                network_mode: "host"
                logging:
                        driver: syslog
                        options:
                                tag: mtproxy
                restart: always
volumes:
        proxy-config:
                external: true

Для использования Promoted-каналов не забудьте добавить переменную TAG.

Обновление прокси-сервера c Docker Compose


$ docker-compose pull mtproxy     # обновить образ
$ docker-compose up -d   # пересобрать и перезапустить контейнер
$ docker-compose logs -f --tail=30 mtproxy    # посмотреть журнал сервиса
Поделиться публикацией

Похожие публикации

Комментарии 260
    0
    Это официальная реализация, или чей-то самописный прокси?
      0
      Официальная. Бот с синим значком.
        –4
        А, зачем вы зафорсили использование докера в статье? Да еще и, по сути, заставляете его использовать тем более с тегом туториал.

        Он не нужен ни для запуска одного единственного бинарника ни для работы, в принципе, вообще.
          –2
          Docker прежде всего это пакетный менеджер. Более того, docker всегда и запускает один бинарник. Более оптимального, эффективного и универсального способа доставки приожения сейчас не существует.
            –3
            нет. самска собаки.НЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕТ!11!11
            это не пакетный менеджер… как-же вы адепты зае… всюду его впихивать.
              +2

              Прости нас

                +2
                Так чем он плох то? вот хотите вы сделать 1 прокси — берете докер, две команды и он есть. А теперь вы хотите 2 или 10 или 100 — еще 1 команда и у вас он уже работает в кластере на 100+ машинах и сам себя перезапускает при падении и логи в единое место пишет. Удобна, правда?

                А ну и да, кластер для докера вам любой нормальный хостер через веб-мордочку развернет в два клика. Можно без каких-либо знаний администрирования это сделать.

                Еще и балансировка из коробки и много чего еще…
                  –2
                  systemd, его генераторы и юниты с подстановкой.
                    +3
                    как systemd поможет с кластерной установкой?
                      –2
                      У меня кластера нет, например.
                        +1

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


                        Собственно решать вам, почти всегда можно и без докера..

                      0
                      И в чем разница?
                        –1
                        > сам себя перезапускает при падении и логи в единое место пишет.
                        Только ничего добавлять не надо, даже chroot из коробки есть.
                        Я всё еще не вижу смысла добавлять ненужные сущности.
                          0
                          Технологическая разница в чем?
                  • НЛО прилетело и опубликовало эту надпись здесь
            0
            На канале будет видно сколько подписчиков?
            Вообще, сложно ли со стороны вычислить сколько пользователей прокси?
              0
              Будет видно только тех подписчиков, что подпишутся. У упомянутого бота есть статистика использования прокси — там будет видно, сколько пользователей пользуется прокси.
              +3
              Означает ли это, что понять используя DPI, что в потоке идёт подключение к телеграму, станет значительно сложнее? Ну и не совсем понял, что там с передачей логина и пароля при подключении к прокси.
              Вообще, Паша работает, не унывает)
                +3
                Да, будет сложнее распознать. Только через атаку по размеру. И то много вопросов.
                Нет никаких логинов и паролей. Есть ключ сервера и всё.
                  +1

                  https://habr.com/post/359348/#comment_11373110 shifttstas — 26 мая в 14:04 — Telegram MTPROTO Proxy — всё что мы знаем о нём; stek29 26.05.18


                  Недавно подобная статья была на TJournal, где Даша aka koteeq из VeeSecurity дала неплохое описание протокола "obfuscated2", который используется в том числе для "mtproto proxy". Процитирую:
                  Обфускация "anti-DPI" там простая. Генерят на клиенте случайный 32-байтовый ключ и 16-байтовый IV, ими шифруют пакет с AES CTR и отправляют. При этом сами ключ и IV отправляются перед зашифрованной нагрузкой.
                  В итоге, если вы провайдер, вам нужно ВСЕГО ЛИШЬ брать от каждого исходящего пакета 8-40 байты (ключ) и 40-56 байты (IV), расшифровывать содержимое (64-… байты). В расшифрованном содержимом уже вполне стандартный mtproto-формат, где первые 8 байт — сигнатура авторизационного ключа.

                  Пример реализации
                  https://github.com/makkarpov/mtoxy/blob/master/src/main/java/ru/makkarpov/mtoxy/network/Obfuscated2Handshaker.java https://github.com/danog/MadelineProto/blob/master/src/danog/MadelineProto/Connection.php#L128

                    +2
                    Для MTProto-прокси таки используется чутка иное: telegra.ph/telegram-blocks-wtf-05-26
                      +1

                      Спасибо. Цитаты из http://telegra.ph/telegram-blocks-wtf-05-26


                      Во-первых, клиент общается с MTPROTO-прокси только с обфускацией obfuscated2.
                      Во-вторых, obfuscated2 здесь используется чуть модифицированный. Перед зашифрованной частью всё так же открыто передаются ключ и IV, только вот шифруется сам пакет не этим ключом, а sha256(key+secret). Secret — это тот самый 16-байтовый параметр, который вы заполняете при подключении к MTPROTO-прокси.
                      Secret нигде не передаётся в процессе связи. Его использует клиент для шифрования пакета и MTPROTO-прокси-сервер для расшифрования.
                      MTPROTO-прокси-сервер получает от вас пакет, деобфусцирует его ключом sha256(key+secret), затем снова обфусцирует, но уже используя обычный obfuscated2 без дополнительных параметров.

                      и про obfuscated2


                      официальные же клиенты используют дополнительный слой обфускации, нигде не документированный. Товарищ Tomas Susanka уже максимально подробно описал используемый метод обфускации пакетов, поэтому расписывать всё не буду.
                      Клиент придумывает случайный 32-байтовый ключ и случайный 16-байтовый Initialization Vector, которыми шифрует каждый пакет с помощью AES CTR, а чтобы сервер узнал, как это расшифровать… ключ и IV добавляются в начало пакета перед зашифрованным содержимым.…
                      После обфускации все пакеты выглядят как случайный мусор, поэтому для определения, Telegram-трафик это или нет, провайдеру придётся расшифровывать каждый непонятный пакет по методике obfuscated2, прежде чем проводить дальнейшие проверки. Такие действия требуют неоправданное количество вычислительных мощностей, которых у провайдеров попросту нет.
                        0
                        Ну да. И собственно как это противоречит?
                          +1

                          в общем-то никак не противоречит, но тут самое главное написано в последней фразе:


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

                          Для Даши aka koteeq естественно нет никаких проблем расшифровать на личном ноутбуке пару десятков или сотен пакетов из Wireshark. Но теперь представьте себе промышленную DPI-систему, которая должна анализировать петабайты трафика в реальном времени.


                          В таких системах даже просто прочитать пакет два раза — это крайне нежелательное действие, просаживающее производительность. Что-то расшифровывать, просто чтобы посмотреть, не telegram ли это — нереально, абсолютно нереально. MTProxy делали люди, прекрасно знакомые с темой.

                            0
                            Да. Так и есть
                              +1
                              Анна она, Анна. Даша это опечатка одного из юзеров в прошлом посте :)
                                0

                                В http://telegra.ph/telegram-blocks-wtf-05-26 разъяснили, что протокол obfuscated2 был изменен, теперь у клиента и сервера есть общий secret (у сервера — один из 16), который участвует в создании ключа для данных. У DPI секрета нет, он видит лишь двоичный поток. Даша для расшифровки в Wireshark должна ввести secret в дешифровщик.


                                В оригинальном obfuscated2 (к которому и относится фраза "неоправданное количество вычислительных") полный ключ и данные передавались вместе.

                    0
                    На порту 443 не должно ничего быть (nginx, apache)

                    А если на 443 порту уже что-то висит?
                      0
                      Повесьте на другой порт. Там прямо в инструкции приведен пример порта 8443
                        0
                        А в SNI оно не умеет чтоли?
                          0
                          Там не TLS вообще
                            0
                            Извините, сначала комментил, потом читал статью(((
                              +1
                              сложнее замаскироваться под доступ к вебсайту например
                        0
                        Случайно отмодерировал комментарий про TAG. Не знаю как исправить.
                        TAG должна остаться переменной окружения. И при прямом запуске без docker.
                          0
                          А как получить тот самый код у бота? Он знает только две команды: /newproxy и /myproxies
                            0
                            Добавить прокси — он сразу код скажет. Потом нажать на инлайн-кнопку с именем прокси и он предложит добавить Promoted-канал
                          0
                          В iOS это уже поддерживается? Как я понял, Эппл морозит Пашу с обновлениями в АппСторе.
                            0
                            можно telegram x поставить, там поддерживается
                              +1
                              Его нет в AppStore :(
                                +3
                                Группа тестирования: t.me/tgiostests
                                Там же можно найти ссылку на установку (в шапке) установится на iOS без джейлбрейка
                                  0
                                  Спасибо за ссылку!!! Поставил на 10.3.3
                                    +1
                                    Обращайтесь =)
                                      +1
                                      Спасибо тебе добрый человек
                                  +1
                                  Если хотите, в личку можете прислать email и я отправлю вам прямую ссылку на приложение из официального стора после чего вы сможете добавить его в свой аккаунт и в дальнейшем устанавливать при необходимости.
                                    0
                                    К сожалению, как оказалось, любимая Apple вырезала обходной путь для Telegram, хотя еще буквально пару недель назад все работало.
                                      –1
                                      Telegram X снова доступен в сторе. Качайте, глупцы :)
                                      itunes.apple.com/ru/app/telegram-x/id898228810?mt=8
                                +8
                                Я был чуть раньше habr.com/post/412755

                                Но два поста лучше чем один =)

                                Устроим недели Telegram на Habr!
                                  0
                                  > для получения статистики достаточно команды: curl localhost:2398/stats
                                  Я так понял, что порт задан где-то скрыто в настройках контейнера, потому что при запуске прокси с параметром "-p 8888", например, статистику можно смотреть именно на этом порту. Об этом и в README написано.
                                  На Telegram X не заработало, на виндовом клиенте тоже.
                                    0
                                    Логично, что там развесистый стартовый скрипт. А curl и вот это всё делали перед?
                                      0
                                      Ну я сначала README прочитал, по нему собрал и запустил. Потом уже тут посмотрел что да как.
                                        0
                                        Я к тому, что Telegram X заработал?
                                          0
                                          Он по клику на правленную ссылку делает вообще ничего, как и виндовый клиент.
                                          В порыве отчаяния пробовал прописывать как SOCKS5 и HTTP — ноль на массу.
                                            0
                                            Нет, там должен быть именно MTProto
                                              0
                                              • Desktop Version 1.2.18+
                                              • macOS v3.8.3+
                                              • Android v4.8.8+
                                              • Telegram X iOS v5.0.3+
                                              версии ниже указанных не поддерживают mtproto
                                                0
                                                > 1.2.18+
                                                На сайте 1.2.17
                                                github.com/telegramdesktop/tdesktop/releases
                                                1.2.24
                                                > X iOS
                                                Ясно
                                                  0
                                                  на desktop.telegram.org лежит win 1.3
                                                    +2
                                                    Надо было бы недельку с ответом подождать.

                                                    v 1.3.0
                                                    @john-preston john-preston released this 11 hours ago

                                      +1
                                      А как заставить его подключаться к дц телеги по ipv6? В параметрах есть флаг -6, но он ничего не меняет.
                                        0
                                        Рубрика «обходим блокировки сервером в России»? :D

                                        По делу: Мне кажется надо включить IPv6 флагом --ipv6/-6 и после изменить файл .conf, удалив все IPv4 сервера и добавив IPv6.
                                          0
                                          Даа, я знаю толк в извращениях. Пока что только один из опробованных mtproxy серверов поддерживал ipv6, но тот слишком прожорлив по ресурсам оказался.

                                          Этому попробовал подсунуть такой конфиг:
                                          proxy_for 1 [2001:0b28:f23d:f001:0000:0000:0000:000a]:443;
                                          proxy_for 2 [2001:067c:04e8:f002:0000:0000:0000:000a]:443;
                                          proxy_for 3 [2001:0b28:f23d:f003:0000:0000:0000:000a]:443;
                                          proxy_for 4 [2001:067c:04e8:f004:0000:0000:0000:000a]:443;
                                          proxy_for 5 [2001:0b28:f23f:f005:0000:0000:0000:000a]:443;

                                          Стартует, к серверам этим вроде подключается, но клиент через такое прокси не работает.
                                            0
                                            Оно стартует, если туда написать любой адрес от балды, гляньте. Не хватает дебага.
                                              0
                                              Ну адреса оно спарсило нормально, но если включить побольше дебага, то видно, что почти сразу после подключения отключается. Видимо что-то не так.
                                                0
                                                Есть мнение, что поддержка пока есть только для клиентов. То есть если клиент IPv6-only, то он подключится и будет проксироваться сервером через IPv4 сервера. Надеюсь пофиксят короче, потому что разворачивать сервера в России будет банально дешевле :D
                                        0
                                        Если у кого будет ошибка как у меня была:
                                        [5][2018-05-30 19:28:32.081214 local] failed to set rlimit for open files. Try running as root or requesting smaller maxconns value.
                                        [5][2018-05-30 19:28:32.081230 local] fatal: cannot raise open file limit to 65552
                                        

                                        запускайте в привилегированном режиме:
                                        docker run -d -p 443:443 --name=mtproto-proxy --privileged --restart=always -v proxy-config:/data telegrammessenger/proxy
                                          0
                                          А что Вы делаете, чтобы получить эту ошибку? Ну т.е. запускать в привелигерованном режиме как-то не айс…
                                            0

                                            Просто запускаю контейнер. Детали ошибки тут: https://github.com/TelegramMessenger/MTProxy/issues/7

                                              0
                                              Пока не разобрался, вроде докер установлен по официальной инструкции и работает нормально с другими контейнерами, а вот контейнер с телеграм ругается. Операционная система Centos 7, Azure хостинг.
                                              +3
                                              Данный выше мной метод не рекомендуется использовать.
                                              В комментариях другой публикации подсказали правильный способ обхода ошибки:
                                              docker run -d -p 443:443 --name=mtproto-proxy --ulimit nofile=98304:98304 --restart=always -v proxy-config:/data telegrammessenger/proxy
                                              
                                              +1
                                              Скорость загрузки медиа значительно уступает «носкам» на том же сервере.
                                                0
                                                По медиа вроде не заметил особой разницы, а вот памяти кушает прилично больше.
                                                  0

                                                  я тут недавно разбирался с их протоколом, официальный прокси во-первых соединяется с ещё одним уровнем проксей — middleware proxies. Во-вторых он общается с ними по протоколу mtproto, оборачивая каждый кусок отправляемых данных в rpc-вызов протокола mtproto и добавляя примерно 96 байт оверхэда. На загрузку больших файлов не должно влиять, а вот на latency и на объем исходящего трафика при маленьких сообщениях — может

                                                  +1
                                                  Что-то ios приложение запаздывает…
                                                    +2
                                                    Компания Apple заблокировала обновление мессенджера Telegram по всему миру с середины апреля 2018 года. Об этом сообщается в разделе ответов на «часто задаваемые вопросы» на сайте приложения.

                                                    Рассказывая о последних изменениях в законе о персональных данных, известном как General Data Protection Regulation (GDPR), команда мессенджера сообщила: «К сожалению, Apple блокирует Telegram от обновления iOS-приложения глобально с середины апреля».


                                                    Telegram X например стабильно обновляется на rink.hockeyapp.net/apps/c6f5a76f5c364ac89a98b77671ef2d63
                                                      0
                                                      Теперь все понятно…
                                                      +5
                                                      я вот больше переживаю за docker и github, у ркн и туда щупальца могут дотянуться
                                                        +1
                                                        Ими пользуются только айтишники, которые умеют обходить блокировки.
                                                          +5

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

                                                            +3
                                                            Зато теперь работать террористом стало гораздо сложнее.
                                                              0

                                                              Вот это тонко! Сделали моё утро!

                                                          +3
                                                          Уже не раз дотягивались. Гитнаб блокировали из-за приколистов, которые выкладывали на него юморной список «100 способов самоубийств» и просто за компанию.
                                                        0
                                                        По умолчанию запускается два процесса прокси-сервера (с предположением, что каждому система выделит по ядру).

                                                        Почему именно 2? Можно же узнать, сколько аппаратных потоков поддерживается в данной системе.
                                                          0
                                                          И ставить на полную катушку? Пусть администратор выбирает
                                                            0
                                                            Ну так если на сервере 2 потока, то итак на полную катушку, а если 1, то ещё и не эффективно, было бы логичней по дефолту запускать на всех ядрах, а опцией переопределять значение.
                                                              0
                                                              Ммм… Давайте возьмем дефолтный конфиг nginx…
                                                                0
                                                                и что с ним не так?
                                                                  +1
                                                                  Там просто жестко 2 вбито. Да, они ещё сделали потом параметр auto. Но сильно потом.
                                                                    +1
                                                                    Если речь про worker_processes, то там auto, nginx с репов Ubuntu 16.04.3.
                                                          +4
                                                          Дуров молодец — придумал не только протокол прокси без сигнатур, но и систему мотивации для их появления. За рекламу конечно желающих поддерживать прокси будет гораздо больше, чем за бесплатно.
                                                            0
                                                            А какая мотивация у пользователей тогда ставить себе Телеграм, которым можно пользоваться только через анальные отверстия, так ещё и рекламу от них получать?
                                                              +3
                                                              Одно слово — комьюнити
                                                                –16
                                                                А это самое комьюнити готово помимо поднятия прокси ещё и подписку платную оформить на Telegram, дабы ФСБ РФ не тратило государственные средства на оплату серверов и зарплаты разработчиков?
                                                                  +4
                                                                  Мне требуется переводчик
                                                                    –13
                                                                    И не только он
                                                                      +1

                                                                      Что вы тут ищите?

                                                                        +1
                                                                        Корм вестимо.
                                                                          –4
                                                                          Питаюсь мозгами, но тут их явно нет. Пойду на ЛОРе поищу.
                                                                            0
                                                                            Так ты не по себе хабр суди, тут ещё другие люди сидят :)
                                                                              –3
                                                                              Это сарказм. Злые вы тут какие-то. Я же за монетизацию Telegram переживаю, за комьюнити ваше. А то знаю я один случай продажи пользовательской базы вместе с инфрастуктурой за бешенные миллиарды долларов.
                                                                          0
                                                                          Ключи шифрования.
                                                                      0
                                                                      Причём тут ФСБ?
                                                                      image
                                                                        –5
                                                                        Согласен, это всё благотворительный фонд братьев Дуровых. Ну ошибся, со всеми бывает.
                                                                      –6
                                                                      Когда в армии служил и мы делали с сослуживцами ремонт замполиту в комнате общежития, тоже себя комьюнити называли.
                                                                      0
                                                                      Реклама не обязательный пункт, вы же можете не «срать» пользователям своего прокси, а использовать как например «короткие номера» — для удобства клиентов так сказать.
                                                                        0
                                                                        А никого больше не смущает, что теперь будет показываться реклама в мессенджере, в котором обещали никогда не показывать рекламу? Я все понимаю, но читаю уже не первую новость про прокси и вот это все, и никого не волнует этот вопрос.
                                                                          +4
                                                                          Так поднимите свой прокси и не будет рекламы
                                                                            0
                                                                            Вопрос не в рекламе и прокси. Вопрос в нарушении обещания.
                                                                              +1
                                                                              Если не использовать прокси — рекламы не будет, Павел же не говорил, что он будет еще и прокси бесплатно оплачивать (а он это сейчас делает) в странах с цензурой. Там где нет цензуры — прокси тоже не нужны и обещания в силе
                                                                            +1
                                                                            Вы можете не пользоваться теми прокси, которые показывают рекламу. Т. е. по сути это не Телеграм вам включает рекламу, а вы выбираете поставщика подключения с рекламой или без.
                                                                              0
                                                                              В вашей формулировке это выглядит приличнее чем видится мне. Попробую себя переубедить.
                                                                      0
                                                                      В идеале, нужна тупая инструкция как поднять.
                                                                      Т.е. купить там-то (ip — уже не забанены) и сделайте то-то…
                                                                      Потом раздайте друзьям/знакомым…
                                                                        0

                                                                        Этих инструкций уже полный хабр

                                                                          0

                                                                          В т.ч. и как установить одной командой

                                                                            +2
                                                                            Справедливости ради — как поставить докер нету
                                                                              0
                                                                              если уж совсем не хочется заморачиваться (правая колонка ):
                                                                              rancher.com/docs/rancher/v1.6/en/hosts/#supported-docker-versions
                                                                                –2
                                                                                emerge -av app-emulation/docker 
                                                                                  –2
                                                                                  Проще же есть и под все платформы:
                                                                                  curl -sSL https://get.docker.com/ | sh
                                                                                    +2
                                                                                    Дааа, под все
                                                                                    SUPPORT_MAP="
                                                                                    x86_64-centos-7
                                                                                    x86_64-fedora-26
                                                                                    x86_64-fedora-27
                                                                                    x86_64-fedora-28
                                                                                    x86_64-debian-wheezy
                                                                                    x86_64-debian-jessie
                                                                                    x86_64-debian-stretch
                                                                                    x86_64-debian-buster
                                                                                    x86_64-ubuntu-trusty
                                                                                    x86_64-ubuntu-xenial
                                                                                    x86_64-ubuntu-bionic
                                                                                    x86_64-ubuntu-artful
                                                                                    s390x-ubuntu-xenial
                                                                                    s390x-ubuntu-bionic
                                                                                    s390x-ubuntu-artful
                                                                                    ppc64le-ubuntu-xenial
                                                                                    ppc64le-ubuntu-bionic
                                                                                    ppc64le-ubuntu-artful
                                                                                    aarch64-ubuntu-xenial
                                                                                    aarch64-ubuntu-bionic
                                                                                    aarch64-debian-jessie
                                                                                    aarch64-debian-stretch
                                                                                    aarch64-debian-buster
                                                                                    aarch64-fedora-26
                                                                                    aarch64-fedora-27
                                                                                    aarch64-fedora-28
                                                                                    aarch64-centos-7
                                                                                    armv6l-raspbian-jessie
                                                                                    armv7l-raspbian-jessie
                                                                                    armv6l-raspbian-stretch
                                                                                    armv7l-raspbian-stretch
                                                                                    armv7l-debian-jessie
                                                                                    armv7l-debian-stretch
                                                                                    armv7l-debian-buster
                                                                                    armv7l-ubuntu-trusty
                                                                                    armv7l-ubuntu-xenial
                                                                                    armv7l-ubuntu-bionic
                                                                                    armv7l-ubuntu-artful
                                                                                    "
                                                                                      –1
                                                                                      это 99.5% серверных OS
                                                                            +2
                                                                            Коллеги, пара прикладных вопросов, пока топик ещё горяч, особенно актуальных для тех, у кого VPS ещё маленькие (у меня вот, например, 384 MB RAM):

                                                                            1. Есть ли официальный способ установки без использования Docker? Если говорить более частно, то интересует CentOS 7.
                                                                              На GitHub предлагают использовать make, но я бы предпочёл установку из репозитория. Как я понимаю, туда MTProxy ещё не добрался?
                                                                            2. Если уже есть те, кто поставил и гоняет, как обстоят дела с потреблением аппаратных ресурсов (в особенности оперативная память, но и процессор, в целом, тоже)?
                                                                              Интересны два сценария: 10-20 человек (т.е. небольшая группа хорошо знакомых людей) и несколько десятков человек (перевод лампового чата специалистов на один прокси).
                                                                              +1
                                                                              Проблема заключается в том, что данный докер образ использует какой-то жутко большой образ системы, надо подождать что бы его почистили или же сделать свой, докера не стоит боятся, он не так много ресурсов потребляет, как кажется.

                                                                              Ну есть еще вариант — купить сервер за 1 евро месяц с большим количество RAM =)
                                                                                0
                                                                                Образ системы вообще не влияет на потребляемый ресурс. Ну за мелкими деталями.
                                                                                  0
                                                                                  Почему же? посмотрите docker stats — сколько процессов использует их образ, немного удивитесь
                                                                                    0
                                                                                    Это зависит от базовой системы? На альпине столько же будет. А сколько? bash, сам прокси WORKERS +1? Ok. +2
                                                                                      0
                                                                                      Хм, у меня Pid’ов больше 60…
                                                                                        0
                                                                                        А это он не тредится там сам?
                                                                                  +2
                                                                                  Я кстати сделаю наверное alpine и попробую статикой
                                                                                    +1
                                                                                    Ну есть еще вариант — купить сервер за 1 евро месяц с большим количество RAM =)

                                                                                    Это где такая щедрость?)
                                                                                      0
                                                                                      arubacloud.com например или за 5 евро — DigitalOcean
                                                                                        0
                                                                                        arubacloud, мутные ребята
                                                                                        1. The price of €1 per month (exc. VAT)… is valid only for deployments (and renewals) made on data center IT1. New deployments… will be priced at €2,79 per month (exc. VAT).
                                                                                        И это же еще VAT добавлять?
                                                                                        2. Maximum limit of 16 IPv6 simultaneous in use
                                                                                        Что за треш
                                                                                        3. Можно ли поставить ОС из своей .iso или хотя бы попросить добавить .iso как в KVM VPS?

                                                                                        А DO, 70 баксов в год — это уже не щедрость
                                                                                          –1
                                                                                          Зачем вам добавлять VAT если вы не гражданин EU? ценник 1 евро действует только в двух ДЦ, а не по всей географии, они собственно об этом и пишут.
                                                                                            0
                                                                                            Извините, не знал, никогда с Европой дел не имел, только с штатами. Ну главное, чтобы ценник хотя бы лет 5 такой держался, а то будет как обычно через год: «мы тут всех перемещаем в наш новый дц, поэтому ценник дорожает».
                                                                                            Так что у них с использованием distro of choice (которого в списке их ОС нет), не подскажите?
                                                                                              +1
                                                                                              На 1 евро дистр вроде как менять нельзя. Я менял систему через swap раздел, конечно для новичка linux будет сложно.
                                                                                          0
                                                                                          На DO 5$, а не евро.
                                                                                      –1
                                                                                      Репозитории все родом из начала 90-ых. Создавать пакеты под системы — муторно. Особенно в 2018 году, когда есть docker. Сделайте make, киньте бинарник на VDS.
                                                                                        0
                                                                                          0
                                                                                          > использовать make
                                                                                          Создать каталог "/opt/mtproxy" и положить туда собранный бинарник с конфигами. Он зависит только от zlib и libssl.
                                                                                          Написать скрип/юнит/etc для системы инициализации и использовать.

                                                                                          Я вот такое соорудил у себя pastebin.com/u4zETYFY
                                                                                          В файл «config» прописал нужные переменные.

                                                                                          У меня сейчас прокся ест метров 7 оперативы.

                                                                                          А где такие нищебродские VPS раздают и по какой цене?
                                                                                          +2
                                                                                          Спасибо тебе добрый фей, который поправил <code> на <source>
                                                                                          1. Съехало форматирование, проявился тег pre
                                                                                          2. А редактор-то code по сей момент вставляет...
                                                                                            0
                                                                                            Кто нибудь сравнивал с не официальными реализациями? Например на .net core и rust, второй особенно интересует.
                                                                                              0
                                                                                              Нет ещё. Кстати — благодатная почва
                                                                                                +2
                                                                                                какого рода сравнение вас интересует?
                                                                                                php реализация — кушает очень много памяти, работает хорошо
                                                                                                rust — не дает подключиться при 5k+ соединениях, скачать файл невозможно
                                                                                                nodejs — отлично работает
                                                                                                .net не пробовал
                                                                                                official — все отлично
                                                                                                  0

                                                                                                  Ваше вполне подходит, спасибо. Разве что больше информации.

                                                                                                  0
                                                                                                  У меня сервер на rust висел дня четыре. Не знаю, в клиенте ли дело (Android + TG Desktop Alpha под OSX, две версии) или еще в чем, но работало жутко нестабильно. При фактически 5-7и клиентах, прокси периодически отпадал, клиенты не могли подключиться, приходило постоянно ребутать его. Файлы, как выше писали, не проксировал.

                                                                                                  Попробуем оф. версию.
                                                                                                  0
                                                                                                  Если кто-то из тех, кого перед 1 мая оставляли на работе в РКН, пока они весь Телеграм не заблокируют, запустит такой прокси прямо в РКН, то и начальство (все равно) ничего не поймет и не заметит, и справедливость хоть как-то восторжествует.

                                                                                                  Интересно, владельца такого прокси хоть за что-то притянуть смогут? Неструктурированный поток бинарных данных: этак либо ругать всех, кто бинарные данные гонит без понятного заголовка, либо — игнорить?

                                                                                                  Молодцы Паша с командой!
                                                                                                    0
                                                                                                    Справедливости ради они банят не по данным от снифа. А просто по пабликам
                                                                                                      –1
                                                                                                      А я не про бан. Просто нашли комп, поснифали трафик, трафик — рандомные биты. Для владельца компа это вызовет проблемы, или нет?

                                                                                                      Я понимаю, что приписать «распространение материалов, разжигающих нетерпимость», равно как и наркоту подбросить, можно любому — но если по закону, а не по правоприменительной практике, есть ли повод к человеку претензию иметь?
                                                                                                        +1
                                                                                                        Есть еще «Использование запрещенной не сертифицированной ГОСТом криптографии»
                                                                                                          0
                                                                                                          "… карается исправительными работами на срок от 2^7 до 2^8 дней, либо тюремным заключением на срок сколько товарищ майор скажет, либо работой в РКН, с полной конфискацией радостей жизни."
                                                                                                          0
                                                                                                          Можно попробовать спрятать telegram трафик в https, тогда доказать, что у вас там стоит telegram proxy будет сложнее, без ключа соединение будет обрыватся habr.com/post/412779
                                                                                                        0
                                                                                                        Если кто-то из тех, кого перед 1 мая оставляли на работе в РКН, пока они весь Телеграм не заблокируют, запустит такой прокси прямо в РКН

                                                                                                        Главное — не забыть настроить продвижение официального канала РКН в Telegram.
                                                                                                          0
                                                                                                          И бота в него, который будет отвечать на вопросы «почему мой IP забанили?»
                                                                                                            +2
                                                                                                            Который будет отвечать примерно так.
                                                                                                            Указанный Вами IP адрес 51.15.37.92, 51.15.70.45 входит в подсеть 51.15.0.0/16, используемую для обеспечения функционирования коммуникационных интернет-сервисов указанного организатора распространения информации в сети «Интернет»
                                                                                                              0
                                                                                                              Да-да, я это и имел в виду, просто не нашел быстро это отмазку.

                                                                                                              Вообще чего уж там, можно просто написать универсально (чтобы не мудрить с lookup-ом в БД запретов):

                                                                                                              Интересующий Вас IP адрес входит в подсеть 0.0.0.0/0, используемую для обеспечения функционирования коммуникационных интернет-сервисов организаторов распространения запрещенной решением суда информации в сети «Интернет». Сеть будет блокировано до вынесение решения о её разблокировки, которая выйдет не раньше, чем в сети «Интернет» будет пойман и наказан последний такой организатор.


                                                                                                              И ведь не отвертишься, в этой-то «подсети» точно хоть что-то «незаконное» можно будет найти, если хорошо поискать.
                                                                                                                +1
                                                                                                                Самое прекрасное, что в том же письме они МЕНЯ просят принять меры и отчитаться перед ними.
                                                                                                                В целях исключения сетевого адреса из выгрузки хостинг-провайдеру необходимо направить сообщение о принятых мерах по прекращению создания технических условий функционирования приложения Telegram.

                                                                                                                Полный текст этого цирка можно почитать по ссылке выше из моего предыдущего коммента.
                                                                                                        0
                                                                                                        А где можно посмотреть требования к ядру Linux?

                                                                                                        Если делать через make, то запустится на Centos 6.9 32 bit kernel 2.6?
                                                                                                          +1
                                                                                                          Продублирую коммент из соседнего топика, вдруг кому пригодится:

                                                                                                          Поднял самописный прокси на Java (Netty), использует линуксовый epoll. Проверил на десктопном и мобильном приложениях.

                                                                                                          Запущен тут: t.me/proxy?server=139.162.152.61&port=3128&secret=DEADBEEFDEADBEEFDEADBEEFDEADBEEF

                                                                                                          Буду мониторить, по статистике отпишусь.

                                                                                                          Вечером на другой порт повешу официальную реализацию из сабжа, сравню по быстродействию.
                                                                                                            0
                                                                                                            Главное ещё проверить чтобы файлы качались. И конечно TAG желательно :)) Стата и всё такое. Пошёл за карандашом губу закатывать :)
                                                                                                              +1
                                                                                                              На самопальном файлы качаются, проверял на десктопном) Буду дальше развивать, как выйдет что-то адекватное выложу на GitHub.
                                                                                                              0
                                                                                                              Поднял официальную имплементацию сервера на соседнем порту. Если кому пригодится:

                                                                                                              tg://proxy?server=139.162.152.61&port=3129&secret=DEADBEEFDEADBEEFDEADBEEFDEADBEEF
                                                                                                              или
                                                                                                              t.me/proxy?server=139.162.152.61&port=3129&secret=DEADBEEFDEADBEEFDEADBEEFDEADBEEF

                                                                                                              Собрал из исходников на гитхабе. Нагружает i5 CPU около 5% и ест около 5 mb RAM на воркера (Cent OS 7).

                                                                                                              Пинг ниже почти вдвое) (~250 ms VS ~450 ms на самопальной). Попозже проведу ещё нагрузочное тестирование. Отпишусь.
                                                                                                                0
                                                                                                                Ну т.е. самопал хуже?
                                                                                                              +1
                                                                                                              у меня одного такое:
                                                                                                              ready_targets 0
                                                                                                              allocated_targets 18
                                                                                                              active_targets 18
                                                                                                              ?
                                                                                                              Как это дебажить вообще
                                                                                                                0
                                                                                                                А не планируется ли автоматический поиск прокси? Ну на манер DHT у торрентов. Чтобы пользователь всегда имел работающий телеграм, а не вынужден был искать рабочий прокси
                                                                                                                  +1
                                                                                                                  Ну а как он сейчас работает нативно? Именно так
                                                                                                                    +1
                                                                                                                    Как-то плохо работает. У друга на iOS работать перестал. У меня на Android с горем пополам работает каждый раз только после установки очередного обновления.
                                                                                                                    0
                                                                                                                    Тогда уже полноценную p2p сеть, где клиенты будут гонять через себя часть трафика, а публичные данные(сообщения и медиа в каналах) будут кешироваться и отдаваться с ближайших клиентов, а не с сервера.
                                                                                                                      +3
                                                                                                                      Так ведь можно случайно и Tox изобрести.
                                                                                                                    0
                                                                                                                    Интересно, никто не запускал на ARM (Raspbian Strech)?
                                                                                                                    0
                                                                                                                    Здравствуйте!
                                                                                                                    Помогите, пожалуйста, чайнику. Арендовал сервер, настроил обычный прокси, все по инструкциям с Хабра. Сегодня решил поставить mtproto. Установил докер, запустился сервер — телега заработала. Затык возник на добавлении своих ключей. Пишет:
                                                                                                                    Error response from daemon: driver failed programming external connectivity on endpoint stupefied_mirzakhani (8e2ad8ae271fe04bdaaa2d935292951e30a1e9df8de4837b852ffc47b8): Bind for 0.0.0.0:443 failed: port is already allocated. Сервер ubuntu 16.04.
                                                                                                                      +2
                                                                                                                      У вас порт 443 уже занят, попробуйте другой порт или уберите то, что сейчас на нем живёт
                                                                                                                        +2
                                                                                                                        Я в этом пока не разбираюсь вообще. Оказывается я наустанавливал в докер разных контейнеров, и они по всей видимости конфликтовали. Снес все, поставил по новой — все заработало. Спасибо!
                                                                                                                          +1
                                                                                                                          Используйте docker ps и docker stats для просмотра что у вас сейчас работает, и docker inspect %container name / ID% для глубкого изучения внутренностей контейнера
                                                                                                                        +1

                                                                                                                        А. Сделайте как при обновлении:


                                                                                                                        $ docker stop mtproto-proxy    # остановить контейнер
                                                                                                                        $ docker rm mtproto-proxy      # удалить контейнер
                                                                                                                          +1
                                                                                                                          Спасибо!
                                                                                                                        0
                                                                                                                        В ридми официального репо сказано:

                                                                                                                        Obtain current telegram configuration. It can change (occasionally), so we encourage you to update it once per day.


                                                                                                                        Следует ли рекомендации этот докер-образ?

                                                                                                                        P.S. Не имею возможности проверить сам по техническим причинам.
                                                                                                                          0
                                                                                                                          Достаточно добавить в образ условие померания основного процесса при жизни более чем 24 часа, далее docker сам его перезапустит и новая конфигурация будет загружена и применена. Ну это кривой вариант, красивый — клиент сам её должен переодически запрашивать, как я думаю это и происходит. В мануале написана такая инструкция на случай если вы будете использовать бинарник самостоятельно, что бы не забыли написать cron job
                                                                                                                            +1
                                                                                                                            Вы думаете или вы уверены?

                                                                                                                            Нет ли у вас возможности это проверить?
                                                                                                                              0
                                                                                                                              Как я могу быть увереным не видя консоль перед собой =)
                                                                                                                            +1
                                                                                                                            Докер, как я понимаю, тоже от телеграмма, в котором они советуют так же обновляться
                                                                                                                            Please note that the proxy gets the Telegram core IP addresses at the start of the container. We try to keep the changes to a minimum, but you should restart the container about once a day, just in case.

                                                                                                                            Так что, да — следует.
                                                                                                                            +1
                                                                                                                            Блин, а я только SOCKS-прокси danted настроил у себя на сервере…

                                                                                                                            Чтобы не пропадало для истории — вот как установить его на обычный образ Ubuntu, с которым поставляются виртуальные серверы Hetzner Cloud:

                                                                                                                            Все последующие команды запускаются от root. Создаём файл /etc/danted.conf такого содержания

                                                                                                                            logoutput: syslog
                                                                                                                            user.privileged: root
                                                                                                                            user.unprivileged: nobody
                                                                                                                            
                                                                                                                            # The listening network interface or address.
                                                                                                                            internal: 0.0.0.0 port=1080
                                                                                                                            
                                                                                                                            # The proxying network interface or address.
                                                                                                                            external: eth0
                                                                                                                            
                                                                                                                            # socks-rules determine what is proxied through the external interface.
                                                                                                                            # The default of "none" permits anonymous access.
                                                                                                                            socksmethod: pam.username
                                                                                                                            
                                                                                                                            # client-rules determine who can connect to the internal interface.
                                                                                                                            # The default of "none" permits anonymous access.
                                                                                                                            clientmethod: none
                                                                                                                            
                                                                                                                            client pass {
                                                                                                                                    from: 0.0.0.0/0 to: 0.0.0.0/0
                                                                                                                                    log: connect disconnect error
                                                                                                                            }
                                                                                                                            
                                                                                                                            socks pass {
                                                                                                                                    from: 0.0.0.0/0 to: 0.0.0.0/0
                                                                                                                                    log: connect disconnect error
                                                                                                                            }


                                                                                                                            устанавливаем:

                                                                                                                            cd /tmp
                                                                                                                            apt install libpam-pwdfile whois  gdebi-core
                                                                                                                            wget http://ppa.launchpad.net/dajhorn/dante/ubuntu/pool/main/d/dante/dante-server_1.4.1-1_amd64.deb
                                                                                                                            gdebi dante-server_1.4.1-1_amd64.deb
                                                                                                                            iptables -A INPUT -p tcp -m tcp --dport 1080 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
                                                                                                                            iptables-save > /etc/iptables/rules.v4
                                                                                                                            netfilter-persistent save


                                                                                                                            Если нужно нагенерить много пар логин-пароль из списка в Excel, делаем bash-скрипт по шаблону (я наделал логинов для всех трёх сотен сотрудников своей компании):

                                                                                                                            #!/bin/bash
                                                                                                                            rm /opt/dante/sockd.passwd 
                                                                                                                            # нагенерите таких строк в Excel. Я использовал корп. логин, а в качестве пароля
                                                                                                                            # использовал буквы и даты рождения коллег 
                                                                                                                            echo -n "username:" >> /opt/dante/sockd.passwd  && mkpasswd --method=md5 "passw0rd" >> /opt/dante/sockd.passwd 


                                                                                                                            Запускаем прокси и проверяем, что через него проходят соединения:

                                                                                                                            service danted start
                                                                                                                            curl -v -x socks5://username:passw0rd@YOURHOST:1080 http://www.google.com/


                                                                                                                            Если всё в порядке (вам на экран выплюнуло HTML-код главной страницы Гугля), активируем автозапуск прокси при старте сервера:

                                                                                                                            update-rc.d  danted defaults
                                                                                                                              +1

                                                                                                                              А можно было просто взять https://github.com/schors/tgdante2

                                                                                                                                +1
                                                                                                                                мне не нужно было готовый образ docker, спасибо. У меня была задача сделать 300 персональных логинов к маленькому личному серверу, для коллег и подчеркнуть персональный характер этой «халявы». Технических ограничений нет, конечно, но это понижает вероятность того, что доступ к прокси будут передавать дальше по рукам.
                                                                                                                                Так недалеко до того, что к вам внезапно половина Ирана придёт обходить блокировки — на виртуалку за два евро.
                                                                                                                                  0
                                                                                                                                  Учтите — протокол передает пароли в не шифрованном виде, впрочем как и логике, первый wireshark и доступ к прокси имеют все
                                                                                                                                    0
                                                                                                                                    пароли были переданы в рассылке по компании на 300 человек, зачем Wireshark? Все и так знают, что пароль к прокси у ivan.ivanov — это «слово + день рождения Вани» :)

                                                                                                                                    Смысл в том, чтобы Ваня понимал, что халявный прокси сделали ему персонально, и не стоит передавать информацию о халяве дальше. Просто социальная инженерия.
                                                                                                                                      +2
                                                                                                                                      я намекаю, что Иван может подключится к публичной Wi-Fi сети, в которой будет человек с WireShark, и тогда в качестве Ивана будет еще мильон Иранцев, в лучшем случае.
                                                                                                                                    0
                                                                                                                                    Как мой докер образ этому противоречит? Просто это можно было сделать полтора месяца назад
                                                                                                                                      0
                                                                                                                                      «полтора месяца назад» я уже поставил StrongSwan IKEv2 VPN. Но выяснилось, что именно Телега и именно с VPN высаживает у телефона батарею со свистом, так что пришлось для неё изобретать «костыль» срочно.
                                                                                                                                        0
                                                                                                                                        Telegram на телефоне можно пропустить через Orbot, который не ест батарею так как, например, OpenVPN.
                                                                                                                                          0
                                                                                                                                          ShadowSocks ещё меньше потребляет и он намного быстрее Орбот
                                                                                                                                            0
                                                                                                                                            В чём выражается быстрота? Особенно в контексте использования Telegram.
                                                                                                                                              0
                                                                                                                                              Скорость сети он режет намного меньше, чем ВПН. Телега это не только чатик, там и фото, и видео, и как файлообменник народ пользует.
                                                                                                                                      0
                                                                                                                                      Не доверяя всяким новомодным данте, сделал теже 300 учеток и распределенный прокси на 4 нода при помощи 3proxy
                                                                                                                                    0
                                                                                                                                    Вот тут проще метод github.com/pav5000/easydante
                                                                                                                                      0
                                                                                                                                      спасибо, но мне не надо было docker image.
                                                                                                                                        +3
                                                                                                                                        2017: Как мне запихнуть приложение в докер?!
                                                                                                                                        2018: Дайте мне приложение без чертового докера!!!
                                                                                                                                          +1
                                                                                                                                          Как-то так, да. Потому что черт его знает, что понапихали в контейнер авторы. А может майнер/спамер?
                                                                                                                                            0
                                                                                                                                            По этому, надо читать dockerfile и собирать самому, делов то на пару минут
                                                                                                                                              +2
                                                                                                                                              Да я бы рад, но то ли я тупой, то ли документация докера запутанная, но я так и не понял, как из «образа»

                                                                                                                                              hub.docker.com/r/telegrammessenger/proxy

                                                                                                                                              вытянуть Dockerfile.

                                                                                                                                              В некоторых случаях на докерхабе можно посмотреть Dockerfile напрямую. В данном случае — нет.
                                                                                                                                                0
                                                                                                                                                Там его нет. Есть такое
                                                                                                                                          0
                                                                                                                                          Вам нужен был работающий сервер. Докер образ эту задачу решает
                                                                                                                                        0

                                                                                                                                        Вот установка dante2 через докер в пару команд.
                                                                                                                                        Настройка специально под Telegram

                                                                                                                                          0
                                                                                                                                          спасибо, но мне не надо было docker image.
                                                                                                                                        +1
                                                                                                                                        А кто-нибудь понял, как в не-docker версии задать несколько secret-ключей? Через запятую не работает.
                                                                                                                                          +1
                                                                                                                                          Да, надо в докере просто стартовый скрипт посмотреть
                                                                                                                                            +2
                                                                                                                                            Да, указанием параметра несколько раз — вот так: -S a1a1 -S b2b2 -S c3c3
                                                                                                                                            0
                                                                                                                                            800 КиБ исходников официальной реализации на C против, например, 8 КиБ на Python намекают, что неофициальные реализации реализуют далеко-о-о не всю функциональность, заложенную в MTProto Proxy.
                                                                                                                                              +1

                                                                                                                                              я автор реализации на питоне. Действительно, адвертайзинг у них сделан очень интересным способом, когда я добавил её поддержку, размер кода вырос почти в два раза: https://github.com/alexbers/mtprotoproxy/commit/fee5a0c05ae855d97e12a46253e4ad50395df17c.


                                                                                                                                              Официальный прокси коннектится к тг через ещё один уровень проксей — так называемый middleware-прокси (это те, которые раз в сутки нужно обновлять и которые живут на https://core.telegram.org/getProxyConfig). Для общения с этими прокси серверами используется rpc-вызовы протокола mtproto, который сам по себе довольно развесистый. Интереснен факт, что ключ, которым шифруются данные между телеграммовским прокси и middleware-прокси получается из данных, включающих строку доступную всем по адресу https://core.telegram.org/getProxySecret и ip/порта клиента и сервера. Таким образом прокси должен знать свой внешний ip/порт, чтобы создать соединение ко middleware-прокси. Официальный докер-образ берёт ip на https://digitalresistance.dog/myIp.


                                                                                                                                              Неофициальные реализации игнорируют middware-прокси и соединяются напрямую к серверам телеграма. Получается проще, надёжнее и экономичнее по трафику — официальный прокси прикрепляет примерно 96 байт в каждое сообщение — информацию о клиенте и рекламный тег). Но при таком способе нельзя добавить рекламу, что является его существенным недостатком.

                                                                                                                                                0
                                                                                                                                                Вон оно что, оказывается. Спасибо за подробное объяснение. Что-то ребята, похоже, немного наоверинженерили со своим прокси.
                                                                                                                                                  0
                                                                                                                                                  Это круто кстати
                                                                                                                                                    0

                                                                                                                                                    Наконец-то нашёл (точнее мне написали) причину по которой передаётся информация о клиенте — она используется для того, чтобы показать с каких ip был вход, чтобы улучшить безопасность аккаунта. Я в своей реализации забил информацию о клиенте буквами 'A' и теперь вижу такое:
                                                                                                                                                    image


                                                                                                                                                    Но, с другой стороны, сейчас стало возможно "убеждать" телеграм, что на наго зашли с произвольного ip

                                                                                                                                                      0

                                                                                                                                                      Придумал хорошее решение для телеграма —писать в информации о сессиях помимо ip-адреса клиента ещё и адрес прокси сервера, которым он пользовался. Надеюсь, создатели тг тоже придумали такое решение и уже пишут :)

                                                                                                                                                    0
                                                                                                                                                    Кстати. А что за соединения держит «пустой» запущенный официальный прокси? Вот я запускаю — а там типа 78 соединений.