Telegram - один из самых популярных мессенджеров, и многие пользователи macOS и других ОС заметили что в последнее время загрузка фото и видео работает медленнее. Причина часто кроется не в скорости интернета, а в особенностях работы TCP-соединений с серверами Telegram.

Изучая эту проблему, я обнаружил интересный подход: перенаправление трафика через WebSocket Secure (WSS) соединения может значительно ускорить загрузку медиафайлов и работу телеграма. WebSocket работает поверх TLS и имеет оптимизации для долгоживущих соединений, что особенно важно для мессенджеров.

Однако готового решения для macOS не существовало. Так родилась идея создать нативное приложение, которое будет работать в фоне, не отвлекать меня и при этом эффективно ускорять Telegram.

Почему это работает?

Стандартный TCP-трафик Telegram может подвергаться:

  • Throttling'у со стороны провайдеров (намеренное замедление)

  • Потере пакетов на длинных маршрутах

  • Высокой задержке из-за алгоритмов контроля перегрузки

WebSocket поверх TLS (WSS) использует порт 443 - тот же, что и HTTPS-трафик. Это дает несколько преимуществ:

  1. Обход throttling'а - провайдеры реже ограничивают HTTPS-трафик

  2. Мультиплексирование - несколько соединений в одном TCP-потоке

  3. Меньше накладных расходов на установку соединения

Как это работает

Принцип работы основан на перехвате SOCKS5-трафика от Telegram Desktop и его перенаправлении через WebSocket-соединения.

  1. Локальный SOCKS5-сервер поднимается на 127.0.0.1:1080

  2. Анализ трафика - прокси перехватывает подключения к IP-адресам Telegram

  3. Определение DC - из MTProto obfuscation init-пакета извлекается ID дата-центра

  4. WebSocket-соединение - устанавливается TLS-соединение к соответствующему DC через домены kws{N}.web.telegram.org

  5. Fallback-механизм - если WebSocket недоступен (302 redirect), происходит автоматическое переключение на прямое TCP-соединение

Архитектура приложения

Проект состоит из двух основных компонентов:

1. Ядро прокси

Реализует SOCKS5-сервер, WebSocket-клиент и всю логику маршрутизации. Главные особенности ядра:

  • Асинхронность - на базе asyncio для максимальной производительности

  • Пул соединений - переиспользование WebSocket-соединений для ускорения

  • Автоматическое определение DC - без необходимости ручной настройки

2. GUI-обертка

Обеспечивает нативную интеграцию с macOS:

  • Иконка в системном трее

  • Управление прокси - запуск, остановка, перезапуск

  • Настройки - изменение порта, добавление DC-серверов

Ключевые решения

Пул WebSocket-соединений

Для ускорения повторных подключений реализован пул с предварительным прогревом:

class _WsPool:
    def __init__(self):
        self._idle: Dict[Tuple[int, bool], list] = {}
        self._refilling: Set[Tuple[int, bool]] = set()
    
    async def warmup(self, dc_opt):
        # Предварительное подключение ко всем DC
        for dc, target_ip in dc_opt.items():
            for is_media in (False, True):
                self._schedule_refill((dc, is_media), target_ip)

Это позволяет сократить задержку при первом подключении к дата-центру.

Автоматическое определение DC

Прокси анализирует первые 64 байта MTProto-соединения и извлекает ID дата-центра. Это критически важно для правильной маршрутизации, так как разные DC могут находиться в разных географических регионах.

Fallback на TCP

Если WebSocket по какой-то причине недоступен, прокси автоматически переключается на прямое TCP-соединение. Это гарантирует работоспособность даже при проблемах с WebSocket-инфраструктурой Telegram.

Почему это удобно?

Никаких терминалов - установка как обычной программы, Никаких настроек - все работает сразу после установки, Бесплатно - полностью открытый исходный код

Заключение

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

Ссылки: