MTProto, это специальный протокол разработанный командой Дурова, предназначенный для шифрования трафика мессенджера Telegram.

MTProto Proxy — это промежуточный сервер, выполняющий роль посредника между пользователем и серверами Telegram, позволяя получать доступ к Telegram, если по каким-то причинам он недоступен, скрывая свой IP адрес и маскируя трафик.

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

Как установить Telegram MTProto Proxy на сервер CentOS/RHEL или Debian/Ubuntu

Для личного использования подойдёт любой сервер, даже самый дешёвый VPS.

Для начала устанавливаем необходимые пакеты.

Для Debian/Ubuntu:

apt install git curl build-essential libssl-dev zlib1g-dev mc

Для CentOS/RHEL:

yum install openssl-devel zlib-devel vim-common mc
yum groupinstall "Development Tools"

Клонируем репозиторий, переходим в его папку, компилируем:

git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy
make

Если что-то пошло не так, разбираемся что именно, и затем, перед повторной сборкой, не забываем выполнить:

make clean

Наведём порядок, разложим всё по своим местам:

cp objs/bin/mtproto-proxy /usr/bin/
chmod 775 /usr/bin/mtproto-proxy
cd /etc
mkdir mtproto-proxy
cd mtproto-proxy

Получаем секретный файл, нужный для подключения к серверам Telegram:

curl -s https://core.telegram.org/getProxySecret -o proxy-secret

Получаем текущую конфигурацию Telegram:

curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf

Она может периодически меняться, поэтому не лишним будет обновлять файл раз в сутки:

echo "curl -s  https://core.telegram.org/getProxyConfig -o /etc/mtproto-proxy/proxy-multi.conf" > /etc/cron.daily/mtproto-proxy
chmod 755 /etc/cron.daily/mtproto-proxy

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

head -c 16 /dev/urandom | xxd -ps

Создаём служебный файл systemd, чтобы Telegram MTProto Proxy работал как служба. Например через редактор mcedit:

mcedit /etc/systemd/system/mtproto-proxy.service

И вставляем в него:

[Unit]
Description=MTProxy
After=network.target
[Service]
ExecStart=/usr/bin/mtproto-proxy -u nobody -p 8888 -H 443 -S <secret> --aes-pwd /etc/mtproto-proxy/proxy-secret /etc/mtproto-proxy/proxy-multi.conf -M 1
Restart=on-failure
[Install]
WantedBy=multi-user.target

Где:

  • 443 — порт, к которому вы будете подключаться к Telegram MTProto Proxy. Если занят, используйте другой.
  • 8888 — локальный порт для просмотра статистики, доступен только с самого сервера. Посмотреть статистику можно командой wget localhost:8888/stats
  • <secret> — меняете на тот, который генерировали и сохранили выше.

Перезагружаем systemd:

systemctl daemon-reload

Запускаем службу и проверяем нормально ли она запустилась:

systemctl restart mtproto-proxy
systemctl status mtproto-proxy

Если всё ок, то добавляем в автозагрузку:

systemctl enable mtproto-proxy

На Centos 8 у меня не запустился. Если просто запустить из консоли:

/usr/bin/mtproto-proxy -u nobody -p 8888 -H 443 -S <secret> --aes-pwd /etc/mtproto-proxy/proxy-secret /etc/mtproto-proxy/proxy-multi.conf -M 1

то видна проблема: mtproto-proxy: common/pid.c:42: init_common_PID: Assertion `!(p & 0xffff0000)’ failed.

Решается так:

echo "kernel.pid_max=65535" > /etc/sysctl.conf
sysctl -p

Ну и на этом всё. Чтобы подключиться к вашему Telegram MTProto Proxy, используйте ссылку, заменив в ней данные на свои:

tg://proxy?server=<IP сервера>&port=<ПОРТ>&secret=<СЕКРЕТ>

Иногда правда бывает, что провайдеры вычисляют по размеру пакетов, и блокируют MTProxy. В этом случае, к вашему секрету в начале допишите 2 буквы dd. Тогда к пакетам будут добавляться случайные данные.

Внимание! Использование прокси в некоторых странах может нарушать законодательство. Ознакомьтесь с законами страны прежде чем устанавливать и использовать Telegram MTProto Proxy.
Все операции описанные в статье производились на тестовом сервере, и после написания статьи были удалены.