mirror of
https://github.com/by-sonic/tglock.git
synced 2026-11-05 15:21:55 +03:00
8ce9355243
* fix(tunnel): медиа и «прокси не настроен»: один пакет на кадр, настоящие фронты, kwsN-1 только для медиа Три причины, каждая проверена на живом Telegram запросом req_DH_params: сервер сверяет номер DC внутри него с собой и отвечает -444 на чужой. - WebSocket-фронт разбирает один пакет на входящий кадр, остаток ждёт следующего. Клиент пишет запросы пачками, TGLock слал их одним кадром, и всё, что шло вторым, застревало: текст проходил, файлы вставали. Теперь поток режется на пакеты, как в Flowseal/tg-ws-proxy. Пачка через beta.18 висит на всех DC, через эту сборку принимается на всех. - Кластер kwsN-1 отвергает обычное соединение с -444, а Telegram Desktop в ответ выключает прокси как настроенный неверно. При сбое kwsN основное соединение откатывалось именно туда. Теперь kwsN-1 только для медиа. - Адреса из списка DC не говорят на TLS ни из какой сети (проверено с чистой сети), поэтому первый маршрут каждого DC не работал никогда. Закреплены настоящие фронты, и DC1, DC3, DC5 стали доступны по WebSocket, чего не было. У CDN203 своего фронта нет: остались TCP, Worker и CF-прокси. Обрыв туннеля, через который уже шли данные, больше не ставит маршрут на паузу. Таймаут соединения 8 с, как в tg-ws-proxy. probe_proxy.mjs получил --identity и --batched: они и нашли эти баги. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat: журнал ошибок в диагностике, --log-file для роутеров; 2.0.0-beta.19 «Скопировать диагностику» отдавала только счётчики, и по ней нельзя было понять, какой маршрут не ответил. Теперь в отчёте есть строки сбоев туннелей, а домены Worker и CF-прокси в них заменены на <домен>. --log-file и --log-max-mb (log_file, log_max_mb в настройках), как в tg-ws-proxy: журнал идёт в файл с ротацией, а не в системный журнал роутера. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(routes): запасной WebSocket на порту 80 родных адресов, включая CDN203 Родные адреса Telegram принимают WebSocket без TLS на порту 80. Измерено req_DH_params: DC определяется адресом, имя хоста не важно, а 91.105.192.100 отдаёт ключи CDN. Для CDN203, откуда часто идёт видео, это первый прямой WebSocket: на 443 фронта у него нет, и там, где провайдер закрыл только 443, до него раньше было не достать без Worker. Защита та же, что у родного TCP: внутри тот же обфусцированный MTProto. В Host идёт адрес, имени Telegram в открытом виде нет. Маршрут разрешён только до закреплённых адресов и пробуется последним. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(routes): паузы маршрутов по результатам ревью, пределы и журнал - Обрыв не наказывает маршрут, только если туннель работал и получал ответы 15 с. Одного ответа мало: маршрут, который ответил раз и умер, оставался предпочтительным навсегда. - Клиент спросил, не дождался ответа за 5 с и ушёл: маршрут считается неработающим. Иначе CDN, принявший TCP и молчащий, держал первое место, и очередь до порта 80 не доходила. - Предел пакета 2 МиБ вместо 16: чужое устройство в LAN-режиме не заставит роутер копить десятки мегабайт на соединение. - Журнал: разовая ошибка записи его больше не выключает, неудачная ротация не теряет бэкап и держит предел, права 0600 и на уже существующем файле. - В отчёт диагностики не попадает Worker, заданный адресом. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: babin <Thartewerner536e@engineer.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
52 lines
2.9 KiB
TOML
52 lines
2.9 KiB
TOML
# Настройки tglock-cli.
|
|
#
|
|
# Положите этот файл рядом с бинарём под именем tglock.toml — он подхватится
|
|
# сам. Либо укажите путь явно: tglock-cli --config /etc/tglock.toml
|
|
#
|
|
# Все поля необязательны. Флаги командной строки перекрывают то, что здесь.
|
|
|
|
# Адрес и порт локального прокси.
|
|
# По умолчанию 127.0.0.1:1080 — доступ только с этого компьютера.
|
|
# bind = "127.0.0.1"
|
|
# port = 1080
|
|
|
|
# Слушать 0.0.0.0, чтобы подключались другие устройства в сети.
|
|
# Нельзя задавать одновременно с bind.
|
|
# lan = true
|
|
|
|
# Секрет прокси — вторая половина ссылки tg://proxy.
|
|
#
|
|
# Для сервиса его нужно закрепить, иначе после перезапуска секрет будет новым и
|
|
# все настроенные клиенты перестанут подключаться. Достаточно один раз
|
|
# запустить tglock-cli, скопировать секрет из напечатанной ссылки и вписать
|
|
# сюда. Принимается и с префиксом dd, и без него.
|
|
#
|
|
# Файл с секретом внутри держите с правами 600: это доступ к вашему прокси.
|
|
# secret = "dd00112233445566778899aabbccddeeff"
|
|
|
|
# Либо хранить секрет в отдельном файле — он создастся при первом запуске.
|
|
# Игнорируется, если задан secret выше.
|
|
# secret_file = "secret"
|
|
|
|
# Свои Cloudflare Worker'ы как резервный маршрут — на случай, когда у
|
|
# провайдера легли все обычные маршруты. Установка описана в
|
|
# docs/CLOUDFLARE_WORKER.md
|
|
# worker = ["my-name.workers.dev"]
|
|
|
|
# Свой домен на Cloudflare (CF-прокси): записи kws1…kws5 и kws203 указывают
|
|
# на адреса Telegram, Worker не нужен. Настройка описана в docs/CF_PROXY.md
|
|
# cf_proxy = ["example.com"]
|
|
|
|
# Пропускать и не-Telegram адреса.
|
|
# На loopback это включено само. На сетевом адресе означает открытый
|
|
# SOCKS5-прокси для всего интернета — включайте осознанно.
|
|
# allow_direct = false
|
|
|
|
# Печатать только ошибки.
|
|
# quiet = false
|
|
|
|
# Журнал в файл вместо stdout: на роутере stdout сервиса уходит в системный журнал.
|
|
# Заполненный файл переименовывается в <имя>.1, больше двух файлов не бывает.
|
|
# log_file = "/tmp/tglock.log"
|
|
# log_max_mb = 5
|