Никита Sonic 55653ed0bc feat(cli): headless tglock-cli, GUI behind a feature, deep test coverage (#25)
Реализует направление PR #15 поверх архитектуры 2.0. Сам PR смерджить нельзя:
он патчит src/bypass.rs, src/network.rs и src/ws_proxy.rs, которых больше нет,
и правит системный DNS — в 2.0 это не нужно, потому что адреса Telegram зашиты
в маршрутах, а SNI остаётся настоящим. Взято разделение GUI/CLI и произвольный
bind-адрес, отброшены DNS-менеджмент и проверка root: CLI не требует прав.

Closes #10, #17 — GUI не создаёт окно без 3D-ускорения, на машине без монитора
и в виртуалке. Причина в WebView под Tauri, поэтому лечится не программным
рендером, а бинарём, в котором WebView нет вовсе: при выключенной фиче gui
Tauri и фронтенд в сборку не попадают. Отдельная задача CI собирает и гоняет
CLI на голом ubuntu без Node.js и без libwebkit2gtk.

Структура:
- src/lib.rs — ядро (mtproto, proxy, transport, config), без Tauri
- src/main.rs — GUI, required-features = ["gui"]
- src/bin/cli.rs — headless-бинарь на clap
- build.rs вызывает tauri_build только при включённой фиче gui

Исправлено по пути:
- Определение протокола: SOCKS5 и MTProto различались по первому байту, но
  is_reserved_init не исключает 0x05, поэтому примерно одно соединение из 256
  уезжало в SOCKS5-ветку и умирало. Теперь неоднозначный первый байт решается
  по полному 64-байтному init и секрету.
- Ярлык маршрута в UI: код 2 подписывался как «Cloudflare Worker», хотя это
  запасной Telegram IP, а системный DNS и настоящий Worker оба показывались
  как «Автоматический маршрут». Метки переехали в transport::route_label,
  общий для обоих интерфейсов.
- Секрет прокси: под DynamicUser и ProtectHome домашней папки нет, secret_path
  возвращает None и секрет генерировался заново при каждом старте, ломая всем
  настроенным клиентам tg://-ссылку. Добавлен --secret-file.
- README обещал Rust 1.75+, тогда как Cargo.toml требует 1.88 и CI это
  проверяет. Это и есть первопричина #3.

Политика доступа: прямые не-Telegram соединения разрешены только на loopback,
на любом сетевом адресе нужен явный --allow-direct. Правило из ISSUE_AUDIT о
том, что LAN не должен становиться открытым SOCKS5, теперь выражено в типе
ListenConfig и покрыто тестами.

Тесты: 46 в библиотеке + 12 в CLI. Появился сквозной тест туннеля против
мок-релея, который реализует сторону Telegram по obfuscated2 — проверяется
не внутренняя консистентность, а что реле получает ровно тот открытый текст,
который отправил клиент, и обратно. Плюс расписание backoff, фолбэк при всех
маршрутах в cooldown, валидация Worker-доменов, отказы SOCKS5, устойчивость
секрета к перезапуску и корректная остановка по SIGTERM.

Документация: секция CLI в README с юнитом systemd и Dockerfile.

Co-authored-by: by-sonic <171230345+by-sonic@users.noreply.github.com>
2026-07-30 13:12:21 +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 — это локальный SOCKS5-прокси на твоём компьютере. Он перехватывает соединения Telegram, заворачивает их в WebSocket и отправляет через web.telegram.org. Провайдер видит обычный HTTPS — Telegram работает как раньше.

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

  • 📱 Telegram заблокировали в России или он стал открываться через раз
  • 🐌 Голосовые/видеозвонки рвутся, сообщения уходят с задержкой, фото не грузятся
  • 🛡 GoodbyeDPI, Zapret или ByeDPI больше не помогают — провайдер шейпит по IP
  • 🍎 Нужен инструмент для macOS (а на маке нет нормальных GUI-альтернатив)
  • 💻 Хочется решение для Windows, macOS или Linux без подписок и серверов

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


Скачать

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

Платформа Файл Размер
Windows 10/11 (x64) .exe installer
macOS (Apple Silicon + Intel) universal .dmg
Linux (x86_64) .AppImage / .deb
Сервер / без монитора (любая ОС) tglock-cli-*

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

🍎 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. IP отобразится прямо в интерфейсе TGLock — копируй и вписывай в настройки Telegram на остальных устройствах.

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

🖥 Без графического интерфейса: 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)
              ▼
   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. Локальный SOCKS5-прокси перехватывает соединения Telegram Desktop.
  2. Из первых 64 байт obfuscated2-пакета расшифровывается номер DC — AES-256-CTR, ключ в байтах [8..40], IV в [40..56], DC ID — i32 в [60..64].
  3. Трафик заворачивается в WebSocket к kws{dc}.web.telegram.org — это тот же домен, через который работает Telegram Web в браузере.
  4. Провайдер видит TLS-handshake к web.telegram.org — это легитимный HTTPS. DPI не видит MTProto. IP-шейпинг не работает, потому что web.telegram.org не блокируется в принципе.
  5. Весь остальной трафик (не-Telegram) проходит напрямую — без замедления.

📖 Подробный технический разбор архитектуры — см. HABR.md (≈7 мин чтения, история v1 → v2, AES-decrypt, bias select! для Pong, кроссплатформенная сборка).


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

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

⚠ Когда TGLock не подойдёт: если заблокирован не только Telegram, а ещё YouTube, Discord, Instagram, ChatGPT, Spotify — нужен полноценный VPN. Тут поможет 🌹 RoseVPN (см. блок ниже).


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

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

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

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

TGLock — локальный прокси. Он работает только на твоём компьютере и не отправляет данные третьим сторонам. Соединение идёт напрямую к серверам Telegram через их же домен web.telegram.org — тот же, что использует Telegram Web в браузере. Кода ~350 строк, всё открыто на GitHub — можно прочитать и собрать самому.

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

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

TGLock же отправляет трафик на web.telegram.org — обычный HTTPS-домен, который не блокируется в принципе.

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

Напрямую — нет, TGLock сам по себе только для desktop. Но если включить LAN-режим на компьютере, в настройках Telegram на телефоне можно указать SOCKS5-прокси с IP компа. Telegram на мобиле начнёт ходить через ПК. Удобно, если дома один компьютер всегда включён.

Для полностью мобильного решения нужен VPN — например, 🌹 RoseVPN с приложением Karing для iOS/Android.

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

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

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

Подпись Apple Developer ID стоит $99 в год — для бесплатного open-source это перебор. Сними блокировку Gatekeeper руками — открой Терминал и выполни:

xattr -cr ~/Downloads/tglock-macos-arm64
chmod +x ~/Downloads/tglock-macos-arm64

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

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

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

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

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

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

Тогда TGLock перестанет работать у этого конкретного провайдера. Но публичная блокировка веб-версии Telegram — это большой шаг, и Роскомнадзор пока на него не идёт. Если всё же случится — используй 🌹 RoseVPN, там домен фронтирования автоматически меняется (SNI rotation, Reality), и пробивает даже агрессивный DPI.

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

Не рекомендуется. TGLock детектирует Telegram-трафик по IP получателя и оборачивает в WebSocket только его. Остальное идёт напрямую — без шифрования и аутентификации, как обычный SOCKS5-релей. Для других приложений возьми правильный SOCKS5-сервер (или VPN).

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

Все релизы — на странице GitHub Releases. При пуше тега v* GitHub Actions автоматически собирает бинарники для всех 4 платформ и публикует. Подпишись на репозиторий (кнопка WatchCustomReleases), чтобы получать уведомления о новых версиях.


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

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

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

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 собирается на голом сервере.

Кросс-компиляция через GitHub Actions

Хочешь собрать свой релиз? Форкни репозиторий, поставь тег v1.0.1, и .github/workflows/release.yml сам соберёт бинарники под Windows x64, macOS ARM64, macOS Intel и Linux x64.


🌹 Нужен VPN на всё подряд?

Если у тебя заблокирован не только Telegram, а ещё YouTube, Discord, Instagram, ChatGPT, Spotify — обходить каждое приложение отдельно нет смысла. Возьми VPN, который умеет всё сразу.

Подключить RoseVPN — Telegram-бот

Что внутри RoseVPN:

  • 🔥 Hysteria2 + VLESS-Reality fallback — обходит TSPU и агрессивный DPI
  • 🛡 Без логов трафика — приватность по умолчанию
  • 🎁 Бесплатный пробный период — без карты, без регистрации
  • 📱 Karing-клиент с автонастройкой — установка в 2 тапа
  • 💻 Windows, macOS, iOS, Android — везде нативные приложения
  • 🔄 SNI-ротация на случай новых блокировок

Подключение — через Telegram-бот @rosevpnru_bot.


📄 Лицензия

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


by sonic · @rosevpnru_bot · Issues & feedback

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%