Зелёный значок VPN — это утверждение о чём-то, и полезный вопрос — о чём именно. На телефоне он может отражать туннель одного клиента, транспорт текущей сети или один успешный запрос к внутренней странице. Эти наблюдения поступают из разных источников, обновляются с разной частотой и могут противоречить друг другу на одном экране. Поэтому значок может выглядеть здоровым, пока браузер перед вами терпит неудачу.

Определите область до того, как читать цвет, иначе цвет ответит на вопрос, который никто не задавал.

Значок отвечает на более узкий вопрос, чем вы думаете

Начните с одной заявленной области, например личного браузера, использующего одобренный личный туннель. Туннель рабочего профиля не отвечает на этот вопрос для личного приложения, а конфигурация VPN для отдельных приложений может исключить именно тот браузер, который вы проверяете. Локальный клиент фильтрации может показывать подключение, ничего не отправляя на удалённый шлюз, потому что его туннель заканчивается на устройстве.

В Android сетевые обратные вызовы за индикатором сообщают о транспортах и возможностях сети. Транспорт VPN говорит, какая сеть несёт трафик, а не какие приложения или семейства адресов его используют.

Постройте таблицу состояний из доказательств

Трёх или четырёх состояний достаточно, если каждое называет доказательство, стоящее за ним. Столбцы ниже исходят из того, что можно наблюдать, а не из цвета, который вы хотите показать, и это не даёт устаревшему показанию стать утверждением об успехе.

Signal actually observedWhat it establishesWhat remains open
Target client reports an established tunnelThat client believes its tunnel is up, within its own scopeOther apps, other profiles, other address families
Active network exposes a VPN transportSome tunnel carries the current networkWhich app it belongs to and where it exits
Probe to a private host returned fresh dataOne request reached one destination at one timeEverything the probe does not touch
Callbacks stopped or data is older than the refresh windowNothing current is knownAny statement about the tunnel state

Последняя строка — та, которую на практике опускают. Индикатор, сохраняющий последнее значение, когда его источник умирает, сообщает историю как настоящее, и пользователи читают это как живое состояние. Помечайте такой случай как устаревший или неизвестный и выбирайте формулировку, не подразумевающую туннель. Затем позвольте метке меняться, как только источник останавливается.

Проверьте, что устройство действительно сообщает

Физический свет или виджет должны управляться поддерживаемым наблюдением, а не догадкой о последнем известном хорошем состоянии. Эти команды Android показывают транспорт и конфигурацию постоянного подключения платформы, ничего не устанавливая.

adb shell dumpsys connectivity | grep -i -A4 vpn
adb shell settings get secure always_on_vpn_app
adb shell settings get secure always_on_vpn_lockdown
adb shell dumpsys netstats | head -40

Ключи постоянного подключения сообщают, настроена ли платформа держать туннель и блокировать трафик без него; они не сообщают, что туннель сейчас здоров. Сопоставьте это чтение конфигурации со свежей проверкой, прежде чем что-либо будет показано как подключённое.

Если наблюдение не может продолжаться, экран должен уметь это сказать. Лампа, подключённая к автоматизации, которая больше не работает, хуже отсутствия лампы, потому что она утверждает состояние, которое никто не измеряет.

Держите предупреждение отдельно от принуждения

Автоматизация, замечающая отключение, срабатывает после события, поэтому не может быть границей, не дающей пакету уйти в промежутке. Если прямой откат нужно запретить, настройте политику блокировки платформы и проверьте её, намеренно отключив туннель. Индикатор сообщает; политика принуждает.

Задача предупреждения, отключающая интерфейсы ради соблюдения требований, может также запереть устройство вне нужного переподключения и создать цикл, в котором туннель никогда не возвращается, а предупреждение никогда не снимается.

Решите, что должен показывать экран, когда наблюдатель не уверен, и затем проверьте этот случай, остановив наблюдателя. Если ответ по-прежнему подключено, индикатор измеряет прошлое.

Похожие статьи