Установка IKEv2 VPN на Strongswan (Ubuntu 18.04)
Короткие определения
- Strongswan — реализация IPSec с поддержкой IKEv1/IKEv2.
- IKEv2 — протокол обмена ключами для установления защищённых IPSec-соединений.
- EAP-MSCHAPv2 — метод аутентификации по логину/паролю, часто используемый для мобильных клиентов.
Необходимые условия
- Сервер с Ubuntu 18.04.
- Права root или sudo.
- Зарегистрованный домен (в примере vpn.hakase-labs.pw) и открытые порты UDP 500 и 4500.
Что сделаем
- Установим Strongswan.
- Получим SSL-сертификат от Let’s Encrypt.
- Настроим Strongswan для IKEv2 + EAP-MSCHAPv2.
- Включим NAT и форвардинг в UFW.
- Протестируем подключение на macOS и Android.
Шаг 1 — Установка Strongswan на Ubuntu
Обновите пакеты и установите Strongswan и дополнительные плагины:
sudo apt update
sudo apt install strongswan strongswan-pki libstrongswan-standard-plugins libstrongswan-extra-pluginsДождитесь завершения установки.

Важное: для корректной работы EAP и современных шифров нужны дополнительные плагины — они установлены командой выше.
Шаг 2 — Получение сертификата Let’s Encrypt
В примере будет использоваться домен vpn.hakase-labs.pw. Мы установим certbot и выпустим сертификат методом standalone (certbot поднимет временный HTTP-сервер на 80 порт).
Устанавливаем certbot:
sudo apt install certbot -yЗапрос сертификата (замените email и домен на свои):
certbot certonly --rsa-key-size 4096 --standalone --agree-tos --no-eff-email --email [email protected] -d vpn.hakase-labs.pwСертификаты появятся в /etc/letsencrypt/live/vpn.hakase-labs.pw/. Скопируйте файлы в каталог Strongswan:
cp /etc/letsencrypt/live/vpn.hakase-labs.pw/fullchain.pem /etc/ipsec.d/certs/
cp /etc/letsencrypt/live/vpn.hakase-labs.pw/privkey.pem /etc/ipsec.d/private/
cp /etc/letsencrypt/live/vpn.hakase-labs.pw/chain.pem /etc/ipsec.d/cacerts/Проверьте структуру:
tree /etc/ipsec.d/
Резервируем исходный конфиг и создаём новый /etc/ipsec.conf:
mv /etc/ipsec.conf /etc/ipsec.conf.asli
vim /etc/ipsec.confВставьте (пример конфигурации сервера IKEv2):
#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Сохраните и закройте. Короткие пояснения к настройкам:
- left — настройки сервера (сертификат fullchain.pem).
- right — параметры клиентов: EAP-MSCHAPv2, пул адресов 10.15.1.0/24, DNS — Cloudflare и Google.
Отредактируйте /etc/ipsec.secrets для ключа и учётных данных EAP:
vim /etc/ipsec.secretsВставьте:
: RSA "privkey.pem"
hakase : EAP "hakase321@"
tensai : EAP "tensai321@"Пояснение: формат “user : EAP \”password\””. Храните пароли безопасно; для production используйте более надёжные методы хранения (например, подключение к RADIUS).

Запустите и включите службу Strongswan:
systemctl start strongswan
systemctl enable strongswanШаг 4 — NAT и форвардинг (UFW)
Откроем SSH и порты UDP для IPSec (500 и 4500):
sudo ufw allow ssh
sudo ufw allow 500,4500/udpИзменим политику переадресации пакетов в /etc/default/ufw:
vim /etc/default/ufwУстановите:
DEFAULT_FORWARD_POLICY="ACCEPT"Определите ваш внешний интерфейс, по которому выходит трафик:
route | grep '^default' | grep -o '[^ ]*$'В примере интерфейс — ens3. Отредактируйте /etc/ufw/before.rules и вставьте NAT/mangle в верхнюю часть файла:
cd /etc/ufw/
vim before.rulesВставьте (замените ens3 на свой интерфейс):
*nat
-A POSTROUTING -s 10.15.1.0/24 -o ens3 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.15.1.0/24 -o ens3 -j MASQUERADE
COMMIT
*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.15.1.0/24 -o ens3 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMITИ добавьте правила в секцию *filter (подставьте в нужное место):
*filter
.....
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.15.1.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.15.1.0/24 -j ACCEPT
Примечание: замените ens3 и подсеть 10.15.1.0/24 на значения вашей сети.
Включите IP forwarding в /etc/ufw/sysctl.conf:
cd /etc/ufw
vim sysctl.confРазкомментируйте:
net/ipv4/ip_forward=1Включите UFW и перезапустите Strongswan:
sudo ufw enable
systemctl restart strongswan
Если появятся ошибки — см. раздел Устранение неисправностей ниже.
Шаг 5 — Тестирование
Ниже — краткая инструкция по подключению с macOS и Android.
macOS
- Откройте Системные настройки → Сеть.
- Нажмите ‘+’ для добавления нового подключения:
- Интерфейс: VPN
- Тип VPN: IKEv2
- Имя сервиса: IKEv2-vpn

- В полях Server Address и Remote ID укажите vpn.hakase-labs.pw.
- Нажмите Authentication Settings → Username: укажите пользователя (например, tensai) и пароль (tensai321@).
- Apply → Connect.

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

Android (StrongSwan VPN Client)
- Установите приложение strongSwan VPN Client из Google Play.
- Создайте профиль IKEv2 EAP: укажите сервер vpn.hakase-labs.pw и учётные данные EAP (tensai / tensai321@).

Если подключение успешно — трафик клиента будет идти через VPN, при этом клиент получит внутренний адрес из диапазона 10.15.1.0/24.
Устранение неисправностей (Runbook)
- Проверка статуса службы:
systemctl status strongswan
journalctl -u strongswan -e- Логи Charonce: увеличьте charondebug для подробного вывода (в /etc/ipsec.conf).
- Проблемы с сертификатом: проверьте цепочку и права доступа к /etc/ipsec.d/*.
- Клиент не получает IP: проверьте rightsourceip и правила NAT/POSTROUTING в UFW.
- Порт 500/4500 заблокирован: убедитесь, что облачный провайдер или хостинг не блокируют UDP 500/4500.
Короткий шаг отката: восстановите оригинальный /etc/ipsec.conf.asli и перезапустите strongswan.
Безопасность и hardening
- Регулярно обновляйте систему и strongswan-пакеты.
- Используйте длинные пароли и MFA там, где возможно.
- Для production рассмотреть аутентификацию через RADIUS/LDAP вместо хранения паролей в ipsec.secrets.
- Минимизируйте список поддерживаемых шифров (в примере включён широкий набор для совместимости — в проде оставьте только современные AES-GCM и сильные наборы).
- Защитите доступ к ключам: приватный ключ privkey.pem должен иметь права 600 и владельца root.
Альтернативы и когда этот подход не подходит
- Если вам нужна масштабируемая корпоративная аутентификация — лучше интегрировать RADIUS/FreeRADIUS или использовать OpenVPN/SSL-based решения.
- Для простой удалённой администрирования иногда удобнее WireGuard (проще в настройке, современный стек, но не поддерживает EAP).
- На старых клиентах, которым нужен IKEv1, потребуются отдельные параметры; этот гайд ориентирован на IKEv2.
Контроль качества — тесты и критерии приёмки
Критерии приёмки:
- Сервер запускается без ошибок и слушает UDP 500 и 4500.
- Клиент macOS успешно подключается и получает IP из rightsourceip.
- Android-клиент подключается через strongSwan и имеет доступ в интернет.
- Трафик клиента NAT’ится и клиент видит внешние ресурсы.
Тестовые случаи:
- Подключение с корректными учётными данными (ожидается подключение).
- Подключение с неверным паролем (ожидается отказ).
- Падение интерфейса ens3 — проверка восстановления соединения.
Чеклисты (роль-ориентированные)
Администратор сервера:
- Проверить наличие сертификата в /etc/ipsec.d/certs.
- Настроить права на приватный ключ.
- Обновить список шифров под требования безопасности.
- Настроить мониторинг сервиса strongswan.
Пользователь (перед подключением):
- Убедиться, что домен сервера резолвится.
- Иметь логин/пароль EAP.
- Для macOS: приготовить Root/Remote ID (домен сервера).
Советы по эксплуатации и миграции
- Для автоматического обновления сертификатов используйте certbot renew и добавляйте post-hook для копирования новых файлов в /etc/ipsec.d/ с перезапуском strongswan.
- При смене домена не забывайте обновить leftcert и left (если left использует явный FQDN).
Ссылки и ресурсы
- https://wiki.strongswan.org/projects/strongswan/wiki
- https://help.ubuntu.com/lts/serverguide/firewall.html.en
Краткое резюме
- Мы установили Strongswan, получили сертификат Let’s Encrypt, настроили сервер для IKEv2 + EAP-MSCHAPv2, включили NAT и протестировали подключения на macOS и Android.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента