![]() |
Дуров, справедливо полагает, что это авторитарные государства должны его, шифропанка, бояться, а роскомнадзоры и золотые щиты со своим DPI-фильтрами его не очень-то беспокоят» (Политическая техника) Моя техническая политика — проще, я могу тут расписать свои размышления по беспечным блокировкам в рунете, но полагаю, что прогрессивные граждане Modern Russian и юзеры Хабра ощутили на своей шкуре непрофессионализм действующей власти, поэтому ограничусь единственной фразой: наша техническая политика — «Цифровое Сопротивление». «обеспечение родных и близких устойчивым каналом связи». Развертывание MTProto proxy Telegram <ul><li>Технический уровень сложности — «несложно», если, например, следовать данной шпаргалке.</li> <li>Уровень надежности — «выше среднего»: docker-образ работает стабильно, перезапускать его не требуется каждый день, как писали разработчики в своей официальной документации Telegram, но какие-то уязвимости контейнер наверняка содержит.</li> <li>Уровень сопротивления/тревоги — 10 игиловцев плетут свои заговоры «родня пользуется», бан не прилетал от РКН ни разу за все время (с весны).</li> <li>Уровень доверия — «public baby distrust», проблема на стороне клиентов (некоторые друзья подозрительно относятся к моему MtprotoProxy).</li> <li>Уровень тестостерона — «выше не стал».</li> <li>Финансовые затраты — «0₽».</li> <li>Финансовое вознаграждение — «от гражданина Дурова не зависит». Поощрение — возможность навязывание рекламы.</li> </ul> Поднимать наш TelegramProxy будем на «бесплатных/персональных» мощностях Amazon-ec2: t2.micro. Я использовал https://aws.amazon.com/marketplace/p...nux/B01M26MMTT машину. Окей, развернули свой бесплатный сервер, переходим на официальный сайт https://hub.docker.com/r/telegrammessenger/proxy/ и скачиваем docker-контейнер. Не нужно искать какой-то образ, файл, или волшебную кнопку — «их нет», вся магия делается в CLI: Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">$ docker pull telegrammessenger/proxy #образ скачан.</pre> Но перед «этим» установите docker для CLI: Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">sudo apt-get install docker.io docker</pre> Далее, в официальной документации MtprotoProxyTelegram нам предлагают сделать примерно следующее, делаем: Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">$ sudo su && docker run -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data telegrammessenger/proxy:latest #запускаем наш контейнер «mtproto-proxy».</pre> После этой команды в выводе терминала появится HEX-строка, но она нам не интересна. Пишем в CLI: Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">$ docker logs mtproto-proxy</pre> И получаем нужные данные: https://habrastorage.org/webt/dv/5s/...iqwuvubwd8.png В выводе данного лога нам показывают (замазал): А) наш ip сервера (внешний ip сервера); Б) и случайный секрет — случайная строка в HEX. Перед тем, как зарегать наш MtproProxy, нужно настроить главный файрволл над iptables (как бы вы не перенаправляли трафик на данной VPC, он будет непослушный, так как самый главный файрволл в Amazon-EC2 находится в web-интерфейсе и имеет более высокий приоритет над iptables). Заходим в «https://signin.aws.amazon.com/signin...rceMobileApp=0 Amazon-EC2» в Security Group и открываем входящий 443 порт (логичная маскировка https://ru.wikipedia.org/wiki/HTTPS на первое время). https://habrastorage.org/webt/0s/x-/...-esnplbv4m.png Берём из лога наши данные «ip и секрет» и идем в мессенджер Telegram, находим официальный MTProxy Admin Bot (@MTProxybot) и регистрируем наш MtproProxy: запускаем команду [/newproxy] и вводим [наш_ip:443], а потом и наш [секрет/HEX]. Если накосячите при вводе данных, бот будет сердиться и слать вас на… Если две строчки заполните без ошибок, то получите одобрение и рабочую ссылку, на ваш действующий MtprotoProxyTelegram, которым вы можете поделиться с кем угодно. https://habrastorage.org/webt/bm/ao/...rmtzvubi08.png Также через данного бота можно добавить Ваш спонсоркий канал (но не чат), где Вы будете ваши взгляды навязывать пользователям, которые подключились к вашему серверу, а можно не «спамить», и не беспокоить своих будучи-потенциальных клиентов, не показывая канал в закрепленном списке мессенджера. Еще пару слов о боте, там можно запрашивать статистику, но «тоже бублик». Видимо «статистика» доступна, когда за тобой Махачкала «толпа нахлебников». Мониторинг А сколько мы можем подключить юзеров на наш сервер? И вообще, кто/что там? Чего? И сколько? Смотрим, что там по официальной документации… Ага, вот, сделать так: Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">$ curl http://localhost:2398/stats или вот так $ docker exec mtproto-proxy curl http://localhost:2398/stats # и нам выдадут статистику прямо в CLI</pre> . «Держи карман шире» По предложенным командам мы всегда будем получать подобную ошибку: «curl: (7) Failed to connect to localhost port 2398: В соединении отказано» Прокси наш будет работать. Но! Бублик, а не статистику мы получим. Можно заняться делами для красноглазиков: проверить Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">$ netstat -an | grep 2398 и...</pre> Сначала я подумал, что это очередной косяк за разработчиками Telegram (и я до сих пор так думаю), потом нашёл временное неплохое решение: полирнуть напильником Docker-Контейнер. Наш прокси прозападный, ни каких проблем/блокировок за весенние и прохладные летние деньки я не встретил, на творческую задачку это тоже не тянуло, поэтому потерей темпа не занимался и префикс dd* к ключу не добавлял. Мануал «получение статистики/мониторинг» по официальной инструкции MtprotoProxyTelegram — нерабочий/устаревший, придется чинить docker-образ. Чиним. Контейнер у нас всё еще запущен: Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">$ docker stop mtproto-proxy #останавливаем наш запущенный docker-контейнер и запускаем новый образ с пропущенным флагом статистики</pre> Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">$ docker run --net=host --name=mtproto-proxy2 -d -p443:443 -v proxy-config:/data -e SECRET=ваш_предыдущий_секрет_he x telegrammessenger/proxy:latest</pre> Проверим статистику: Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">$ curl http://localhost:2398/stats</pre> curl: (7) Failed to connect to 0.0.0.0 port 2398: В соединении отказано Статистика всё еще недоступна .!.. Узнаем идентификатор docker-контейнера: Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">$ docker ps</pre> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f423c209cfdc telegrammessenger/proxy:latest "/bin/sh -c '/bin/ba…" About an hour ago Up About a minute 0.0.0.0:443->443/tcp mtproto-proxy2 Идём со своим уставом внутрь docker-контейнера: Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">$ sudo docker exec -it f423c209cfdc /bin/bash $ apt-get update $ apt-get install nano $ nano -$ run.sh</pre> И в самой последней строке скрипта «run.sh» добавляем пропущенный флаг: <blockquote>«--http-stats» «exec /usr/local/bin/mtproto-proxy -p 2398 -H 443 -M "$WORKERS" -C 60000 --aes-pwd /etc/telegram/hello-explorers-how-are-you-doing -u root $CONFIG --allow-skip-d h --nat-info "$INTERNAL_IP:$IP" $SECRET_CMD $TAG_CMD»</blockquote>Добавляете "--http-stats", что- то вроде этого должно получиться: Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">«exec /usr/local/bin/mtproto-proxy -p 2398 --http-stats -H 443 -M "$WORKERS" -C 60000 --aes-pwd /etc/telegram/hello-explorers-how-are-you-doing -u root $CONFIG --allow-skip-d h --nat-info "$INTERNAL_IP:$IP" $SECRET_CMD $TAG_CMD»</pre> Ctrl+o/Ctrl+x/Ctrl+d (сохранить/выход из nano/выход из контейнера). Перезапускаем наш docker-контейнер: Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">$ docker restart mtproto-proxy2</pre> Всё, теперь по команде: Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">$ curl http://localhost:2398/stats #получаем объемную статистику</pre> https://habrastorage.org/webt/om/8i/..._lqmramt80.png В статистике много «мусора» (на скрине 1/3 её часть), создаём alias: Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">$ echo "alias telega='curl localhost:2398/stats | grep -e total_special -e load_average_total'" >> .bashrc && bas</pre> h Получаем то, ради чего полировали docker-контейнер: кол-во подключений и нагрузку: Code: <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px solid rgb(0, 0, 0); width: 640px; height: 34px; text-align: left; overflow: auto; background: rgb(37, 37, 37) none repeat scroll 0% 0%; border-radius: 5px; font-size: 11px; text-shadow: none;">$ telega</pre> https://habrastorage.org/webt/10/lj/...qhjtbm9eb0.png Docker-контейнер работает, статистика крутится. Затраченные ресурсы Как бы ты не был крут Стюарт Редман даже ты оставляешь след от го.на на своих трусах. Работающий Docker-образ оставляет немаленький след. Расписывать преимущества и недостатки docker-образов не имеет смысла, docker-контейнер — это мини-виртуальная машина, потребляющая ресурсы менее, чем «реальная» виртуальная машина, например VirtualBox, но потребляющая. 1) Запущен со статистикой docker-образ или без неё, два клиента резвятся или десять — ресурсы утилизируются ~одинаково: 75% от всей производительности CPU t2.micro. 2) Смотрим мониторинг VPC-сервера: https://habrastorage.org/webt/ar/zm/...cuo1ubshla.png Из графика утилизации ресурсов на VPC видим, что docker-контейнер потребляет постоянно ~7,5% от общей макс. производительности CPU и 28 мая был остановлен мною намеренно/временно (Примечание — на сервере так же крутятся OpenVPN & pptp). Почему 10% постоянной загрузки CPU — это предел для данного сервера? Потому что есть ограничения со стороны Amazon EC2 и исчисляются они в кредитах: https://habrastorage.org/webt/iq/cb/...pjbcabh5ea.png 1 кредит CPU = 1 ЦП, работающему со 100% загрузкой в течение одной минуты, а у нас кредитов 6 (то есть в пиках 100%-я утилизация CPU возможна в течении 6 минут, а дальше мощность CPU снизится). Другие комбинации: например, 1 кредит CPU = 1 ЦП, работающему с 50%-й нагрузкой в течение двух минут (то есть мы можем исполльзовать CPU с 50%-й нагрузкой в течении 12 минут), или, пример, постоянной 10%-й нагрузкой CPU в течение всего времени и д.п Выводы <ul><li>Мы частичка «Цифрового Сопротивления». Обеспечили своих «пап и мам» надежным каналом связи.</li> <li>Если на сервере у вас будет развернут MtprotoProxyTelegram и OpenVPN, но не более, задержек/пингов/сбоев не будет, но если вы постоянно экспериментируете со своим t2/micro, то ждите тормозов по связи.</li> <li>Мой заокеанский пинг ~100-250мс, задержек в речевой связи не ощущается.</li> <li>Финансовые затраты на все «это» (в том числе и ресурсы VPC) = 0₽.</li> </ul> |
All times are GMT. The time now is 09:28 PM. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc.