ZapretKVN-android/docs/NETWORK_BOOTSTRAP.md
loop-uh 938405d937 Recover VPN from transient network failures
Treat NET-101, NET-102, DNS-101 and DNS-105 as transient: the service
stays alive, waits for a usable physical network through ConnectivityManager
and retries with bounded backoff instead of publishing a terminal error.
Restart on network change waits until Android configures the new link, and
the quick settings tile gains the reconnecting state.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 00:08:06 +03:00

2.4 KiB
Raw Permalink Blame History

network-bootstrap

Узкий Android library-модуль для bootstrap до создания TUN. Он владеет только:

  • выбором текущей non-VPN сети;
  • согласованием NetworkCapabilities и LinkProperties;
  • короткой стабилизацией snapshot и повторами при реальной смене network identity, validation/Private DNS или списка DNS-серверов;
  • системным DnsResolver/Network.getAllByName();
  • стабильными support-кодами и безопасной технической причиной.

Модуль не знает о профилях, Compose, libbox, VPN allowlist, runtime JSON или LKG-кэше. Эти решения остаются в app. Он также не решает, что считать пригодной сетью: ожидание принимает предикат, потому что во время перехода WiFi ↔ cellular Android публикует кандидата задолго до того, как тот годится для bootstrap. Критерий зрелости и политика восстановления живут в app.

Код Значение
NET-101 Android не предоставил underlying-сеть
NET-102 Сеть менялась во время bootstrap и не стабилизировалась
DNS-101 DNS timeout
DNS-102 Имя не найдено / NXDOMAIN
DNS-103 DNS отказал / REFUSED
DNS-104 Успешный ответ без адресов
DNS-105 Системная ошибка Android resolver (DnsException/errno)
DNS-106 Другой DNS RCODE

Коды NET-110, DNS-110, VPN-1xx и VPN-2xx принадлежат app: они описывают captive portal, strict Private DNS, deadline подключения и проверки поверх готового TUN.

NET-101 и NET-102 больше не означают конец сессии: app трактует их как транзиентные и переподключается сам в ограниченной серии попыток. Остальные коды остаются терминальными. Текст ошибки может уточняться, но смысл опубликованного кода не меняется.