Перейти к главному содержимому

MTProxy debian

Установка MTProto-proxy в Debian

Исходная информация взята отсюда и отсюда.

Зависимости для сборки

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

Исходный код

Можно вытащить в любой каталог любого пользователя.

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

Переход в каталог с исходниками

cd MTProxy

Сборка

Для сборки просто выполнить команду:

make

Если все зависимости установлены, но сборка падает на этапе линковки с сообщениями про множественное определение некоторых функций, то надо добавить ключ -fcommon в переменную CFLAGS в Makefile. После этого повторить сборку командой make.

Установка

Будем устанавливать в каталог /usr/local/bin. Для этого надо скопировать и на всякий случай выставить разрешения на выходной файл:

cp objs/bin/mtproto-proxy /usr/local/bin/
chmod 777 /usr/local/bin/mtproto-proxy

Возможно эти действия следует выполнить от имени root.

Создание файлов конфигурации

Делать от имени root.

mkdir /etc/mtproto-proxy

Скачать файлы для подключения к серверам Telegram:

curl -s https://core.telegram.org/getProxySecret -o /etc/mtproto-proxy/proxy-secret
curl -s https://core.telegram.org/getProxyConfig -o /etc/mtproto-proxy/proxy-multi.conf

Сгенерировать секретный ключ для подключению к MTProto Proxy:

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

Сам ключ будет выведен в консоль и он понадобится позже. Его надо будет вставлять вместо слова SECRET ниже.

Проверочный запуск

Для проверки надо бы запустить:

/usr/local/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 

Вместо SECRET должен быть указан сгенерированный в консоль ключ.

Если вдруг вылетает ошибка про недопустимый PID что-то наподобие:

mtproto-proxy: common/pid.c:42: init_common_PID: Assertion '!(p & 0xffff0000)' failed.

В этом случае можно попробовать ограничить PID на уровне системы. Для этого от имени root выполнить:

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

На виртуалке это, скорее всего, не сработает, так как на установку параметра kernel.pid_max будет выдана ошибка permission denied.

В этом случае придется править исходник, перекомпилировать и снова копировать выходной исполняемый файл в /usr/local/bin

В исходнике common/pid.c в районе строки 42 закомментировать строку:

assert (! (p & 0xffff0000));

После этого пересобрать и переустановить как сказано выше в разделах Сборка, Установка.

Автоматический запуск

Надо создать unit-файл для systemd /etc/systemd/system/mtproto-proxy.service:

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

Вместо SECRET должен быть указан сгенерированный в консоль ключ.

-H 443 это порт, на котором будет работать прокси. Его можно задать любым допустимым, не обязательно 443. Но надо убедиться (и настроить при необходимости), что пакеты на этот порт не режутся firewall-ом.

-p 8888 - локальный порт для просмотра статистики. Доступен только с самого сервера командой типа wget localhost:8888/stats.

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

systemctl daemon-reload

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

systemctl restart mtproto-proxy
systemctl status mtproto-proxy

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

systemctl enable mtproto-proxy

Автоматическое обновление конфигурации

Можно настроить обновление конфигурации по планировщику. Для этого от имени root выполнить:

crontab -e

Сформировать cron-файл (в примере обновление происходит в 3:00 каждый понедельник):

0 3 * * 1  curl -s https://core.telegram.org/getProxyConfig -o /etc/mtproto-proxy/proxy-multi.conf && systemctl restart mtproto-proxy.service

Настройка клиента

В клиенте можно настроить прокси вручную. В качестве протокола должен быть выбран MTProto, а в качестве секретного кода должен быть указан тот самый SECRET который был сгенерирован и использован в командной строке при запуске прокси.

Настройки находятся в меню Настройки/Данные и память/Настройки прокси.

Можно применить настройки прокси автоматически открыв специального вида ссылку:

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

добавка к секретному ключу

Говорят:

UPD 24.02.2019
Что бы прокси было сложнее обнаружить, в клиенте есть возможность 
динамически изменять размер пакета, добавьте в начале ключа две 
буквы dd

Должно получится так dd575b04f4b28f72263965d1d371707c06

Если примут коммит то в самом прокси mtproto можно будет 
запретить подключение без dd флагом "-R"