Почему VPN для отдельных приложений не захватывает рабочую копию приложения Android
Рабочий профиль — это отдельный управляемый контекст, поэтому VPN для отдельных приложений в одном профиле может оставить личную копию нетронутой. Проверьте владельца, прежде чем тестировать.
Одно и то же приложение появляется на телефоне с рабочим профилем дважды, и эти две копии — не один и тот же субъект. VPN для отдельных приложений, настроенный внутри одного контекста, управляет экземпляром этого контекста, поэтому правило, называющее пакет, всё равно может оставить другую копию нетронутой. Это не ошибка, которую нужно обходить, а граница профиля, которая делает именно то, для чего она создана. Вопрос, на который стоит ответить: какой контекст владеет VPN, а какой — приложением, которое вы пытаетесь защитить.
Одна иконка, две установки, два владельца политики
Android даёт рабочему профилю собственный управляемый контекст с отдельными приложениями, учётными записями и политикой, поэтому лаунчер может показать две записи с общим именем и значком. Служба VPN, запущенная внутри одного контекста, работает для пользователей этого контекста, и это механизм, лежащий в основе всей проблемы. Иконка говорит, какое приложение вы нажали, а не к какому профилю относится получившийся трафик. Поэтому владельца нужно читать из профиля, а не с картинки.
Организация также может принудительно включить режим постоянного подключения или блокировку без VPN для управляемой стороны, что меняет поведение при недоступном туннеле. У личной стороны такой гарантии нет, если вы не построили её сами.
Что на самом деле означает список разрешённых приложений
Поддержка VPN для отдельных приложений в Android построена на списках, что описано в руководстве по пользователям VPN и рабочим профилям и у двух типов списков противоположные значения по умолчанию. Список разрешённых приложений означает, что туннель используют только названные пакеты, а всё остальное исключено, тогда как список запрещённых приложений означает, что включено всё, кроме названных пакетов. Перепутайте это, и вы построите противоположность задуманной политики, хотя экран настроек всё ещё будет выглядеть правдоподобно. Список оценивается внутри того контекста, где работает VPN, поэтому имя пакета, присутствующее в обоих профилях, совпадёт только с копией в этом контексте. Пакет, не указанный в другом профиле, просто не входит в дела этого VPN.
Запишите поведение для двух-трёх приложений, которые важны, потому что разница между «всё кроме» и «только эти» решает, утечёт ли личное приложение мимо туннеля или откажет в закрытом режиме. Небольшая таблица здесь лучше абзаца: одна строка на профиль, с типом списка и значением по умолчанию для всего остального.
| Context | List type | Apps not named |
|---|---|---|
| Work profile | allowed only | excluded from the tunnel |
| Personal profile | disallowed | included in the tunnel |
Какая сторона ведёт туннель и под чьей политикой
Потребительский VPN не снимает средства контроля организации с управляемого профиля, а VPN рабочего профиля не является общим туннелем для личных приложений. Если организация требует собственный клиент для управляемых приложений, личный клиент — это отдельная договорённость со своей политикой и своими режимами отказа. Решите, какой механизм должен нести какой трафик, прежде чем сравнивать результаты, иначе вы измеряете две системы и называете разницу ошибкой. Внутри своего контекста управляемая сторона обычно побеждает, и это задуманное поведение.
Неудобный случай — управляемое приложение, которому нужен маршрут, которого управляемая политика не даёт. Это запрос исключения в организацию, а не повод отключать рабочий профиль.
Тестирование того экземпляра, который вы действительно имели в виду
Запустите нужную вам копию и посмотрите на запрос изнутри, потому что проверка публичного адреса в личном браузере ничего не говорит о рабочем приложении. Проверьте отдельно учётную запись, под которой выполнен вход, и внутреннее разрешение имён, поскольку внутреннее имя может зависеть от управляемого маршрута, пока публичный просмотр идёт в другом месте. Отметьте, какая копия дала какой результат в момент теста, и укажите профиль в подписи; скриншот с двумя одинаковыми иконками не является доказательством. Повторите проверку после переподключения и после пересоздания профиля, потому что политика может примениться заново.
Если вы не можете определить, какая копия ответила, исправьте маркировку, прежде чем делать вывод. Неоднозначный результат хуже отсутствия результата, потому что позже его цитируют так, будто он решил вопрос.
Документирование охвата, чтобы следующий тест выжил
Записывайте три факта вместе для каждого контекста: экземпляр приложения, владельца политики и ожидаемый охват. Этого достаточно, чтобы следующий человек воспроизвёл ваш тест, не гадая, какую иконку он запустил. Добавьте тип списка и значение по умолчанию для пакетов, которых нет в списке, потому что именно эту часть чаще всего читают неправильно.
Затем проверьте одно внутреннее имя и один внешний адрес с каждой стороны и запишите, что должно произойти, когда управляемая сторона блокирует личный VPN. Телефон, на котором ни одна из сторон не покрыта, хотя обе выглядят подключёнными, — это тот отказ, против которого стоит проектировать. Когда обоим профилям действительно нужен туннель, планируйте две договорённости вместо одного хитрого правила.