Установка и настройка MTProxy

()

Некоторое время разработчики мессенджера 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». Эту ссылку можно опубликовать на внутреннем портале компании и/или сделать рассылку по сотрудникам.

Мессенджер Telegram. Добавление MTProto прокси-сервера.

Прокси можно также добавить вручную. Для этого в настольной версии надо зайти в настройки, выбрать «расширенные настройки», «Тип соединения» и добавить прокси с типом «MTProto», заполнив поля в соответствии с настройкам сервера.

Мессенджер Telegram на iOS. Добавление MTProto прокси-сервера.

В мобильном приложении для Android настройки прокси находятся в разделе «Settings» -> «Data and Storage» -> «Proxy Settings». В приложении для iOS в разделе «Настройки» -> «Прокси».

На этом всё. Приятной работы!

Ключевые слова: telegram, прокси, mtproto, mtproxy, systemd.

Подписаться на обновления: RSS-лента Telegram канал Twitter

Комментарии:

Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2018 Вадим Калинников aka MooSE