# TGLock 2.0 issue audit Проверено 29 июля 2026 года: все 15 issues и 5 pull requests, существовавшие в репозитории на момент аудита. > **Статус на 30 июля 2026.** Аудит ниже оставлен как есть — это фиксация > состояния на дату проверки. Что с тех пор сделано: > > - Разобраны все issues и pull requests. Открытых PR не осталось. > - Закрыты #1–#5, #8, #11, #13, #14, #19, #23 и #3 — с техническими > объяснениями в самих issues. > - #15 реализован заново поверх архитектуры 2.0 в #25: смерджить исходный PR > было нельзя, он патчил `bypass.rs`, `network.rs` и `ws_proxy.rs`, которых > больше нет, и правил системный DNS. Взято разделение GUI/CLI и произвольный > bind-адрес; DNS-менеджмент и проверка root отброшены как ненужные. > - #12 закрыт: относился к шрифту старого egui-интерфейса. > - #10 и #17 закрыты выпуском `v2.0.0-beta.2`: GUI перед стартом просит у > WebView программный рендер. Проверить это на машине без 3D-ускорения > возможности не было, поэтому закрыто как «исправление выпущено», а не > «исправлено» — репортерам предложено переоткрыть, если проблема осталась. > Независимо от WebView работает `tglock-cli`. > - #21 закрыт: репорт относился к сборке macOS, которой больше нет, в > `v2.0.0-beta.2` она пересобрана универсальным `.dmg`. > - #9 (Android) остаётся единственным открытым — backlog без сроков. > > Претензия из публичного обсуждения, которую нельзя закрыть кодом: инсталлятор > не подписан, из-за чего часть антивирусов на него реагирует. Решение принято > и зафиксировано: подписи не будет, сертификат — ежегодный платёж, а проект > бесплатный. Вместо неё в README описан механизм срабатывания и три > проверяемых пути — сверка `sha256` с публикуемым GitHub digest, открытый лог > сборки в Actions и сборка из исходников одной командой. > > Дополнительно исправлено то, чего в issues не было: коллизия MTProto-init с > байтом `0x05` (одно соединение из 256 уходило в SOCKS5-ветку и умирало), > подсчёт туннеля до успешного рукопожатия, неверные подписи маршрутов в > интерфейсе и генерация нового секрета при каждом старте сервиса. Подробности — > в [ARCHITECTURE_V2.md](ARCHITECTURE_V2.md). > > Из списка «не подтверждённых обещаний» в конце документа закрыты все четыре > пункта: формулировки про звонки и про «Подключено» приведены в соответствие с > кодом, LAN-режим ограничен адресами Telegram на уровне типа, Cloudflare Worker > остаётся исключительно пользовательской настройкой. ## Выводы Главная причина жалоб «прокси подключён, но Telegram не работает» — приложение считало успешный запуск локального SOCKS5-сервера успешным подключением к Telegram. Единственный upstream `kws{dc}.web.telegram.org` может резолвиться в недоступный IP или блокироваться провайдером. TGLock 2.0 разделяет эти состояния и использует адаптивный список Telegram IP, `kwsN`/`kwsN-1`, системный DNS и опциональный пользовательский Cloudflare Worker. TLS SNI и WebSocket Host проверяются. Системный DNS и файл `hosts` не изменяются. ## Классификация | Issue | Наблюдение | Решение для 2.0 | |---|---|---| | #1 | Порт 1080 занят | Уже есть выбор порта; добавить автоматический подбор | | #2, #11 | Неверный сетевой адаптер | В переписанном Rust-ядре привязка исходящего адаптера отсутствует; добавить только как расширенную настройку | | #3 | Rust 1.75 не собирает зависимости | `Cargo.lock` зафиксирован; MSRV 1.88 документирована и проверяется в CI | | #4 | Linux/серверный режим | Добавить headless CLI и systemd/Docker-примеры | | #5 | macOS | Публиковать universal `.app`, затем подписанный и notarized DMG | | #8, #19, #21, #23 | Нет подключения | Резервные маршруты, live-probe, понятная диагностика вместо ложного «Подключено» | | #9 | Android | Не входит в desktop 2.0; LAN остаётся отдельным сценарием | | #10, #17 | GUI не запускается без GPU/монитора | Headless CLI; отдельно проверить software rendering | | #13 | Discord/YouTube | Вне области проекта; не смешивать с Telegram-транспортом | | #14 | Медиа, звонки, LAN | Медиа тестировать отдельно; звонки не обещать без UDP; LAN ограничить Telegram-адресами | ## Pull requests - #6 относится к старой Windows-реализации выбора адаптера. - #12 относился к шрифту старого GUI. В v2 интерфейс перенесён на Tauri 2 и использует системную типографику каждой платформы. - #15 содержит полезное направление разделения GUI/CLI, но основан на старой архитектуре и меняет DNS системы. - #18 — экспериментальный Linux GUI без подтверждённого мобильного сценария. - #7 не содержит продуктового изменения. ## Не подтверждённые обещания - Голосовые и видеозвонки нельзя заявлять рабочими: SOCKS5 UDP Associate не реализован, а Telegram может обходить proxy для части звонков. - «Подключено» допустимо показывать только после успешного WebSocket handshake, а не после открытия локального порта. - LAN-режим не должен становиться открытым универсальным SOCKS5-прокси. - Резерв через чужую Cloudflare-инфраструктуру нельзя включать без ясной модели доверия, владельца, мониторинга и политики обновления endpoint-ов.