Наконец-то дождались, после пристального рассматривания и реверс инжениринга протокола MTProto Proxy, Telegram решил выпустить официальный вариант, с поддержкой
Что такое MTProto Proxy
Это специфический прокси-сервер и протокол от создателей Telegram позволяющий обходить блокировки и монетизировать его использование.
Официальный прокси
В прошлой публикации была представлена масса неофициальных реализаций прокси сервера, многие из них написаны пользователями Habr.
Теперь же у нас есть и официальный вариант:
github.com/TelegramMessenger/MTProxy
hub.docker.com/r/telegrammessenger/proxy
Что он может?
- Поддерживает до 16 разных ключей на 1 прокси
- До 60000 подключений на 1 ядро
- Имеет API для сбора статистики (доступно только локально)
- Готовый образ в Docker
- Показ Promoted Каналов
Как настроить?
До безобразия просто:
docker run -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data telegrammessenger/proxy:latest
После этого делаем:
docker logs mtproto-proxy
В качестве вывода вы получите:
####
#### Telegram Proxy
####
[+] No secret passed. Will generate 1 random ones.
[*] Final configuration:
[*] Secret 1: afajkfhjksajkahkhkjkkk
[*] tg:// link for secret 1 auto configuration: tg://proxy?server=127.0.0.1&port=443&secret= afajkfhjksajkahkhkjkkk
[*] t.me link for secret 1: https://t.me/proxy?server=127.0.0.1&port=443&secret= afajkfhjksajkahkhkjkkk
[*] Tag: no tag
[*] External IP: 127.0.0.1
[*] Make sure to fix the links in case you run the proxy on a different port.
[+] Starting proxy...
Собственно базовая настройка закончена.
Показ Promoted канала
Eсли вы хотите показывать канал при подключении к прокси, прокси нужно зарегистрировать:
С этим поможет официальный бот @MTProxybot
Ему следует отправить IP:Port + ключ, в ответ вы получите рекламный tag.
Этот tag нужно передать как параметр при запуске контейнера:
docker run -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data -e TAG=ВАШ_TAG telegrammessenger/proxy:latest
Далее возвращаемся к боту, выбираем свой прокси и «Set promotion» — теперь осталось только отправить любой канал для отображения.
Вот собственно и все, теперь у вас есть официальный Telegram Proxy с Promotion каналом, который будет показыватся всем пользователям.
-e SECRET=00baadf00d15abad1deaa51sbaadcafe
docker run -d -p443:443 -v proxy-config:/data -e SECRET=00baadf00d15abad1deaa51sbaadcafe telegrammessenger/proxy:latest
Или несколько:
docker run -d -p443:443 -v proxy-config:/data -e SECRET=935ddceb2f6bbbb78363b224099f75c8,2084c7e58d8213296a3206da70356c81 telegrammessenger/proxy:latest
А можете попросить сгенерировать вам несколько ключей:
docker run -d -p443:443 -v proxy-config:/data -e SECRET_COUNT=4 telegrammessenger/proxy:latest
По умолчанию запускает 2 worker'a, изменить настройку можно следующим образом:
WORKERS=16
docker run -d -p443:443 -v proxy-config:/data -e WORKERS=16 telegrammessenger/proxy:latest
Мониторинг доступен по адресу: localhost:2398/stats
Получить статистику можно следующим образом:
docker exec mtproto-proxy curl http://localhost:2398/stats
ready_targets: Количество Telegram серверов которые готовы обслужить запросы с прокси
active_targets: Количество Telegram серверов обслуживающие запросы с прокси
total_special_connections: Количество входящих соединений
total_max_special_connections: Лимит входящих соединений
Бот умеет показывать еще и статистику использования вашего прокси:
docker-compose
Вместо написания длинных команд в одну строку, можно воспользоватся docker-compose.
Вам также может быть интересно
Комментарии (80)
VIRT_nsk
30.05.2018 21:29+2Отличное решение! И по монетизации — для быстрого и массового распространения, и по ограничению — только телеграм.
neonzoff
30.05.2018 21:39+1Спасибо за перевод, однако так и не понял что такое «WORKERS»
shifttstas Автор
30.05.2018 21:39+1Workers — это фактически поток, т.е сколько потоков хотите запустить
rail-ka
30.05.2018 22:35Что-то не запускается образ, ошибка:
[41][2018-05-30 19:28:32.081285 local] failed to set rlimit for open files. Try running as root or requesting smaller maxconns value. [41][2018-05-30 19:28:32.081329 local] fatal: cannot raise open file limit to 65552
Может кто знает почему?rail-ka
30.05.2018 22:41+1Помог запуск в привилегированном режиме:
docker run -d -p 443:443 --name=mtproto-proxy --privileged --restart=always -v proxy-config:/data telegrammessenger/proxy
SlavniyTeo
31.05.2018 08:35+1Иногда опасно запускать контейнеры, собранные кем-то другим, в привилегированном режиме.
Не делайте так больше.
shifttstas Автор
30.05.2018 22:43+1Можно попробовать добавить в аргументы:
--ulimit nofile=98304:98304
Ten
30.05.2018 22:39+1Собрал, настроил, запустил. Не в докере которая.
Работает!
К сожалению, десктопная версия не поддерживает MTProto Proxy, а мобильные — всё ок.shifttstas Автор
30.05.2018 22:44Догадываюсь, десктопная версия обновится вместе с iOS и тогда и будет пост от Павла
Ten
30.05.2018 22:53+2В альфе, кстати, уже есть github.com/telegramdesktop/tdesktop/tree/dev/Telegram
Azlentor
31.05.2018 16:06С iOS не всё так однозначно. «Unfortunately, some Telegram features, such as stickers, don’t work correctly under iOS 11.4 that was just released – even though we fixed this issue weeks ago.
Apple has been preventing Telegram from updating its iOS apps globally ever since the Russian authorities ordered Apple to remove Telegram from the App Store. Russia banned Telegram on its territory in April because we refused to provide decryption keys for all our users’ communications to Russia’s security agencies. We believe we did the only possible thing, preserving the right of our users to privacy in a troubled country.
Unfortunately, Apple didn’t side with us. While Russia makes up only 7% of Telegram’s userbase, Apple is restricting updates for all Telegram users around the world since mid-April. As a result, we’ve also been unable to fully comply with GDPR for our EU-users by the deadline of May 25, 2018. We are continuing our efforts to resolve the situation and will keep you updated.
Sorry for the inconvenience and thank you for your patience.»
t.me/durov/87
korjavin
30.05.2018 22:52-1Поторопились они. попробуйте порт например поменять. Не работает.
И ссылку кривую даёт.shifttstas Автор
30.05.2018 22:53+1Так он и не может правильную ссылку дать, внутрянка контейнера не подозревает какой порт ему пробросили, а поменять порт — можно, достаточно при запуске поменять аргумент
korjavin
30.05.2018 22:57-1ну, да, но поменяйте таки порт для пробы.
Клиент висит в статусе checking бесконечно
В tcpdump пакеты с ответами нулевой длины.
Ничего никуда не конектится.shifttstas Автор
30.05.2018 23:02+1Проверил, работает, в Telegram OS X / Telegram X
korjavin
30.05.2018 23:04хм, в официальном телеграме на андроиде у меня никак.
shifttstas Автор
30.05.2018 23:05Проверьте, что вы меняете именно первый порт а не второй в конфиге докера
korjavin
31.05.2018 09:55Много раз проверил, и я tcpdump -ом вижу обмен, но коннекта так и не происходит.
shifttstas Автор
31.05.2018 09:58Приведите пример строки запуска докера (часть с портом)
korjavin
31.05.2018 22:50-p 4443:443
да где там ошибешься то.
Чего я только не перепробовал, на том хосте не работает (обычный vds)
поставил на другой — взлетело сразу.
Vladicka
30.05.2018 23:05Запустил прокси на 4433 порту (через Докер), 443 порт слушает Апач — все работает.
Newton
30.05.2018 23:11У меня довольно нубский вопрос — а завести это вместе с sslh не реально?
Ten
30.05.2018 23:33+1Думаю, нет.
Нужна поддержка в самом sslh чтобы была. Он ведь в пакеты заглядывает.rogoz
31.05.2018 00:41В sslh есть anyprot, который нужно ставить последним. Так можно и tor обрабатывать.
shifttstas Автор
31.05.2018 01:02Проверил, sslh не отличает https от telegram трафика => нельзя их совместить, а вот ssh+telegram — вполне
rogoz
31.05.2018 01:36Я думаю можно поиграться с SNI и/или ALPN TLS трафика до anyprot, если TLS нужен.
shifttstas Автор
31.05.2018 00:30Да, SSH + Telegram можно:
sslh-select -f --listen PUBLIC_IP:8443 --ssl 127.0.0.1:443 --ssh 127.0.0.1:23
shifttstas Автор
31.05.2018 09:52+1Благодаря вам я открыл для себя это приложение, написал о том, как вместе запустить habr.com/post/412779
riot26
30.05.2018 23:56+1А реально сделать доступ только с поддомена? Например, на site.ru порт 443 оставляем апачу, а proxy.site.ru займёт прокси сервер.
shifttstas Автор
31.05.2018 00:31я думаю да, правилами apache/nginx заворачивать трафик на этот порт
Massacre
31.05.2018 00:43Не вижу тут проблемы — главное, чтобы IP в этом случае был разным.
shifttstas Автор
31.05.2018 01:00как я понимаю, весь смысл именно в одном и том же IP, следовательно маршрутизировать должен веб сервер, хотя пока не понятно каким образом
Massacre
31.05.2018 01:06Да не, там же писалось, что на одном и том же IP можно, но используя разные порты для прокси и веб-сервера. А маршрутизировать средствами веб-сервера — разве что какой-то патч или плагин к нему напишут. Там же не через веб прокси работает.
chuikoffru
31.05.2018 03:04А можно рекламировать только каналы? Или ботов тоже?
shifttstas Автор
31.05.2018 03:12Только каналы
chuikoffru
31.05.2018 06:37Жаль… :( Мне кажется некоторые боты тоже нуждаются в рекламе, надеюсь это учтут в будущем.
zeosar
31.05.2018 09:36Не знаете в чём проблема?
[F] Cannot download proxy configuration from Telegram servers.
####
#### Telegram Proxy
####
Получаю после docker logs mtproto-proxy
Mogwaika
31.05.2018 11:45А только для себя без рекламы такой прокси можно установить?
Докер это какой-то пакет, его достаточно установить или нужно настраивать как-то?shifttstas Автор
31.05.2018 12:06+1Конечно можно, рекламу можете не настраивать через бота, можете просто поднять прокси и вообще боту не сообщать об этом.
Докер — система виртуализации которая облегчает запуск, посмотрите в репозитории по ссылке внизу поста, там инструкция и как докер установить и как сразу запустить прокси.
iminusd
31.05.2018 12:06а есть работающие прокси каналы на которые уже можно подписаться и использовать их как прокси?
shifttstas Автор
31.05.2018 12:11Тут наоборот, вначале вы подключаетесь к прокси, а прокси дает вам уже канал для подписи (формально это не подпись но это не важно) в посте есть информация
AlexeyNadezhin
31.05.2018 13:21docker.com у МГТС GPON заблокирован.
А как этим всем пользоваться простому пользователю Телеграм?imm
31.05.2018 15:15
линк скопировать и ткнуть внутри приложения
после тыка применится прокси (у меня так)
amarao
31.05.2018 16:07А вы не знаете, почему в России заблокирован Докер? У меня теперь сложные когнитивные проблемы. С одной стороны — цензура зло, с другой стороны, запрет использования докера в Россиии… в этом что-то есть.
vconst
31.05.2018 16:41+1С докером можно в два клика поднимать ВПН и всякие прокси, это опасно и может травмировать детскую психику суицидными статьями. И наркотиками через них торгуют, а еще там террористы и пираты. Какие еще версии были у бешеного принтера?
amarao
31.05.2018 17:01Низкая производительность и сложность в отладке для оверлейных сетей? Проблема с chain of trust для образов, отсутствие своевременных обновлений безопасности для образов ОС, которые используются для ребилда приложений.
С общеинженерной точки зрения приносить свою ОС с собой — дурной тон. Та же 'vm appliance', только слегка замаскированная.vconst
31.05.2018 17:03Ээээ… Вы точно мне хотели ответить? :)
amarao
31.05.2018 17:05Да. Это альтернативная версия за что Государственная Дума могла решить запретить использование Докера в продакшене.
vconst
31.05.2018 17:07Они и слов таких не знают, не надо их произносить. Они все незнакомое, просто на всякий случай, считают опасным и подлежащим неподлежанию.
amarao
31.05.2018 17:09Они пригласили экспертов и лидеров ИТ индустрии, которые сказали, что для сохранения высокого уровня инженерной культуры в ИТ-индустрии России Докер следует ограничить, а вместо этого следует прививать best practices по software engineering.
Доверившись экспертному мнению Дума решила отрегулировать ситуацию на диком рынке CI/CD и направить её в русло повышения квалификации (вместо гентрификационного карго-культа).vconst
31.05.2018 17:11Здорово ))
А за что они блокировали гитхаб?amarao
31.05.2018 17:20А они блокировали гитхаб? Хм… Мои предположения, основывающиеся на здравом смысле и разуме на этом месте заканчиваются.
GamePad64
31.05.2018 19:26Возможно, они не согласны с ситуацией, когда бОльшая часть opensource-разработки сконцентрирована на одном сайте, который является потенциальной точкой отказа?
amarao
31.05.2018 21:27+2Этот вопрос многократно обсуждался — так как git имеет копии на каждом из ноутбуков разработчиков, то точкой отказа он не является. Организовать свой git-репозиторий — вопрос единиц минут, нужен только ssh.
Хотя игра мне нравится — придумай высокоумное объяснение каждой происходящей глупости.
90azat
31.05.2018 16:59Подскажите пожалуйста, как диагностировать почему не работает. Все сделал по инструкции, logs выхлоп pastebin.com/xFTbyJpT
Статистику курлом взял там ничего интересного нет. Клиент (1.2.24.alpha ) уходит в бесконечный реконектинг.shifttstas Автор
31.05.2018 17:00выглядит как вполне рабочий лог, может порт не пробрасывается? хотя если вечный connect/дёргается — проблема в ключах, я бы предложил взять новый ключ и с ним запустить образ или попросить сгенерировать новый
90azat
31.05.2018 17:44Ставил на Centos 7.4
Первое что пришло на ум:docker exec mtproto-proxy curl https://telegram.org
В ответ пришла страница сайта. Вроде как у докера доступ к инету есть, ничего не блочит, selinux и firewalld отключен. А есть какая то страница техподдержки?
tg://proxy?server=51.15.230.106&port=443&secret=282b7036627720f357022fe493bbdc27
Кто нибудь может протестить? Тоже бесконечный реконнект?shifttstas Автор
31.05.2018 17:59попробуйте для начала посмотреть открыт ли вообще порт на сервере и сделайте openssl коннект (или браузером) к этому порту, в случае с браузером должен быть долгий коннект а не моментальный reject
Foxcool
31.05.2018 17:27Блин, круто. 10 минут и впска куплена, а на ней крутится твой докеркомпоуз!
Вот вам telegram proxy:
t.me/proxy?server=telegram.darkfox.info&port=443&secret=4f40612293dcd9ce3b04e6ec19011a58Foxcool
31.05.2018 17:33Кстати, shifttstas, у меня в паре групп про распределенные системы и прочий криптоанархизм тебя не хватает (:
shifttstas Автор
31.05.2018 17:59Кидай мне в ЛС, гляну, сейчас, к сожалению стало нехватать времени на рапределенные сети =(
vconst
Отличная новость! Будем пробовать.