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

Сначала определите тип подключения

На одном и том же экране настроек есть как минимум три схемы. Приложение может использовать VpnService, чтобы построить виртуальный интерфейс и владеть протоколом и приватной конфигурацией, включая локальное фильтрующее приложение без удалённого выхода. Android также может предоставить профиль IKEv2 платформы через Ikev2VpnProfile, доступный с API 30, где платформа хранит большую часть профиля. А приложение провайдера может показывать собственный список серверов и собирать настройки внутри.

adb shell dumpsys connectivity | grep -i -A12 "VPN"
adb shell cmd connectivity list-owners 2>/dev/null || true

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

Запишите владельца и область действия профиля

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

Этот шаг предотвращает самый частый потерянный час — редактирование профиля, который не является подключённым. Приложения часто хранят несколько профилей, и активный является свойством приложения, а не строки Android.

Сравните запрошенное, полученное и применённое состояние

Это три разных этапа, и расхождение между ними подсказывает, какой компонент исправлять.

StageWhere to lookWhat it proves
RequestedThe app's profile editor or imported fileWhat the owner intends to use
ReceivedSanitized app log of server-supplied optionsWhat the peer actually pushed
AppliedLink properties and routes after connectWhat the device is really using

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

adb shell ip addr show tun0
adb shell ip route show table all | head -40

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

Редактируйте тот артефакт, который владелец действительно читает

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

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

Напишите заметку для поддержки, не раскрывая секреты

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

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

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

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