Маршрутизация трафика Telegram через SOCKS5-прокси на зарубежном VPS
Подключение Python-сервисов к Telegram Bot API через SOCKS5-прокси на немецком VPS (Hetzner), чтобы обойти региональную блокировку, не затрагивая остальной трафик приложения.
ОПИСАНИЕ
Группа Python-сервисов, работающих с Telegram Bot API, размещена на сервере в регионе, где прямой доступ к api.telegram.org ограничен. Чтобы сервисы могли стабильно обращаться к Telegram, поднят арендованный VPS в Германии (Hetzner) с SOCKS5-прокси, слушающим порт 1080, и весь трафик к Telegram направляется через этот узел, тогда как остальные соединения идут напрямую. Ключевое техническое решение — выборочная (split) маршрутизация: через прокси идут только запросы к Telegram (long polling getUpdates, sendMessage, sendDocument, getFile и загрузка файлов), а соединения с PostgreSQL и Google API остаются прямыми. Это минимизирует задержки и не гоняет тяжёлый трафик (выгрузки, файлы) через зарубежный узел без необходимости. Используется схема socks5h (а не socks5): литера «h» означает, что доменное имя резолвится на стороне прокси (remote DNS), что обходит блокировки на уровне DNS и не раскрывает DNS-запросы к Telegram локальному резолверу. SOCKS-поддержка в Python обеспечена библиотекой PySocks. В проекте сосуществуют два клиента Telegram, поэтому прокси подключается двумя способами. Для сервисов на библиотеке pyTelegramBotAPI настройка вынесена в общий модуль (proxy_config.py): он один раз задаёт глобальный apihelper.proxy = {"http": ..., "https": ...} и импортируется сервисом до старта polling — все исходящие вызовы библиотеки автоматически идут через прокси. Для сервисов на чистом requests применён более точечный подход: создаётся отдельная requests.Session исключительно для вызовов Telegram, на ней выставляются proxies и, что важно, trust_env = False — сессия игнорирует системные переменные окружения (HTTP_PROXY/NO_PROXY и т. п.), благодаря чему прокси гарантированно применяется только к Telegram-сессии и не «протекает» на запросы к БД и Google, которые выполняются обычным requests напрямую. Конфигурация прокси централизована (единый адрес и порт узла), что упрощает смену сервера или порта во всех сервисах из одной точки. Подход вводился постепенно и раскатан на все сервисы, работающие с Telegram.
ИСПОЛЬЗУЕМЫЕ ИНСТРУМЕНТЫ
- Python
- requests
- PySocks
- SOCKS5 (socks5h
- remote DNS)
- pyTelegramBotAPI (apihelper.proxy)
- Telegram Bot API
- VPS Hetzner (Германия)
- Git
РЕЗУЛЬТАТ
- Поднят SOCKS5-прокси на немецком VPS (Hetzner, порт 1080) для доступа к Telegram из региона с ограничениями.
- Реализована выборочная маршрутизация: через прокси идёт только трафик Telegram, соединения с PostgreSQL и Google API остаются прямыми.
- Применена схема socks5h с резолвингом DNS на стороне прокси для обхода DNS-блокировок.
- Реализованы два способа подключения прокси под разные Telegram-клиенты: глобальный apihelper.proxy для pyTelegramBotAPI и выделенная requests.Session для сервисов на requests.
- Исключена «протечка» прокси на сторонний трафик за счёт trust_env = False на Telegram-сессии (игнорирование системных переменных окружения).
- Настройка прокси централизована в одном модуле для управления адресом и портом узла из единой точки.
AI АССИСТЕНТ
Задать вопрос по этой работе