Маршрутизация трафика 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 АССИСТЕНТ

Задать вопрос по этой работе