Обновлённая поддержка прокси-серверов в клиентах Telegram
- Новый MTProto-прокси. Работает с родным для Telegram протоколом MTProto
- Открытый исходный код сервера на GitHub
- Docker-образ на DockerHub
- В мобильных клиентах появилась возможность добавлять несколько прокси-серверов каждого типа. Пользователь может выбрать наиболее подходящий
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-канал будет показываться наверху с соответствующей пометкой для тех клиентов, которые используют данный прокси-сервер. Если подписаться на канал, то пометки не будет.
Обновление прокси-сервера
Разработчики 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 # посмотреть журнал сервиса
Комментарии (209)
QDeathNick
30.05.2018 21:44На канале будет видно сколько подписчиков?
Вообще, сложно ли со стороны вычислить сколько пользователей прокси?schors Автор
30.05.2018 21:51Будет видно только тех подписчиков, что подпишутся. У упомянутого бота есть статистика использования прокси — там будет видно, сколько пользователей пользуется прокси.
noize
30.05.2018 21:44+4Означает ли это, что понять используя DPI, что в потоке идёт подключение к телеграму, станет значительно сложнее? Ну и не совсем понял, что там с передачей логина и пароля при подключении к прокси.
Вообще, Паша работает, не унывает)schors Автор
30.05.2018 21:47+1Да, будет сложнее распознать. Только через атаку по размеру. И то много вопросов.
Нет никаких логинов и паролей. Есть ключ сервера и всё.a5b
31.05.2018 00:06https://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#L128schors Автор
31.05.2018 01:14+1Для MTProto-прокси таки используется чутка иное: telegra.ph/telegram-blocks-wtf-05-26
a5b
31.05.2018 01:36Спасибо. Цитаты из 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, прежде чем проводить дальнейшие проверки. Такие действия требуют неоправданное количество вычислительных мощностей, которых у провайдеров попросту нет.schors Автор
31.05.2018 01:39Ну да. И собственно как это противоречит?
Laney1
31.05.2018 11:42+1в общем-то никак не противоречит, но тут самое главное написано в последней фразе:
Такие действия требуют неоправданное количество вычислительных мощностей, которых у провайдеров попросту нет
Для Даши aka koteeq естественно нет никаких проблем расшифровать на личном ноутбуке пару десятков или сотен пакетов из Wireshark. Но теперь представьте себе промышленную DPI-систему, которая должна анализировать петабайты трафика в реальном времени.
В таких системах даже просто прочитать пакет два раза — это крайне нежелательное действие, просаживающее производительность. Что-то расшифровывать, просто чтобы посмотреть, не telegram ли это — нереально, абсолютно нереально. MTProxy делали люди, прекрасно знакомые с темой.
a5b
01.06.2018 02:36В http://telegra.ph/telegram-blocks-wtf-05-26 разъяснили, что протокол obfuscated2 был изменен, теперь у клиента и сервера есть общий secret (у сервера — один из 16), который участвует в создании ключа для данных. У DPI секрета нет, он видит лишь двоичный поток. Даша для расшифровки в Wireshark должна ввести secret в дешифровщик.
В оригинальном obfuscated2 (к которому и относится фраза "неоправданное количество вычислительных") полный ключ и данные передавались вместе.
schors Автор
30.05.2018 21:49Случайно отмодерировал комментарий про TAG. Не знаю как исправить.
TAG должна остаться переменной окружения. И при прямом запуске без docker.
atipugin
30.05.2018 22:20+1В iOS это уже поддерживается? Как я понял, Эппл морозит Пашу с обновлениями в АппСторе.
shifttstas
30.05.2018 22:24можно telegram x поставить, там поддерживается
atipugin
30.05.2018 22:27+1Его нет в AppStore :(
shifttstas
30.05.2018 22:28+2Группа тестирования: t.me/tgiostests
Там же можно найти ссылку на установку (в шапке) установится на iOS без джейлбрейка
n00b1k
31.05.2018 02:21Если хотите, в личку можете прислать email и я отправлю вам прямую ссылку на приложение из официального стора после чего вы сможете добавить его в свой аккаунт и в дальнейшем устанавливать при необходимости.
n00b1k
31.05.2018 14:04К сожалению, как оказалось, любимая Apple вырезала обходной путь для Telegram, хотя еще буквально пару недель назад все работало.
n00b1k
02.06.2018 04:56Telegram X снова доступен в сторе. Качайте, глупцы :)
itunes.apple.com/ru/app/telegram-x/id898228810?mt=8
shifttstas
30.05.2018 22:25+5Я был чуть раньше habr.com/post/412755
Но два поста лучше чем один =)
Устроим недели Telegram на Habr!
Radjah
30.05.2018 22:31> для получения статистики достаточно команды: curl localhost:2398/stats
Я так понял, что порт задан где-то скрыто в настройках контейнера, потому что при запуске прокси с параметром "-p 8888", например, статистику можно смотреть именно на этом порту. Об этом и в README написано.
На Telegram X не заработало, на виндовом клиенте тоже.schors Автор
30.05.2018 22:42Логично, что там развесистый стартовый скрипт. А curl и вот это всё делали перед?
Radjah
30.05.2018 22:44Ну я сначала README прочитал, по нему собрал и запустил. Потом уже тут посмотрел что да как.
schors Автор
30.05.2018 22:45Я к тому, что Telegram X заработал?
Radjah
30.05.2018 22:51Он по клику на правленную ссылку делает вообще ничего, как и виндовый клиент.
В порыве отчаяния пробовал прописывать как SOCKS5 и HTTP — ноль на массу.DarkByte
30.05.2018 23:00• Desktop Version 1.2.18+
• macOS v3.8.3+
• Android v4.8.8+
• Telegram X iOS v5.0.3+
версии ниже указанных не поддерживают mtprotoRadjah
30.05.2018 23:03> 1.2.18+
На сайте 1.2.17
github.com/telegramdesktop/tdesktop/releases
1.2.24
> X iOS
Ясно
DarkByte
30.05.2018 22:35+1А как заставить его подключаться к дц телеги по ipv6? В параметрах есть флаг -6, но он ничего не меняет.
L11R
30.05.2018 22:41Рубрика «обходим блокировки сервером в России»? :D
По делу: Мне кажется надо включить IPv6 флагом--ipv6/-6
и после изменить файл .conf, удалив все IPv4 сервера и добавив IPv6.DarkByte
30.05.2018 22:58Даа, я знаю толк в извращениях. Пока что только один из опробованных 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;
Стартует, к серверам этим вроде подключается, но клиент через такое прокси не работает.L11R
30.05.2018 23:05Оно стартует, если туда написать любой адрес от балды, гляньте. Не хватает дебага.
DarkByte
30.05.2018 23:25Ну адреса оно спарсило нормально, но если включить побольше дебага, то видно, что почти сразу после подключения отключается. Видимо что-то не так.
L11R
30.05.2018 23:29Есть мнение, что поддержка пока есть только для клиентов. То есть если клиент IPv6-only, то он подключится и будет проксироваться сервером через IPv4 сервера. Надеюсь пофиксят короче, потому что разворачивать сервера в России будет банально дешевле :D
rail-ka
30.05.2018 22:42Если у кого будет ошибка как у меня была:
[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
schors Автор
30.05.2018 22:53А что Вы делаете, чтобы получить эту ошибку? Ну т.е. запускать в привелигерованном режиме как-то не айс…
avikez
30.05.2018 23:02Просто запускаю контейнер. Детали ошибки тут: https://github.com/TelegramMessenger/MTProxy/issues/7
rail-ka
30.05.2018 23:02Пока не разобрался, вроде докер установлен по официальной инструкции и работает нормально с другими контейнерами, а вот контейнер с телеграм ругается. Операционная система Centos 7, Azure хостинг.
rail-ka
31.05.2018 16:30+1Данный выше мной метод не рекомендуется использовать.
В комментариях другой публикации подсказали правильный способ обхода ошибки:
docker run -d -p 443:443 --name=mtproto-proxy --ulimit nofile=98304:98304 --restart=always -v proxy-config:/data telegrammessenger/proxy
FANTOMka
30.05.2018 23:03+1Что-то ios приложение запаздывает…
Hakhagmon
31.05.2018 00:51+1Компания Apple заблокировала обновление мессенджера Telegram по всему миру с середины апреля 2018 года. Об этом сообщается в разделе ответов на «часто задаваемые вопросы» на сайте приложения.
Рассказывая о последних изменениях в законе о персональных данных, известном как General Data Protection Regulation (GDPR), команда мессенджера сообщила: «К сожалению, Apple блокирует Telegram от обновления iOS-приложения глобально с середины апреля».
Telegram X например стабильно обновляется на rink.hockeyapp.net/apps/c6f5a76f5c364ac89a98b77671ef2d63
devalone
31.05.2018 00:47По умолчанию запускается два процесса прокси-сервера (с предположением, что каждому система выделит по ядру).
Почему именно 2? Можно же узнать, сколько аппаратных потоков поддерживается в данной системе.
Sabubu
31.05.2018 01:40Дуров молодец — придумал не только протокол прокси без сигнатур, но и систему мотивации для их появления. За рекламу конечно желающих поддерживать прокси будет гораздо больше, чем за бесплатно.
harm
31.05.2018 01:53-1А какая мотивация у пользователей тогда ставить себе Телеграм, которым можно пользоваться только через анальные отверстия, так ещё и рекламу от них получать?
schors Автор
31.05.2018 02:05Одно слово — комьюнити
harm
31.05.2018 03:01-3А это самое комьюнити готово помимо поднятия прокси ещё и подписку платную оформить на Telegram, дабы ФСБ РФ не тратило государственные средства на оплату серверов и зарплаты разработчиков?
schors Автор
31.05.2018 03:13Мне требуется переводчик
harm
31.05.2018 03:17-2И не только он
Barabek
31.05.2018 08:53Что вы тут ищите?
tvr
31.05.2018 10:33+1Корм вестимо.
harm
31.05.2018 16:31-1Питаюсь мозгами, но тут их явно нет. Пойду на ЛОРе поищу.
devalone
31.05.2018 18:24Так ты не по себе хабр суди, тут ещё другие люди сидят :)
harm
31.05.2018 18:52-2Это сарказм. Злые вы тут какие-то. Я же за монетизацию Telegram переживаю, за комьюнити ваше. А то знаю я один случай продажи пользовательской базы вместе с инфрастуктурой за бешенные миллиарды долларов.
harm
31.05.2018 19:00-5Когда в армии служил и мы делали с сослуживцами ремонт замполиту в комнате общежития, тоже себя комьюнити называли.
AbstractGaze
31.05.2018 13:18Реклама не обязательный пункт, вы же можете не «срать» пользователям своего прокси, а использовать как например «короткие номера» — для удобства клиентов так сказать.
trimtomato
31.05.2018 19:06-1А никого больше не смущает, что теперь будет показываться реклама в мессенджере, в котором обещали никогда не показывать рекламу? Я все понимаю, но читаю уже не первую новость про прокси и вот это все, и никого не волнует этот вопрос.
shifttstas
31.05.2018 19:20+4Так поднимите свой прокси и не будет рекламы
trimtomato
31.05.2018 20:08Вопрос не в рекламе и прокси. Вопрос в нарушении обещания.
shifttstas
31.05.2018 20:09+1Если не использовать прокси — рекламы не будет, Павел же не говорил, что он будет еще и прокси бесплатно оплачивать (а он это сейчас делает) в странах с цензурой. Там где нет цензуры — прокси тоже не нужны и обещания в силе
putnik
31.05.2018 19:23+1Вы можете не пользоваться теми прокси, которые показывают рекламу. Т. е. по сути это не Телеграм вам включает рекламу, а вы выбираете поставщика подключения с рекламой или без.
trimtomato
31.05.2018 20:31+1В вашей формулировке это выглядит приличнее чем видится мне. Попробую себя переубедить.
croupier
31.05.2018 01:56В идеале, нужна тупая инструкция как поднять.
Т.е. купить там-то (ip — уже не забанены) и сделайте то-то…
Потом раздайте друзьям/знакомым…Barabek
31.05.2018 08:55Этих инструкций уже полный хабр
schors Автор
31.05.2018 09:23Справедливости ради — как поставить докер нету
KuniLinux
31.05.2018 13:02если уж совсем не хочется заморачиваться (правая колонка ):
rancher.com/docs/rancher/v1.6/en/hosts/#supported-docker-versions
Arris
31.05.2018 18:09emerge -av app-emulation/docker
shifttstas
31.05.2018 18:19Проще же есть и под все платформы:
curl -sSL https://get.docker.com/ | sh
rogoz
31.05.2018 22:08+1Дааа, под все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
"
Zettabyte
31.05.2018 02:32Коллеги, пара прикладных вопросов, пока топик ещё горяч, особенно актуальных для тех, у кого VPS ещё маленькие (у меня вот, например, 384 MB RAM):
- Есть ли официальный способ установки без использования Docker? Если говорить более частно, то интересует CentOS 7.
На GitHub предлагают использоватьmake
, но я бы предпочёл установку из репозитория. Как я понимаю, туда MTProxy ещё не добрался? - Если уже есть те, кто поставил и гоняет, как обстоят дела с потреблением аппаратных ресурсов (в особенности оперативная память, но и процессор, в целом, тоже)?
Интересны два сценария: 10-20 человек (т.е. небольшая группа хорошо знакомых людей) и несколько десятков человек (перевод лампового чата специалистов на один прокси).
shifttstas
31.05.2018 02:42Проблема заключается в том, что данный докер образ использует какой-то жутко большой образ системы, надо подождать что бы его почистили или же сделать свой, докера не стоит боятся, он не так много ресурсов потребляет, как кажется.
Ну есть еще вариант — купить сервер за 1 евро месяц с большим количество RAM =)schors Автор
31.05.2018 03:18Образ системы вообще не влияет на потребляемый ресурс. Ну за мелкими деталями.
shifttstas
31.05.2018 03:18Почему же? посмотрите docker stats — сколько процессов использует их образ, немного удивитесь
schors Автор
31.05.2018 03:31Это зависит от базовой системы? На альпине столько же будет. А сколько? bash, сам прокси WORKERS +1? Ok. +2
Seekeer
31.05.2018 13:18Ну есть еще вариант — купить сервер за 1 евро месяц с большим количество RAM =)
Это где такая щедрость?)shifttstas
31.05.2018 13:55arubacloud.com например или за 5 евро — DigitalOcean
gpyra
01.06.2018 12:39arubacloud, мутные ребята
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 баксов в год — это уже не щедростьshifttstas
01.06.2018 14:46-1Зачем вам добавлять VAT если вы не гражданин EU? ценник 1 евро действует только в двух ДЦ, а не по всей географии, они собственно об этом и пишут.
gpyra
01.06.2018 16:17Извините, не знал, никогда с Европой дел не имел, только с штатами. Ну главное, чтобы ценник хотя бы лет 5 такой держался, а то будет как обычно через год: «мы тут всех перемещаем в наш новый дц, поэтому ценник дорожает».
Так что у них с использованием distro of choice (которого в списке их ОС нет), не подскажите?rogoz
01.06.2018 22:27На 1 евро дистр вроде как менять нельзя. Я менял систему через swap раздел, конечно для новичка linux будет сложно.
schors Автор
31.05.2018 03:17Репозитории все родом из начала 90-ых. Создавать пакеты под системы — муторно. Особенно в 2018 году, когда есть docker. Сделайте make, киньте бинарник на VDS.
- Есть ли официальный способ установки без использования Docker? Если говорить более частно, то интересует CentOS 7.
schors Автор
31.05.2018 04:03Спасибо тебе добрый фей, который поправил <code> на <source>
- Съехало форматирование, проявился тег pre
- А редактор-то code по сей момент вставляет...
nbytes
31.05.2018 05:39Кто нибудь сравнивал с не официальными реализациями? Например на .net core и rust, второй особенно интересует.
pantsarny
31.05.2018 12:44+1какого рода сравнение вас интересует?
php реализация — кушает очень много памяти, работает хорошо
rust — не дает подключиться при 5k+ соединениях, скачать файл невозможно
nodejs — отлично работает
.net не пробовал
official — все отлично
Tonatos
02.06.2018 13:58У меня сервер на rust висел дня четыре. Не знаю, в клиенте ли дело (Android + TG Desktop Alpha под OSX, две версии) или еще в чем, но работало жутко нестабильно. При фактически 5-7и клиентах, прокси периодически отпадал, клиенты не могли подключиться, приходило постоянно ребутать его. Файлы, как выше писали, не проксировал.
Попробуем оф. версию.
achekalin
31.05.2018 07:07Если кто-то из тех, кого перед 1 мая оставляли на работе в РКН, пока они весь Телеграм не заблокируют, запустит такой прокси прямо в РКН, то и начальство (все равно) ничего не поймет и не заметит, и справедливость хоть как-то восторжествует.
Интересно, владельца такого прокси хоть за что-то притянуть смогут? Неструктурированный поток бинарных данных: этак либо ругать всех, кто бинарные данные гонит без понятного заголовка, либо — игнорить?
Молодцы Паша с командой!schors Автор
31.05.2018 09:26Справедливости ради они банят не по данным от снифа. А просто по пабликам
achekalin
31.05.2018 09:39А я не про бан. Просто нашли комп, поснифали трафик, трафик — рандомные биты. Для владельца компа это вызовет проблемы, или нет?
Я понимаю, что приписать «распространение материалов, разжигающих нетерпимость», равно как и наркоту подбросить, можно любому — но если по закону, а не поправоприменительной практике, есть ли повод к человеку претензию иметь?shifttstas
31.05.2018 10:06Есть еще «Использование запрещенной не сертифицированной ГОСТом криптографии»
achekalin
31.05.2018 10:09"… карается исправительными работами на срок от 2^7 до 2^8 дней, либо тюремным заключением на срок сколько товарищ майор скажет, либо работой в РКН, с полной конфискацией радостей жизни."
shifttstas
31.05.2018 10:08Можно попробовать спрятать telegram трафик в https, тогда доказать, что у вас там стоит telegram proxy будет сложнее, без ключа соединение будет обрыватся habr.com/post/412779
skobkin
31.05.2018 12:25Если кто-то из тех, кого перед 1 мая оставляли на работе в РКН, пока они весь Телеграм не заблокируют, запустит такой прокси прямо в РКН
Главное — не забыть настроить продвижение официального канала РКН в Telegram.achekalin
31.05.2018 16:45И бота в него, который будет отвечать на вопросы «почему мой IP забанили?»
skobkin
31.05.2018 16:52Который будет отвечать примерно так.
Указанный Вами IP адрес 51.15.37.92, 51.15.70.45 входит в подсеть 51.15.0.0/16, используемую для обеспечения функционирования коммуникационных интернет-сервисов указанного организатора распространения информации в сети «Интернет»
achekalin
31.05.2018 16:58Да-да, я это и имел в виду, просто не нашел быстро это отмазку.
Вообще чего уж там, можно просто написать универсально (чтобы не мудрить с lookup-ом в БД запретов):
Интересующий Вас IP адрес входит в подсеть 0.0.0.0/0, используемую для обеспечения функционирования коммуникационных интернет-сервисов организаторов распространения запрещенной решением суда информации в сети «Интернет». Сеть будет блокировано до вынесение решения о её разблокировки, которая выйдет не раньше, чем в сети «Интернет» будет пойман и наказан последний такой организатор.
И ведь не отвертишься, в этой-то «подсети» точно хоть что-то «незаконное» можно будет найти, если хорошо поискать.skobkin
31.05.2018 17:07Самое прекрасное, что в том же письме они МЕНЯ просят принять меры и отчитаться перед ними.
В целях исключения сетевого адреса из выгрузки хостинг-провайдеру необходимо направить сообщение о принятых мерах по прекращению создания технических условий функционирования приложения Telegram.
Полный текст этого цирка можно почитать по ссылке выше из моего предыдущего коммента.
Gl_Proxy
31.05.2018 11:43А где можно посмотреть требования к ядру Linux?
Если делать через make, то запустится на Centos 6.9 32 bit kernel 2.6?
MSBlast
31.05.2018 11:49+1Продублирую коммент из соседнего топика, вдруг кому пригодится:
Поднял самописный прокси на Java (Netty), использует линуксовый epoll. Проверил на десктопном и мобильном приложениях.
Запущен тут: t.me/proxy?server=139.162.152.61&port=3128&secret=DEADBEEFDEADBEEFDEADBEEFDEADBEEF
Буду мониторить, по статистике отпишусь.
Вечером на другой порт повешу официальную реализацию из сабжа, сравню по быстродействию.schors Автор
31.05.2018 11:50Главное ещё проверить чтобы файлы качались. И конечно TAG желательно :)) Стата и всё такое. Пошёл за карандашом губу закатывать :)
MSBlast
31.05.2018 20:19+1На самопальном файлы качаются, проверял на десктопном) Буду дальше развивать, как выйдет что-то адекватное выложу на GitHub.
MSBlast
31.05.2018 20:18Поднял официальную имплементацию сервера на соседнем порту. Если кому пригодится:
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 на самопальной). Попозже проведу ещё нагрузочное тестирование. Отпишусь.
sarunu_vedejs
31.05.2018 11:49у меня одного такое:
ready_targets 0
allocated_targets 18
active_targets 18
?
Как это дебажить вообще
gpyra
31.05.2018 13:10А не планируется ли автоматический поиск прокси? Ну на манер DHT у торрентов. Чтобы пользователь всегда имел работающий телеграм, а не вынужден был искать рабочий прокси
VikSam
31.05.2018 14:21Интересно, никто не запускал на ARM (Raspbian Strech)?
inane
31.05.2018 14:56Здравствуйте!
Помогите, пожалуйста, чайнику. Арендовал сервер, настроил обычный прокси, все по инструкциям с Хабра. Сегодня решил поставить 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.shifttstas
31.05.2018 15:11+1У вас порт 443 уже занят, попробуйте другой порт или уберите то, что сейчас на нем живёт
inane
31.05.2018 16:23+1Я в этом пока не разбираюсь вообще. Оказывается я наустанавливал в докер разных контейнеров, и они по всей видимости конфликтовали. Снес все, поставил по новой — все заработало. Спасибо!
shifttstas
31.05.2018 18:05Используйте docker ps и docker stats для просмотра что у вас сейчас работает, и docker inspect %container name / ID% для глубкого изучения внутренностей контейнера
Arris
31.05.2018 18:15В ридми официального репо сказано:
Obtain current telegram configuration. It can change (occasionally), so we encourage you to update it once per day.
Следует ли рекомендации этот докер-образ?
P.S. Не имею возможности проверить сам по техническим причинам.shifttstas
31.05.2018 18:22Достаточно добавить в образ условие померания основного процесса при жизни более чем 24 часа, далее docker сам его перезапустит и новая конфигурация будет загружена и применена. Ну это кривой вариант, красивый — клиент сам её должен переодически запрашивать, как я думаю это и происходит. В мануале написана такая инструкция на случай если вы будете использовать бинарник самостоятельно, что бы не забыли написать cron job
Kellis
31.05.2018 19:39Докер, как я понимаю, тоже от телеграмма, в котором они советуют так же обновляться
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.
Так что, да — следует.
bougakov
31.05.2018 18:41Блин, а я только 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
schors Автор
31.05.2018 18:55А можно было просто взять https://github.com/schors/tgdante2
bougakov
31.05.2018 19:14+1мне не нужно было готовый образ docker, спасибо. У меня была задача сделать 300 персональных логинов к маленькому личному серверу, для коллег и подчеркнуть персональный характер этой «халявы». Технических ограничений нет, конечно, но это понижает вероятность того, что доступ к прокси будут передавать дальше по рукам.
Так недалеко до того, что к вам внезапно половина Ирана придёт обходить блокировки — на виртуалку за два евро.shifttstas
31.05.2018 19:20Учтите — протокол передает пароли в не шифрованном виде, впрочем как и логике, первый wireshark и доступ к прокси имеют все
bougakov
31.05.2018 19:31пароли были переданы в рассылке по компании на 300 человек, зачем Wireshark? Все и так знают, что пароль к прокси у ivan.ivanov — это «слово + день рождения Вани» :)
Смысл в том, чтобы Ваня понимал, что халявный прокси сделали ему персонально, и не стоит передавать информацию о халяве дальше. Просто социальная инженерия.shifttstas
31.05.2018 19:42я намекаю, что Иван может подключится к публичной Wi-Fi сети, в которой будет человек с WireShark, и тогда в качестве Ивана будет еще мильон Иранцев, в лучшем случае.
schors Автор
31.05.2018 21:00Как мой докер образ этому противоречит? Просто это можно было сделать полтора месяца назад
bougakov
31.05.2018 22:10«полтора месяца назад» я уже поставил StrongSwan IKEv2 VPN. Но выяснилось, что именно Телега и именно с VPN высаживает у телефона батарею со свистом, так что пришлось для неё изобретать «костыль» срочно.
shifttstas
31.05.2018 18:57Вот тут проще метод github.com/pav5000/easydante
bougakov
31.05.2018 19:10спасибо, но мне не надо было docker image.
shifttstas
31.05.2018 19:19+32017: Как мне запихнуть приложение в докер?!
2018: Дайте мне приложение без чертового докера!!!Arris
01.06.2018 14:35+1Как-то так, да. Потому что черт его знает, что понапихали в контейнер авторы. А может майнер/спамер?
shifttstas
01.06.2018 14:47По этому, надо читать dockerfile и собирать самому, делов то на пару минут
Arris
02.06.2018 11:03Да я бы рад, но то ли я тупой, то ли документация докера запутанная, но я так и не понял, как из «образа»
hub.docker.com/r/telegrammessenger/proxy
вытянуть Dockerfile.
В некоторых случаях на докерхабе можно посмотреть Dockerfile напрямую. В данном случае — нет.
valery1707
31.05.2018 19:03Вот установка
dante2
через докер в пару команд.
Настройка специально под Telegram
idmrty
31.05.2018 18:59+1А кто-нибудь понял, как в не-docker версии задать несколько secret-ключей? Через запятую не работает.
al_one
01.06.2018 05:21800 КиБ исходников официальной реализации на C против, например, 8 КиБ на Python намекают, что неофициальные реализации реализуют далеко-о-о не всю функциональность, заложенную в MTProto Proxy.
inane
02.06.2018 16:09По всем инструкциям завел сервер MTProto, добавил 4 ключа. Звонки, текст, отправка файлов идет. Столкнулся с проблемой отправки файлов с использованием мобильной сети Yota. Не уходят. При подключении к wifi — тут же уходят неотправленные сообщения. Проверить удалось на билайне — отправляются. Знания в linux — минимальные. Аренда сервера, установка docker сделана по инструкциям с habr и интернета. Если есть какие-то идеи сообщите, пожалуйста. Можно в ЛС, дабы не засорять.
Спасибо!vconst
02.06.2018 17:49Значит Йота заворачивает трафик определённого вида, лечится только сменой оператора или установкой впн.
inane
02.06.2018 18:14Сейчас на сервере настроен sock5 и mtproto, IP один и тот же. С sock5 yota отправляет а с нового — нет. Я не особо разбираюсь, но на сколько читал MTProto и был создан для того чтобы еще лучше обходить блокировки. Для меня у yota лучшие условия, да и другие операторы скорее всего тоже заблокируют.
koshi-dono
02.06.2018 18:00Да, всё так. Для них это нормально. У меня, например, WireGuard не работает, видимо потому, что udp. Обращался в тп, обещали мой ip разрешить. Уже почти две недели прошло, всё ещё не заработало. Обращайтесь в тп, меняйте опсоса или подключайте vpn.
inane
02.06.2018 18:16Если звонки и текст пропускает — скорее всего IP не заблокирован? Именно файлы не проходят. Подскажите как правильно запрос подать? Думаю как только я упомяну что сервер для telegram — ответ будет очевиден.
koshi-dono
02.06.2018 18:31Блокируется в данном случае не ip, а их DPI блокирует определённый тип трафика. Как подать не подскажу, в моём случае это просто vpn на рабочем сервере, поэтому я просто описал сложившуюся ситуацию.
AC130
Это официальная реализация, или чей-то самописный прокси?
schors Автор
Официальная. Бот с синим значком.
Merkat0r
А, зачем вы зафорсили использование докера в статье? Да еще и, по сути, заставляете его использовать тем более с тегом туториал.
Он не нужен ни для запуска одного единственного бинарника ни для работы, в принципе, вообще.
schors Автор
Docker прежде всего это пакетный менеджер. Более того, docker всегда и запускает один бинарник. Более оптимального, эффективного и универсального способа доставки приожения сейчас не существует.
Merkat0r
нет. самска собаки.НЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕТ!11!11
это не пакетный менеджер… как-же вы адепты зае… всюду его впихивать.
schors Автор
Прости нас
shifttstas
Так чем он плох то? вот хотите вы сделать 1 прокси — берете докер, две команды и он есть. А теперь вы хотите 2 или 10 или 100 — еще 1 команда и у вас он уже работает в кластере на 100+ машинах и сам себя перезапускает при падении и логи в единое место пишет. Удобна, правда?
А ну и да, кластер для докера вам любой нормальный хостер через веб-мордочку развернет в два клика. Можно без каких-либо знаний администрирования это сделать.
Еще и балансировка из коробки и много чего еще…
Radjah
systemd, его генераторы и юниты с подстановкой.
shifttstas
как systemd поможет с кластерной установкой?
Radjah
У меня кластера нет, например.
shifttstas
А когда появится, в случае с докером не надо ничего переделывать, все знакомо и удобно.
Собственно решать вам, почти всегда можно и без докера..
schors Автор
И в чем разница?
Radjah
> сам себя перезапускает при падении и логи в единое место пишет.
Только ничего добавлять не надо, даже chroot из коробки есть.
Я всё еще не вижу смысла добавлять ненужные сущности.
schors Автор
Технологическая разница в чем?
BelikovDmitrii
Аааа, плохая отвёртка, не подходит :D Ниже кстати описано замечательное применение данной