Гид по технологиям

Установка IKEv2 VPN на CentOS 7 с strongSwan и Let's Encrypt

• 6 min read • VPN • Обновлено 18 Nov 2025
IKEv2 VPN на CentOS 7: strongSwan + Let's Encrypt
IKEv2 VPN на CentOS 7: strongSwan + Let's Encrypt

Логотип strongSwan или схема VPN

В статье показано пошаговое развёртывание IKEv2 VPN на CentOS 7 с использованием strongSwan и сертификатов Let’s Encrypt. Вы установите пакеты, получите TLS-сертификат через certbot, настроите ipsec.conf и ipsec.secrets, включите NAT и форвардинг, а затем протестируете подключение на macOS и Android.

Кому эта инструкция полезна

  • Системным администраторам, которые хотят настроить безопасный удалённый доступ.
  • Инженерам, которым нужен IKEv2 с EAP-MSCHAPv2 и сертификатами от Let’s Encrypt.

Быстрая справка по терминам

  • IKEv2 — протокол обмена ключами для IPSec.
  • EAP-MSCHAPv2 — метод аутентификации пользователей (пароль).
  • certbot — клиент для получения сертификатов от Let’s Encrypt.

Основные шаги

  1. Установка strongSwan.
  2. Получение TLS-сертификата через certbot.
  3. Настройка конфигурации strongSwan.
  4. Включение NAT в firewalld.
  5. Включение пересылки пакетов (port-forwarding).
  6. Тестирование на клиентах.

Преимущества выбранного подхода

  • IKEv2 стабильнее и быстрее в мобильных сетях по сравнению с IKEv1.
  • Let’s Encrypt даёт бесплатные TLS-сертификаты и автоматизацию выдачи.
  • strongSwan — зрелая реализация IPSec с поддержкой IKEv2 и EAP.

Требования

  • Сервер с CentOS 7.
  • Доменное имя, указывающее на сервер (в примере используется ikev2.hakase-labs.io).
  • root-права или sudo.

Подготовка окружения: общие рекомендации

  • Убедитесь, что порт 80 открыт для выдачи сертификата (certbot standalone).
  • Если сервер за NAT, пробросьте 80 и 443 на него или используйте ACME DNS-валидацию.
  • Проверьте часовой пояс и корректность времени — TLS зависит от времени.

Шаг 1 — Установка strongSwan

Установите EPEL и пакет strongswan:

yum -y install epel-release
yum -y install strongswan

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

systemctl start strongswan
systemctl enable strongswan
systemctl status strongswan

Установка strongSwan на CentOS 7

Шаг 2 — Получение TLS-сертификата через Let’s Encrypt

Мы используем certbot в режиме standalone. Установите certbot:

yum -y install certbot

Откройте HTTP и HTTPS в firewalld, чтобы certbot смог подтвердить владение доменом:

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

Получение сертификата Let's Encrypt

Запросите сертификат (вставьте ваш email и домен):

certbot certonly --rsa-key-size 4096 --standalone --agree-tos --no-eff-email --email your-email@example.com -d ikev2.hakase-labs.io

Сертификаты будут в каталоге /etc/letsencrypt/live/ikev2.hakase-labs.io. Копируем файлы в директории strongSwan:

cp /etc/letsencrypt/live/ikev2.hakase-labs.io/fullchain.pem /etc/strongswan/ipsec.d/certs/
cp /etc/letsencrypt/live/ikev2.hakase-labs.io/privkey.pem /etc/strongswan/ipsec.d/private/
cp /etc/letsencrypt/live/ikev2.hakase-labs.io/chain.pem /etc/strongswan/ipsec.d/cacerts/

Проверьте структуру:

tree /etc/strongswan/ipsec.d/

Файлы сертификатов

Важно: certbot нужно будет периодически обновлять сертификат (например, cron). Если использовать standalone, остановите процесс, занимающий порт 80, на время обновления.

Шаг 3 — Конфигурация strongSwan

Сделайте резервную копию дефолтного ipsec.conf и создайте новый:

cd /etc/strongswan/
mv ipsec.conf ipsec.conf.asli
vim ipsec.conf

Вставьте следующую конфигурацию (это полный рабочий пример):

#global configuration IPsec
#chron logger
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

#define new ipsec connection
conn hakase-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    ike=aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes256-aes128-sha256-sha1-modp2048-modp4096-modp1024,aes256-sha1-modp1024,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16-aes256gcm12-aes128gcm16-aes128gcm12-sha256-sha1-modp2048-modp4096-modp1024,3des-sha1!
    esp=aes128-aes256-sha1-sha256-modp2048-modp4096-modp1024,aes128-sha1,aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes128gcm12-aes128gcm16-aes256gcm12-aes256gcm16-modp2048-modp4096-modp1024,aes128gcm16,aes128gcm16-ecp256,aes256-sha1,aes256-sha256,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16,aes256gcm16-ecp384,3des-sha1!
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    [email protected]
    leftcert=fullchain.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.15.1.0/24
    rightdns=1.1.1.1,8.8.8.8
    rightsendcert=never
    eap_identity=%identity

Сохраните и выйдите.

Пояснения конфигурации:

  • conn hakase-vpn — имя туннеля.
  • left — серверная сторона; leftcert указывает на fullchain.pem.
  • right — клиенты; rightauth=eap-mschapv2 задаёт аутентификацию по паролю.
  • rightsourceip — пул приватных адресов для клиентов.

Теперь задайте секреты и логины в ipsec.secrets:

vim ipsec.secrets

Вставьте:

: RSA "privkey.pem"
hakase : EAP "hakase321@"
tensai : EAP "tensai321@"

Это файл, где серверный приватный ключ указывается через privkey.pem, а EAP-учётные записи хранятся в формате user : EAP “password”.

Перезапустите и проверьте strongSwan:

systemctl restart strongswan
systemctl status strongswan
ipsec statusall

Шаг 4 — Включение NAT в firewalld

Разрешите IPsec-протоколы AH и ESP и UDP-порты для IKE/IPsec:

firewall-cmd --zone=public --permanent --add-rich-rule='rule protocol value="esp" accept'
firewall-cmd --zone=public --permanent --add-rich-rule='rule protocol value="ah" accept'
firewall-cmd --zone=public --permanent --add-port=500/udp
firewall-cmd --zone=public --permanent --add-port=4500/udp
firewall-cmd --zone=public --permanent --add-service="ipsec"
firewall-cmd --zone=public --permanent --add-masquerade
firewall-cmd --reload

Проверьте правила:

firewall-cmd --list-all

Настройки NAT в firewalld

Шаг 5 — Включение пересылки пакетов

Откройте sysctl.conf и включите ip_forward:

vim /etc/sysctl.conf

Добавьте или измените строки:

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

Примените изменения:

sysctl -p
systemctl restart strongswan

Настройка port forwarding в sysctl.conf

Шаг 6 — Тестирование подключения

Тест на macOS

  1. Откройте Системные настройки → Сеть.
  2. Нажмите +, создайте подключение: Interface = VPN, VPN Type = IKEv2, Service Name = IKEv2-vpn.
  3. В Server Address и Remote ID укажите ikev2.hakase-labs.io.
  4. В Authentication Settings выберите Username и укажите логин/пароль (например, tensai / tensai321@).
  5. Подключитесь.

Настройка VPN на macOS

После успешного подключения клиент получит адрес из пула 10.15.1.0/24 (в примере 10.15.1.1).

Параметры аутентификации macOS

Тест на Android

  1. Установите приложение strongSwan VPN Client из Google Play.
  2. Создайте профиль IKEv2 EAP, укажите сервер ikev2.hakase-labs.io и логин/пароль.
  3. Подключитесь и проверьте доступ к ресурсам через VPN.

Настройка VPN на Android

Отладка и типичные ошибки

Команды для диагностики:

ipsec statusall
journalctl -u strongswan -f
journalctl -u strongswan --since "1 hour ago"
ss -lunp | grep 500
tcpdump -n -i any port 500 or port 4500 or proto 50 or proto 51
firewall-cmd --list-all

Частые проблемы и решения:

  • Сертификат не выдан: проверьте, что порт 80 открыт и домен указывает на сервер.
  • Клиент не проходит аутентификацию: проверьте формат в ipsec.secrets и кодировку файла.
  • NAT/порт 4500: если сервер за NAT, нужен порт 4500/UDP для NAT-T.
  • Проблемы с шифрами: клиенты могут не поддерживать набор сильных шифров — упростите ike/esp временно для теста.

Рекомендация при сложных сбоях: включите логирование на уровне charondebug=”ike 2, knl 2, cfg 2” временно и анализируйте journalctl.

Безопасность и hardening

  • Ограничьте доступ к management-интерфейсу strongSwan и к файлам приватных ключей.
  • Храните privkey.pem с правами 600 и владельцем root.
  • Используйте сильные пароли для EAP-пользователей или применяйте двухфакторную аутентификацию (при возможности).
  • Периодически обновляйте и проверяйте сертификаты Let’s Encrypt (renew).
  • Рассмотрите использование RSA 4096 или ECDSA ключей для более высокой криптографической стойкости.

Когда этот метод не подходит

  • Нужна аутентификация на уровне устройства с MFA — EAP-MSCHAPv2 может быть недостаточен.
  • Если необходима совместимость со старым ПО, требующим IKEv1.
  • В окружениях, где нельзя открывать 80/443, проще использовать DNS-валидатор ACME.

Руководство по развертыванию (SOP)

  1. Резервная копия: snapshot сервера или резерв копий конфигов.
  2. Установка пакетов: epel + strongswan + certbot.
  3. Получение сертификата: certbot certonly.
  4. Копирование certs в /etc/strongswan/ipsec.d.
  5. Настройка ipsec.conf и ipsec.secrets.
  6. Настройка firewalld (AH/ESP, 500/4500, masquerade).
  7. Включение sysctl net.ipv4.ip_forward.
  8. Перезапуск strongSwan и тесты на клиенте.
  9. Настройка задания для автопродления certbot (cron или systemd timer).

Критерии приёмки

  • Клиент успешно устанавливает IKEv2-сессию с сервером.
  • Клиент получает IP из пула (10.15.1.0/24 в примере).
  • Сессия проходит через ESP и виден трафик между клиентом и сервером.
  • Сертификат действителен и совпадает с доменным именем сервера.

Контрольный список по ролям

Администратор развертывания:

  • Установлен strongSwan и certbot.
  • Получен и корректно установлен сертификат.
  • Открыты порты 80, 443, 500, 4500 и включён masquerade.

Сетевой инженер:

  • Проверены правила NAT и маршрутизация.
  • Убедился, что клиентский трафик проходит через сервер.

Оценщик безопасности:

  • Приватные ключи имеют права root:600.
  • Логи не содержат утечек паролей.

Тестовые случаи и приёмка

  • Подключение с macOS с корректными учётными данными — ожидание: подключение успешно.
  • Подключение с Android через strongSwan — ожидание: подключение успешно.
  • Некорректный пароль — ожидание: отказ в аутентификации.
  • Отсутствие сертификата на сервере — ожидание: ошибка TLS/сброс соединения.

Быстрые советы по миграции и совместимости

  • При миграции с другой IPSec-реализации проверьте совпадение идентификаторов (ID), списков шифров и mtu.
  • Для старых клиентов временно включите совместимые наборы шифров, затем ужесточите.

Мини-словник

  • IKE — Internet Key Exchange, протокол обмена ключами.
  • ESP — Encapsulating Security Payload, обеспечивает шифрование пакетов.
  • AH — Authentication Header, обеспечивает аутентификацию заголовков.

Итог

Вы настроили IKEv2-сервер на базе strongSwan с сертификатом от Let’s Encrypt на CentOS 7. Включили NAT и пересылку пакетов, добавили EAP-пользователей и протестировали подключение с macOS и Android. Для продакшена дополнительно рекомендую автоматизировать обновление сертификатов, ограничивать доступ и периодически проверять логи.

Ссылки

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро