Три ноутбука в одной команде, три разных меню VPN и заявка о том, что подключение работает везде, кроме Mac. План, стоящий за этими клиентами, может быть одинаковым, даже если меню — нет. Совпадать должно меньше, чем предполагает большинство внедрений: одна идентичность шлюза, один тип учётных данных, один набор маршрутов и одна политика резолвера. Запишите эти четыре пункта до того, как кто-нибудь экспортирует профиль, и работа с платформами превратится в контрольный список, а не в расследование.

Начните с контракта доступа, а не с файла клиента

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

Пример из офиса делает форму конкретной: серверы приложений в 10.60.0.0/16, частные имена под corp.example, внутренний резолвер на 10.61.0.53, а обычный просмотр остаётся на том пути, который устройство уже использует. Последний пункт — решение политики, а не умолчание клиента, и несколько клиентов отправят всё в туннель, если никто не скажет иначе. Зафиксируйте контракт с датой и владельцем: именно эта запись позже скажет вам, изменился туннель или политика.

Выберите один протокол и одну пару аутентификации, которые вы сможете защитить

IKEv2 с аутентификацией шлюза на основе сертификатов и EAP для пользователя — обычный выбор, когда все три платформы должны работать без дополнительного ПО: Windows, macOS и NetworkManager каждая поставляется с клиентом IKEv2. Проблема в том, что поддержка IKEv2 описывает ярлык, а не набор возможностей. Методы EAP, ключи с аппаратной поддержкой, сопоставление сертификата с учётной записью и автоматическое переподключение реализуются отдельно на каждой платформе. Комбинация, работающая на двух из трёх, встречается достаточно часто, чтобы считать её таковой до проверки.

Проверьте эту пару на каждой целевой платформе до написания руководства по развёртыванию, а не после. Шлюз, предлагающий и EAP-MSCHAPv2, и EAP-TLS, даёт запас для резервного пути — при условии, что этот резервный путь задокументирован как поддерживаемый, а не обнаружен во время инцидента. Два поддерживаемых пути — дешёвая страховка; недокументированный третий — будущая заявка.

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

Соберите по одному артефакту на платформу из контракта

Windows использует профиль VPNv2, доставляемый через MDM или создаваемый локально с помощью Add-VpnConnection и его XML-полезной нагрузки. Задевают две вещи: область действия и доверие. Профиль с областью устройства и профиль с областью пользователя устанавливаются в разные хранилища, поэтому сертификат, нужный клиенту, должен лежать в хранилище, соответствующем выбранной области. Ошибка в этой паре даёт профиль, который импортируется без ошибок и затем падает при первом подключении.

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

Linux зависит от серверной части за NetworkManager, а strongSwan и плагин NetworkManager — отдельные пакеты. Свойства подключения специфичны для плагина, а не являются общими ключами VPN, поэтому ключ, скопированный из другого плагина, часто сохраняется без ошибки и падает при активации. Соберите подключение на чистом образе, чтобы убедиться, что плагин есть там, где он действительно будет работать.

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

PlatformArtifactCheck before handoff
WindowsVPNv2 profile or Add-VpnConnectionScope matches certificate store
macOSManaged VPN payload plus certificate payloadBoth payloads present in one profile
LinuxNetworkManager connection with strongSwan backendPlugin package installed on the image

Проверьте маршруты, резолвер и переподключение на чистой учётной записи

Подключено — это не приёмочный тест. В Windows Get-VpnConnection показывает профиль, а route print показывает, попал ли частный префикс на интерфейс туннеля. В macOS scutil --nc list подтверждает активную службу, а scutil --dns показывает порядок резолверов, который система реально будет использовать.

В Linux nmcli connection show --active доказывает, что подключение установлено, а resolvectl status показывает DNS по каждому интерфейсу. Резолвер, присутствующий в файле подключения, но отсутствующий в выводе по интерфейсу, означает, что раздельный DNS не применяется. Это разница между именами, которые разрешаются, и именами, которые разрешаются через туннель, и она меняет то, какая команда поддержки берёт следующий шаг. Сравнивайте вывод по интерфейсу до и после поднятия подключения, а не только после.

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

Версионируйте пакет и держите путь отката

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

Держите предыдущий пакет каждой платформы доступным и пишите команду его удаления рядом. Удаление профиля VPN — не зеркальное отражение установки ни в Windows, ни в macOS, ни в Linux, и различия проявляются в самый неподходящий момент. Отрепетируйте удаление один раз на запасном устройстве, чтобы архив стал планом, а не надеждой.

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