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"