Что делает IncludeAllNetworks в профиле IKEv2 для Mac?
Ключ ограничивает трафик туннелем с именованными исключениями. Это не маршрут по умолчанию, он игнорирует EnforceRoutes, а шлюз должен пересылать то, что допускает.
В нативном профиле IKEv2 интересный ключ — не флажок, а IncludeAllNetworks, и меняет он охват того, что системе разрешено отправлять вне туннеля. Задайте его как 1, и macOS начинает считать туннель путём практически для всего IP-трафика, кроме набора исключений, которые она определяет и которые вы можете расширить. Поскольку ключ живёт в словаре профиля, а не в меню, он также означает не то, что большинство людей предполагает, читая фразу «отправлять весь трафик».
Что ключ меняет внутри сетевого стека
Без него туннель ведёт себя как сетевой интерфейс с прикреплёнными маршрутами. Маршрут по умолчанию через этот интерфейс захватывает почти весь трафик, а любой более конкретный маршрут на другом интерфейсе всё равно побеждает для своего префикса. Это обычная маршрутизация, и именно поэтому раздельное туннелирование возникает почти случайно.
Когда ключ включён, охват перестаёт быть предпочтением маршрутизации и становится политикой: какой трафик разрешено выпускать не через туннель. Системе всё ещё нужно достигать сети, чтобы поддерживать соединение, поэтому политика идёт с исключениями, а не делает вид, что их нет. Включение никогда не оставляет машину вообще без рабочего пути. В итоге вы получаете более короткий список путей, чем предполагали, и этот список задокументирован.
Практическое следствие: добавление маршрута больше не объясняет результат. Если пункт назначения по-прежнему достигается напрямую, спрашивать нужно не о том, какой маршрут победил, а о том, покрывает ли его исключение.
Исключения — часть настройки
Apple документирует несколько исключений рядом с основным ключом: локальные сети, трафик Apple Push Notification, сотовые службы и связь с устройствами. У каждого свои условия по платформе и версии, поэтому один и тот же профиль может вести себя по-разному в разных выпусках macOS.
Некоторые из этих исключений внутренне присущи. Трафик, необходимый для установления и поддержания доступа к сети, включая работу с порталами авторизации, приходится разрешать, иначе машина может остаться подключённой ни к чему и не иметь возможности это исправить.
Затем идут осознанные решения. Разрешить домашний принтер — не то же самое, что разрешить префикс рабочих ресурсов, и оба варианта отличаются от оставления APNs доступными, чтобы уведомления продолжали приходить. Записывайте, какие именно вы включили, прямо в профиле, а не выясняйте это позже из отчёта об ошибке.
Почему это не то же самое, что маршрут по умолчанию
Маршрут по умолчанию — это запись в таблице маршрутизации, а таблицы маршрутизации проигрывают. Более конкретный префикс побеждает его, привязанное к приложению соединение может его обойти, а второй интерфейс с лучшей метрикой может перехватить управление без чьего-либо вмешательства в конфигурацию VPN.
Руководство Apple по маршрутизации разъясняет различие прямо: обычные маршруты по умолчанию переопределяются более конкретными, тогда как более широкая настройка охвата определяет, какой трафик туннель обязан нести и что из него вырезано. Одно — предпочтение, другое ближе к правилу.
Это различие меняет и диагностику утечки. С маршрутом по умолчанию вы проверяете маршруты и метрики. С ключом охвата вы проверяете редакцию профиля, установленные исключения и поведение конкретной версии, потому что таблица маршрутизации находится ниже по течению от решения, принятого раньше.
EnforceRoutes — другая ручка
EnforceRoutes звучит как строгая версия той же идеи, и люди складывают оба ключа в убеждении, что больше ключей — больше охвата. Apple документирует, что он игнорируется, когда включён IncludeAllNetworks, так что второй ключ в такой комбинации ничего не даёт.
Относитесь к нему как к альтернативе для конфигураций, которые не используют широкий охват, а не как к усилению. Если вы не можете объяснить, что каждый ключ делает сам по себе, добавление обоих лишь усложняет проверку профиля.
О чём должны договориться шлюз и владелец профиля
Клиентская настройка не может заставить сервер пересылать трафик, для которого он никогда не был настроен. Шлюз должен принять сеанс, выдать адреса, обеспечить обратный путь для префиксов, которые вы намерены достичь, и обслуживать DNS в выбранной вами схеме. Если он маршрутизирует только один префикс, широкий клиентский охват порождает трафик, который приходит и умирает. Один запрос к адресу вне маршрутов шлюза доказывает это за минуту.
Туннель, принадлежащий приложению, — снова отдельный случай. Поставщик должен реализовать или предоставить поддерживаемое поведение; установка второго нативного профиля IKEv2 не изменяет туннель, которым уже управляет другое приложение, а ключ IKEv2 — не директива OpenVPN, которую прочитает другой клиент.
Актуальный список ключей и условия по версиям смотрите в справочнике по полезной нагрузке IKEv2 от Apple, а не в профиле, который кто-то скопировал годы назад.
Принимайте редакцию профиля целиком
Прежде чем менять Mac под удалённым управлением, запишите целевые версии macOS, предполагаемый выход в интернет, частные префиксы, которые должны оставаться доступными, и каждое включаемое исключение. Затем сохраните путь восстановления, не зависящий от туннеля, который вы собираетесь изменить.
Проверьте новые публичные запросы, частные запросы, оба семейства адресов и разрешение имён, а также установленную редакцию, а не файл проекта. Если что-то всё ещё идёт напрямую, решите, документированное ли это исключение, другой контекст соединения или настоящая ошибка конфигурации, и измените одно из трёх, а не расширяйте несвязанные ключи.