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

Приложение и встроенный клиент находятся на разных уровнях

Встроенный VPN-клиент Apple на практике является клиентом IKEv2. Ручная форма по-прежнему перечисляет устаревший L2TP поверх IPsec и параметры Cisco IPsec, но поля для транспорта провайдера нет, и вставить конфигурацию OpenVPN или WireGuard некуда. Вы либо заполняете форму в «Настройки > Основные > VPN & Управление устройством», либо импортируете профиль с полезной нагрузкой VPN; на поверхности — адрес сервера, две идентичности, метод аутентификации и необязательные правила по требованию.

Приложение провайдера работает на уровень выше. Оно поставляет провайдера пакетного туннеля Network Extension, поэтому код протокола и логика маршрутизации живут в приложении, а iOS только передаёт пакеты. Некоторые приложения реализуют WireGuard или OpenVPN, другие — собственный замаскированный транспорт, а немногие лишь устанавливают профиль IKEv2 и управляют встроенным клиентом за более приятным экраном. Из-за последней группы выбор «приложение или профиль» иногда ложный.

Последствие практично: файл .ovpn или WireGuard не заменяет эти поля, потому что рукопожатие — другой протокол.

Прочитайте полезную нагрузку, прежде чем сравнивать функции

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

<key>VPNType</key><string>IKEv2</string>
<key>RemoteAddress</key><string>vpn.example.net</string>
<key>RemoteIdentifier</key><string>vpn.example.net</string>
<key>LocalIdentifier</key><string>[email protected]</string>
<key>AuthenticationMethod</key><string>Certificate</string>
<key>ServerCertificateIssuerCommonName</key><string>Example Issuing CA</string>

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

Если AuthenticationMethod равно SharedSecret, сервер выполняет пользовательскую аутентификацию EAP, а полученный секрет на самом деле является учётными данными аккаунта. Это важно, когда провайдер присылает два документа: один для имени пользователя и пароля, другой для сертификата, и только один совпадает с импортированным.

Что приложение умеет, а встроенный клиент нет

Выбор протокола — очевидное преимущество. Если ваш сервер говорит на WireGuard или OpenVPN, приложение — единственный клиент iOS, который может это использовать, и правка встроенной формы это не согласует. Приложение также может реализовать раздельный туннель по назначению или приложению, собственную обработку DNS, блокировку в стиле kill switch, выбор сервера и переподключение, настроенное под свою сеть.

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

Что встроенный профиль IKEv2 делает правильно

Меньше движущихся частей — весь аргумент. Клиент IKEv2 и его стек IPsec поставляются с системой, поэтому нет расширения, которое может упасть, нет процесса на каждое приложение, который нужно поддерживать живым, и нет цикла обновлений третьей стороны между вами и работающим туннелем. Профиль можно и заблокировать: на наблюдаемом устройстве пользователь не может удалить то, что установило управление, а Always On VPN, который переподключается в любой сети без пользовательского переключателя, существует только в такой наблюдаемой, управляемой профилем форме.

Чего встроенный путь не даёт — гибкости. Нет VPN на приложение без управляемых приложений, нет kill switch для пользователя и нет транспорта, который в сети, блокирующей IPsec, выглядел бы как HTTPS. В гостиничных сетях, отбрасывающих UDP 500 и 4500, у встроенного IKEv2 нет запасного пути.

Таблица решений, которая закрывает большинство случаев

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

What you were givenDevice situationWhat to use
An .ovpn or WireGuard configPersonal phoneProvider app; the native form cannot load it
IKEv2 host plus CA namePersonal or managedProfile, or the app's own IKEv2 mode
IKEv2 with username and secretPersonal phoneEither; the profile is simpler if you never switch servers
A management-installed profileSupervised, MDMNative client; do not add a second app entry
A per-app tunnelling requirementPersonal phoneApp, or accept a full tunnel; iOS cannot split by app without management
IPsec blocked on your main networkAnyApp with a transport that survives the block

Две строки заслуживают второго взгляда. Требование «на приложение» на личном телефоне — случай, который люди читают неправильно: параметр существует в iOS, но управляется системой управления, поэтому неуправляемое устройство его не предложит. Заблокированная сеть — не повод не доверять IKEv2; это причина, по которой приложение провайдера существует.

Проверьте выбор одним тестом

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

Если туннель не вернулся, разделите отказ по тому, существует ли он вообще. Отсутствие индикатора VPN означает, что туннель не поднялся: либо рукопожатие сорвалось на RemoteIdentifier, закреплённом CA или учётных данных, либо подключение вообще не пытались, потому что правило по требованию не совпало и ни одно приложение его не запустило. Индикатор при падающем трафике означает маршрутизацию, DNS или политику на стороне сервера, и переустановка клиента ничего из этого не затрагивает.

Короткий список, чтобы устройство было объяснимо следующему человеку:

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

Начните со строки протокола в таблице и остановитесь там, если она отвечает на вопрос.

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