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.
Все операции описанные в статье производились на тестовом сервере, и после написания статьи были удалены.