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 модулей:

Модуль

Что делает

main.rs

GUI на egui + управление прокси

ws_proxy.rs

SOCKS5-сервер + WebSocket-туннель

bypass.rs

DNS-настройка, системные утилиты

network.rs

Сетевая диагностика

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

wss://pluto.web.telegram.org/apiws

2

Venus

wss://venus.web.telegram.org/apiws

3

Aurora

wss://aurora.web.telegram.org/apiws

4

Vesta

wss://vesta.web.telegram.org/apiws

5

Flora

wss://flora.web.telegram.org/apiws

Обязательный заголовок (из доки 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.

Кнопка «Запустить обход» делает:

  1. Меняет DNS на Cloudflare (1.1.1.1) — обходит DNS-блокировку

  2. Запускает SOCKS5-прокси на 127.0.0.1:1080

  3. Предлагает автонастройку 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

  1. Скачайте tg_unblock.exe из Releases

  2. Запустите (желательно от администратора — для DNS)

  3. Нажмите «Запустить обход»

  4. Нажмите «Настроить автоматически»

  5. В 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)


  1. grvelvet
    21.03.2026 13:38

    Спасибо что поделились с нами! Сейчас мы это исправим. ваш РКН.


    1. RoasterToaster
      21.03.2026 13:38

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


      1. grvelvet
        21.03.2026 13:38

        Да это понятно. Сама то статья llm мусор. Но выкладывают и нормальные гайды которые чекаются "специалистами которые просто делали свою работу"


      1. edward_freedom
        21.03.2026 13:38

        когда люди научатся правильно писать название программы? Telegram -> телеграм. Разве так сложно?


        1. RoasterToaster
          21.03.2026 13:38

          И такие люди, нас, понимаешь, в носу ковыряться учат...


          1. edward_freedom
            21.03.2026 13:38

            про что скриншот?


            1. mayorovp
              21.03.2026 13:38

              про орффографию


              1. edward_freedom
                21.03.2026 13:38

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


    1. 0ka
      21.03.2026 13:38

      Это даже позавчера нормально не работало бы


    1. mukca
      21.03.2026 13:38

      удивлен сколько коментов накидали статьи сгенерированной ИИ с одной целью прорекламить свой гитхаб который просто утыкан ссылками на свой платный квн


      1. sergopl
        21.03.2026 13:38

        Очень странно везде находить ИИ. Прямо демонизация какая-то...


        1. 01Andrew01
          21.03.2026 13:38

          — moment


        1. opusmode
          21.03.2026 13:38

          Структура, цифры, уточнения и длинные дефисы всё палят


          1. ivvi
            21.03.2026 13:38

            Чем вам длинные тире помешали?

            Использовать длинные тире (длинных дефисов не бывает), там где должно быть именно тире — это правило типографики русского языка.

            Тоже всегда использую длинные тире, когда пишу документацию.


            1. Petroleum_man
              21.03.2026 13:38

              в этом тексте с десяток признаков ии, какой смысл оправдывать один из них


              1. ivvi
                21.03.2026 13:38

                Такой, что прямо на наших глазах сформировался новый стандарт подготовки текстов: написать текст в чём угодно и где удобно, а затем скормить его ЛЛМке с целью проверки и форматирования.

                Я вам больше скажу. Лично я, например, ОЧЕНЬ приветствую такой подход. Потому что вы не представляете, сколько килограммов боли и кринжа я словил за карьеру, почти ежедневно работая с разнообразной документацией, в том числе свеженаписанной коллегами. Это вам всё едино -- что дефис, что тире, а люди которые в теме орфографии и пунктуации и профессионально работают с текстами, ежедневно по многу-многу раз ломают глаза о все эти косяки, ошибки, очепятки и прочая. Так что, автопроверка и подсветка в Ворде, grammar-плагины в браузерах, конфлюенсах, а теперь и аишечка - это большое благое дело. Лишь бы люди пользовались.


          1. 2medic
            21.03.2026 13:38

             длинные дефисы всё палят

            Что же делать? Пойду отредактирую все свои посты по всему интернету с начала нулевых. Использую тире всегда и везде. И ёлочки, и даже … одним знаком. Я — нейросеть.

            А ещё люблю списки, таблички, выделения, структуру и вообще вот это всё. Уже боюсь писать. Больше читаю. А то будет как здесь.


            1. ivvi
              21.03.2026 13:38

              Браво, коллега.


    1. achekalin
      21.03.2026 13:38

      Как «смело» и «открыто» называют это состояние в своих «новостях» уважаемые «редакторы» «службы новостей Хабра», это вовсе даже не блокировка, а — «сетевой сбой». Нормальное количество кавычек, правда, получилось? https://habr.com/ru/news/1012488/

      Кстати, а нельзя в РКН подать жалобу, что, раз РКН официально не указывала, что блокировка Телеграмма началась, то просим разобраться с ухудшением доступности этого ресурса, как социально значимого, у многих провайдеров (список прилагается) России?


      1. Zakatalah
        21.03.2026 13:38

        Пойди пожалуйся.

        На НЕблокировку Ютуба тоже вон ходили жаловаться. И как успехи ?

        Жаловаться режиму что он нарушает собственные законы бесполезно. Режим надо свергать.


        1. Sirion
          21.03.2026 13:38

          А за такие комменты нынче не сажают случайно?


          1. eismann3636
            21.03.2026 13:38

            Только тех, у кого свергалка хоть как-то выросла


        1. highbility
          21.03.2026 13:38

          Хорошая попытка, товарищ майор


        1. UFO_01
          21.03.2026 13:38

          Задам вопрос который всегда игнорируют диванные революционеры. Вы как народ поднимать собрались, с текущим-то уровнем социального доверия и риском сесть надолго по политической статье (можете почитать к чему это приводит) или попасть в окоп? Да и некому народ поднимать, если вы не заметили, у нас политическое пространство зачистили более чем полностью. А стихийный бунт без какой-либо поддержки это самоубийство.


          1. sektet
            21.03.2026 13:38

            Тоже об этом думал. Есть вариант - саботировать все, что касается политической жизни, ни ходить на выборы, встречи, всякие конференции, прямые линии.


            1. UFO_01
              21.03.2026 13:38

              Если честно тоже довольно наивная позиция, потому что это ни к чему не приведёт. Как будто в текущей ситуации государству нужно ваше участие или одобрение. На выборах ещё проще тогда будет набрать голоса за счёт урапатриотов, на конференции и прямые линии как обычно созовут бюджетников. Вы этим тихим саботажем наоборот государству подарок сделаете, потому что государству от вас нужно чтобы вы молчали, платили налоги да товары покупали, такая вот "экономическая единица без права голоса".


      1. sergey-b
        21.03.2026 13:38

        Можно. Написал. Жду ответа с 18-го января.


    1. alexl06
      21.03.2026 13:38

      Уже исправили ). Не работает.


  1. sci_nov
    21.03.2026 13:38

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


  1. rogoz
    21.03.2026 13:38

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


    1. koltykov
      21.03.2026 13:38

      Причем не только веб. API ендпоинт http://api.telegram.org/ тоже заблочили.
      На днях перестали отчеты и логи приходить с CRM и серверов. Зашел на VPS, сделал curl к api.telegram.org - ага фигушки...
      Вот думаю что делать. Для логов у меня отдельный бот был, для каждой VPS отдельная ветка. То же самое для отчетов по CRM - отдельный бот и куча веток. Все структурировано и понятно.
      На макс не проблема то перевести, только будет куча ботов и есть маленькая проблемка - на одного ИП/ООО можно максимум 5 ботов. Это бред...


      1. Triton5
        21.03.2026 13:38

        Можно сделать прокси через то, что может работать с api телеграм:) Например Cloudflare или (внезапно) Яндекс Облако.

        ЗЫ Кстати:) Господа, приму в дар данные API для разговорного бота на Максе, сейчас он работает в телеграме (он просто использует бесплатные нейросети с openrouter) а то делать ИП ради бесплатного бота это как-то слишком:)
        (я понимаю, что никто не даст, ну а вдруг:)


        1. Flux82
          21.03.2026 13:38

          Держатесь подальше от скама. Вы надеетесь развиваться под крылом у стариков, которые тащат нас в могилу? Зря. Получится этот бот, так Вас же и набутылят за то, что бот что-нибудь не то и не тому скажет.


          1. achekalin
            21.03.2026 13:38

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


            1. Ded_Banzai
              21.03.2026 13:38

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


              1. Skipy
                21.03.2026 13:38

                И никого не волнует, что технической возможности для удаления незаконной информации вас лишили всё те же люди, только немного раньше.


                1. ManulVRN
                  21.03.2026 13:38

                  "Эти увертки не помогут, начинайте давать признательные показания" /s


          1. Flux82
            21.03.2026 13:38

            P.S. За этот комментарий мне слили карму в минус. Похоже, что на Хабр уже завезли ферму ботов.


            1. pythe
              21.03.2026 13:38

              Где вы увидели "слив"?


              1. mayorovp
                21.03.2026 13:38

                Тут:


          1. WantedPotato
            21.03.2026 13:38

            Держатесь подальше от скама.

            У меня тут идея появилась. Использовать СКАМ как туннель для Телеграма.

            1. Шлется сообщение в Макс самому себе или какую-то группу где только ты. Либо второму аккаунта.

            2. В теле сообщения зашифрованный текст.

            3. На сервере подключается второй клиент и расшифрует сообщение.

            4. Пересылает в телеграм.


        1. tcapb1
          21.03.2026 13:38

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