TL;DR: Написал open-source десктопное приложение TG Unblock на Rust, которое в один клик обходит блокировку Telegram через локальный WebSocket-прокси. Трафик заворачивается в обычный HTTPS к web.telegram.org — DPI не видит MTProto, провайдер не может шейпить. Без VPN, без серверов, без абонентки. Код на GitHub — by-sonic/tglock.
Предыстория: почему GoodbyeDPI не спасает
С весны 2025 года Telegram в России стал работать, мягко говоря, через боль. Сообщения доходят по 10 секунд, медиа не грузятся, звонки рвутся. Классическая картина: провайдер + DPI = страдания.
Первое, что приходит в голову — GoodbyeDPI. Запустил, пакеты фрагментируются, DPI не узнаёт MTProto... и вроде работает. Но:
Пинг 200+ мс — при норме 40–60
Постоянные переподключения — DPI переобучается и режет соединения
IP-шейпинг — провайдер троттлит весь трафик к п��дсетям Telegram (149.154.x.x, 91.108.x.x)
GoodbyeDPI обманывает DPI на уровне пакетов, но не решает проблему IP-шейпинга. Если провайдер тупо режет скорость ко всем IP Telegram — хоть как фрагментируй, будет медленно.
VPN — вариант. Но:
Платные стоят денег и сливают скорость
Бесплатные сливают данные
Не все работают стабильно
Для одного Telegram гонять весь трафик через VPN — оверкилл
Нужно решение, которое маскирует сам факт подключения к Telegram, а не просто прячет протокол.
Идея: WebSocket-туннель через web.telegram.org
Я провёл серию тестов. Прямое подключение к серверам Telegram (149.154.167.51:443) — либо таймаут, либо 200+ мс. А вот web.telegram.org отвечает стабильно за 50–80 мс через HTTPS. Провайдер его не трогает — это же «обычный сайт».
И тут я полез в документацию MTProto и нашёл золотую жилу:
WebSocket: Implementation of the WebSocket transport is pretty much the same as with TCP... all data received and sent through WebSocket messages is to be treated as a single duplex stream of bytes, just like with TCP.
Telegram официально поддерживает WebSocket-транспорт. Серверы pluto.web.telegram.org, venus.web.telegram.org и т.д. — это не просто веб-клиент. Это полноценные точки входа в сеть Telegram через WSS.
Схема:
Telegram Desktop │ ▼ SOCKS5 ┌──────────────────┐ │ TG Unblock │ 127.0.0.1:1080 │ WS-прокси │ └──────┬───────────┘ │ ├── IP Telegram? ──► WSS к {dc}.web.telegram.org/apiws │ (провайдер видит: HTTPS к web.telegram.org) │ └── Другой IP? ────► Прямой TCP (без изменений)
Провайдер видит:
Соединение к
venus.web.telegram.orgпо порту 443Обычный TLS/HTTPS трафик
Никакого MTProto
DPI видит:
Ничего подозрительного
Обычный WebSocket внутри HTTPS
Результат:
Полная скорость — провайдер не шейпит web.telegram.org
Нет переподключений — DPI не трогает HTTPS
Нулевая задержка — нет промежуточных серверов, трафик идёт напрямую к Telegram
Реализация: Rust, SOCKS5, WebSocket
Почему Rust?
Не Electron. Не Python. Не Node.js. Rust. Потому что:
Один бинарник ~6 МБ, без зависимостей
Нативная скорость — прокси не должен добавлять задержку
Async I/O через tokio — тысячи одновременных соединений
Компилируется, запускается, работает
Архитектура
Приложение состоит из 4 модулей:
Модуль |
Что делает |
|---|---|
|
GUI на egui + управление прокси |
|
SOCKS5-сервер + WebSocket-туннель |
|
DNS-настройка, системные утилиты |
|
Сетевая диагностика |
SOCKS5 → WebSocket: как это работает
Когда Telegram Desktop подключается через SOCKS5-прокси, происходит следующее:
1. SOCKS5 handshake
// Клиент: [0x05, 0x01, 0x00] — SOCKS5, 1 метод, no auth // Сервер: [0x05, 0x00] — принято // Клиент: [0x05, 0x01, 0x00, 0x01, IP, PORT] — CONNECT к IP:PORT
2. Определение DC по IP
Telegram использует фиксированные подсети для каждого Data Center. Из документации:
fn telegram_dc(ip: Ipv4Addr) -> Option<u8> { let o = ip.octets(); match (o[0], o[1]) { (149, 154) => Some(match o[2] { 160..=163 => 1, // DC1 164..=167 => 2, // DC2 168..=171 => 3, // DC3 172..=175 => 1, // DC1 alt _ => 2, }), (91, 108) => Some(match o[2] { 56..=59 => 5, // DC5 8..=11 => 3, // DC3 12..=15 => 4, // DC4 _ => 2, }), (91, 105) => Some(2), (185, 76) => Some(2), _ => None, } }
3. WebSocket-туннель
Каждый DC имеет именованный WebSocket-эндпоинт (имена из официальной документации Telegram):
DC |
Имя |
URL |
|---|---|---|
1 |
Pluto |
|
2 |
Venus |
|
3 |
Aurora |
|
4 |
Vesta |
|
5 |
Flora |
|
Обязательный заголовок (из доки Telegram): Sec-WebSocket-Protocol: binary.
let mut request = ws_url.as_str().into_client_request()?; request.headers_mut().insert( "Sec-WebSocket-Protocol", "binary".parse()?, ); let (ws, _) = tokio_tungstenite::connect_async_tls_with_config( request, None, false, Some(connector), ).await?;
4. Двунаправленный relay
Ключевая цитата из документации Telegram:
All data received and sent through WebSocket messages is to be treated as a single duplex stream of bytes, just like with TCP.
Это значит, что нам не нужно парсить MTProto. Просто relay байтов: TCP → WebSocket binary frame, WebSocket binary frame → TCP.
let up = async { let mut buf = vec![0u8; 32768]; loop { match tcp_rx.read(&mut buf).await { Ok(0) => break, Ok(n) => { let msg = Message::Binary(buf[..n].to_vec()); if ws_tx.send(msg).await.is_err() { break; } } Err(_) => break, } } }; let down = async { while let Some(Ok(msg)) = ws_rx.next().await { if let Message::Binary(data) = msg { if tcp_tx.write_all(&data).await.is_err() { break; } } } }; tokio::select! { _ = up => {}, _ = down => {} }
GUI: egui, не Electron
Нативный GUI через egui / eframe. Никакого браузера, никакого DOM, никакого JavaScript. Вся отрисовка — immediate mode, 60 FPS.
Кнопка «Запустить обход» делает:
Меняет DNS на Cloudflare (1.1.1.1) — обходит DNS-блокировку
Запускает SOCKS5-прокси на 127.0.0.1:1080
Предлагает автонастройку Telegram через
tg://socks?server=127.0.0.1&port=1080
Кнопка «Настроить автоматически» — открывает Telegram Desktop с готовой конфигурацией прокси. Один клик.
Технические детали, кото��ые пришлось решить
Проблема 1: Не-Telegram трафик
Если Telegram Desktop пускает через SOCKS5 не только MTProto, но и запросы к CDN, стикер-серверам, обновлениям — их нельзя заворачивать в WebSocket. Решение: проверяем IP по маппингу Telegram-подсетей. Telegram IP → WebSocket. Всё остальное → прямой TCP passthrough.
Проблема 2: Определение DC
Telegram Desktop использует obfuscated2 транспорт. Первые 64 байта — зашифрованный хендшейк, в котором закодирован DC ID. Парсить его — целый проект.
Решение проще: определяем DC по destination IP. Telegram использует фиксированные подсети для каждого DC — маппинг стабильный и документированный.
Проблема 3: TLS к WebSocket-эндпоинтам
WebSocket-соединение идёт через WSS (TLS). Используем native-tls — системные сертификаты Windows, без привязки к OpenSSL.
let connector = tokio_tungstenite::Connector::NativeTls( native_tls::TlsConnector::new()?, );
Проблема 4: Graceful shutdown
При остановке прокси нужно:
Сбросить DNS обратно на DHCP
Корректно закрыть все WebSocket-соединения
Не оставить Telegram без связи
Используем AtomicBool для флага остановки — все задачи проверяют его и завершаются.
Сравнение с альтернативами
GoodbyeDPI |
Zapret |
VPN |
TG Unblock |
|
|---|---|---|---|---|
Подход |
Фрагментация пакетов |
Desync пакетов |
Туннель через сервер |
WebSocket-туннель |
DPI видит MTProto? |
Нет |
Нет |
Нет |
Нет |
IP-шейпинг? |
Не обходит |
Не обходит |
Обходит |
Обходит |
Нужен сервер? |
Нет |
Нет |
Да |
Нет |
Скорость |
Зависит от DPI |
Зависит от DPI |
Зависит от сервера |
Полная |
Весь трафик? |
Нет |
Нет |
Да |
Только Telegram |
Стоимость |
Бесплатно |
Бесплатно |
$3–10/мес |
Бесплатно |
Стек
Технология |
Зачем |
|---|---|
Rust |
Скорость, один бинарник, без зависимостей |
egui / eframe |
Нативный GUI без браузера |
tokio |
Async I/O, тысячи соединений |
tokio-tungstenite |
WebSocket-клиент с TLS |
native-tls |
Системные сертификаты Windows |
GitHub Actions |
CI/CD — автобилд при новом теге |
Цифры
5 DC — полный маппинг всех Telegram Data Center
1 бинарник — ~6 МБ, без зависимостей
0 серверов — всё работает локально
0₽ — полностью бесплатно и open-source
1 клик — от запуска до работающего Telegram
Как попробовать
Скачать готовый .exe
Скачайте
tg_unblock.exeиз ReleasesЗапустите (желательно от администратора — для DNS)
Нажмите «Запустить обход»
Нажмите «Настроить автоматически»
В Telegram нажмите «Подключить»
Собрать из исходников
git clone https://github.com/by-sonic/tglock.git cd tglock cargo build --release # Бинарник: target/release/tg_unblock.exe
Что дальше
Автоопределение DC из obfuscated2 — парсинг первых 64 байт для точного маппинга
Fallback на GoodbyeDPI — если WebSocket-эндпоинт недоступен
Linux / macOS — porability через tokio + egui (уже почти готово)
Статистика — скорость, задержка, количество туннелей в реальном времени
Вместо заключения
Telegram — это не просто мессенджер. Для миллионов людей это рабочий инструмент, канал связи, источник информации. Когда он работает через боль — страдают все.
GoodbyeDPI — отличный инструмент, но у него есть потолок. Когда DPI побеждён, а трафик всё равно шейпится — нужен другой подход. WebSocket-туннель через web.telegram.org — это как проехать мимо камеры на легальной машине вместо того, чтобы заклеивать номера.
Код полностью открыт. Если пригодился — поставьте звезду на GitHub. Если нашли баг — PR приветствуются.
GitHub: github.com/by-sonic/tglock
by sonic
Комментарии (154)

sci_nov
21.03.2026 13:38Интересно, теперь на каждый заблокированный сервис своё приложение деблокиратор?

rogoz
21.03.2026 13:38Непонятно, у меня web.telegram.org наглухо заблочен задолго до начала блокировки самого приложения телеграма.

koltykov
21.03.2026 13:38Причем не только веб. API ендпоинт http://api.telegram.org/ тоже заблочили.
На днях перестали отчеты и логи приходить с CRM и серверов. Зашел на VPS, сделал curl к api.telegram.org - ага фигушки...
Вот думаю что делать. Для логов у меня отдельный бот был, для каждой VPS отдельная ветка. То же самое для отчетов по CRM - отдельный бот и куча веток. Все структурировано и понятно.
На макс не проблема то перевести, только будет куча ботов и есть маленькая проблемка - на одного ИП/ООО можно максимум 5 ботов. Это бред...
Triton5
21.03.2026 13:38Можно сделать прокси через то, что может работать с api телеграм:) Например Cloudflare или (внезапно) Яндекс Облако.
ЗЫ Кстати:) Господа, приму в дар данные API для разговорного бота на Максе, сейчас он работает в телеграме (он просто использует бесплатные нейросети с openrouter) а то делать ИП ради бесплатного бота это как-то слишком:)
(я понимаю, что никто не даст, ну а вдруг:)
Flux82
21.03.2026 13:38Держатесь подальше от скама. Вы надеетесь развиваться под крылом у стариков, которые тащат нас в могилу? Зря. Получится этот бот, так Вас же и набутылят за то, что бот что-нибудь не то и не тому скажет.

achekalin
21.03.2026 13:38Добавлю - хотя по закону обратной силы у законов, вводящих или увеличивающих ответственность, нет, реально за пост здесь вас и нас могут спросить через пару лет, даром, что старые комменты хабр править не даёт, т.е. автор коммента, осознав своё неправильное поведение, никак не может привести свои высказывания в "приличный" вид.

Ded_Banzai
21.03.2026 13:38Есть такое понятие - длящееся правонарушение. То есть, через пару лет вводят ответственность за, скажем, этот пост и все, вы виновны задним числом. Потому что сразу после появления закона не удалили теперь уж незаконную информацию.

WantedPotato
21.03.2026 13:38Держатесь подальше от скама.
У меня тут идея появилась. Использовать СКАМ как туннель для Телеграма.
Шлется сообщение в Макс самому себе или какую-то группу где только ты. Либо второму аккаунта.
В теле сообщения зашифрованный текст.
На сервере подключается второй клиент и расшифрует сообщение.
Пересылает в телеграм.

tcapb1
21.03.2026 13:38Удивительно про Яндекс Облако. У меня в пятницу перестало работать и с Selectel и с Sweb. Пришлось ставить на сервер прокси и ещё дополнительно поднимать VPN для проброса хуков с Телеги. Помню, совсем недавно были времена, когда блокировки хостеров не касались. Интересно, долго ли проработает с Яндексом.


grvelvet
Спасибо что поделились с нами! Сейчас мы это исправим. ваш РКН.
RoasterToaster
ну наверное никто всерьез не будет предполагать, что средства обхода, связанные с прямым подключением непосредственно к доменами и ip адресами телеграмма, сколь-нибудь долго проработают.
grvelvet
Да это понятно. Сама то статья llm мусор. Но выкладывают и нормальные гайды которые чекаются "специалистами которые просто делали свою работу"
edward_freedom
когда люди научатся правильно писать название программы? Telegram -> телеграм. Разве так сложно?
RoasterToaster
И такие люди, нас, понимаешь, в носу ковыряться учат...
edward_freedom
про что скриншот?
mayorovp
про орффографию
edward_freedom
странно слышать про уроки орфографии от него, когда он даже название популярной программы не может без ошибок написать
0ka
Это даже позавчера нормально не работало бы
mukca
удивлен сколько коментов накидали статьи сгенерированной ИИ с одной целью прорекламить свой гитхаб который просто утыкан ссылками на свой платный квн
sergopl
Очень странно везде находить ИИ. Прямо демонизация какая-то...
01Andrew01
— moment
opusmode
Структура, цифры, уточнения и длинные дефисы всё палят
ivvi
Чем вам длинные тире помешали?
Использовать длинные тире (длинных дефисов не бывает), там где должно быть именно тире — это правило типографики русского языка.
Тоже всегда использую длинные тире, когда пишу документацию.
Petroleum_man
в этом тексте с десяток признаков ии, какой смысл оправдывать один из них
ivvi
Такой, что прямо на наших глазах сформировался новый стандарт подготовки текстов: написать текст в чём угодно и где удобно, а затем скормить его ЛЛМке с целью проверки и форматирования.
Я вам больше скажу. Лично я, например, ОЧЕНЬ приветствую такой подход. Потому что вы не представляете, сколько килограммов боли и кринжа я словил за карьеру, почти ежедневно работая с разнообразной документацией, в том числе свеженаписанной коллегами. Это вам всё едино -- что дефис, что тире, а люди которые в теме орфографии и пунктуации и профессионально работают с текстами, ежедневно по многу-многу раз ломают глаза о все эти косяки, ошибки, очепятки и прочая. Так что, автопроверка и подсветка в Ворде, grammar-плагины в браузерах, конфлюенсах, а теперь и аишечка - это большое благое дело. Лишь бы люди пользовались.
2medic
Что же делать? Пойду отредактирую все свои посты по всему интернету с начала нулевых. Использую тире всегда и везде. И ёлочки, и даже … одним знаком. Я — нейросеть.
А ещё люблю списки, таблички, выделения, структуру и вообще вот это всё. Уже боюсь писать. Больше читаю. А то будет как здесь.
ivvi
Браво, коллега.
achekalin
Как «смело» и «открыто» называют это состояние в своих «новостях» уважаемые «редакторы» «службы новостей Хабра», это вовсе даже не блокировка, а — «сетевой сбой». Нормальное количество кавычек, правда, получилось? https://habr.com/ru/news/1012488/
Кстати, а нельзя в РКН подать жалобу, что, раз РКН официально не указывала, что блокировка Телеграмма началась, то просим разобраться с ухудшением доступности этого ресурса, как социально значимого, у многих провайдеров (список прилагается) России?
Zakatalah
Пойди пожалуйся.
На НЕблокировку Ютуба тоже вон ходили жаловаться. И как успехи ?
Жаловаться режиму что он нарушает собственные законы бесполезно. Режим надо свергать.
Sirion
А за такие комменты нынче не сажают случайно?
eismann3636
Только тех, у кого свергалка хоть как-то выросла
highbility
Хорошая попытка, товарищ майор
UFO_01
Задам вопрос который всегда игнорируют диванные революционеры. Вы как народ поднимать собрались, с текущим-то уровнем социального доверия и риском сесть надолго по политической статье (можете почитать к чему это приводит) или попасть в окоп? Да и некому народ поднимать, если вы не заметили, у нас политическое пространство зачистили более чем полностью. А стихийный бунт без какой-либо поддержки это самоубийство.
sektet
Тоже об этом думал. Есть вариант - саботировать все, что касается политической жизни, ни ходить на выборы, встречи, всякие конференции, прямые линии.
UFO_01
Если честно тоже довольно наивная позиция, потому что это ни к чему не приведёт. Как будто в текущей ситуации государству нужно ваше участие или одобрение. На выборах ещё проще тогда будет набрать голоса за счёт урапатриотов, на конференции и прямые линии как обычно созовут бюджетников. Вы этим тихим саботажем наоборот государству подарок сделаете, потому что государству от вас нужно чтобы вы молчали, платили налоги да товары покупали, такая вот "экономическая единица без права голоса".
sergey-b
Можно. Написал. Жду ответа с 18-го января.
alexl06
Уже исправили ). Не работает.