mirror of
https://github.com/by-sonic/tglock.git
synced 2026-09-05 18:16:09 +03:00
`TransportEngine::connect` собирает подробный перечень попыток — какой адрес не
ответил, где истёк TLS, что вернул воркер, — и возвращает его в `Err`. Дальше
этот `Err` доходил до `serve`, где выбрасывался: `let _ = handle(...)`.
Увеличивался только счётчик.
Снаружи это выглядит как `туннелей 0 · сбоев 249 · падений маршрутов 395` без
единого слова о том, почему их ноль. Отличить «провайдер режет закреплённые
адреса» от «воркер отвечает отказом» нечем, хотя рядом есть журнал событий, в
который пишутся куда менее важные вещи.
Теперь причина попадает в журнал строкой вида:
Не поднялся туннель до DC2: 149.154.167.51 — не отвечает (таймаут TCP);
kws2.web.telegram.org — таймаут TLS/WebSocket
Дедупликация журнала делает её разовой: набор маршрутов у DC стабилен.
Там же вторая слепая зона. Домен воркера, не похожий на имя хоста, отбрасывался
молча: `https://name.workers.dev/` со схемой или слэшем не проходит
`valid_domain`, маршрут не появляется, и «воркер настроен» неотличимо от
«воркера нет». `set_worker_domains` теперь возвращает принятые и отвергнутые
по отдельности, отвергнутые называются вместе с причиной, принятые
подтверждаются.
Тексты отказов переведены на русский: их читает не разработчик, а человек,
который прислал скриншот и ждёт ответа.
Co-authored-by: by-sonic <171230345+by-sonic@users.noreply.github.com>
This commit is contained in:
@@ -116,6 +116,32 @@ LAN-режим превращал бы машину в открытый прок
|
||||
Счётчик `ws_failures` от них отличается тем, что растёт после успешного
|
||||
рукопожатия с клиентом: там договорились с клиентом, но не смогли с Telegram.
|
||||
|
||||
### Почему не поднялся туннель
|
||||
|
||||
`ws_failures` говорит, что каскад маршрутов упал целиком, и молчит о причине.
|
||||
Текст с перечислением попыток собирался в `TransportEngine::connect` и там же
|
||||
пропадал: наверх уходил `Err`, который выбрасывался в `serve`. При `туннелей 0`
|
||||
и растущих сбоях отличить «провайдер режет закреплённые адреса» от «воркер
|
||||
отвечает отказом» было нечем — ровно та стена, в которую упёрся репортёр #50.
|
||||
|
||||
Теперь причина попадает в журнал одной строкой на каждый набор отказов:
|
||||
|
||||
```
|
||||
Не поднялся туннель до DC2: 149.154.167.51 — не отвечает (таймаут TCP);
|
||||
kws2.web.telegram.org — таймаут TLS/WebSocket; my.workers.dev — рукопожатие
|
||||
WebSocket: HTTP error: 403 Forbidden
|
||||
```
|
||||
|
||||
Дедупликация журнала делает эту строку разовой: маршруты у DC стабильны, и
|
||||
повтор той же комбинации отказов не пишется.
|
||||
|
||||
Домены Cloudflare Worker отчитываются так же. Строка, не похожая на имя хоста,
|
||||
раньше отбрасывалась молча — `https://name.workers.dev/` со схемой или слэшем не
|
||||
проходит `valid_domain`, маршрут не появлялся, и «воркер настроен» ничем не
|
||||
отличалось от «воркера нет». Теперь отвергнутая строка называется вместе с
|
||||
причиной, а принятая подтверждается: `Cloudflare Worker в списке маршрутов:
|
||||
name.workers.dev`.
|
||||
|
||||
## Туннель: два независимых направления
|
||||
|
||||
Каждое клиентское соединение получает свой WebSocket-туннель, и внутри него
|
||||
|
||||
Reference in New Issue
Block a user