Буквально вчера выкатили официальный прокси для
Telegram под названием
mtproto-proxy, там же есть руководство настройки, но все равно продублирую у себя, может кому пригодится.
Где взять прокси написано
ТУТ
Купить дешевый VDS можно у них:
https://aeza.net/?ref=397195
https://firstbyte.ru/?from=30261 от 75₽ в месяц
Простая установка для debian/ubuntu (взял
тут):
apt update && apt install -y curl iproute2
curl https://clsv.ru/uploads/68/install-mtproxy.sh | PORT="443" WORKERS="$(nproc)" bash
После компиляции из исходников, скрипт вернет строку подключения которую можно использовать
Клиентский secret:
eaaebe39d1a07f9e0196d8cb2bf0c855
tg:// ссылка:
tg://proxy?server=1.1.0.0&port=443&secret=ddeaaebe39d1a07f9e0196d8cb2bf0c855
https:// ссылка:
https://t.me/proxy?server=1.1.0.0&port=444&secret=ddeaaebe39d1a07f9e0196d8cb2bf0c855
Старая заметка…
А теперь сама заметка:
Нам понадобятся средства для сборки
mtproxy из исходников, команда для
debian
apt-get install git build-essential libssl-dev zlib1g-dev curl
Если у вас
ubuntu 16.04 или в системе
OpenSSL версии ниже 1.1.0h, то нужно его установить, или собрать ручками.
Проверить текущую версию openssl можно командой
openssl versionДля сборки
openssl1.1.0h выполним следующие команды
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
tar -zxf openssl-1.1.0h.tar.gz
cd openssl-1.1.0h
./config
make
make install
ldconfing /usr/local/lib
echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
Теперь собираем mtproxy
Вытащим к себе исходники
git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy
Если у вас ubuntu 22.04 то надо пропатчить
makefile
curl -o make.patch https://clsv.ru/uploads/68/make.patch
git apply make.patch
В debian 12 тоже необходим
патч
curl -o assert.patch https://clsv.ru/uploads/68/assert.patch
git apply assert.patch
Собираем
<pre>
make
Если все прошло без ошибок, то в каталоге
MTProxy/objs/bin/ должен быть бинарник
mtproto-proxy, копируем его в
/usr/local/bin
cp objs/bin/mtproto-proxy /usr/local/bin
Теперь создадим пользователя, каталог для конфигов и логов(логи почему то у меня не писались, может баг)
adduser --system --no-create-home --disabled-login --group mtproxy
mkdir /etc/mtproxy
mkdir /var/log/mtproxy
chown mtproxy:mtproxy /var/log/mtproxy/
Получим необходимые файлы для функционирования mtproxy
cd /etc/mtproxy
Используйте одну из утилит для получения файлов:
curl
curl -s https://core.telegram.org/getProxySecret -o proxy-secret
curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
wget
wget https://core.telegram.org/getProxySecret -O proxy-secret
wget https://core.telegram.org/getProxyConfig -O proxy-multi.conf
Сгенерируем 16-ричный
secret-key
head -c 16 /dev/urandom | xxd -ps
Создадим сервис
systemd
/etc/systemd/system/mtproxy.service:
[Unit]
Description=mtproto-proxy
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mtproto-proxy -u mtproxy -p 8888 -6 -H 443 -l /var/log/mtproxy/mtproxy.log -S <secret-key> --aes-pwd /etc/mtproxy/proxy-secret /etc/mtproxy/proxy-multi.conf -M 1
Restart=on-failure
[Install]
WantedBy=multi-user.target
Расшифровка параметров:
-u mtproxy — процесс запускается от пользователя mtproxy
-p 8888 — локальный порт, можно использовать для получения статистики
-6 — включает ipv6
-H 443 — на каком порту ожидать подключение клиентов, 443 подходит идеально, провайдеры и прочие будут думать что это обычный https траффик
-l /var/log/mtproxy/mtproxy.log — лог файл, но как я писал выше, логи почему то не пишутся, может нужно включить verbose или еще чего, разберусь потом
-S <secret-key> — секретный ключ который мы сгенерировали(надеюсь вы поняли что
<secret-key>, нужно заменить на сгенерированную строку, например на
575b04f4b28f72263965d1d371707c06)
--aes-pwd /etc/mtproxy/proxy-secret — конфиг с секретом, что там в нем, черт его знает
/etc/mtproxy/proxy-multi.conf — конфиг файл с ip адресами серверов
-M 1 — количество главных процессов, пишут что хватает одного, если у вас там не супер-пупер нагруженный сервер.
UPD: 12.09.2019
В официальном mtproxy запилили
fake-tls, все описано
здесь
Что бы этим воспользоваться нужно добавить в команду запуск -D и указать домен, пример такой
ExecStart=/usr/local/bin/mtproto-proxy -u mtproxy -p 8888 -6 -H 443 -D www.facebook.com -S <secret-key> --aes-pwd /etc/mtproxy/proxy-secret /etc/mtproxy/proxy-multi.conf -M 1
Но помните у вас отлетит обычное подключение которое с ключом DD и без DD, <secret-key> тоже станет особенный, сгенерировать его можно вот на этом сайте
http://seriyps.ru/mtpgen.html в Fake-TLS domain нужно указать тот же домен который вы указали в -D, в нашем случае
www.facebook.com
Активируем сервис и пробуем его запустить
systemctl enable mtproxy && systemctl start mtproxy
Посмотреть состояние можно командой
systemctl status mtproxy
Если у вас нет
systemd, используйте следующий init.d
/etc/init.d/mtproxy:
#!/bin/sh
### BEGIN INIT INFO
# Provides: mtproto-proxy
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: MTProxy service
### END INIT INFO
set -e
# Must be a valid filename
NAME=mtproto-proxy
PIDFILE=/var/run/$NAME.pid
#This is the command to be run, give the full pathname
DAEMON=/usr/local/bin/mtproto-proxy
DIR=/etc/mtproxy
DAEMON_OPTS="-u mtproxy -p 8888 -6 -H 443 -l /var/log/mtproxy/mtproxy.log -d -S <secret> -P <proxy-tag> --aes-pwd /etc/mtproxy/proxy-secret /etc/mtproxy/proxy-multi.conf -M 1"
USER=mtproxy
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
case "$1" in
start)
echo -n "Starting daemon: "$NAME
start-stop-daemon --start --background --pidfile $PIDFILE -d $DIR -m --exec $DAEMON -- $DAEMON_OPTS
echo "."
;;
stop)
echo -n "Stopping daemon: "$NAME
start-stop-daemon --stop --signal TERM --quiet --oknodo --pidfile $PIDFILE
echo "."
sleep 3
;;
restart)
echo -n "Restarting daemon: "$NAME
start-stop-daemon --stop --signal TERM --quiet --oknodo --retry 30 --pidfile $PIDFILE
start-stop-daemon --start --background --pidfile $PIDFILE -d $DIR -m --exec $DAEMON -- $DAEMON_OPTS
echo "."
;;
*)
echo "Usage: "$1" {start|stop|restart}"
exit 1
esac
exit 0
Даем права на запуск скрипта
chmod +x /etc/init.d/mtproxy
Активируем автозапуск
update-rc.d mtproxy defaults
Запускаем службу
/etc/init.d/mtproxy start
Теперь настраивайте ваш
телеграм клиент.

UPD 24.02.2019
Что бы прокси было сложнее обнаружить, в клиенте есть возможность динамически изменять размер пакета, добавьте в начале ключа две буквы dd
Должно получится так
dd575b04f4b28f72263965d1d371707c06
Если примут
коммит то в самом прокси
mtproto можно будет запретить подключение без dd флагом "-R"
Если у вас есть канал, то вы можете его продвинуть благодаря прокси, для этого нужно зарегистрировать ваш прокси у бота
@MTProxybot, бот вам даст
proxy-tag, его нужно будет добавить в запуск сервиса,
ExecStart изменить на
ExecStart=/usr/local/bin/mtproto-proxy -u mtproxy -p 8888 -6 -H 443 -l /var/log/mtproxy/mtproxy.log -S <secret-key> -P <proxy-tag> --aes-pwd /etc/mtproxy/proxy-secret /etc/mtproxy/proxy-multi.conf -M 1
-P <proxy-tag> — <proxy-tag> заменить на то, что вам дал бот
1. Пишем
@MTProxybot /start1.1 Он запросит адрес нашего прокси в формате host:port
1.2 Потом запросит secret, отправляем ему
1.3 Если все окей выведет сообщение об успехе Success и proxy tag его надо прописать в ExecStart сервиса
-P <proxy-tag>, описывал выше.

2. Добавим канал, пользователи которые будут пользоваться вашим прокси автоматически будут «подписаны» на Promoted канал.
2.1 Командой
/myproxies запросим список наших прокси(их может быть несколько)
2.2 Выберем необходимый

2.3 И нажмем кнопку
Set promotion
2.4 Введем название канала в формате
@имя_канала
2.5 Все, примерно через час данные
promotion применяться и у пользователей использующих ваши прокси появится ваш канал.

Безопасного общения друзья :-)
нет файла или директории
Точно создал сервис файл?
почему процесс убивается через несколько минут, непонятно почему:
Jun 06 10:12:09 sb572f058 mtproto-proxy[21340]: [21342][2018-06-06 10:12:09.085625 local] main loop
Jun 06 10:20:04 sb572f058 systemd[1]: mtproxy.service: Main process exited, code=killed, status=9/KILL
Jun 06 10:20:04 sb572f058 mtproto-proxy[21340]: [pid 21342] [time 1528269604] SIGTERM handled.
Jun 06 10:20:04 sb572f058 mtproto-proxy[21340]: [21342][2018-06-06 10:20:04.096907 local] Terminated by SIGTERM.
Jun 06 10:20:04 sb572f058 systemd[1]: mtproxy.service: Unit entered failed state.
Jun 06 10:20:04 sb572f058 systemd[1]: mtproxy.service: Failed with result 'signal'.
github.com/dotcypress/mtproxy/issues/3
но походу проблема так и нерешена
systemctl status mtproxy ● mtproxy.service - mtproto-proxy Loaded: loaded (/etc/systemd/system/mtproxy.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2018-06-03 22:26:05 MSK; 2 days ago Main PID: 363 (mtproto-proxy) Tasks: 50 (limit: 4915)Проверяем версию openssl, должна быть не ниже OpenSSL 1.1.0h 27 Mar 2017 иначе работать не будет и будет вылезать вот такая ошибка.
openssl versionСоздаем пользователя:
useradd mtproxyСоздадим сервис systemd:
nano /lib/systemd/system/mtproxy.serviceОстальное все делаем в точности как написано в этом гайде. (=
З.ы Спасибо большое за годный гайд!
Вопрос только чем mtproxy.service в /etc/systemd/system не угодил?
Просто канал привязывается примерно через час.
/usr/local/bin/mtproto-proxy -u mtproxy -p 8888 -6 -H 443 -l /var/log/mtproxy/mtproxy.log -S 5cbcf5c8535349733ed9c1681b599034 -P 287d86ad5711c60a952f7a73f0ca4dd3 --aes-pwd /etc/mtproxy/proxy-secret /etc/mtproxy/proxy-multi.conf -M 1
Rsocks предоставляет бесплатную прокси для работы с Telegram, которая обеспечит быструю и стабильную работу
⚠️Ссылка на прокси: tg://proxy?server=37.1.192.213&port=443&secret=fe1616435624d4431774386e1e680ede⚠️
Сервер: 37.1.192.213
Порт: 443
-bash: /etc/init.d/mtproxy: Permission deniedпосле/etc/init.d/mtproxy startCentOS 6.xchmod +x /etc/init.d/mtproxyдолжно помочьВ общем проблема этого флага в том что systemd не сможет управлять службой(запускать/останавливать), поэтому этот флаг лучше не ставить ибо процесс будет уходить в background. А так если запускаешь из командной строки просто добавь -d
Ставил официальный mtproxy, без докера на centos7. Настройки все стандартные, сам прокси работает, но статистику по ссылке: curl localhost:8888/stats не отдаёт. Ошибка: Failed connect to localhost:8888; Connection refused. Смена порта 8888 на др. не помогает. Это проблемы прокси или в системе что посмотреть можно? В сети нашёл много упоминаний про докерную версию, там что-то правят, добавляя потом http-stats. Может кто сталкивался с обычной версией, можно или нет как-то починить вывод статистики?
Как считаете — если сделать получение статистики через оф. бота, предварительно его там зарегистрировав, но ключ не указывать который даст бот — промо канал появится или нет? (не хотелось бы, т.к. это личный сервис, реклама там не нужна). Может ещё какие то костыли есть?
Не должно быть ipv6 в самых параметрах запуска mtproto прокси.
Заменил конфиг на обычный, где без fake tls — после рестарта службы — сразу взлетело. (Т.е. прежний вариант работает). Может что поменяли в командах/ключах.., искал, особо нет инфы в паблике — везде старые версии.
Секретный ключ указываем в обычном формате, без dd, не в hex и не base64 формате
я пытался размещать в конфиге, а надо было в клиенте. Сделал как нужно, сразу всё взлетело.
Единсвенный момент — пока экспериментировал, обратил внимание что домен может быть любой, даже http, без s. Работает в любом виде. Так и должно быть?
или вообще ошибка на не соответствие.
Или когда всё хорошо:
Так что лучше, когда домен соответствует стандарту TLS 1.3 (а так, да, работает в любом виде)
А как быть с режимом DD — выходит он больше «не нужен» (или придётся выбирать между ним и fake-tls)?
Если остановить wireguard и отключить локальный интерфейс wg0 и снова рестартануть mtproxy, он «выберет» нормальный адрес сервера, тот самый 185.х.х.х который «висит» на основном интерфейсе (у меня это eth0).
Почему так происходит, это нормально вообще? В любом случае всё работает — и так, и так (через wg0 и через eth). Может есть способ явно указать интерфейс или ip адрес в mtproxy который следует использовать по умолчанию.
Вопрос конечно ни о чём — просто интересно понять:)
Скрин для наглядности: ibb.co/W6jWQn3
Пытается повесить прокси на указанный в аргументах адрес
Bad binded IP address 185.x.x.x, search in ifconfig
Your proxy has been submitted in list.
پراکسی شما در لیست ثبت شد.
После этого больше ничего не происходит, в чем может быть проблема?