Частая проблема в последнее время: на телефоне или в браузере Telegram работает нормально, а десктопный клиент сутками грузит одну картинку и постоянно переподключается. Обычно это связано с тем, что провайдерский DPI режет или жестко шейпит прямой MTProto-трафик. При этом веб-версии (WebK/WebZ) работают отлично, потому что они гоняют данные через WebSockets (WSS), который для провайдера выглядит как дефолтный HTTPS до web.telegram.org

Репозиторий tg-ws-proxy предлагает изящный костыль: локальный SOCKS5-прокси, который перехватывает трафик десктопного клиента и заворачивает его в WSS-соединения к дата-центрам Telegram.

Как это работает под капотом

Десктопная телега не умеет сама работать через вебсокеты, поэтому ей нужен локальный посредник.

Схема такая:

  1. Скрипт поднимает локальный SOCKS5 (по дефолту на 127.0.0.1:1080).

  2. Клиент подключается к прокси и начинает слать свой обычный обфусцированный трафик.

  3. Прокси парсит пакет MTProto obfuscation init и достает оттуда ID целевого дата-центра.

  4. Дальше скрипт устанавливает TLS-хендшейк и открывает WebSocket к нужному DC через домены вида kws{N}.web.telegram.org.

  5. Если вебсокет отваливается или отвечает редиректом (302), прокси автоматически фоллбечится на прямое TCP-соединение.

В итоге DPI видит лишь зашифрованный трафик до поддоменов telegram.org и не применяет к нему правила, написанные для блокировки MTProto.

Развертывание

Для Windows:
В релизах на GitHub лежит собранный через PyInstaller TgWsProxy.exe. Работает как приложение в трее.


Нюанс: Windows Defender часто агрится на этот экзешник, выдавая детект Wacatac. Это классический false-positive для PyInstaller, так что придется добавлять папку в исключения. Если кликнуть в трее «Открыть в Telegram», скрипт сам прокинет tg://socks линк в клиент.

Для Linux/macOS:
Гораздо проще и надежнее запустить прямо из исходников:

git clone https://github.com/Flowseal/tg-ws-proxy.git
cd tg-ws-proxy
pip install -r requirements.txt

# Запуск с дефолтными параметрами
python proxy/tg_ws_proxy.py --port 1080

Для прода или постоянного использования на рабочей станции это дело элементарно оборачивается в systemd-сервис.

sudo nano /etc/systemd/system/tg-ws-proxy.service
[Unit]
Description=Telegram WebSocket Proxy SOCKS5
After=network.target

[Service]
Type=simple
User=nobody
WorkingDirectory=/opt/tg-ws-proxy
ExecStart=/opt/tg-ws-proxy/venv/bin/python proxy/tg_ws_proxy.py --port 1080
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now tg-ws-proxy
sudo systemctl status tg-ws-proxy

Конфигурация и дебаг

В консольном режиме можно жестко задать маршрутизацию для конкретных дата-центров через аргумент --dc-ip. Например, --dc-ip 2:149.154.167.220. Это спасает, когда встроенные в скрипт IP-адреса попадают под раздачу или перестают отвечать.

В Windows-версии все эти параметры лежат в обычном JSON-конфиге по пути %APPDATA%/TgWsProxy.

Если коннект не поднимается, запускаем скрипт с флагом -v. В консоль посыпется дамп (уровень DEBUG), по которому сразу понятно, на каком этапе отваливается TLS или почему не проходит MTProto init.

Когда это реально нужно?

Это не серебряная пуля от Чебурнета.
Если РКН или ваш местный регулятор глушит домены *.telegram.org на уровне SNI или банит IP-адреса целиком, этот скрипт не поможет. В таких сценариях выход один это арендовать VPS и поднимать полноценный туннель (тот же VLESS с Reality).

Но если проблема заключается именно в троттлинге тяжелых файлов (провайдер не банит IP, но целенаправленно «душит» сессии по паттернам протокола), то локальный SOCKS5 с оберткой в WSS отлично решает проблему без необходимости гонять весь трафик через внешние серверы.

Если есть идеи для разбора, нашёл ошибку
или хочешь предложить тему — пиши на
aleksandr@murzin.digital Отвечаю.

Комментарии (3)


  1. TsarS
    17.03.2026 12:37

    Вы же два часа назад этот пост публиковали https://habr.com/ru/articles/1011260/


  1. cyberscoper Автор
    17.03.2026 12:37

    @moderator , от тестировать работу, сделать личные скрины и перепечатать репозиторий это не означает использование нейросетей.

    Поэтому не уверен насколько тут уместно ваше предположение что текст — сгенерированный.


    1. cyberscoper Автор
      17.03.2026 12:37