mirror of
https://github.com/by-sonic/tglock.git
synced 2026-10-06 09:16:00 +03:00
fix: address routing, media, worker and platform issues
This commit is contained in:
@@ -70,7 +70,7 @@ TGLock — это **локальный прокси** на твоём компь
|
||||
|
||||
- ❌ **Голосовые и видеозвонки.** Они идут по UDP, а TGLock проксирует только TCP. Со звонками ничего не изменится
|
||||
- ❌ **Всё, кроме Telegram.** YouTube, Discord, Instagram, ChatGPT работать не начнут: TGLock разворачивает только MTProto — протокол, который больше нигде не используется
|
||||
- ❌ **Android и iOS.** Своего приложения нет. Телефон можно подключить к TGLock на компьютере через [LAN-режим](#-lan-режим--один-прокси-на-всю-квартиру)
|
||||
- **Android:** экспериментальный APK и инструкция проверки — [docs/ANDROID.md](docs/ANDROID.md). Работа в фоне на физических устройствах требует проверки. **iOS:** отдельного приложения нет; доступен [LAN-режим](#-lan-режим--один-прокси-на-всю-квартиру).
|
||||
|
||||
**Чем отличается от VPN:** TGLock работает **только с Telegram**. Остальной трафик идёт напрямую — ничего не замедляется, мобильный трафик не расходуется впустую.
|
||||
|
||||
@@ -90,6 +90,10 @@ TGLock — это **локальный прокси** на твоём компь
|
||||
|
||||
Все сборки весят единицы мегабайт. Исключение — `.AppImage`: он несёт своё окружение и поэтому крупный.
|
||||
|
||||
Дополнительные проверочные сборки доступны в артефактах GitHub Actions:
|
||||
[Android ARM64 APK](docs/ANDROID.md) и [статический ARM64 CLI для OpenWrt](docs/OPENWRT.md).
|
||||
Они не означают, что выпущен новый релиз.
|
||||
|
||||
> **🖥 `tglock-cli`** — тот же туннель без графического интерфейса, одним бинарём. Нужен там, где окно не создаётся: сервер, контейнер, виртуалка, машина без монитора. Доступен начиная с `v2.0.0-beta.2`. Если ты скачал beta.2 и приложение не открывалось — это была ошибка сборки, исправлено в beta.3. Подробности — [ниже](#-без-графического-интерфейса-tglock-cli).
|
||||
|
||||
### 🛡 Антивирус ругается, SmartScreen предупреждает, VirusTotal показывает детекты
|
||||
@@ -297,7 +301,7 @@ Telegram Desktop / mobile (через LAN)
|
||||
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 проверяется как обычно.
|
||||
4. **Маршруты проверяются с ограниченным параллелизмом:** сначала запомненный или основной Telegram-маршрут, затем настроенный Worker и резервные адреса. Зависший IP не задерживает все остальные попытки. Упавший маршрут уходит в cooldown с удвоением задержки; при отказе всех маршрутов новые подключения соблюдают эту паузу. Для CDN DC203 сохраняется его собственный адрес. Системный DNS и файл `hosts` **не изменяются**: TCP-соединение идёт на выбранный IP, а TLS SNI и заголовок `Host` остаются настоящими, поэтому сертификат Telegram проверяется как обычно.
|
||||
5. Провайдер видит **TLS-handshake к `web.telegram.org`** — легитимный HTTPS, MTProto в нём не виден.
|
||||
6. Весь остальной трафик (не-Telegram) проходит **напрямую** — без замедления.
|
||||
|
||||
@@ -356,12 +360,16 @@ TGLock же отправляет трафик на **`web.telegram.org`** — о
|
||||
<details>
|
||||
<summary><b>Работает ли на iPhone или Android?</b></summary>
|
||||
|
||||
Своего приложения под Android и iOS нет — TGLock только для desktop. Есть два обходных пути:
|
||||
Для Android есть [экспериментальный APK](docs/ANDROID.md): локальный MTProto-прокси
|
||||
на телефоне, без VpnService. Для iOS отдельного приложения нет. Для обеих платформ
|
||||
также доступны два варианта:
|
||||
|
||||
1. **LAN-режим на компьютере.** Включи галочку LAN, и в настройках Telegram на телефоне укажи прокси с IP компьютера. Работает, пока компьютер включён и телефон в той же сети.
|
||||
2. **`tglock-cli` на своём VPS.** Headless-бинарь запускается как systemd-сервис, слушает `0.0.0.0` и пропускает только адреса Telegram — тогда телефон работает откуда угодно, а не только из дома. См. [раздел про CLI](#-без-графического-интерфейса-tglock-cli).
|
||||
|
||||
Поддержка Android обсуждается в [#9](https://github.com/by-sonic/tglock/issues/9), сроков нет: Tauri 2 умеет собирать под Android, но перехват трафика там делается через `VpnService` — это другая архитектура, а не пересборка того же кода.
|
||||
Проверка Android продолжается в [#9](https://github.com/by-sonic/tglock/issues/9).
|
||||
Особенно важна работа после сворачивания на HyperOS и других прошивках с
|
||||
ограничениями фоновых процессов; сборка APK сама по себе этого не проверяет.
|
||||
</details>
|
||||
|
||||
<details>
|
||||
@@ -449,7 +457,7 @@ TGLock определяет Telegram по IP получателя и завор
|
||||
| **Tauri 2** | Нативная оболочка для GUI. Опциональна: за фичей `gui`, в CLI не входит |
|
||||
| **TypeScript + Vite** | Интерфейс, внутренняя навигация и строгая типизация |
|
||||
| **tokio** | Async I/O, обработка сигналов для корректной остановки сервиса |
|
||||
| **tokio-tungstenite** | WebSocket-клиент с TLS поверх `native-tls` |
|
||||
| **tokio-tungstenite** | WebSocket-клиент с rustls, ring и встроенными WebPKI roots |
|
||||
| **aes** + **ctr** | Расшифровка MTProto `obfuscated2` init-пакета |
|
||||
| **clap** | Разбор аргументов `tglock-cli` |
|
||||
|
||||
@@ -488,7 +496,7 @@ cargo test --all-targets
|
||||
cargo test --no-default-features --features cli --lib --bins
|
||||
```
|
||||
|
||||
Тестов 59: разбор `obfuscated2`, каскад маршрутов и его cooldown, протокольные отказы SOCKS5, устойчивость секрета к перезапуску, плюс сквозной тест туннеля против мок-сервера, который реализует сторону Telegram и проверяет, что до неё доходит ровно тот открытый текст, который отправил клиент. Единственный тест с пометкой `#[ignore]` — тот, что требует живой сети.
|
||||
Проверяются `obfuscated2`, выбор маршрутов и cooldown, отказы SOCKS5, сохранение и миграция секрета, двунаправленный туннель, TLS-сертификаты и SNI. `npm run test:worker` проверяет скрипт Cloudflare. Android и ARM64 CLI собираются отдельными заданиями; результаты и ограничения проверки перечислены в [аудите issues](docs/ISSUES_2026-09-19.md). Тесты с `#[ignore]` требуют живой сети.
|
||||
|
||||
### Свой релиз через GitHub Actions
|
||||
|
||||
@@ -505,7 +513,9 @@ cargo test --no-default-features --features cli --lib --bins
|
||||
- **Присылаешь PR** — перед отправкой прогони проверки выше, они те же, что в CI. Небольшие PR ревьюятся быстрее.
|
||||
- **Не работает после релиза** — это регрессия, пиши сразу, такие вещи в приоритете.
|
||||
|
||||
Известные ограничения, о которых не нужно открывать issue: звонки (UDP), сервисы кроме Telegram (только MTProto), Android и iOS (обсуждается в [#9](https://github.com/by-sonic/tglock/issues/9)).
|
||||
Известные ограничения: звонки (UDP), сервисы кроме Telegram (только MTProto),
|
||||
отсутствие отдельного приложения iOS. Android пока экспериментальный;
|
||||
результаты проверки устройств собираются в [#9](https://github.com/by-sonic/tglock/issues/9).
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user