IPsec VPN Linux: настройка сервера и клиента, сравнение Libreswan и StrongSwan

Практическое руководство по настройке IPsec VPN на Linux: компоненты, аутентификация, установка Libreswan, настройка клиентов, диагностика и сравнение с WireGuard.

Что такое IPsec VPN и зачем он нужен

IPsec (Internet Protocol Security) — это набор протоколов для защиты IP-трафика на сетевом уровне. В отличие от SSL/TLS VPN, которые работают на прикладном уровне, IPsec шифрует и аутентифицирует каждый IP-пакет, что делает его универсальным решением для соединения сетей, удалённого доступа и защиты передачи данных между хостами.

На практике IPsec VPN используется для:

  • объединения офисов в единую защищённую сеть (site-to-site);
  • безопасного доступа сотрудников к корпоративным ресурсам из любой точки мира (remote access);
  • защиты трафика между серверами в дата-центрах или облаке;
  • обхода региональных блокировок и обеспечения приватности в интернете.

В Linux IPsec реализован в виде набора инструментов и демонов, наиболее популярными из которых являются Libreswan и StrongSwan. Оба поддерживают стандартные протоколы IKEv1 и IKEv2, а также различные методы аутентификации — от предварительного общего ключа (PSK) до сертификатов X.509.

Основные компоненты IPsec VPN

IPsec VPN состоит из нескольких ключевых компонентов, которые работают совместно для установления и поддержания защищённого канала.

IKE (Internet Key Exchange) — протокол для согласования параметров шифрования и аутентификации. IKEv1 и IKEv2 отличаются надёжностью и скоростью установки соединения; IKEv2 считается более современным и устойчивым к сбоям.

ESP (Encapsulating Security Payload) — протокол, который обеспечивает шифрование и аутентификацию полезной нагрузки. ESP может работать в транспортном режиме (шифрует только данные) или в туннельном режиме (шифрует весь IP-пакет).

SA (Security Association) — логическое соединение между двумя узлами, которое определяет используемые алгоритмы, ключи и срок их действия. SA создаётся на этапе IKE и обновляется автоматически.

NSS (Network Security Services) — база данных, в которой Libreswan хранит ключи и сертификаты. В RHEL и CentOS эта база защищена паролем, что повышает безопасность, но требует его ввода при запуске демона.

Понимание этих компонентов помогает при диагностике проблем и настройке нестандартных конфигураций.

Методы аутентификации в Libreswan

Libreswan поддерживает несколько методов аутентификации, каждый из которых имеет свои особенности и область применения.

Предварительный общий ключ (PSK) — самый простой способ, при котором обе стороны используют один и тот же секрет. PSK легко настроить, но он менее безопасен при большом количестве пользователей, так как ключ приходится передавать каждому клиенту.

Сырые RSA-ключи — метод, при котором каждая сторона генерирует пару ключей и обменивается открытыми ключами. Это более безопасно, чем PSK, и не требует инфраструктуры сертификатов.

Сертификаты X.509 — наиболее масштабируемый и безопасный метод. Сертификаты выпускаются центром сертификации (CA), что позволяет легко добавлять и отзывать пользователей. Этот метод рекомендуется для крупных организаций и mesh-сетей.

Выбор метода зависит от количества узлов, требований к безопасности и удобства управления. Для небольших сетей часто достаточно PSK, для корпоративных сред предпочтительны сертификаты.

Установка IPsec VPN-сервера на Linux

Для быстрого развёртывания IPsec VPN-сервера можно использовать готовые скрипты, например, от Лин Суна (hwdsl2/setup-ipsec-vpn). Эти скрипты автоматически устанавливают Libreswan и xl2tpd (для L2TP/IPsec) на дистрибутивах на базе RHEL (Rocky Linux, AlmaLinux) и Debian (Ubuntu, Mint).

Перед установкой необходимо подготовить VPS с чистой ОС и доступом по SSH. Скрипт генерирует случайные учётные данные (PSK, имя пользователя, пароль) и выводит их в конце установки. Если нужны свои данные, их можно задать заранее через переменные окружения, например:

VPN_IPSEC_PSK='ваш_ключ'
VPN_USER='ваш_пользователь'
VPN_PASSWORD='ваш_пароль'

Для RHEL-подобных систем:

wget https://git.io/vpnsetup-centos -O vpnsetup.sh
sudo sh vpnsetup.sh

Для Debian/Ubuntu:

wget https://git.io/vpnsetup -O vpnsetup.sh
sudo sh vpnsetup.sh

Скрипт установит необходимые пакеты, скомпилирует Libreswan из исходников, настроит межсетевой экран и включит службы. После завершения вы получите готовый VPN-сервер с поддержкой L2TP/IPsec и IPsec/XAuth.

Настройка клиента L2TP/IPsec в Linux

Для подключения к L2TP/IPsec VPN на Linux удобно использовать NetworkManager с плагином network-manager-l2tp. Этот плагин поддерживает NetworkManager 1.8 и новее.

Установка на Ubuntu/Debian:

sudo add-apt-repository ppa:nm-l2tp/network-manager-l2tp
sudo apt-get update
sudo apt-get install network-manager-l2tp network-manager-l2tp-gnome

Установка на Fedora/RHEL/CentOS:

sudo dnf install xl2tpd NetworkManager-l2tp NetworkManager-l2tp-gnome

После установки откройте «Настройки сети» (Network Settings), нажмите «+» и выберите тип «Layer 2 Tunneling Protocol (L2TP)». Введите адрес шлюза, имя пользователя и пароль. Затем в разделе «IPsec Settings» укажите предварительный общий ключ и включите опцию «Enable IPsec tunnel to L2TP host». Сохраните подключение и активируйте его.

Для проверки соединения откройте браузер и посетите сайт определения IP-адреса — он должен соответствовать IP вашего VPN-шлюза.

Настройка IPsec VPN без графического интерфейса

На серверах и в автоматизированных средах часто нет графической оболочки, поэтому настройка IPsec выполняется через конфигурационные файлы и командную строку.

Основные файлы конфигурации Libreswan:

  • /etc/ipsec.conf — параметры соединений;
  • /etc/ipsec.secrets — ключи и пароли;
  • /etc/ipsec.d/ — каталог для сертификатов и дополнительных конфигураций.

Пример простого host-to-host соединения с PSK:

conn myvpn
    type=tunnel
    left=192.168.1.10
    leftsubnet=10.0.0.0/24
    right=192.168.2.10
    rightsubnet=10.0.1.0/24
    authby=secret
    ike=aes256-sha2;dh14
    esp=aes256-sha2

В /etc/ipsec.secrets укажите общий ключ:

192.168.1.10 192.168.2.10: PSK "ваш_секрет"

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

sudo systemctl restart ipsec

Для управления соединением используйте команды ipsec auto --up myvpn и ipsec auto --down myvpn.

Управление пользователями VPN

Когда VPN-сервер развёрнут, возникает необходимость добавлять и удалять пользователей. В наборе скриптов hwdsl2 есть специальные утилиты.

Добавление пользователя:

wget -O add_vpn_user.sh https://raw.githubusercontent.com/hwdsl2/setup-ipsec-vpn/master/extras/add_vpn_user.sh
sudo sh add_vpn_user.sh 'имя_пользователя' 'пароль'

Удаление пользователя:

wget -O del_vpn_user.sh https://raw.githubusercontent.com/hwdsl2/setup-ipsec-vpn/master/extras/del_vpn_user.sh
sudo sh del_vpn_user.sh 'имя_пользователя'

Эти скрипты обновляют файлы /etc/ipsec.secrets и /etc/ppp/chap-secrets, поэтому изменения вступают в силу без перезапуска всей службы. Важно использовать надёжные пароли и хранить их в защищённом месте.

Диагностика и устранение неполадок IPsec

При настройке IPsec VPN часто возникают типичные проблемы, которые можно диагностировать и исправить.

Основные проблемы с подключением:

  • Проверьте, что службы ipsec и xl2tpd запущены: systemctl status ipsec xl2tpd.
  • Убедитесь, что порты UDP 500 и 4500 открыты в межсетевом экране.
  • Сравните конфигурации на обеих сторонах: алгоритмы, типы аутентификации, идентификаторы.

Проблемы с MTU: IPsec добавляет дополнительные заголовки, что может привести к фрагментации пакетов. Уменьшите MTU на интерфейсе туннеля, например, до 1400 байт.

Конфликты NAT: Если VPN-сервер находится за NAT, включите NAT Traversal (NAT-T) и принудительную инкапсуляцию:

nat_traversal=yes
forceencaps=yes

Просмотр логов: Для анализа используйте журнал Libreswan:

sudo journalctl -u ipsec -f

Или файл /var/log/secure (в RHEL) и /var/log/syslog (в Debian).

IPsec VPN и FIPS-режим

В некоторых организациях требуется соответствие стандарту FIPS (Federal Information Processing Standards). RHEL и другие дистрибутивы поддерживают FIPS-режим, который ограничивает использование криптографических алгоритмов.

При включённом FIPS Libreswan автоматически использует только разрешённые алгоритмы, такие как AES, SHA-2 и DH-группы 14 и выше. Это может привести к несовместимости с устаревшими клиентами, которые поддерживают только 3DES или SHA-1.

Для включения FIPS-режима в RHEL:

sudo fips-mode-setup --enable
sudo reboot

После перезагрузки убедитесь, что IPsec работает корректно, проверив статус службы и соединения. Если возникают ошибки, проверьте, что все параметры шифрования соответствуют FIPS-требованиям.

Сравнение IPsec с WireGuard и выбор решения

IPsec — не единственный протокол VPN для Linux. WireGuard — более современная альтернатива, которая набирает популярность благодаря простоте и высокой производительности.

Основные различия:

  • IPsec использует сложный стек протоколов (IKE, ESP), что даёт гибкость, но усложняет настройку.
  • WireGuard использует современную криптографию (Curve25519, ChaCha20) и работает в ядре, что обеспечивает высокую скорость.
  • IPsec поддерживает множество методов аутентификации и сценариев (site-to-site, remote access, mesh).
  • WireGuard проще в настройке и требует меньше ресурсов, но не поддерживает некоторые корпоративные функции, такие как встроенная поддержка X.509.

Когда выбирать IPsec:

  • Если нужна совместимость с существующей инфраструктурой (например, Cisco, Fortinet).
  • Если требуются сертификаты и централизованное управление.
  • Если нужна поддержка L2TP для интеграции со старыми клиентами.

Когда выбирать WireGuard:

  • Для простых site-to-site или remote access сценариев.
  • Когда важна максимальная производительность и минимальная задержка.
  • Если нет жёстких требований к сертификатам.

Оба решения поддерживаются в RHEL и других дистрибутивах, поэтому выбор зависит от конкретных задач.

Вопросы и ответы

Какие порты нужно открыть для IPsec VPN?

Для работы IPsec VPN необходимо открыть UDP-порт 500 (IKE), UDP-порт 4500 (NAT-T) и, если используется L2TP, UDP-порт 1701. В межсетевом экране также нужно разрешить протоколы ESP (IP protocol 50) и AH (IP protocol 51), если они используются.

Чем отличается IKEv1 от IKEv2?

IKEv1 — более старая версия протокола, которая поддерживает два режима (main и aggressive). IKEv2 — современная версия, которая проще, быстрее устанавливает соединение и лучше работает с мобильными клиентами. IKEv2 также поддерживает MOBIKE для смены сети без разрыва соединения. Большинство современных реализаций, включая Libreswan и StrongSwan, поддерживают обе версии.

Как проверить, что VPN-соединение работает?

После подключения проверьте IP-адрес через сайт типа whatismyipaddress.com — он должен соответствовать IP вашего VPN-шлюза. Также можно выполнить команду ipsec auto --status для просмотра активных SA, или ping до внутреннего ресурса, если он доступен.

Что делать, если VPN-сервер находится за NAT?

Включите NAT Traversal (NAT-T) и принудительную инкапсуляцию в конфигурации IPsec. В Libreswan добавьте параметры nat_traversal=yes и forceencaps=yes в файл /etc/ipsec.conf. Также убедитесь, что UDP-порты 500 и 4500 проброшены на сервер.

Можно ли настроить IPsec VPN без графического интерфейса?

Да, для этого используются конфигурационные файлы Libreswan (/etc/ipsec.conf, /etc/ipsec.secrets) и команды ipsec auto --up . Также можно использовать утилиту nmtui для настройки NetworkManager в текстовом режиме.

Как обновить Libreswan до новой версии?

Для обновления используйте скрипт vpnupgrade.sh из набора hwdsl2. Скачайте его, откройте в редакторе, измените переменную SWAN_VER на нужную версию (например, 5.3) и запустите скрипт. Он загрузит исходный код, скомпилирует и установит новую версию.

В чём преимущество сертификатов X.509 перед PSK?

Сертификаты X.509 обеспечивают более высокий уровень безопасности и масштабируемость. Они позволяют централизованно управлять доступом через центр сертификации, легко отзывать скомпрометированные ключи и использовать различные уровни доверия. PSK проще в настройке, но требует безопасной передачи ключа каждому клиенту и менее удобен при большом количестве пользователей.