Jump to content
Kirya

entware
MTProtoproxy для Entware.

6 posts in this topic

К тестированию меня сподвигла ситуация, что при наличии подключения IPV6 дома Телеграм отлично работает напрямую по IPV6, но у моего мобильного оператора IPV6 на сети его нет. Гонять же VPN по соте крайне расточительно для аккумулятора.

Также как показала практика, при работе смарта с MTProxy, чем меньше задержка до прокси из сотовой сети, тем меньше расход аккумулятора  (но это не точно, и требует доп. проверок и изучения). Также учитывая то, что многие хостеры в РФ ввели у себя запрет на размещение средств обхода блокировок, а у себя дома этому никто не мешает и имея такой прекрасный роутер, как Keenetic я начал исследовать этот вопрос. 

Для тестирования была выбрана реализация прокси сервера на Python3 от Александра Берсенёва.

( Статья автора https://habr.com/post/414139/ )

Особенностью работы MTProtoproxy является то, что прокси может работать в двух режимах соедения с серверами телеграмма: напрямую, в режиме эмуляции клиента, и через middle-proxy Телеграмма, как официальная реализация. Отмечу, что тестирование показало, что работа напрямую происходит в полтора раза быстрее и занимает практически в 2 раза меньше памяти, чем через middle-proxy. Однако нужно отметить, что только работа через middle-proxy позволяет пользователям своего прокси подключать рекламный канал (ну а вдруг...)

Для работы должен быть развернут Entware на Вашем оборудовании https://forum.keenetic.net/topic/4299-entware/

Инсталляция.

1. Устанавливаем, если их нет, Python3 и библиотеку Cryptography.

opkg install python3 python3-cryptography

2. Устанавливаем Git, если его нет.

opkg install git git-http

3. Разворачиваем с Git образ MTProtoproxy

git clone -b stable https://github.com/alexbers/mtprotoproxy.git

(Экстремалы могу развернуть и master-ветку, в которую например 01.07.2018 была добавлена также поддержка пакетов переменной длины,

и теперь можно сказать определённо - привет DPI-ям, которые будет пробовать блочить на уровне пакетов mtproxy.

git clone -b master https://github.com/alexbers/mtprotoproxy.git )

4. Переходим к конфигурированию.

cd mtprotoproxy/

Конфигурирование заключается в редактировании файла config.py

1. Генерим секретный ключ подключения к прокси.

(Ставим при необходимости xxd: opkg install xxd)

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

Можно сгенерить и другими путями, или придумать ключ самому.

Вставляем его в конфиг после "tg":, заменив им нули.

По умолчанию конфиг настроен на работу по двум ключам.

Но их кол-во одновременно работающих ключей можно менять по необходимости, как сократив до одного, так и увеличив.

MTProtoproxy ведёт статистику подключений по каждому ключу.

2. Для увеличения скорости работы рекомендуется добавить опцию к конфиге FAST_MODE = True .

3. При желании подключить рекламный канал или работать именно через слой middle-proxy регистрируем свой прокси у бота @MTProxybot.

(Рекомендация: Лучше всего давать ему имя хоста в доменном, а не в ip формате, особенно при dual stack ipv4-ipv6 подключении)

Получаем у него  proxy tag, раскомментируем  и вписываем его в конфиге в разделе AD_TAG.

Запускаем для проверки:

python3 mtprotoproxy.py

screen_mtp.png.6c0409bf5a273845abdf6ef3c424ec7a.png

Постоянный запуск из консоли лучше проводить командой

python3 mtprotoproxy.py >> out.txt &

Тогда прокси уйдёт работать в фон и будет выводить свою статистику раз в 10 минут в файл out.txt.

Простенький файл для автозагрузки в /etc/init.d также приложен к сообщению.

S61_mtprotoproxy

Для подключения к прокси снаружи не забываем открыть соответсвующий порт в фаерволле Keenetic-a.

Как говорилось ранее для хоста желательно, особенно для ipv4-ipv6 dual stack, иметь доменное имя,

с AAAA и A записями, тогда перадавать ссылку можно будет не ip адресами, а просто хостнеймом

одновременно для ipv4 и ipv6.

Обсуждение работы и поведения лучше всего вести или здесь, или на канале https://t.me/Keenetic_ru

где я тоже присутствую.

Детали работы для опытных.

Mtprotoproxy имеет возможность работать на 4-х библиотеках шифрования.

Встроенной AES, очень медленной, фактически она подходит лишь для тестирования работы python-а,

Cryptography, Pycryptodome и Pycrypto.

Как показали мои синтетические тесты разницы в скорости работы между Cryptography и Pycryptodome

практически нет, но если всё-таки найдутся проблемы, то следует удалить библиотеку python3-cryptography

и поставить тестовый build http://bin.entware.net/mipselsf-k3.4/test/python3-pycryptodome_3.6.3-1_mipsel-3.4.ipk

для моделей DSL, LTE, VOX

http://bin.entware.net/mipssf-k3.4/test/python3-pycryptodome_3.6.3-1_mips-3.4.ipk

И на совсем крайний случай, если найдутся проблемы и с Cryptography, и с Pycryptodome

http://bin.entware.net/mipselsf-k3.4/test/python3-crypto_2.6.1-2_mipsel-3.4.ipk

http://bin.entware.net/mipssf-k3.4/test/python3-crypto_2.6.1-2_mips-3.4.ipk

 

Edited by Kirya
  • Thanks 3

Share this post


Link to post
Share on other sites
В 01.07.2018 в 23:36, Kirya сказал:

и теперь можно сказать определённо - привет DPI-ям, которые будет пробовать блочить на уровне пакетов mtproxy.

Эмм, так Ростелеком же блочит по размеру пакетов. Потом и других операторов научат ((

https://github.com/darkk/poormansmtproto

https://habr.com/post/414099/
за развитием MTProxy не слежу (все и без проксей робит), может что-то и поменяют в реализации..

Share this post


Link to post
Share on other sites
7 минут назад, Вежливый Снайпер сказал:

Эмм, так Ростелеком же блочит по размеру пакетов. Потом и других операторов научат ((

https://github.com/darkk/poormansmtproto

https://habr.com/post/414099/
за развитием MTProxy не слежу (все и без проксей робит), может что-то и поменяют в реализации..

Леонид сам писал, что они не успели проверить всё, поэтому "пробовал" (тут важно прошедшее время).

Но суть не в этом. А в том, что после широкой огласки сигнатуры MTProto, основанные на размере пакета, были добавлены во многие корп. фаерволлы и DPI.

(хотя скорее всего они и сами бы до этого дошли)

Поэтому в MTprotoproxy появился дополнительный спец. ключ работы с клиентом (на скрине они с пометкой beta), где размер пакета динамически меняется.

(поддержка данного режима работы в официальных клиентах уже тоже есть)

 

Share this post


Link to post
Share on other sites

Ускоряем работу MTprotoproxy.

Ускорить работу фактически в полтора раза можно собрав для MTP python-библиотеку работы uvloop.

https://github.com/MagicStack/uvloop/

Но ускорения достигается за счет более большого потребления памяти до 60-65 мб,

но зато потребление перестаёт зависит от того работает MTP в режиме "эмуляции клиента" или через middle-proxy.

1. Скачиваем пакет библиотеки.

https://forum.keenetic.net/applications/core/interface/file/attachment.php?id=13562

(для DSL, LTE, VOX  https://forum.keenetic.net/applications/core/interface/file/attachment.php?id=13563)

2. Ставим.

opkg install python3-uvloop_0.11.2-1_mipsel-3.4.ipk

Запускаем MTP. Работать с uvloop он начинает при его наличии по приоритету сам.

python3 mtprotoproxy.py >> out.txt &

Edited by Kirya

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×