Tunnel 0.9.1#
Tunnel 0.9.1 — техническое hot-fix обновление API-подписок, сетевого контроллера, БС-режима, лимитов, отображения трафика и интерфейса обновлений.
Главное#
Слегка переработана логика API-подписок#
API-подписки теперь обновляются через прямой защищённый refresh provider-ссылки на клиенте.
Раньше backend мог отдавать уже закэшированные nodes, из-за чего подписка работала как декодированный и распаршенный вариант, обновление это исправляет. Так же позволяет на многих устройствах обновлять ее даже в режиме фильтрации Белых Списков:
- подписка теперь зашифрована с помощью собственных методов обфускации. Хранится только в оперативной памяти.
Улучшена стабильность обновления API-подписок#
Добавлена логика bootstrap/fallback:
- если encrypted URL уже есть — backend sync ограничен по времени;
- если encrypted URL ещё нет — выполняется полноценная первичная синхронизация;
- при недоступности backend приложение использует сохранённый encrypted URL;
- старые nodes не удаляются при неудачном refresh;
- encrypted metadata не теряется после обновления подписки.
Обновлено отображение серверов API-подписки#
Серверы из API-managed подписки теперь отображаются в едином стиле:
Tunnel #..4. , чтобы легче было запоминать последний используемый вам.
Smart Connect и Network Controller#
Улучшен сетевой контроллер#
Доработана логика Network Controller и fallback-переключений:
- failed route помечается как bad;
- bad node и bad endpoint больше не выбираются повторно;
- ordinary fallback не должен сразу показывать ошибку, пока есть доступные кандидаты;
- subscription fallback учитывает failed node и endpoint fingerprint;
- route-not-found должен показываться только после исчерпания всех маршрутов;
- добавлена защита от повторного выбора одного и того же фактического endpoint.
Улучшена логика БС fallback#
БС-режим теперь корректнее перебирает серверы из БС-подписок:
- failed БС-node помечается как bad;
- failed endpoint исключается из повторного выбора;
- fallback не должен останавливаться после одного неудачного сервера;
- БС fallback перебирает nodes из БС-подписок;
- TCP ping больше не считается полноценной проверкой маршрута;
- отсутствие TCP ping не означает, что маршрут нерабочий;
Не нашли маршрутпоказывается только после реального исчерпания доступных маршрутов.
Улучшена проверка БС-серверов#
БС-сервер теперь не должен считаться нерабочим только из-за ранней ошибки coordinator/startup-dispatch.
Сервер считается реально проверенным только после того, как приложение дошло до фактического запуска VPN/service runtime и route proof.
Это снижает риск ситуации, когда приложение быстро “перелистывает” БС-nodes, но не проверяет их по-настоящему.
Смягчена runtime-проверка аварийной сети#
Проверка аварийности во время уже установленного VPN-соединения стала мягче.
Для VLESS/VMess/Trojan/Shadowsocks аварийность теперь должна определяться через repeated relay-delay failure, а не через одиночные TCP/traffic-сигналы.
TCP ping, traffic mismatch и upload-without-download используются как диагностика, а не как причина немедленного fallback.
Отдельная логика для Hysteria2#
Hysteria2 не проверяется через VLESS-style relay-delay.
Для Hysteria2 fallback должен срабатывать только при реальной проблеме runtime/core:
- process dead;
- HEV runtime dead;
- core fatal error;
- local runtime failure.
Это уменьшает количество ложных аварийных переключений.
Уведомления и статус подключения#
Исправлены ложные Route Not Found уведомления#
Исправлена ситуация, когда приложение могло найти рабочий маршрут, но после этого всё равно показать уведомление:
Не нашли маршрут
Теперь такое уведомление должно появляться только если все доступные маршруты действительно исчерпаны.
Улучшены foreground-уведомления подключения#
Foreground notification теперь должен показывать этапы подключения для всех режимов:
- ordinary servers;
- personal subscriptions;
- regular subscriptions;
- API-managed subscriptions;
- BS subscriptions.
В уведомлении должны отображаться этапы:
- подготовка подключения;
- запуск VPN-ядра;
- ожидание ответа ядра;
- проверка маршрута;
- переключение на другой сервер;
- успешное подключение.
После подключения статус должен отображаться вместе с трафиком и временем сессии.
Пример:
Подключено ⬇ 120 KB/s ⬆ 15 KB/s Текущий сеанс: 00:03:12
При fallback:
Переключаюсь на другой маршрут ⬇ ... ⬆ ... Текущий сеанс: ...
Уменьшен шум от fallback-уведомлений#
Отдельные heads-up уведомления при частых fallback-переключениях должны показываться реже, чтобы Android не заглушал канал уведомлений как слишком шумный.
Основной статус fallback должен отображаться в foreground VPN notification.
Интерфейс#
Добавлена кнопка очистки выбранных приложений#
В разделе выборочного туннелирования добавлена кнопка:
Снять все галочки
Она позволяет быстро очистить список выбранных приложений.
Добавлена информация об обновлении#
В баннер обновления добавлена кнопка информации.
Теперь можно открыть список изменений прямо из приложения. Если changelog не указан, приложение показывает fallback-текст и предлагает открыть ссылку обновления.
Проверка трафика и лимитов#
Улучшена обработка статистики трафика:
- premium-пользователи не ограничиваются по трафику;
- free-лимит применяется только к metered-трафику;
- трафик ignored/bypass-приложений не должен попадать в лимиты VPN;
- исправлена логика дневного учёта;
- переход через полночь должен корректно разделять usage по датам;
- traffic counters не используются как единственное доказательство аварии маршрута.
Исправления#
- Исправлена проблема, когда API-managed subscription URL был недоступен после обновления.
- Исправлена потеря encrypted metadata после refresh.
- Исправлена логика fallback для БС/ordinary маршрутов.
- Исправлено повторное использование bad node / bad endpoint.
- Исправлены ложные уведомления о недоступности ordinary VPN.
- Исправлены лишние route-not-found уведомления во время fallback.
- Исправлена ситуация, когда БС fallback мог остановиться после одного неудачного node.
- Исправлена ситуация, когда TCP ping ошибочно считался полноценной проверкой маршрута.
- Исправлена слишком жёсткая runtime-проверка аварийной сети.
- Улучшена обработка Hysteria2 runtime-health.
- Улучшена диагностика Network Controller в Logcat.
- Улучшено отображение этапов подключения в foreground notification.
Технические изменения#
- Добавлена поддержка encryptedURL для API-managed подписок.
- Обновлены DTO API-подписок.
- Добавлена миграция Room для хранения expiry encrypted URL.
- Добавлен direct refresh flow для API-managed подписок.
- Улучшена обработка bad-state в Network Controller.
- Улучшена логика BS detector subscription fallback.
- Добавлена защита от повторного выбора одного и того же endpoint.
- Добавлена диагностика причин исключения БС-candidates.
- Улучшено разделение startup validation и runtime health.
- Runtime-health для non-Hysteria2 смягчён до repeated relay-delay failure.
- Hysteria2 runtime-health отделён от VLESS-style проверок.
- Расширены debug-коды для диагностики fallback, route proof и runtime health.
Примечание#
Tunnel 0.9.1 — промежуточное hot-fix обновление перед дальнейшей переработкой Smart Connect, Network Controller и маршрутизации в Tunnel 0.9.x.
Основная цель версии — стабилизировать API-подписки, fallback-переключения, БС-режим, уведомления подключения и runtime-проверки сети.