Home » Настройка VPN сервера IKEv2 с StrongSwan на Ubuntu 24
Настройка VPN сервера IKEv2 с StrongSwan на Ubuntu 24

Настройка VPN сервера IKEv2 с StrongSwan на Ubuntu 24

Сегодня поговорим о том, как поднять VPN-сервер на базе IKEv2 с помощью StrongSwan на Ubuntu 24. Это одна из самых эффективных и безопасных связок для создания VPN-туннелей. StrongSwan — это open-source IPsec-демон, который отлично работает с протоколом IKEv2, обеспечивая высокую скорость соединения и автоматическое переподключение при смене сети.

Если вы админите серверы и хотите получить производительный VPN для команды или личного использования, то IKEv2 + StrongSwan — это выбор профессионалов. Протокол изначально создавался для мобильных устройств, поэтому он отлично справляется с нестабильными соединениями и быстро восстанавливает связь.

Почему именно IKEv2 и StrongSwan?

IKEv2 (Internet Key Exchange version 2) — это современный протокол для установки IPsec-соединений. В отличие от OpenVPN, который работает в userspace, IKEv2 использует встроенную в ядро поддержку IPsec, что дает серьезный прирост производительности.

StrongSwan — де-факто стандарт для IPsec на Linux. Проект активно развивается с 2005 года и поддерживает все современные криптографические алгоритмы. Главные преимущества:

  • Высокая производительность благодаря работе в kernel space
  • Автоматическое переподключение при смене сети (MOBIKE)
  • Нативная поддержка в iOS, macOS, Windows 10/11
  • Возможность использования сертификатов для аутентификации
  • Поддержка EAP-методов аутентификации

Сравнение с другими VPN-решениями

Параметр IKEv2/StrongSwan OpenVPN WireGuard
Производительность Высокая (kernel space) Средняя (userspace) Очень высокая
Стабильность соединения Отличная (MOBIKE) Хорошая Хорошая
Нативная поддержка клиентов Да (iOS, macOS, Windows) Нет Частично
Сложность настройки Средняя Простая Простая
Обход блокировок Средний Отличный Плохой

Подготовка сервера

Для начала нам понадобится VPS с Ubuntu 24.04. Рекомендую взять сервер с минимум 1GB RAM и 1 CPU core. Если планируете много одновременных подключений, то лучше заказать VPS помощнее или даже выделенный сервер.

Обновляем систему и устанавливаем необходимые пакеты:

sudo apt update && sudo apt upgrade -y
sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins -y
sudo apt install certbot -y

Включаем IP forwarding для маршрутизации трафика:

echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Создание PKI инфраструктуры

Одна из крутых фич IKEv2 — возможность использовать сертификаты для аутентификации. Это намного безопаснее PSK (Pre-Shared Key) и позволяет легко управлять доступом пользователей.

Создаем структуру каталогов для сертификатов:

mkdir -p ~/pki/{cacerts,certs,private}
chmod 700 ~/pki

Генерируем корневой сертификат CA:

cd ~/pki
ipsec pki --gen --type rsa --size 4096 --outform pem > private/ca-key.pem
ipsec pki --self --ca --lifetime 3652 --in private/ca-key.pem --type rsa \
    --dn "CN=VPN Root CA" --outform pem > cacerts/ca-cert.pem

Генерируем сертификат для сервера (замените your-server.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=your-server.com" \
    --san your-server.com --flag serverAuth --flag ikeIntermediate \
    --outform pem > certs/server-cert.pem

Копируем сертификаты в системную директорию:

sudo cp ~/pki/cacerts/ca-cert.pem /etc/ipsec.d/cacerts/
sudo cp ~/pki/certs/server-cert.pem /etc/ipsec.d/certs/
sudo cp ~/pki/private/server-key.pem /etc/ipsec.d/private/
sudo chown root:root /etc/ipsec.d/private/server-key.pem
sudo chmod 600 /etc/ipsec.d/private/server-key.pem

Настройка StrongSwan

Теперь настраиваем основную конфигурацию StrongSwan. Создаем файл /etc/ipsec.conf:

sudo tee /etc/ipsec.conf > /dev/null <

Создаем файл с секретами для пользователей /etc/ipsec.secrets:

sudo tee /etc/ipsec.secrets > /dev/null <

Устанавливаем правильные права доступа:

sudo chmod 600 /etc/ipsec.secrets

Настройка файрвола

Настраиваем UFW для работы с VPN. Сначала разрешаем необходимые порты:

sudo ufw allow OpenSSH
sudo ufw allow 500/udp
sudo ufw allow 4500/udp

Редактируем файл /etc/ufw/before.rules и добавляем правила NAT в начало файла (после комментариев):

sudo tee -a /etc/ufw/before.rules > /dev/null <

Также нужно отредактировать /etc/ufw/before.rules и добавить правила для ESP и AH протоколов перед строкой # drop INVALID packets:

# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT

# allow ESP traffic
-A ufw-before-input -p esp -j ACCEPT

# allow AH traffic
-A ufw-before-input -p ah -j ACCEPT

# allow IPsec traffic
-A ufw-before-input -p udp --dport 500 -j ACCEPT
-A ufw-before-input -p udp --dport 4500 -j ACCEPT

# allow forwarding for trusted network
-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT

Включаем UFW:

sudo ufw enable
sudo ufw reload

Запуск и тестирование

Запускаем StrongSwan и добавляем в автозагрузку:

sudo systemctl enable strongswan-starter
sudo systemctl start strongswan-starter
sudo systemctl status strongswan-starter

Проверяем конфигурацию:

sudo ipsec verify

Если все настроено правильно, вы должны увидеть что-то вроде:

Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                                [OK]
Libreswan 4.x IPsec on Ubuntu 24.04                           [OK]
Checking for IPsec support in kernel                          [OK]
...

Перезагружаем IPsec:

sudo ipsec reload
sudo ipsec status

Создание сертификатов для клиентов

Для каждого клиента можно создать отдельный сертификат. Это более безопасно чем EAP-аутентификация:

cd ~/pki
ipsec pki --gen --type rsa --size 4096 --outform pem > private/client-key.pem
ipsec pki --pub --in private/client-key.pem --type rsa | \
    ipsec pki --issue --lifetime 1825 --cacert cacerts/ca-cert.pem \
    --cakey private/ca-key.pem --dn "CN=client@your-server.com" \
    --san client@your-server.com --flag clientAuth --outform pem > certs/client-cert.pem

Для удобства можно создать PKCS#12 файл для импорта в клиентские приложения:

openssl pkcs12 -export -inkey private/client-key.pem -in certs/client-cert.pem -name "client@your-server.com" -certfile cacerts/ca-cert.pem -caname "VPN Root CA" -out client.p12

Настройка клиентов

iOS/macOS:

  • Установите сертификат CA через Safari или AirDrop
  • В настройках VPN выберите IKEv2
  • Введите адрес сервера и данные для аутентификации

Windows 10/11:

  • Импортируйте сертификат CA в “Доверенные корневые центры сертификации”
  • Создайте VPN-подключение типа IKEv2
  • Используйте EAP-аутентификацию

Android:

  • Используйте strongSwan приложение из Google Play
  • Импортируйте сертификат CA и настройте профиль

Мониторинг и отладка

Для мониторинга состояния VPN-соединений используйте:

# Просмотр активных соединений
sudo ipsec status

# Просмотр логов
sudo journalctl -u strongswan-starter -f

# Перезагрузка конфигурации
sudo ipsec reload

# Принудительное завершение всех соединений
sudo ipsec down ikev2-vpn

Для отладки увеличьте уровень логирования в /etc/ipsec.conf:

config setup
    charondebug="ike 2, knl 2, cfg 2, net 2, asn 2, enc 2, lib 2, esp 2, tls 2, tnc 2, imc 2, imv 2, pts 2"

Автоматизация и скрипты

Создаем скрипт для автоматического добавления пользователей:

#!/bin/bash
# add_vpn_user.sh

USERNAME=$1
PASSWORD=$2

if [ -z "$USERNAME" ] || [ -z "$PASSWORD" ]; then
    echo "Usage: $0  "
    exit 1
fi

# Добавляем пользователя в secrets
echo "$USERNAME : EAP \"$PASSWORD\"" | sudo tee -a /etc/ipsec.secrets

# Перезагружаем конфигурацию
sudo ipsec reload

echo "User $USERNAME added successfully"

Скрипт для мониторинга активных соединений:

#!/bin/bash
# vpn_monitor.sh

while true; do
    clear
    echo "=== VPN Connections Status ==="
    echo "Date: $(date)"
    echo
    
    # Активные соединения
    sudo ipsec status | grep -E "(ESTABLISHED|INSTALLED)"
    
    # Статистика использования
    echo
    echo "=== Traffic Statistics ==="
    sudo ipsec statusall | grep -A2 -B2 "bytes"
    
    sleep 30
done

Оптимизация производительности

Для повышения производительности на высоконагруженных серверах:

# Увеличиваем лимиты в /etc/security/limits.conf
echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf

# Оптимизируем сетевые параметры
sudo tee -a /etc/sysctl.conf > /dev/null <

Безопасность и best practices

Несколько важных рекомендаций по безопасности:

  • Используйте сильные пароли или лучше сертификаты для аутентификации
  • Регулярно обновляйте систему и StrongSwan
  • Настройте fail2ban для защиты от брутфорса
  • Используйте отдельные сертификаты для каждого клиента
  • Настройте ротацию логов

Установка и настройка fail2ban:

sudo apt install fail2ban -y

# Создаем jail для StrongSwan
sudo tee /etc/fail2ban/jail.local > /dev/null <

Интеграция с другими системами

StrongSwan можно интегрировать с различными системами аутентификации:

  • LDAP/Active Directory — для корпоративных сред
  • RADIUS — для интеграции с существующими AAA-системами
  • SQL базы данных — для динамического управления пользователями

Пример интеграции с MySQL:

sudo apt install libcharon-extra-plugins -y

# В /etc/strongswan.d/charon/sql.conf
sql {
    database = mysql://strongswan:password@localhost/strongswan
    load = yes
}

Интересные факты и нестандартные применения

StrongSwan может использоваться не только для remote access VPN, но и для:

  • Site-to-Site VPN — соединение офисов
  • Container networking — защищенные соединения между Docker контейнерами
  • IoT security — защита коммуникаций IoT устройств
  • Cloud interconnect — соединение с AWS VPC, Azure VNet

Любопытно, что StrongSwan поддерживает даже экзотические алгоритмы шифрования, включая российские ГОСТ алгоритмы (при наличии соответствующих плагинов).

Заключение и рекомендации

IKEv2 с StrongSwan — это надежное, производительное и безопасное решение для VPN. Оно особенно подходит для случаев, когда нужна стабильная работа на мобильных устройствах и высокая производительность.

Рекомендую использовать когда:

  • Нужна максимальная совместимость с нативными клиентами
  • Важна стабильность соединения при смене сетей
  • Требуется высокая производительность
  • Планируется корпоративное использование

Не рекомендую если:

  • Нужен обход блокировок (лучше использовать OpenVPN с обфускацией)
  • Требуется максимальная простота настройки (WireGuard проще)
  • Работаете в странах с агрессивным DPI

StrongSwan продолжает активно развиваться, и сообщество регулярно выпускает обновления. Следите за новостями на официальном сайте https://strongswan.org и не забывайте обновлять систему.

Удачи в настройке! Если что-то пошло не так — внимательно изучите логи, обычно там есть вся необходимая информация для диагностики проблем.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked