Categories:

OpenWRT + UCI + StrongSWAN + VICI + XFRM

... В качестве "домашней лабораторной работы" настроил на OpenWRT IPSec с использованием последних модных подходов. А именно, конфиг в UCI, StrongSWAN в VICI-режиме, route-based VPN с криптодоменом "0.0.0.0/0" на XFRM-интерфейсе и всё вот это. По ходу пьесы вдоволь находился по граблям, как водится.

Самая главная неприятность — почти что полное отсутствие документации по вопросу. Есть только вот такая статья в вики, да и та не очень точная местами. Лучше чем совсем ничего, конечно. Но многие вещи приходится выяснять методом научного тыка. Мне самому не очень понятно кому и зачем в принципе понадобилось городить отдельную обёртку на конфиг StrongSWAN-а в виде UCI. Но так оно хотя бы точно забекапится при генерации архива конфигурации штатными средствами.

Далее, почему-то далеко не все настройки применяются "на лету". Хотя вроде бы это всё тот же Linux, в чём разница? Но нет, после того как я установил пакет "luci-proto-xfrm", пришлось перезагружать роутер целиком. Без этого и LUCI мне ныла "неподдерживаемый протокол", и "ifup xfrm0" просто молча отказывался что-либо сделать без выдачи какого-либо отлупа. После перезагрузки всё вылечилось само по себе. Аналогично, когда я в какой-то момент обновил библиотеку wolfssl, у меня сломался opkg. И опять же, помогла только полная перезагрузка роутера. Загадочно всё это.

Но самая главная подстава — это то, что демон "charon" в OpenWRT супер-молчаливый и мега-капризный. С ним я промудохался больше всего. Все его модули вынесены в отдельные пакеты, которые вот ни разу не прописаны в зависимости для "strongswan-charon", но без некоторых из них charon просто молча не запустится, потому что жёстко завязан на библиотеки типа "strongswan-mod-nonce" или "strongswan-mod-sha1". А ты сиди и гадай что же ему невкусно. Плюс, вот этот парсер на shell, делающий из UCI-конфига swanctl-ный. Если ему что-то не понравится, он тоже не выплюнет никакой ошибки, но и работать ничего не будет.

Отдельно доставляет, что некоторые библиотеки реализуют одни и те же функции charon-а, только в разных вариантах. Например, "strongswan-mod-kernel-netlink" и "strongswan-mod-kernel-libipsec". Можно поставить обе "для надежности", но тогда тоннель не запустится со странным отлупом типа "IPsec SA: only UDP encapsulation is supported". Это означает, что нужно удалить плагин "strongswan-mod-kernel-libipsec" и оставить только netlink-овскую модификацию. Ну очевидно же, правда?

Также нужно понимать какие именно функции реализуются ядром, а какие в user-space. Спойлер: первая фаза в user-space, вторая фаза в kernel-space. Так, к примеру, если хочется строить с шифрами AES-256-GCM в обеих фазах, то понадобятся пакеты "strongswan-mod-gcm" и "kmod-crypto-gcm". При этом не забывать, что для обмена ключами в первой фазе charon также использует userspace-ные ssl-библиотеки (openssl либо wolfssl). А то я в процессе настройки словил ошибку, от которой долго приходил в себя: "DH group ECP_256 unacceptable, requesting ECP_256". Это всего-навсего означает, что в системе нет пакета "strongswan-mod-wolfssl" (ну или "strongswan-mod-openssl" в зависимости от предпочтений). Тоже ведь совершенно очевидно, да?

Из существенных мелочей ещё можно отметить вот что.


  • Не стоит прибивать гвоздями charon-а к конкретному интерфейсу, как это рекомендуется делать в официальной вики. Если этот интерфейс настроен не статикой, то при загрузке роутера он не успеет получить адрес до запуска charon-а. Последний в таком случае просто не стартует автоматически.

  • XFRM-интерфейс настраивается в UCI аналогично GRE, двумя секциями. Сначала сам линк, потом алиас на него с указанием IP-адреса (если нужен). Видать, по-другому не вписывается в концепцию UCI.

  • Статический маршрут нужно привязывать не к "основному" интерфейсу, как указано в вики, а именно что к алиасу. Иначе не работает, проверено.

"На закуску" для памяти, для примера приведу рабочий конфиг "/etc/config/ipsec" с вымаранными IP-адресами и PSK, разумеется. С другой стороны этот тоннель терминируется на Juniper SRX, если это важно.

Всем хороших роутеров и работающих тоннелей.