Никита Sonic b06272437c fix(gui): просить программный рендер, чтобы окно создавалось без 3D (#28)
Интерфейс построен на системном WebView, а тот без 3D-ускорения окно не
создаёт. Отсюда весь класс жалоб: не стартует в виртуалке, не стартует с
дефолтным драйвером Microsoft, не стартует без монитора. Диагноз в #17 дал
@de4me: в VirtualBox приложение запускается только после включения галочки
«Включить ускорение 3D».

Перед стартом Tauri TGLock теперь сам запрашивает программный рендер:
- Windows: WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS с --disable-gpu
  и --disable-gpu-compositing;
- Linux: WEBKIT_DISABLE_COMPOSITING_MODE и WEBKIT_DISABLE_DMABUF_RENDERER;
- macOS: не требуется, WebKit сам уходит в программный рендер.

Для панели со статусом программный рендер не стоит ничего заметного, поэтому
он выбран значением по умолчанию, а не аварийным режимом. Уже заданные
оператором переменные не перезаписываются, TGLOCK_FORCE_GPU=1 отключает
механизм целиком.

Логика вынесена в чистую функцию software_rendering_vars и покрыта четырьмя
тестами: значение по умолчанию, отключение через TGLOCK_FORCE_GPU, уважение
чужой переменной и правильный набор ключей на каждой платформе.

Версия поднята до 2.0.0-beta.2 в Cargo.toml, package.json и tauri.conf.json:
нужен тег, чтобы в релиз попали и tglock-cli, и этот фикс.

README получил отдельный вопрос в FAQ про «окно не появляется»,
ARCHITECTURE_V2.md — обновлённый пункт в Current limitations.

Co-authored-by: by-sonic <171230345+by-sonic@users.noreply.github.com>
2026-07-30 13:40:04 +03:00

RoseVPN — попробовать бесплатно в Telegram

Быстрый VPN для России — YouTube без буферизации, Discord/Instagram/ChatGPT снова работают.
Подключение в Telegram через @rosevpnru_bot — бесплатный пробный период, без регистрации, без карты.

YouTube — без буферов Discord — голос работает Instagram — открывается ChatGPT — доступен


🔓 TGLock

Обход блокировки Telegram через WebSocket-туннель

Один клик. Без VPN. Без серверов. Без подписки.

Скачать последний релиз Всего загрузок GitHub stars

Windows macOS Linux Rust MIT License

Telegram стал тормозить или перестал открываться? Запусти TGLock — и мессенджер снова работает. Не нужны VPN, прокси-серверы, абонентская плата или регистрация.

Новый интерфейс TGLock


🤔 Что это и зачем

TGLock — это локальный прокси на твоём компьютере: принимает и MTProto, и SOCKS5. Он перехватывает соединения Telegram, заворачивает их в WebSocket и отправляет на веб-инфраструктуру Telegram — по нескольким маршрутам сразу, переключаясь на следующий, если текущий перестал отвечать. Провайдер видит обычный HTTPS.

Кому подойдёт:

  • 📱 Telegram открывается через раз, сообщения уходят с задержкой, фото и видео не грузятся
  • 🛡 GoodbyeDPI, Zapret или ByeDPI больше не помогают — провайдер шейпит по IP
  • 🍎 Нужен графический интерфейс под macOS
  • 💻 Нужно решение для Windows, macOS или Linux без подписок и без своего сервера
  • 🖥 Нужен вариант для сервера или машины без монитора — для этого есть tglock-cli

Чего TGLock не делает — честно, чтобы не тратить твоё время:

  • Голосовые и видеозвонки. Они идут по UDP, а TGLock проксирует только TCP. Со звонками ничего не изменится
  • Всё, кроме Telegram. YouTube, Discord, Instagram, ChatGPT работать не начнут: TGLock разворачивает только MTProto — протокол, который больше нигде не используется
  • Android и iOS. Своего приложения нет. Телефон можно подключить к TGLock на компьютере через LAN-режим

Чем отличается от VPN: TGLock работает только с Telegram. Остальной трафик идёт напрямую — ничего не замедляется, мобильный трафик не расходуется впустую.


Скачать

👉 Последний релиз

Платформа Файл Размер
Windows 10/11 (x64) _x64-setup.exe ~2 МБ
macOS (Apple Silicon + Intel) universal .dmg ~7 МБ
Linux (x86_64) .deb ~3 МБ
Linux (x86_64, портативно) .AppImage ~79 МБ

🖥 tglock-cli — тот же туннель без графического интерфейса, одним бинарём. Нужен там, где окно просто не создаётся: сервер, контейнер, виртуалка, машина без монитора или без 3D-ускорения.

Он есть в main и собирается одной командой, а в готовые сборки релиза попадёт начиная со следующего тега:

cargo build --release --locked --no-default-features --bin tglock-cli

Подробности — ниже.

🍎 macOS: пока сборка не нотарифицирована Apple, при первом запуске может понадобиться:

xattr -cr /Applications/TGLock.app

Это снимает карантин Gatekeeper с приложения, скачанного из GitHub.


🚀 Как пользоваться

  1. Скачай и запусти приложение для своей системы.
  2. Нажми «Включить защиту».
  3. TGLock откроет Telegram и предложит подключить локальный MTProto-прокси.
  4. Telegram работает. Окно TGLock можно свернуть.

Ручная настройка (если автоматическая не сработала)

Telegram → Настройки → Продвинутые → Тип соединения → Использовать проксиSOCKS5

  • Сервер: 127.0.0.1
  • Порт: 1080

🏠 LAN-режим — один прокси на всю квартиру

В окне TGLock включи галочку LAN — приложение начнёт слушать на 0.0.0.0. Все устройства в домашней сети (телефон, планшет, ноутбук, телевизор) смогут подключиться к <IP-компьютера>:1080 и тоже получить рабочий Telegram.

Ссылку tg://proxy с уже подставленным адресом TGLock открывает сам при включении — её достаточно переслать себе в Telegram и открыть на телефоне. Если нужен адрес руками: ipconfig на Windows, ip a на Linux, ifconfig на macOS.

Удобно, если дома один компьютер всегда включён — он становится «домашним Telegram-роутером».

В LAN-режиме TGLock пропускает только адреса Telegram. Открытым SOCKS5-прокси для всего интернета он при этом не становится — иначе им бы воспользовались не только твои устройства.

🖥 Без графического интерфейса: tglock-cli

Для сервера, виртуалки, контейнера и машины без монитора или без 3D-ускорения. Это отдельный бинарь, в котором нет ни Tauri, ни системного WebView — там, где окно просто не создаётся, CLI работает.

tglock-cli                                # 127.0.0.1:1080, только для этого компьютера
tglock-cli --lan                           # 0.0.0.0:1080, только адреса Telegram
tglock-cli --bind 10.0.0.5 --port 1443     # свой адрес и порт
tglock-cli --worker my-name.workers.dev    # резервный маршрут через свой Cloudflare Worker
tglock-cli --help                          # все флаги

При запуске печатается готовая tg://proxy-ссылка — её можно открыть на любом устройстве в сети, чтобы Telegram настроился сам. Дальше в лог идёт по строке на каждое изменение состояния: сколько соединений, какой дата-центр, какой маршрут живой, сколько сбоев.

Прав администратора не нужно: TGLock не правит ни системный DNS, ни файл hosts — нужные адреса Telegram зашиты в маршрутах, а TLS SNI остаётся настоящим.

--lan и любой другой сетевой адрес пропускают только адреса Telegram. Обычным SOCKS5-прокси TGLock становится исключительно по явному --allow-direct, и на сетевом адресе это открытый прокси для всего интернета — включайте осознанно.

Юнит для systemd

[Unit]
Description=TGLock — Telegram через WebSocket-туннель
After=network-online.target
Wants=network-online.target

[Service]
Type=exec
ExecStart=/usr/local/bin/tglock-cli --lan --secret-file /var/lib/tglock/secret
Restart=on-failure
RestartSec=5s
StateDirectory=tglock
DynamicUser=yes
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=yes
PrivateTmp=yes
RestrictAddressFamilies=AF_INET AF_INET6

[Install]
WantedBy=multi-user.target
sudo install -m755 tglock-cli-x86_64-unknown-linux-gnu /usr/local/bin/tglock-cli
sudo systemctl enable --now tglock
journalctl -u tglock -f

--secret-file здесь обязателен, и это не украшение: секрет — половина tg://proxy-ссылки. Без файла он генерируется заново при каждом старте, и после первого же systemctl restart все настроенные клиенты перестанут подключаться. StateDirectory=tglock создаёт /var/lib/tglock с нужными правами, а сам файл пишется с режимом 600.

Остановка по systemctl stop приходит как SIGTERM — CLI закрывает туннели и выходит с нулевым кодом, а не умирает по SIGKILL.

Docker

FROM rust:1.88 AS build
WORKDIR /src
COPY . .
RUN cargo build --release --locked --no-default-features --bin tglock-cli

FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates \
    && rm -rf /var/lib/apt/lists/*
COPY --from=build /src/target/release/tglock-cli /usr/local/bin/tglock-cli
EXPOSE 1080
ENTRYPOINT ["tglock-cli", "--lan", "--secret-file", "/data/secret"]
docker run -d --name tglock -p 1080:1080 -v tglock-data:/data tglock

Образу не нужны ни Node.js, ни libwebkit2gtk — только ca-certificates для проверки сертификата Telegram.


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

Telegram Desktop / mobile (через LAN)
              ▼
   MTProto или SOCKS5 (127.0.0.1:1080 либо 0.0.0.0:1080)
              ▼
        TGLock — читает первые 64 байта
                 obfuscated2 init-пакета,
                 расшифровывает AES-256-CTR,
                 достаёт номер DC
              ▼
   WSS → kws{dc}.web.telegram.org
         каскад маршрутов, см. ниже
              ▼
        Telegram Data Center
  1. Локальный прокси принимает соединения Telegram: и MTProto (по ссылке tg://proxy), и SOCKS5.
  2. Из первых 64 байт obfuscated2-пакета расшифровывается номер DC — AES-256-CTR, ключ в байтах [8..40], IV в [40..56], индекс DC — i16 в [60..62]. Отрицательное значение означает медиа-соединение.
  3. Трафик заворачивается в WebSocket к kws{dc}.web.telegram.org — это тот же домен, через который работает Telegram Web в браузере.
  4. Маршрут выбирается каскадом, и это главное отличие 2.0 от первой версии. Один домен может резолвиться в недоступный адрес, поэтому по очереди пробуются: закреплённые IP Telegram, их дублёры kwsN-1, системный DNS и — если ты его настроил — твой собственный Cloudflare Worker. Упавший маршрут уходит в cooldown с удвоением задержки, удачный запоминается для этого DC. Системный DNS и файл hosts при этом не изменяются: TCP-соединение идёт на закреплённый IP, а TLS SNI и заголовок Host остаются настоящими, поэтому сертификат Telegram проверяется как обычно.
  5. Провайдер видит TLS-handshake к web.telegram.org — легитимный HTTPS, MTProto в нём не виден.
  6. Весь остальной трафик (не-Telegram) проходит напрямую — без замедления.

Интерфейс различает три состояния и не выдаёт одно за другое: «Защита включена» — локальный порт открыт, туннеля пока нет; «Ищем новый маршрут» — попытки были неудачными, идёт перебор; «Telegram на связи» — есть установленный туннель, то есть WebSocket-рукопожатие уже прошло. Смешивание первого и третьего состояния и было основной причиной жалоб «прокси подключён, а Telegram не работает».

📖 Архитектура 2.0, различение протоколов и честный список ограниченийdocs/ARCHITECTURE_V2.md. Разбор всех issue и того, что в них было обещано зря — docs/ISSUE_AUDIT.md. Черновик статьи про переход v1 → v2 лежит в HABR.md — цифры там описывают код на момент написания, документацией он не является.


🆚 Сравнение с альтернативами

GoodbyeDPI Zapret AmneziaVPN TGLock
Подход Фрагментация пакетов TCP/UDP desync Полноценный VPN-туннель WebSocket-туннель
Обходит IP-шейпинг
macOS (GUI) Windows only только CLI
Нужен сервер / подписка ($)
Только Telegram
LAN-шаринг сложно (галочка)
Режим без GUI (tglock-cli)
Размер ~200 КБ ~5 МБ ~80 МБ 2 МБ установщик, 2 МБ CLI
Цена 0 ₽ 0 ₽ свой сервер 0 ₽

⚠ Когда TGLock не подойдёт: если заблокирован не только Telegram, а ещё YouTube, Discord, Instagram или ChatGPT — обходить каждый сервис отдельно смысла нет, нужен полноценный VPN. TGLock эту задачу не решает и решать не будет: он разворачивает только MTProto.

Звонки тоже не заработают — они по UDP, а TGLock проксирует только TCP.


Часто задаваемые вопросы

Telegram заблокировали в России — это правда?

Полностью Telegram в РФ не заблокирован, но провайдеры замедляют трафик через DPI и шейпят по IP-диапазонам Telegram DC (149.154.160175, 91.108.48, 91.108.5659 и др.). У части пользователей мессенджер открывается через раз, видео не грузится, фото уходят минутами.

TGLock решает именно это — заворачивает Telegram-трафик в HTTPS к веб-инфраструктуре Telegram, которая под шейпинг не попадает. Голосовые и видеозвонки он не лечит: они идут по UDP, а TGLock проксирует только TCP.

Это безопасно? Что с моими данными?

TGLock — локальный прокси. Он работает только на твоём компьютере и не отправляет данные третьим сторонам. Соединение идёт к серверам Telegram через их же домен web.telegram.org — тот же, что использует Telegram Web в браузере. Единственное исключение — если ты сам укажешь в настройках свой Cloudflare Worker как резервный маршрут; по умолчанию это поле пустое, и никакой сторонней инфраструктуры в схеме нет.

Кода — около 2900 строк Rust (из них ~1100 приходится на тесты) и ~380 строк TypeScript на интерфейс. Всё открыто, можно прочитать и собрать самому. Бинарники в релизах собираются из этого же исходника в GitHub Actions — логи сборки публичные.

Чем отличается от GoodbyeDPI / Zapret / ByeDPI?

GoodbyeDPI, Zapret и ByeDPI фрагментируют пакеты, чтобы DPI не распознал MTProto. Это работает, пока провайдер блокирует по содержимому. Но если шейпинг идёт по IP (а так делают большинство крупных РФ-провайдеров с 2024–2026 — Ростелеком, МТС, Билайн, Мегафон), фрагментация не помогает: пакеты всё равно идут на «нехороший» IP и троттлятся.

TGLock же отправляет трафик на web.telegram.org — обычный HTTPS-домен, который под IP-шейпинг Telegram DC не попадает.

Работает ли на iPhone или Android?

Своего приложения под Android и iOS нет — TGLock только для desktop. Есть два обходных пути:

  1. LAN-режим на компьютере. Включи галочку LAN, и в настройках Telegram на телефоне укажи прокси с IP компьютера. Работает, пока компьютер включён и телефон в той же сети.
  2. tglock-cli на своём VPS. Headless-бинарь запускается как systemd-сервис, слушает 0.0.0.0 и пропускает только адреса Telegram — тогда телефон работает откуда угодно, а не только из дома. См. раздел про CLI.

Поддержка Android обсуждается в #9, сроков нет: Tauri 2 умеет собирать под Android, но перехват трафика там делается через VpnService — это другая архитектура, а не пересборка того же кода.

Замедляет ли TGLock интернет?

Нет. Через прокси идёт только трафик Telegram (фильтрация по IP-диапазонам Telegram DC). YouTube, браузер, игры, торренты — всё это идёт напрямую и не замедляется. В этом главное отличие от VPN.

Apple ругается «приложение не проверено / нельзя открыть»

Сборка пока не подписана и не нотарифицирована — Apple Developer ID стоит $99 в год. Сними карантин Gatekeeper руками: перенеси приложение из .dmg в «Программы» и выполни в Терминале

xattr -cr /Applications/TGLock.app

После этого приложение запустится двойным кликом из Finder.

Telegram пишет «прокси не настроен» или сразу отключается

Открой TGLock — он должен показывать «ПОДКЛЮЧЕНО» и хотя бы одно активное соединение, когда Telegram пытается работать. Если соединений ноль:

  • Не запущен ли уже другой прокси на порту 1080? В TGLock можно поменять порт в настройках.
  • Антивирус/файрвол не блокирует localhost-подключения?
  • В настройках Telegram сервер указан как 127.0.0.1, не localhost — на некоторых системах это разные сетевые стеки.
  • На macOS — убедись что снят Gatekeeper (xattr -cr ...).
Приложение вообще не запускается — окно не появляется

Так проявляется отсутствие 3D-ускорения: интерфейс построен на системном WebView, а тот без ускорения окно не создаёт. Отсюда же случаи «не работает в виртуалке», «не стартует с дефолтным драйвером Microsoft» и «нет монитора».

Начиная с 2.0.0-beta.2 TGLock сам просит у WebView программный рендер, так что на таких машинах должен запускаться. Если хочется вернуть аппаратное ускорение — запусти с переменной TGLOCK_FORCE_GPU=1.

Если окно всё равно не появилось, интерфейс тебе и не нужен: возьми tglock-cli, которому WebView не требуется вообще. И напиши в #10 или #17, что именно за система — это как раз те ишью.

Порт 1080 уже занят другим приложением

В окне TGLock есть поле «Порт» — поменяй на любой свободный (например, 10800, 1081, 8888). После рестарта прокси автоматически обновит deep-link для Telegram. В настройках Telegram укажи новый порт.

А что если провайдер заблокирует и web.telegram.org?

Это реальный риск, и TGLock 2.0 к нему подготовлен настолько, насколько может.

Маршрут не один: пробуются закреплённые IP Telegram, дублёры kwsN-1 и системный DNS. Пока жив хотя бы один — туннель поднимается. Дополнительно можно указать в настройках свой Cloudflare Worker — тогда соединение пойдёт через твой домен на workers.dev, и заблокировать его провайдеру придётся отдельно.

Но честно: если веб-версию Telegram заблокируют целиком, подход исчерпает себя. TGLock держится на том, что web.telegram.org доступен, и никакой запас маршрутов этого не отменяет. В таком случае нужен полноценный VPN — это уже другая задача.

Можно ли использовать TGLock как обычный SOCKS5 для других приложений?

Смысла нет, и по умолчанию это запрещено.

TGLock определяет Telegram по IP получателя и заворачивает в WebSocket только его. Не-Telegram адреса он релеит напрямую — без шифрования, то есть никакой пользы для обхода в этом нет.

Поэтому такой релей разрешён только когда прокси слушает 127.0.0.1, где до него дотянутся лишь процессы твоего компьютера. На 0.0.0.0 и любом сетевом адресе не-Telegram запросы отклоняются: иначе LAN-режим сделал бы из твоей машины открытый прокси для всего интернета. В tglock-cli это можно переопределить флагом --allow-direct — но на сетевом адресе ты получишь именно открытый SOCKS5, так что делай это осознанно.

Где скачать новые версии? Будут ли обновления?

Все релизы — на странице GitHub Releases. При пуше тега v* GitHub Actions собирает и публикует установщики под Windows x64, macOS (universal) и Linux x64, плюс headless tglock-cli под те же три платформы. Подпишись на репозиторий (кнопка WatchCustomReleases), чтобы получать уведомления.


🛠 Стек технологий

Технология Зачем
Rust Один бинарник, нативная скорость, без runtime-зависимостей
Tauri 2 Нативная оболочка для GUI. Опциональна: за фичей gui, в CLI не входит
TypeScript + Vite Интерфейс, внутренняя навигация и строгая типизация
tokio Async I/O, обработка сигналов для корректной остановки сервиса
tokio-tungstenite WebSocket-клиент с TLS поверх native-tls
aes + ctr Расшифровка MTProto obfuscated2 init-пакета
clap Разбор аргументов tglock-cli

Ядро (src/lib.rs: разбор MTProto, каскад маршрутов, прокси) не зависит ни от Tauri, ни от оконной системы — поэтому один и тот же код обслуживает и графический интерфейс, и headless-режим.


🏗 Сборка из исходников

git clone https://github.com/by-sonic/tglock.git
cd tglock
npm ci
npm run tauri build

Результат — target/release/tglock (или tglock.exe на Windows).

Минимальная версия Rust — 1.88 (rust-version в Cargo.toml, проверяется отдельной задачей в CI). На более старых тулчейнах зависимости не соберутся: часть из них требует edition 2024.

Только CLI, без графики

cargo build --release --locked --no-default-features --bin tglock-cli

Ни Node.js, ни фронтенда, ни libwebkit2gtk для этого не нужно — при выключенной фиче gui Tauri и системный WebView в сборку не попадают вообще. Именно так CLI собирается на голом сервере.

Проверки, которые гоняет CI

cargo fmt --check
cargo clippy --all-targets -- -D warnings
cargo clippy --no-default-features --lib --bins --all-targets -- -D warnings
cargo test --all-targets
cargo test --no-default-features --lib --bins

Тестов 59: разбор obfuscated2, каскад маршрутов и его cooldown, протокольные отказы SOCKS5, устойчивость секрета к перезапуску, плюс сквозной тест туннеля против мок-сервера, который реализует сторону Telegram и проверяет, что до неё доходит ровно тот открытый текст, который отправил клиент. Единственный тест с пометкой #[ignore] — тот, что требует живой сети.

Свой релиз через GitHub Actions

Форкни репозиторий и поставь тег v*.github/workflows/release.yml соберёт установщики под Windows x64, macOS (universal, Apple Silicon + Intel) и Linux x64, а также tglock-cli под те же три платформы, и опубликует их в релизе.


🤝 Как помочь

Проект живой, PR и баг-репорты разбираются.

  • Нашёл баготкрой issue. Полезнее всего: ОС и версия, что показывает вкладка диагностики (маршрут, DC, число сбоев) и провайдер. Для tglock-cli — вывод из консоли.
  • Хочешь фичу — тоже issue. Если её нет в планах, так и будет написано, без месяцев тишины.
  • Присылаешь PR — перед отправкой прогони проверки выше, они те же, что в CI. Небольшие PR ревьюятся быстрее.
  • Не работает после релиза — это регрессия, пиши сразу, такие вещи в приоритете.

Известные ограничения, о которых не нужно открывать issue: звонки (UDP), сервисы кроме Telegram (только MTProto), Android и iOS (обсуждается в #9).


📄 Лицензия

MIT — делай что хочешь. Форки, модификации, использование в коммерческих проектах — всё разрешено. Ссылка на репозиторий приветствуется, но необязательна.


by sonic · Issues & feedback · Releases

S
Description
No description provided
Readme MIT 2.7 MiB
Languages
Rust 77.6%
CSS 9.4%
TypeScript 8.5%
JavaScript 2.5%
Python 1.8%
Other 0.2%