VPN для отдельных приложений или split tunnel? Что может решить маршрут в Mac
Маршрут выбирает адресаты, а не процессы. Сравните split tunneling по адресату с управляемым VPN-профилем для приложений и с локальным прокси как третьим путём.
Два приложения открывают соединения к одному и тому же офисному серверу, и только одно из них должно использовать туннель. Маршрут не может выразить это пожелание, потому что таблицы маршрутизации основаны на адресатах и не имеют понятия о том, какой процесс открыл сокет. То, что люди просят, и то, что им нужно, часто разные вещи. Разделите одно и другое, прежде чем менять любую конфигурацию.
Селектор — это адресат, никогда не процесс
Каждое решение о маршрутизации начинается с адреса назначения и заканчивается интерфейсом. Ядро никогда не спрашивает, какая программа отправила пакет, и в macOS pf тоже не маршрутизирует по процессу, поэтому правило брандмауэра не может отправить одно приложение другим путём. Поэтому один и тот же сервер, будь к нему обращение из браузера или из средства отчётности, использует один путь для обоих. Разделение на уровне приложений поэтому должно исходить из чего-то иного, чем маршрут: плагина VPN, который владеет сокетом, прокси, который берёт соединение от имени приложения, или отдельного сетевого стека. Ничто из этого не является изменением маршрутизации.
Два приложения, разговаривающие с одним адресом, — самый чистый тест проекта. Если ответ не может различаться между ними, проект основан на адресате, как бы он ни назывался.
Что обычный split tunnel действительно даёт
Split tunnel устанавливает маршруты для приватных префиксов и оставляет всё остальное на физическом пути. Обычно это и имеет в виду запрос: добраться до офисного сервера через туннель, а публичный просмотр оставить напрямую. Это просто, каждый обычный клиент это поддерживает, и это обеспечивается тем же механизмом, что и любой другой маршрут. Проверьте конкретный адресат с помощью route -n get, а не читайте маршрут по умолчанию, потому что split tunnel часто оставляет маршрут по умолчанию нетронутым.
Ручное редактирование маршрута по умолчанию не является переходом на что-либо. Оно борется с собственным восстановлением маршрутов клиента и у клиентов, которые устанавливают политику защиты, может оставить машину в состоянии, которого не ждёте ни вы, ни клиент. Настройте split tunnel в поддерживаемых параметрах клиента.
Что требуется для VPN отдельных приложений в macOS
Настоящий VPN для отдельных приложений в macOS — это функция Network Extension, управляемая профилем конфигурации. Управляющая нагрузка сопоставляет выбранные приложения с конфигурацией VPN, и система затем направляет трафик этих приложений соответствующим образом. Это управляемое развёртывание, что означает MDM, подписанный профиль и администратора, который владеет обоими.
Ручная установка клиента не создаёт это сопоставление, а обычная панель настроек не делает приложения выбираемыми по отдельности. Поставщик может предоставить собственные правила приложений, и они следуют его документации, а не общему правилу.
Три пути к разделению по приложениям без MDM
Там, где управление недоступно, прокси — практичный ответ. Настройте собственный прокси-конфигурацию приложения или используйте файл PAC, который выбирает по адресату и протоколу только для этого приложения.
Локальный прокси завершает соединение и заново создаёт его через туннель, так что приложению никогда не нужен маршрут. Второй вариант — отдельный сетевой стек: виртуальная машина или контейнер с собственным маршрутом по умолчанию, до которого приложение добирается через локальный адрес. Третий — принять маршрутизацию по адресату и отказаться от требования, что честно, когда оба приложения могут использовать туннель. Все три можно проверить, и ни один из них не делает вид, что маршрут знает процессы.
Опишите запрос так, чтобы ответ был однозначным
Опишите рабочий процесс, а не механизм: какому приложению какая служба нужна, нужно ли держать другое приложение подальше от той же службы и что должно происходить, пока туннель не работает. Эти три ответа выбирают проект. Они также говорят администратору, является ли запрос изменением маршрутизации или проектом развёртывания.
Явно включите случай исключённого приложения. Клиент, который останавливает приложение, когда его защищённый путь недоступен, ведёт себя иначе, чем тот, который позволяет ему вернуться на физический интерфейс, и пользователи сразу замечают эту разницу. Назовите ожидание в тикете. Затем проверьте на реальной машине, потому что один и тот же продукт в macOS часто ведёт себя иначе, чем в Windows, и его документация для macOS — единственный надёжный источник о том, что делают его настройки.