Профиль VPN на Android: найдите владельца до редактирования
Строка VPN в системе скрывает приложение, которому принадлежат конечная точка, маршруты и ключи. Определите владельца, затем сравните запрошенное, полученное и применённое состояние.
Экран 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.
Сравните запрошенное, полученное и применённое состояние
Это три разных этапа, и расхождение между ними подсказывает, какой компонент исправлять.
| Stage | Where to look | What it proves |
|---|---|---|
| Requested | The app's profile editor or imported file | What the owner intends to use |
| Received | Sanitized app log of server-supplied options | What the peer actually pushed |
| Applied | Link properties and routes after connect | What 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 на устройстве и искать в приватном хранилище приложения, а угаданный путь к каталогу данных не является поддерживаемым интерфейсом. Если ответу нужны байты, которые видит только приложение, попросите владельца о диагностическом экспорте, а не придумывайте свой.
Когда работа закончена, замкните цикл: подтвердите имя активного профиля, перечитайте применённое состояние и один раз отключитесь, чтобы проверить, что изменение переживает переподключение. Настройка, которая существует только в редакторе, не развёрнута.