IKEv2-клиент на Linux: strongSwan + NetworkManager
На iPhone и Windows IKEv2 подключается парой кликов через системные настройки, а на Linux многие по привычке лезут прямо в ipsec.conf — хотя для клиентской машины это лишняя работа. Плагин network-manager-strongswan даёт тот же результат, что и на других платформах: профиль в списке сетевых подключений, значок в трее, автоподключение при загрузке. Разберём установку плагина, импорт готового профиля и ручную настройку на случай, если файла профиля у вас нет.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Зачем NetworkManager, если есть штатный ipsec
Полноценный пакет strongswan с демоном charon и утилитой ipsec — это, по сути, серверный инструмент: он рассчитан на управление через конфиг-файлы и подходит, когда машина сама выступает VPN-сервером или шлюзом. Настраивать так рабочий ноутбук неудобно: каждое переключение сети требует ручных правок, а само подключение не привязано к GUI, который использует остальная система.
Плагин network-manager-strongswan устроен иначе — это отдельный сервис nm-strongswan-service, который сам линкуется с библиотекой libcharon из состава strongSwan и не нуждается в запущенном системном strongswan/ipsec демоне. NetworkManager просто передаёт ему параметры подключения через D-Bus, а дальше плагин сам поднимает и держит туннель. Практическое следствие: ставить полный strongswan с демонами и systemd-юнитами на клиентскую машину не нужно — только пакет плагина и его зависимости.
Второй плюс — интеграция с остальной сетевой инфраструктурой. NetworkManager сам умеет переключать VPN при смене сети, показывать статус в апплете, применять маршруты и DNS так же, как для Wi-Fi и Ethernet. Если сравнивали IKEv2 с другими протоколами и выбор пал именно на него — например, по описанным в статье «IKEv2 или L2TP: что выбрать» причинам, — связка с NetworkManager на Linux-десктопе логичное продолжение выбора.
Установка network-manager-strongswan
Пакет называется одинаково в духе своей экосистемы, но имя чуть отличается по дистрибутивам. На Ubuntu и Debian:
sudo apt update
sudo apt install network-manager-strongswan
В части версий Ubuntu до недавнего времени GUI-часть шла отдельным пакетом network-manager-strongswan-gnome — на актуальных релизах (24.04 и новее) он обычно уже входит в основной пакет, но если после установки в списке типов VPN нет strongSwan, поищите отдельно:
apt search strongswan | grep -i network-manager
На Fedora пакет называется с заглавной буквы:
sudo dnf install NetworkManager-strongswan NetworkManager-strongswan-gnome
На Arch Linux и производных плагин лежит в AUR:
yay -S networkmanager-strongswan
После установки перезапустите NetworkManager, чтобы он подхватил новый VPN-плагин:
sudo systemctl restart NetworkManager
Если используете KDE, а не GNOME, интерфейс подключения будет через plasma-nm, но сам плагин и его логика — те же самые, отличается только оформление окна.
Арендуйте сервер под свои задачи!
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверЧто нужно получить от сервера перед подключением
Прежде чем что-то импортировать или вбивать руками, соберите четыре вещи со стороны сервера:
- Адрес или домен сервера — то, что стоит в
leftid/--sanпри выпуске сертификата. - Корневой сертификат CA (
ca-cert.pem) — файл, которым клиент проверяет подлинность сервера. Без него подключение либо не установится, либо (если отключить проверку) будет уязвимо к подмене сервера. - Метод авторизации — чаще всего EAP-MSCHAPv2 по логину и паролю, реже клиентский сертификат. Схема генерации сертификатов и добавления EAP-пользователей на стороне сервера разобрана в статье про установку strongSwan на Ubuntu 24.04 — если сервер настраивали по ней, у вас уже всё это есть.
- Логин и пароль (для EAP) либо пара «клиентский сертификат + ключ» (для сертификатной схемы).
Если на сервере несколько учётных записей выданы через сертификаты, а не пароли — это отдельная многопользовательская схема, она описана в статье про multi-user сертификаты strongSwan; для неё на клиенте потребуется importировать не только CA, но и личный сертификат с ключом.
Импорт готового профиля (.sswan)
Самый быстрый путь — если у вас уже есть файл профиля в формате .sswan. Это JSON-файл, который strongSwan использует как переносимый формат конфигурации: тот же файл можно скормить приложению strongSwan на Android, клиенту на Windows и плагину NetworkManager на Linux. Обычно такой файл делает администратор сервера или инструмент вроде strongSwan VICI-скрипта, экспортирующего профиль сразу для всех платформ. Условно он выглядит так:
{
"uuid": "5f2c1a10-9e3b-4a55-8b21-1234567890ab",
"name": "Office VPN",
"type": "ikev2-eap",
"remote": {
"addr": "vpn.example.com"
},
"local": {
"eap_id": "ivan"
}
}
Импорт делается через сам менеджер соединений, а не через файловый менеджер:
- Откройте Настройки сети → VPN → «+» (или через апплет NetworkManager — «Изменить соединения»).
- В списке типов выберите не «IPsec/IKEv2 (strongswan)» напрямую, а пункт «Импортировать сохранённую конфигурацию VPN».
- Укажите путь к
.sswan-файлу. - NetworkManager создаст новое подключение с уже заполненными адресом сервера и типом авторизации — останется только ввести пароль, если он не был встроен в файл (обычно пароли в
.sswanне хранят из соображений безопасности).
Отдельно нужно положить корневой сертификат CA в системное хранилище, если он не был указан прямой ссылкой внутри .sswan:
sudo mkdir -p /etc/ipsec.d/cacerts
sudo cp ca-cert.pem /etc/ipsec.d/cacerts/
Из своего опыта: формат .sswan не всегда полностью совместим между версиями плагина — часть полей (например, специфичные наборы шифров) может игнорироваться NM-плагином, даже если корректно читается Android-клиентом. Если после импорта подключение не поднимается, проще перепроверить и при необходимости донастроить профиль вручную, чем гадать, какое поле не подхватилось.
Ручная настройка через GUI, если профиля нет
Без .sswan-файла профиль собирается вручную — тоже не долго, но потребуются все четыре пункта из раздела выше под рукой.
- Настройки сети → VPN → «+» → IPsec/IKEv2 (strongswan).
- Address — домен или IP сервера.
- Certificate — путь к
ca-cert.pemна диске (кнопка выбора файла рядом с полем). - Authentication → Method: выбрать
EAP (Username/Password)для схемы логин-пароль илиCertificate/Smartcardдля сертификатной. Для EAP ниже появятся поля Username и User password — впишите выданные сервером значения. - Во вкладке Advanced можно задать конкретный набор шифров (Proposal), если сервер требует нестандартный
ike=/esp=— по умолчанию плагин пробует согласовать параметры автоматически, и в большинстве случаев этого достаточно.
После сохранения подключение появится в списке сетей — активировать его можно кликом в апплете или через терминал (следующий раздел).
Отдельная деталь, о которой стоит знать заранее: за IPv6-туннелирование и часть NAT-траверсал настроек в GUI-плагине отвечают не всегда очевидные чекбоксы вроде «Enforce UDP encapsulation» — если сервер стоит за NAT провайдера или в докер-сети, включение этой опции иногда решает проблему «подключение установлено, трафика нет», которую иначе пришлось бы диагностировать по логам.
Подключение и управление через nmcli
Для headless-машин (сервер без GUI, WSL, минимальный дистрибутив) профиль можно и создать, и активировать из терминала. Через nmcli подключение типа VPN добавляется так:
nmcli connection add type vpn ifname '*' con-name "ikev2-office" \
vpn-type strongswan \
vpn.data "address=vpn.example.com, certificate=/etc/ipsec.d/cacerts/ca-cert.pem, method=eap, user=ivan"
Пароль в открытом виде в vpn.data лучше не хранить — задайте его отдельно как секрет соединения:
nmcli connection modify "ikev2-office" +vpn.secrets "password=СложныйПароль123!"
Названия ключей в vpn.data у плагина strongSwan негласно совпадают с полями GUI-редактора (address, certificate, method, user, usercert, userkey, virtual, encap), но могут слегка отличаться между версиями плагина. Надёжный способ узнать точные имена для вашей версии — один раз собрать профиль через GUI, а потом посмотреть его содержимое:
nmcli connection show "ikev2-office" | grep vpn
Дальше подключение и отключение — обычные команды NetworkManager:
nmcli connection up "ikev2-office"
nmcli connection down "ikev2-office"
Проверить, что маршрут действительно ушёл через туннель, а не просто установился:
nmcli connection show --active
curl ifconfig.me
Если внешний IP не сменился на адрес сервера при активном соединении — вероятно, туннель поднялся, но не стал маршрутом по умолчанию (это к вопросу о kill switch и о том, что «зелёная галочка» подключения ещё не значит, что весь трафик реально идёт через VPN — подробнее в статье про kill switch для VPN).
Диагностика и типичные проблемы
Основной источник информации при сбоях — журнал NetworkManager, а не системный journalctl -u strongswan, потому что туннель поднимает встроенный сервис плагина:
journalctl -u NetworkManager -f
Во время попытки подключения там будет видно и вывод самого charon, который использует плагин — ищите строки AUTHENTICATION_FAILED, NO_PROPOSAL_CHOSEN или TS_UNACCEPTABLE.
Частые причины сбоя и что они обычно значат:
| Ошибка в логе | Вероятная причина |
|---|---|
AUTHENTICATION_FAILED | Неверный логин/пароль, либо сервер ждёт другой метод (сертификат вместо EAP) |
NO_PROPOSAL_CHOSEN | Не совпадают наборы шифров — стоит либо убрать жёсткий proposal на клиенте, либо явно прописать тот же набор, что в ike=/esp= на сервере |
certificate has invalid signature / untrusted issuer | CA-сертификат не тот или не тот, что подписывал сертификат сервера — перепроверьте, что скопирован именно актуальный ca-cert.pem |
подключение висит на CONNECTING | Заблокированы UDP 500/4500 на файрволе клиента, сети провайдера или самого сервера |
Отдельно проверяйте DNS после успешного подключения — IKEv2-плагин иногда прописывает DNS-серверы туннеля в резолвер не так, как ожидает systemd-resolved, и часть запросов может продолжать уходить мимо VPN. Как это диагностировать и закрыть, подробно разобрано в статье про проверку и устранение DNS-утечек — те же приёмы применимы и к клиенту на strongSwan/NetworkManager, а не только к коммерческим VPN-приложениям.
Арендуйте сервер под свои задачи!
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Нужно ли ставить полный пакет strongswan вместе с плагином?
Нет, для клиентской роли достаточно network-manager-strongswan — он тянет только нужные библиотеки. Полный пакет с демоном charon-systemd нужен, только если эта же машина будет ещё и сервером или шлюзом.
Можно ли использовать один и тот же .sswan-файл на Linux, Windows и Android?
В теории да, формат общий для клиентов strongSwan. На практике версии плагинов иногда по-разному читают необязательные поля — если что-то не подхватилось на Linux, проще донастроить недостающее вручную через GUI, чем менять исходный файл.
Почему после подключения нет интернета, хотя статус — «Подключено»?
Чаще всего это маршруты или DNS: либо туннель не стал маршрутом по умолчанию, либо DNS всё ещё резолвит через основной интерфейс. Проверьте ip route и resolvectl status после подключения.
Плагин поддерживает подключение по клиентскому сертификату, а не по паролю?
Да, в поле Method GUI-редактора есть вариант Certificate/Smartcard — понадобится указать путь к сертификату и приватному ключу пользователя, выданными сервером по сертификатной схеме.
Автоподключение при старте системы возможно?
Да, в настройках соединения включите опцию «Подключаться автоматически» — NetworkManager поднимет VPN при входе в систему или при появлении сети, в зависимости от выбранной привязки.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →