IKEv2 (strongSwan) на Ubuntu 24.04: пошаговая установка
IKEv2/IPsec — протокол, который не нужно объяснять большинству устройств: поддержка встроена в iOS, macOS, Windows и Android без сторонних приложений. Это удобно, когда VPN настраивают не только себе, но и коллегам или родственникам, которым не хочется ставить дополнительный клиент. Разберём установку strongSwan на Ubuntu 24.04 с нуля: сертификаты, конфиг, добавление пользователей и проверку, что всё действительно работает.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Почему IKEv2, а не WireGuard или OpenVPN
У IKEv2 есть одно практическое преимущество перед конкурентами — нативная поддержка в операционных системах. На iPhone и Mac профиль IKEv2 можно установить через встроенные настройки VPN, без App Store. На Windows протокол тоже поддерживается системным клиентом. Для сравнения, WireGuard и OpenVPN требуют отдельного приложения на каждой платформе — подробнее об этом можно почитать в сравнении WireGuard и OpenVPN, логика применима и к IKEv2.
Второй плюс — устойчивость к смене сети. Протокол построен на MOBIKE (RFC 4555), поэтому при переключении с Wi-Fi на мобильный интернет туннель не рвётся, а просто перепривязывается к новому IP. На практике это заметно на телефоне: соединение не разваливается, когда вы выходите из дома и телефон переключается на LTE.
Минусы тоже стоит назвать честно. Конфигурация strongSwan заметно сложнее, чем у WireGuard — сертификаты, несколько демонов, разные варианты авторизации. Отладка при ошибках подключения требует чтения логов, а не одной команды. Если вам нужен максимально простой личный VPN и не критична нативная поддержка на всех устройствах, установка WireGuard на Ubuntu 24.04 займёт меньше времени. IKEv2 имеет смысл выбирать именно ради совместимости с готовыми клиентами ОС и переносимости между сетями.
Подготовка сервера и установка strongSwan
Понадобится сервер на Ubuntu 24.04 с публичным IP — 1 vCPU и 1 ГБ RAM достаточно для десятков одновременных клиентов, IPsec не требователен к ресурсам. Обновите систему и поставьте пакеты:
apt update && apt upgrade -y
apt install strongswan strongswan-pki libcharon-extra-plugins libstrongswan-extra-plugins -y
Пакет libcharon-extra-plugins нужен для EAP-авторизации по логину и паролю — без него strongSwan не сможет проверять пользователей через ipsec.secrets. Включите пересылку пакетов в ядре:
echo "net.ipv4.ip_forward=1" | tee -a /etc/sysctl.conf
sysctl -p
Проверьте, что служба запускается:
systemctl enable --now strongswan-starter
systemctl status strongswan-starter
Если сервис называется иначе (в некоторых сборках — strongswan), уточните имя через systemctl list-units | grep strong.
Арендуйте сервер под свои задачи!
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверГенерация сертификатов CA и сервера
IKEv2 в связке со strongSwan обычно строят на асимметричной схеме: сервер предъявляет клиенту сертификат, подписанный собственным CA, а клиенты авторизуются логином и паролем через EAP — без выпуска индивидуального сертификата на каждого пользователя. Это заметно упрощает добавление новых людей.
Создайте рабочую директорию и корневой сертификат:
mkdir -p ~/pki/{cacerts,certs,private}
chmod 700 ~/pki
cd ~/pki
ipsec pki --gen --type rsa --size 4096 --outform pem > private/ca-key.pem
ipsec pki --self --ca --lifetime 3650 \
--in private/ca-key.pem --type rsa \
--dn "CN=VPN Root CA" \
--outform pem > cacerts/ca-cert.pem
Теперь сертификат сервера, подписанный этим CA. Замените vpn.example.com на реальный домен или IP вашего сервера:
ipsec pki --gen --type rsa --size 4096 --outform pem > private/server-key.pem
ipsec pki --pub --in private/server-key.pem --type rsa | \
ipsec pki --issue --lifetime 1825 \
--cacert cacerts/ca-cert.pem \
--cakey private/ca-key.pem \
--dn "CN=vpn.example.com" \
--san "vpn.example.com" \
--flag serverAuth --flag ikeIntermediate \
--outform pem > certs/server-cert.pem
Если у сервера нет домена, укажите в --dn и --san IP-адрес — только учтите, что некоторые клиенты (в частности iOS) охотнее принимают IKEv2-профили с доменным именем, чем с голым IP.
Скопируйте файлы в системные директории strongSwan:
cp ~/pki/cacerts/ca-cert.pem /etc/ipsec.d/cacerts/
cp ~/pki/certs/server-cert.pem /etc/ipsec.d/certs/
cp ~/pki/private/server-key.pem /etc/ipsec.d/private/
chmod 600 /etc/ipsec.d/private/server-key.pem
Файл ca-cert.pem позже понадобится каждому клиенту — это единственное, что нужно установить на устройство, чтобы оно доверяло вашему серверу.
Настройка ipsec.conf и ipsec.secrets
Отредактируйте /etc/ipsec.conf, сохранив предыдущее содержимое в сторону при необходимости:
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftid=@vpn.example.com
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.10.10.0/24
rightdns=1.1.1.1,8.8.8.8
rightsendcert=never
eap_identity=%identity
ike=aes256-sha256-modp2048,aes256-sha1-modp2048,aes128-sha256-modp2048!
esp=aes256-sha256,aes256-sha1,aes128-sha256!
Ключевые строки: leftid должен совпадать с CN/SAN из сертификата сервера, иначе клиенты будут получать ошибку проверки идентичности. rightsourceip — подсеть, из которой сервер будет раздавать адреса клиентам; она не должна пересекаться с реальной сетью сервера. ike= и esp= фиксируют набор шифров — это не обязательно, но так вы явно контролируете, какая криптография используется, вместо того чтобы полагаться на дефолты пакета.
В /etc/ipsec.secrets укажите закрытый ключ сервера и первого пользователя:
: RSA server-key.pem
ivan : EAP "СложныйПароль123!"
Формат логин : EAP "пароль" — это и есть учётная запись клиента. Права на файл должны быть закрытыми:
chmod 600 /etc/ipsec.secrets
Перезапустите службу и проверьте синтаксис:
ipsec restart
ipsec statusall
Файрвол, NAT и добавление пользователей
IKEv2 использует UDP 500 (согласование) и UDP 4500 (NAT-T, передача данных, если между клиентом и сервером есть NAT). Откройте порты:
ufw allow 500/udp
ufw allow 4500/udp
Базовые правила самого файрвола и подход к UFW на Ubuntu 24.04 разобраны в отдельной статье про настройку файрвола UFW — если вы ещё не закрывали остальные порты сервера, стоит сделать это заодно.
Для маскарадинга трафика клиентов добавьте правило NAT. Проще всего — через /etc/ufw/before.rules, вставив перед строкой *filter:
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT
Замените eth0 на имя внешнего интерфейса сервера (узнать его: ip route | grep default). Примените изменения:
ufw disable && ufw enable
Добавление нового пользователя после этого — одна строка в /etc/ipsec.secrets:
: RSA server-key.pem
ivan : EAP "СложныйПароль123!"
maria : EAP "ЕщёОдинПароль456!"
и перезагрузка секретов без остановки туннелей у остальных:
ipsec rereadsecrets
Отдельные сертификаты клиентам в этой схеме не нужны — только пароль и файл ca-cert.pem, о котором ниже.
Подключение клиентов
На всех платформах логика одна: установить ca-cert.pem как доверенный корневой сертификат и создать IKEv2-профиль с адресом сервера, логином и паролем.
iOS / macOS. Отправьте ca-cert.pem на устройство (почтой, AirDrop или через ссылку), откройте файл — система предложит установить профиль сертификата. Затем в Настройки → VPN → Добавить конфигурацию → IKEv2 укажите адрес сервера, Remote ID (тот же vpn.example.com), логин и пароль.
Windows. Импортируйте ca-cert.pem в хранилище «Доверенные корневые центры сертификации» (certmgr.msc), затем создайте VPN-подключение стандартными средствами Windows с типом IKEv2 и авторизацией по логину/паролю.
Android. Нативная поддержка IKEv2 ограничена, надёжнее поставить приложение strongSwan из Google Play, импортировать в него ca-cert.pem и создать профиль с типом «IKEv2 EAP (Username/Password)».
Таблица для быстрой сверки:
| Платформа | Клиент | Импорт CA | Тип авторизации |
|---|---|---|---|
| iOS / macOS | Встроенный | Через профиль | Username/Password |
| Windows 10/11 | Встроенный | certmgr.msc | Username/Password |
| Android | strongSwan (Google Play) | В приложении | IKEv2 EAP |
| Linux | strongSwan / NetworkManager | В /etc/ipsec.d/cacerts | Username/Password |
Проверка подключения и диагностика
После подключения клиента проверьте активные сессии на сервере:
ipsec statusall
В выводе должна появиться строка с именем соединения ikev2-vpn, состоянием ESTABLISHED и выданным IP из диапазона 10.10.10.0/24. Если соединение падает сразу после согласования, смотрите системный журнал:
journalctl -u strongswan-starter -f
Частые причины сбоя на этом этапе: несовпадение leftid с данными сертификата, закрытые порты 500/4500 на файрволе облачного провайдера (проверьте не только UFW, но и правила в панели хостинга), либо забытый ipsec rereadsecrets после правки файла с паролями.
Проверить, что трафик действительно идёт через туннель, проще всего сравнив внешний IP до и после подключения — curl ifconfig.me с клиента должен вернуть IP сервера, а не домашний или мобильный. Если IP не меняется, но само VPN-соединение установлено, — вероятно, проблема в rightsourceip или в правиле MASQUERADE, которое не сработало.
Отдельно стоит сказать честно: strongSwan в этой конфигурации по умолчанию использует классический ipsec.conf, хотя современный strongSwan постепенно переходит на swanctl и VICI-интерфейс. На Ubuntu 24.04 схема с ipsec.conf по-прежнему полностью рабочая и поддерживаемая, но если вы позже увидите в документации примеры с swanctl.conf — это не ошибка, а альтернативный способ настройки того же демона charon, миграция на него не обязательна для стабильной работы.
Арендуйте сервер под свои задачи!
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Чем IKEv2 отличается от IPsec вообще?
IPsec — это набор протоколов шифрования и аутентификации трафика, а IKEv2 — протокол согласования ключей поверх него. Когда говорят «IKEv2 VPN», обычно имеют в виду именно связку IKEv2 + IPsec, как в этой статье.
Можно ли добавить клиентские сертификаты вместо EAP-паролей?
Да, strongSwan поддерживает и такую схему (взаимная сертификатная аутентификация), но она требует выпуска и раздачи отдельного сертификата на каждое устройство — для большинства сценариев EAP с логином и паролем практичнее.
Почему подключение работает из дома, но не работает в кафе или с мобильного интернета?
Скорее всего, провайдер или сеть блокирует UDP 500/4500 либо агрессивно режет NAT-трафик. В таких сетях протокол вроде WireGuard на нестандартном порту иногда проходит там, где IKEv2 — нет.
Нужен ли домен или подойдёт голый IP?
IP работает, но домен надёжнее: часть клиентов (особенно iOS) требовательнее проверяет соответствие CN/SAN в сертификате при подключении по имени, чем по адресу.
Как отозвать доступ пользователя?
Удалите его строку из /etc/ipsec.secrets и выполните ipsec rereadsecrets. Активную сессию это не оборвёт мгновенно — при необходимости завершите её отдельно через ipsec down <имя-соединения>.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →