klink0v (klink0v) wrote,
klink0v
klink0v

Categories:

Очередные грабли с IPSec (StrongSWAN + Juniper + IKEv2)

Во время строительства очередного IPSec-а опять традиционно походил по граблям. Потерял кучу времени и замудохал саппорт одного хостинг-провайдера. А на самом деле оказались очередные приколы мультивендорной несовместимости.

Короткое лирическое отступление. Прежде чем поднимется собственно IPSec-тоннель (ну или транспорт), стороны должны обменяться друг с другом сеансовыми ключами по протоколу IKE. У него на данный момент есть две ревизии: v1 и v2. Перед генерацией сеансовых ключей должна произойти взаимная аутентификация сторон друг перед другом каким-то из способов. При этом имеет значение, кто из них начинает церемонию, а кто подхватывает. В зависимости от этого та или иная сторона будет называеться Initiator или Responder.

Если обе стороны обладают "честным" ("прямым", "белым") IP-адресом, то любая из них может оказаться как Initiator-ом, так и Responder-ом. Как говорится, кто первым халат одел, тот и доктор initiator.

Далее проводим серию экспериментов, когда у нас с одной стороны StrongSWAN, с другой Juniper SRX. Всякий раз меняем версию IKE, способ аутентификации, роли (initiator-responder). И смотрим что получается или не получается. Результаты занесем в табличку.


Attempt

Initiator

Responder

IKE version

Auth method

Result
1 Juniper SRX Juniper SRX 2 PSK OK
2 Juniper SRX Juniper SRX 2 X509 OK
3 StrongSWAN StrongSWAN 2 PSK OK
4 Juniper SRX StrongSWAN 2 X509 OK
5 StrongSWAN Juniper SRX 2 X509 OK
6 Juniper SRX StrongSWAN 2 PSK OK
7 StrongSWAN Juniper SRX 2 PSK FAIL
8 Juniper SRX StrongSWAN 1 PSK OK
9 StrongSWAN Juniper SRX 1 PSK OK

Первые три строчки не особо интересны. В гомогенном (слово-то какое, тьфу) варианте всегда всё будет нормально работать. Ну в смысле "такой же с таким же". Дальше видим, что в случае аутентификации по сертификатам тоже все норм (RSA или ECDSA). А вот в комбинации "PSK + IKEv2" ждунипер нормально заводит соединение со StrongSWAN, но не наоборот. При этом если откатить всё на IKEv1, то опять всё работает.

Со стороны выглядит это так, что Juniper дает StrongSWAN-у отлуп с мотивацией "Invalid syntax". Везде в мануалах сказано, что это означает неправильный PSK (Pre-shared Key). Но при этом в другую-то сторону всё работает отлично, то есть на самом-то деле он правильный.

Единственное что я смог выяснить пока курил дампы IKE-обмена, это что при аутентификации в сообщении "Identification - Initiator" Juniper шлет StrongSWAN-у более жирный Payload, нежели при обратном процессе. В моих экспериментах разница составляла 213 байт супротив 138. Видимо, Juniper ожидает там получить что-то эх-такое, чего charon ему почему-то прислать не хочет. Но, увы, моей квалификации уже недостаточно для того чтобы разобраться, очередной ли это баг Juniper-а, или же косяк в StrongSWAN.

Как-то так. Шел 21-й век, а запилить нормальную совместимость по IKEv2 так и не шмагли...

UPDATE. Пока больше похоже на косяк StrongSWAN-а. Потому что если портировать тот же конфиг на "старый" stroke-синтаксис, оно таки заводится. А в "новом" VICI-синтаксисе — нет. Есть, конечно, ненулевая вероятность, что я неправильно конфиги портировал. Но очень загадочно всё это...

UPDATE2. Вообще дичь эталонная. Если стартовать только прицельно ike-соединение вот так:

swanctl -i --ike testconn

то хрен вамъ.

Если же стартовать сразу его "ребёнка" вот так:

swanctl -i --child testchild

То всё зашибись.

Попробую запостить баг в StrongSWAN, может чего умного подскажут...

UPDATE3. Похоже, что я вляпался в childless IKE_SA. И в отсутствие их поддержки у Juniper-ов...

Tags: juniper, грабли, железо, сети
Subscribe

  • И снова PostgreSQL

    ... Есть у нас один "проблемный" сервис, который очень сильно нагружает БД PostgreSQL. Вытащили его из общего кластера на отдельную…

  • Вдогонку про IPSec

    Вдогонку к предыдущему посту. Я разобрался в чём косяк. В IKEv2 появилась новая фича: так называемый "childless IKE_SA" (RFC6023). Это…

  • ОколоITшный дыбр #23

    ... Есть такое замечательное упражнение с bash quoting. Когда тебе хочется выполнить какую-нибудь цепочку команд в шелле из-под sudo на удаленной…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 1 comment