Два термина Apple используются так, будто называют одно и то же, и эта путаница отправляет людей в неправильную панель настроек. Network Extension описывает возможность: поддерживаемый способ реализации VPN-туннелей, прокси и фильтров. System Extensions описывает механизм доставки и одобрения для расширений в пространстве пользователя. Современному VPN-клиенту для Mac обычно нужно и то и другое, поэтому ни одна из меток сама по себе не объясняет симптом. Разделение двух отвечает, какой компонент проверять и какого шага одобрения ожидать.

Два вопроса, а не одна метка

Спросите, что делает компонент, прежде чем спрашивать, как он устанавливается. Возможность определяет, какой класс провайдера существует и, следовательно, какой код обрабатывает ваши пакеты. Механизм доставки определяет, как поступает бинарный файл, как он одобряется и где записывается его состояние. Продукт может реализовать туннель пакетов, не поставляя системное расширение в старых версиях, и может поставить системное расширение, которое реализует нечто иное, чем туннель.

Расширения ядра — третий термин, который люди смешивают. Это был более старый способ запускать привилегированный сетевой код, они требовали других одобрений, и Apple годами уводит разработчиков от них. Применение рецепта одобрения расширения ядра к современному клиенту тратит время на диалог, который никогда не появится.

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

Что предоставляет Network Extension

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

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

Ничто во фреймворке не подразумевает позицию по конфиденциальности. У расширения в пространстве пользователя по-прежнему есть разрешения, конфигурация и оператор за ним, поэтому относитесь к архитектуре как к детали реализации, а не как к сигналу доверия. Спросите, кто управляет конечной точкой и что она настроена собирать.

Что меняет System Extensions

Механизм переносит привилегированный код из ядра в пространство пользователя и меняет то, как операционная система запрашивает согласие. Активация — отдельный шаг от установки, и пользователь или профиль MDM должен её разрешить. Клиент, который устанавливается, но никогда не активируется выглядит присутствующим в папке Applications и ничего не делает для подключения.

Состояние записывает система, а не приложение, что полезно, потому что его можно запросить. Команда ниже перечисляет расширения, известные системе, и состояние их активации.

systemextensionsctl list
scutil --nc list

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

Что проверять при данном симптоме

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

SymptomFirst place to look
No VPN entry at allConfiguration profile or scutil list
Client installed, nothing happensExtension activation state
Tunnel up, private host unreachableTunnel provider routes and policy
One app blocked, others fineFilter or app proxy provider

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

log show --last 10m --predicate 'process == "nesessionmanager"'

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

Одобрение, MDM и миф о расширении ядра

На управляемых Mac шаг одобрения принадлежит профилю MDM, и пользователь, который нажимает Allow в System Settings, всё ещё может быть заблокирован политикой, которая не обновлялась. Спросите команду рабочих станций, какой механизм одобряет расширение для этого парка, прежде чем просить пользователя что-либо нажать.

На неуправляемом Mac запрос одобрения появляется один раз, и отказ может быть постоянным, пока расширение не переустановят. Такое поведение объясняет машину, где клиент работал до обновления ОС, а теперь сообщает о соединении, которое никогда не устанавливается.

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

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