Windows и strongSwan: согласование четырёх трансформ в предложении IKE
Общего шифра недостаточно, если стороны расходятся в группе обмена ключами. Сравните все четыре трансформы, а затем примените одну ограниченную политику профиля.
Обе стороны поддерживают AES, обе принимают SHA-256, и туннель всё равно не поднимается. Предложение не прошло по компоненту, который никто не сравнил, обычно по группе обмена ключами. Это руководство читает фактический обмен до любых изменений, применяет одну ограниченную политику и оставляет откат, возвращающий прежние параметры.
Прочитайте отказ, прежде чем менять группу
«Ошибка согласования политики» — это сводка, а не диагноз. Она означает, что взаимно приемлемое предложение не найдено, и ничего не говорит о том, какой компонент был отклонён. Относитесь к ней как к началу расследования, а не как к доказательству о конкретной группе.
Ответ обычно находится на стороне сервера. Журнал strongSwan на подходящем уровне перечисляет предложение, полученное от клиента, и предложение, которое он настроен принимать, а разница между двумя списками называет отказавший компонент.
Не считайте, что клиент предлагает то, что сказано в старом сообщении на форуме. Активный профиль и установленная в нём политика определяют предлагаемый список, а обновлённая сборка Windows может предложить другой набор, чем тот, что на снимке экрана, с которого вы копируете.
Запишите оба списка. Четыре позиции трансформ и одна группа — короткий список, и построчное сравнение занимает меньше времени, чем любой эксперимент. Четыре позиции легко удержать в поле зрения. Файл журнала — нет.
Сравнивайте каждую трансформу, а не одно знакомое имя
Предложение IKE — это набор выборов, которые все должны совпасть. Шифрование защищает переговоры, целостность или PRF их удостоверяет, а группа Diffie-Hellman создаёт свежий ключевой материал. Предложение, совпадающее по первым двум и различающееся по третьему, по-прежнему неприемлемо для обеих сторон.
Два поля Windows, которые здесь путают, относятся к разным фазам. DHGroup относится к обмену ключами IKE, а PfsGroup — к дочерней ассоциации, защищающей трафик. Замена второго не исправит отказ в первом.
Имена групп различаются между реализациями, и это отдельный источник путаницы. strongSwan пишет modp2048 и ecp256, а Windows использует имена перечисления, такие как Group14 и ECP256, поэтому сравнение должно сначала перевести. Держите заметку в два столбца с обоими именами. Тогда следующее несовпадение классифицируется за секунды.
| Transform | Windows parameter | strongSwan name | Failure it causes |
|---|---|---|---|
| Encryption | CipherTransformConstants | aes, aes256gcm and similar | No common proposal at all |
| Integrity or PRF | AuthenticationTransformConstants | sha256, sha512 and similar | Proposal rejected after encryption matches |
| Key-exchange group | DHGroup | modp2048, ecp256 | Exchange fails during key establishment |
| Child SA protection | PfsGroup | esp proposal groups | Tunnel negotiates, data association does not |
Примените одну полную и ограниченную политику
Поддерживаемый инструмент для штатного профиля IKEv2 — это политика IPsec для каждого подключения, задаваемая как один объект, а не поле за полем. Сначала просмотрите её, затем примените, а прежние параметры сохраните в записи об изменении.
Set-VpnConnectionIPsecConfiguration -ConnectionName "Northwind IKEv2" -AuthenticationTransformConstants SHA256128 -CipherTransformConstants AES256 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -DHGroup ECP256 -PfsGroup ECP256 -WhatIf
Переключатель -WhatIf показывает локальное изменение в предварительном просмотре и ничего не применяет. Это полезно и одновременно является распространённой ловушкой, потому что предпросмотр доказывает лишь то, что параметры синтаксически допустимы для локального командлета. Примет ли шлюз получившееся предложение, он не говорит.
Заодно согласуйте и область действия. Подключению в хранилище всех пользователей нужен соответствующий параметр для всех пользователей, а правка профиля отдельного пользователя с тем же отображаемым именем меняет другой объект, который туннель не использует.
Затем перед тестом приведите сторону strongSwan к тому же набору. Согласованное изменение на обоих концах — единственный вариант, который сходится; правка одной стороны и повторные попытки дают журнал, полный одинаковых отказов.
Проверьте обмен и перегенерацию ключей по отдельности
Успешное подключение — это одно наблюдение, а перегенерация ключей — другое. Первоначальные переговоры IKE используют один набор параметров, а дочерняя ассоциация, несущая трафик, может позже быть пересогласована со своей политикой. Настройка, которая подключается и затем через время отваливается, обычно относится ко второму случаю.
ipsec statusall | grep -A6 "Northwind"
Get-VpnConnection -Name "Northwind IKEv2" | Format-List *
Первая команда показывает взгляд сервера на установленные ассоциации, включая дочернюю SA и её оставшееся время жизни. Вторая показывает, что теперь содержит профиль клиента, и это единственный способ убедиться, что заданная политика и есть действующая.
Понаблюдайте за полной перегенерацией ключей, прежде чем объявить успех. Это значит оставить подключение поднятым достаточно долго, чтобы дочерняя ассоциация заменилась, и затем убедиться, что трафик продолжается. Большинство несовпадений политики прячется именно на этом шаге, потому что первоначальные переговоры могут пройти с набором, который перегенерация не принимает.
Откат — это прежний набор параметров, а не снисходительный запасной вариант. Если клиент предлагал только слабую старую группу, ответ — улучшить общую политику клиента и сервера, а не добавлять эту группу на шлюз, где любая будущая сторона сможет договориться вниз до неё.
Запишите четыре параметра, группу, область подключения и результат перегенерации. Это короткая заметка, и она — разница между инструкцией и историей о том, как однажды поднялся туннель.