Если вы работаете с тг-ботами, то, скорее всего, замечали проблемы с таймаутами и нестабильным подключением к боту. Или, например, вам захотелось использовать недоступные API на инфраструктуре в RU-регионе, и для этого не обязательно использовать три интересные буквы. Для таких задач подходит и простой прокси. Этот способ не починит звонки, но базовые запросы будут работать. Да и задержка будет поменьше. Но это не точно.
Существуют 2 варианта:
купить готовый прокси
поднять собственный сервер
Чтобы поднять собственный прокси-сервер за пару минут и не напрягаться с конфигурацией, я сделал маленький CLI, который поднимает прокси-стек на VPS за несколько команд: HTTP, SOCKS5 и MTProto для Telegram. Все обновления будут в моем Telegram-канале @kotelnikoff_dev. Там же будет список провайдеров, на которых я тестировал свой CLI.
Гит
В статье покажу:
чем прокси отличается от “трех букв”
пару слов о прокси-протоколах
как быстро развернуть собственный прокси-сервер
как управлять доступом через CLI proxyctl
Почему не “три буквы”
Идея решения с “тремя буквами” состоит в том, что оно уводит трафик сервера целиком. Это рабочий вариант, но для прикладных задач он часто избыточен.
Прокси работает точечно:
отправляет только нужные запросы;
разделяет трафик по приложениям и пользователям.
Какие протоколы используются
HTTP proxy
Подходит для:
curl;браузеров;
fetch,axiosи других HTTP-клиентов;любых случаев, когда нужен обычный HTTP/HTTPS-трафик.
Такой прокси понимает HTTP-протокол и умеет делать CONNECT для HTTPS.
SOCKS5 proxy
Подходит для:
приложений, которые умеют работать через SOCKS;
нестандартных клиентов;
случаев, где нужен универсальный TCP-прокси.
MTProto proxy
Подходит только для Telegram-клиентов.
Прокси сам по себе не шифрует данные на уровне “замены HTTPS”. Это всего лишь посредник. Безопасность веб-запросов по-прежнему обеспечивает HTTPS между клиентом и сайтом.
Что такое proxyctl
proxyctl — это CLI для развертывания и управления proxy-стеком:
3proxyдля HTTP и SOCKS5;mtgдля MTProto.
proxyctl нужен для:
установки зависимостей;
скачивания или сборки нужных бинарников;
генерации конфигов;
создания и запуска сервисов;
управления пользователями;
базовой диагностики после установки.
Поддерживаются два режима запуска:
systemdдля обычных VPS/VM;processдля окружений безsystemd, например некоторых контейнеров.
Быстрый старт
Нужен сервер на Ubuntu или Debian.
Установка:
curl -fsSL "https://raw.githubusercontent.com/Kotelnikovekb/proxyctl/main/install.sh" | sudo bash
Диагностика и проверка работоспособности сервисов
После установки полезно выполнить:
proxyctl status proxyctl diagnose
diagnose проверяет:
запущен ли
3proxy;слушаются ли нужные порты;
проходят ли локальные HTTP/HTTPS/SOCKS-запросы через
127.0.0.1;нет ли проблем с базой пользователей.
Если локально все ок, а извне не подключается, проблема обычно не в самом прокси, а в firewall/security groups провайдера.
После установки можно либо пройти мастер:
proxyctl wizard
Либо сразу поставить готовый набор:
proxyctl install full
full поднимет:
HTTP proxy;
SOCKS5 proxy;
MTProto proxy.
Если нужен только Telegram:
proxyctl install mtproto
Если нужен только HTTP/SOCKS для API и приложений:
proxyctl install api
Пресеты
CLI поддерживает пять сценариев:
api— HTTP + SOCKS5;universal— HTTP + SOCKS5;mtproto— только MTProto;telegram-mobile— HTTP + SOCKS5 + MTProto;full— полный набор.
Можно указывать сразу несколько:
proxyctl install a
Управление доступом
Для работы 3proxy необходимо добавить пользователя и пароль.
Добавить пользователя:
proxyctl add-user alice
Посмотреть пользователей:
proxyctl list-users
Сменить пароль:
proxyctl change-password alice new-pass
Удалить пользователя:
proxyctl remove-user alice
CLI выполнит команды и перезапустит сервис после изменений.
Как получить данные для подключения
CLI умеет сразу вывести параметры подключения.
Для HTTP и SOCKS5:
proxyctl show-connect
На выходе будут:
host;
port;
username.
Для Telegram:
proxyctl show-telegram-link
Команда выводит готовую tg:// ссылку, которую можно сразу открыть в Telegram-клиенте.
Отдельно про firewall
Во время тестов были сложности с портами на серверах google cloud. Для проверки нужно проверить, что открыты входящие TCP-порты:
3128для HTTP proxy;1080для SOCKS5;443для MTProto, если он включен.
Для Google Cloud CLI умеет даже подсказать готовые команды:
proxyctl print-gcp-firewall
Это не открывает firewall автоматически, а выводит готовые gcloud команды, которые необходимо выполнить в проекте.
Ограничения
Важно сразу проговорить ограничения, чтобы не было ложных ожиданий:
проект ориентирован на Ubuntu/Debian. Если нужно, то появятся и другие платформы;
установка завязана на
apt;это не замена полноценной сетевой архитектуре;
cloud firewall все равно настраивается отдельно;
Если что-то не получилось, то задавайте вопросы в комментариях тут или в группе @kotelnikoff_dev.
Подкиньте программисту на кофе, ему еще песика кормить :-)