Установка MTProto-proxy в Debian
Исходная информация взята отсюда
и отсюда.
Зависимости для сборки
apt install git curl build-essential libssl-dev zlib1g-dev
Исходный код
Можно вытащить в любой каталог любого пользователя.
git clone https://github.com/TelegramMessenger/MTProxy.git
Переход в каталог с исходниками
Сборка
Для сборки просто выполнить команду:
Если все зависимости установлены, но сборка падает на этапе линковки
с сообщениями про множественное определение некоторых функций, то
надо добавить ключ -fcommon в переменную CFLAGS в Makefile.
После этого повторить сборку командой make.
Установка
Будем устанавливать в каталог /usr/local/bin.
Для этого надо скопировать и на всякий случай выставить разрешения на выходной файл:
cp objs/bin/mtproto-proxy /usr/local/bin/
chmod 777 /usr/local/bin/mtproto-proxy
Возможно эти действия следует выполнить от имени root.
Создание файлов конфигурации
Делать от имени root.
Скачать файлы для подключения к серверам 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 restart mtproto-proxy
systemctl status mtproto-proxy
Если всё ок, то добавляем в автозагрузку:
systemctl enable mtproto-proxy
Автоматическое обновление конфигурации
Можно настроить обновление конфигурации по планировщику.
Для этого от имени root выполнить:
Сформировать 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"