VPN на iPhone по доменам: решите, где происходит отказ
NeverConnect не даёт VPN запуститься; он не блокирует сайт. Решите, относится ли отказ к границе сервиса или к управляемой политике.
Два требования записывают одной фразой, а реализуют в совершенно разных местах. «Этот сайт должен быть доступен только через VPN» — утверждение о допуске, и его естественное место — сеть перед сервисом. «Этот iPhone никогда не должен напрямую обращаться к тому домену» — утверждение об устройстве, и выразить его может только управляемая клиентская политика. Решите, какое из них у вас на самом деле, прежде чем открывать редактор профилей.
Два требования, которые звучат одинаково
Возьмите иллюстративный хост records.corp.example. В случае допуска вы публикуете его только на адреса за VPN, поэтому прямая попытка с телефона в сотовой сети терпит неудачу на уровне сети, а тот же запрос через туннель проходит успешно и всё равно требует настоящего входа в аккаунт. В случае устройства телефон может выходить в публичный интернет, поэтому хост разрешается и отвечает всем, и единственное место, где можно остановить попытку, — само устройство. Сервис не может применять правило к запросу, который до него никогда не доходит.
Неверное прочтение требования проявляется как конкретное развёртывание. Запись по-прежнему публична, оператор считает VPN обязательным, а аудит сотовой попытки показывает, что запрос так и не вошёл в туннель. В журналах ничего не выглядит сломанным, потому что ничего не было заблокировано.
Читайте действия оценки буквально
Механизм работы по запросу имеет два отдельных уровня действий, и их смешение порождает большую часть путаницы здесь. Действие внешнего правила решает, что происходит с туннелем при совпадении правила, а действие оценки соединения решает, что происходит с совпадением имени хоста внутри правила оценки. Справка Never Connect от Apple описывает только второй уровень.
| Layer | Action | What it controls |
|---|---|---|
| Outer rule | connect | Bring the tunnel up when the rule matches |
| Outer rule | disconnect | Tear the tunnel down when the rule matches |
| Outer rule | evaluateConnection | Run a hostname evaluation instead of acting directly |
| Outer rule | ignore | Leave the current tunnel state alone |
| Connection evaluation | connectIfNeeded | Start the tunnel when the hostname cannot be resolved |
| Connection evaluation | neverConnect | Do not start the tunnel for that match |
neverConnect — значение, которое чаще всего читают неправильно, потому что имя намекает на блокировку. Оно управляет запуском туннеля для совпавшего имени хоста, а не разрешением телефона достичь имени, поэтому запись Never Connect не является блокировкой домена. Назвать её так в проектном документе — это способ утвердить развёртывание с границей принуждения, которой у него нет.
Если сервис ваш, применяйте на границе
Ограничение допуска означает публикацию имени только там, где путь через VPN может до него добраться, а затем проверку, что намеченный путь работает, а другой путь — нет. Охватите каждую опубликованную запись, оба семейства адресов, если вы их публикуете, и любое промежуточное или альтернативное имя, которое использует приложение. Старый CNAME, всё ещё указывающий на публичный балансировщик нагрузки, сохраняет прямой путь живым, каким бы аккуратным ни был основная запись.
Это защищает сервис, а не устройство. Это не мешает телефону отправить DNS-запрос и не мешает приложению попытаться. Если такие попытки допустимы, принуждение на границе — более дешёвый и долговечный выбор, потому что оно действует для каждого клиента, а не только для тех, кого вы настроили. Оно также переживает телефон, который никогда не был зарегистрирован.
Если телефон не должен даже пытаться, нужна управляемая политика
Чтобы остановить попытку, нужна поддерживаемая политика принуждения, которая охватывает приложение или назначения до подключения, во время сбоя туннеля и после смены сети. Попросите поставщика VPN или управления устройствами назвать эту политику, сказать, требует ли она организационного управления, и описать, на что ещё она влияет. Туннель на приложение плюс правило по запросу — не одно и то же, и ярлык с домашнего экрана на подключение тоже.
Проверьте случай сбоя, отключив туннель и наблюдая, уходит ли запрос наружу. Если уходит, то граница, которую вы задокументировали, — не та граница, которую вы развернули.
Решайте с помощью трёх вопросов
Во-первых, вы контролируете сервис или только телефон? Во-вторых, может ли устройство законно использовать публичный интернет для всего остального? В-третьих, управляется ли телефон, и кем? Владение сервисом плюс управляемый парк означает, что доступен любой уровень, тогда как владение только телефоном делает клиентскую политику единственным вариантом, и она должна поддерживаться.
Ответьте на эти три, прежде чем трогать профиль. Тогда конфигурация перестаёт быть догадкой о том, что означает флажок с именем Never.