Некоторое время разработчики мессенджера Telegram опубликовали код проекта MTProxy - прокси-сервера для протокола MTProto используемого в Telegram. MTProxy можно использовать в различных целях, но мы сейчас рассмотрим только «мирное» применение.
До сих пор часто встречаются организации, в которых доступ в интернет у большинства сотрудников возможен толко через http-прокси, который не поддерживается в мобильных версиях Telegram. SOCKS-прокси тут не может быть хорошим решением, так как ограничить его использование только доступом к мессенджеру проблематично (в связи с тем что мессенджер не публикует списки своих IP-адресов). И вот тут как раз на помощь и приходит MTProxy.
Можно настроить на прокси-сервере организации MTProxy и «пустить» пользователей через него. Так как единственным приложением, поддерживающим MTProto является мессенджер Telegram то проблем со злоупотреблением сервисом не будет.
Разворачиваем MTProxy мы будем на машине под управлением Ubuntu 18.04. В целом официальная инструкция очень неплоха и мы возьмём её за основу. Однако некоторые моменты в ней весьма спорны. Например хранение всех настроек демона в файле юнита systemd автору этих строк кажется плохим решением. Но обо всём по порядку.
Устанавливаем инструменты разработчика:
apt-get install git curl build-essential libssl-dev zlib1g-dev
Клонируем репозиторий с исходным кодом:
git clone https://github.com/TelegramMessenger/MTProxy
Компилируем код:
cd MTProxy && make
Устанавливаем бинарный файл:
mkdir -p /opt/MTProxy && cp objs/bin/mtproto-proxy /opt/MTProxy/
Скачиваем ключ, необходимый для подключения к серверам мессенджера:
curl -s https://core.telegram.org/getProxySecret -o /opt/MTPproxy/proxy-secret
Скачиваем текущую конфигурацию мессенджера. Её надо будет обновлять хотя бы раз в сутки, но к этому мы ещё вернёмся чуть позже:
curl -s https://core.telegram.org/getProxyConfig -o /opt/MTPproxy/proxy-multi.conf
Генерируем секретный ключ, с помощью которого клиенты будут подключаться к серверу:
head -c 16 /dev/urandom | xxd -ps
Здесь будет получена последовательность из 32-х символов. В качестве примера будем использовать «f8678574211fd59bb022b1a7cdea1cea» (ни в коем случае не используйте его! Обязательно сгенерируйте свой!).
Теперь создадим файл конфигурации демона «/opt/MTProxy/daemon.conf»:
# Пользователь, с правами которого будет работать сервис DAEMON_USER="nobody" # TCP-порт, на котором можно получить статистику DAEMON_STAT_PORT="8888" # TCP-порт, к которому будут подключаться клиенты DAEMON_CLIENT_PORT="8443" # Секретный ключ, сгенерированный ранее DAEMON_SECRET="f8678574211fd59bb022b1a7cdea1cea"
Чтобы управлять запуском сервиса с помощью systemd создадим файл «/etc/systemd/system/MTProxy.service&rauqo;:
[Unit] Description=MTProxy After=network.target [Service] EnvironmentFile=/opt/MTProxy/daemon.conf Type=simple WorkingDirectory=/opt/MTProxy ExecStart=/opt/MTProxy/mtproto-proxy -u ${DAEMON_USER} -p ${DAEMON_STAT_PORT} -H ${DAEMON_CLIENT_PORT} -S ${DAEMON_SECRET} --aes-pwd proxy-secret proxy-multi.conf -M 1 Restart=on-failure [Install] WantedBy=multi-user.target
Перечитаем конфигурацию systemd:
systemctl daemon-reload
Запустим сервис и включим автоматический запуск при загрузке системы:
systemctl start MTProxy.service && systemctl enable MTProxy.service
Осталось только настроить автоматическое обновление файла «proxy-multi.conf». Для этого достаточно создать скрипт «/etc/cron.daily/update-mtproxy»:
#!/bin/sh # Перенаправляем STDOUT в пустоту exec >> /dev/null # Пытаемся скачать новый файл curl -s https://core.telegram.org/getProxyConfig -o /opt/MTProxy/proxy-multi.conf.new || exit # Ищем отличия между новым и старым файлами diff -q /opt/MTProxy/proxy-multi.conf.new /opt/MTProxy/proxy-multi.conf # Если отличия есть if [ $? -ne "0" ]; then # Замещаем старый файл новым mv /opt/MTProxy/proxy-multi.conf.new /opt/MTProxy/proxy-multi.conf # Анализ кода сервиса показал что он сам определяет изменения и перечитывает файл #systemctl restart MTProxy.service fi
На этом настройка сервиса заканчивается. Теперь можно построить ссылку вида: «tg://proxy?server=АДРЕС_СЕРВЕРА&port=ПОРТ_СЕРВЕРА&secret=СЕКРЕТНЫЙ_КЛЮЧ». Если ваш сервер имеет адрес 192.168.201.100 и остальную конфигурацию как описано выше то ссылка будет иметь вид: «tg://proxy?server=192.168.201.100&port=8443&secret=f8678574211fd59bb022b1a7cdea1cea». Эту ссылку можно опубликовать на внутреннем портале компании и/или сделать рассылку по сотрудникам.
Прокси можно также добавить вручную. Для этого в настольной версии надо зайти в настройки, выбрать «расширенные настройки», «Тип соединения» и добавить прокси с типом «MTProto», заполнив поля в соответствии с настройкам сервера.
В мобильном приложении для Android настройки прокси находятся в разделе «Settings» -> «Data and Storage» -> «Proxy Settings». В приложении для iOS в разделе «Настройки» -> «Прокси».
На этом всё. Приятной работы!