mirror of
https://github.com/by-sonic/tglock.git
synced 2026-08-02 08:35:51 +03:00
feat: rebuild TGLock with adaptive transport and Tauri UI
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# TGLock 2.0 architecture
|
||||
|
||||
## Local protocols
|
||||
|
||||
Один TCP-порт автоматически принимает два типа клиентов:
|
||||
|
||||
- MTProto proxy с постоянным 16-байтовым secret — основной режим;
|
||||
- SOCKS5 без авторизации — режим совместимости.
|
||||
|
||||
MTProto init проверяется по secret и transport tag. Из него извлекаются DC,
|
||||
признак media-соединения и тип транспорта. Для upstream создаётся новый
|
||||
стандартный obfuscated2 init, а последующий поток пере-шифровывается между
|
||||
локальным secret и Telegram.
|
||||
|
||||
## Transport cascade
|
||||
|
||||
Для каждого DC и отдельно для media-соединений строится список маршрутов:
|
||||
|
||||
1. сохранённый успешный маршрут;
|
||||
2. точный Telegram IP с `kwsN` или `kwsN-1` в TLS SNI и WebSocket Host;
|
||||
3. дополнительный Telegram IP, если он определён;
|
||||
4. системный DNS;
|
||||
5. явно настроенный пользователем Cloudflare Worker.
|
||||
|
||||
Поддерживаются DC1–5 и media/CDN DC203. DC203 использует WebSocket-host DC2,
|
||||
но подключается к собственному IP.
|
||||
|
||||
После ошибки маршрут получает exponential cooldown от 30 секунд до 30 минут.
|
||||
Успешный маршрут становится первым для следующего соединения того же DC и
|
||||
типа трафика.
|
||||
|
||||
## TLS policy
|
||||
|
||||
Проверка сертификатов и hostname никогда не отключается. При подключении к
|
||||
заданному Telegram IP TCP destination отделён от URI host: TLS продолжает
|
||||
проверять сертификат настоящего `kws*.web.telegram.org`.
|
||||
|
||||
Cloudflare Worker принимается только как пользовательская настройка. TGLock
|
||||
не загружает и не скрывает публичные списки чужих доменов.
|
||||
|
||||
## Cloudflare Worker contract
|
||||
|
||||
Worker должен принимать WebSocket на:
|
||||
|
||||
```text
|
||||
/apiws?dst=<telegram-ip>&dc=<dc-id>
|
||||
```
|
||||
|
||||
и проксировать бинарные frames в TCP `<telegram-ip>:443`. Рекомендуется
|
||||
добавить собственную авторизацию до стабильного релиза; поэтому Worker
|
||||
остаётся расширенной опцией alpha-версии.
|
||||
|
||||
## Current limitations
|
||||
|
||||
- SNI camouflage не включена: небезопасное отключение hostname verification
|
||||
из референсной реализации не переносится.
|
||||
- Голосовые звонки по UDP не поддерживаются.
|
||||
- Работоспособность медиа зависит от конкретного DC аккаунта и доступности
|
||||
Telegram/Cloudflare у провайдера.
|
||||
- Пулы заранее открытых WebSocket-соединений будут добавлены после измерения,
|
||||
что они не создают лишнюю нагрузку и не ухудшают стабильность.
|
||||
@@ -0,0 +1,51 @@
|
||||
# TGLock 2.0 issue audit
|
||||
|
||||
Проверено 29 июля 2026 года: все 15 issues и 5 pull requests, существовавшие
|
||||
в репозитории на момент аудита.
|
||||
|
||||
## Выводы
|
||||
|
||||
Главная причина жалоб «прокси подключён, но 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-ов.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
Reference in New Issue
Block a user