Strongswan IKEv2 для устройств iOS

Вопрос или проблема

Я хочу подключить VPN Strongswan IKEv2 на устройствах iOS. Он использует сервер FreeRADIUS для AAA пользователей.

Он уже отлично работает на устройствах Android и Windows. Но когда я пытаюсь подключиться с помощью устройства iOS, он отображает приведенные ниже журналы. Я вручную создаю профиль VPN и вручную устанавливаю сертификаты .p12 для аутентификации сервера.

имя хоста сервера: nas.example.com
айпи сервера: 89.89.89.89
айпи клиента: 99.99.99.99

ipsec.conf

config setup
    charondebug="all"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=yes
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    ike=aes256-sha1-modp1024,3des-sha1-modp1024!
    esp=aes256-sha1,3des-sha1!
    dpdaction=clear
    dpddelay=3600s
    dpdtimeout=5s
    rekey=no
    left=%any
    leftid=89.89.89.89
    leftcert=vpn-server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-radius
    #rightauth=eap-mschapv2
    rightdns=8.8.8.8,8.8.4.4
    rightsourceip=10.10.10.0/24
    rightsendcert=never
    eap_identity=%identity

журналы со стороны сервера

06 окт 02:14:43 nas.example.com charon[3607]: 13[NET] отправка пакета: от 89.89.89.89[4500] к 99.99.99.99[4500] (792 байта)
06 окт 02:15:00 nas.example.com charon[3607]: 14[NET] получен пакет: от 99.99.99.99[500] к 89.89.89.89[500] (604 байта)
06 окт 02:15:00 nas.example.com charon[3607]: 14[ENC] разобран запрос IKE_SA_INIT 0 [ SA KE No N(REDIR_SUP) N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) ]
06 окт 02:15:00 nas.example.com charon[3607]: 14[IKE] 99.99.99.99 инициирует IKE_SA
06 окт 02:15:00 nas.example.com charon[3607]: 14[IKE] удаленный узел находится за NAT
06 окт 02:15:00 nas.example.com charon[3607]: 14[IKE] DH группа MODP_2048 неприемлема, запрашивается MODP_1024
06 окт 02:15:00 nas.example.com charon[3607]: 14[ENC] генерируется ответ IKE_SA_INIT 0 [ N(INVAL_KE) ]
06 окт 02:15:00 nas.example.com charon[3607]: 14[NET] отправка пакета: от 89.89.89.89[500] к 99.99.99.99[500] (38 байт)
06 окт 02:15:01 nas.example.com charon[3607]: 15[NET] получен пакет: от 99.99.99.99[500] к 89.89.89.89[500] (476 байт)
06 окт 02:15:01 nas.example.com charon[3607]: 15[ENC] разобран запрос IKE_SA_INIT 0 [ SA KE No N(REDIR_SUP) N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) ]
06 окт 02:15:01 nas.example.com charon[3607]: 15[IKE] 99.99.99.99 инициирует IKE_SA
06 окт 02:15:01 nas.example.com charon[3607]: 15[IKE] удаленный узел находится за NAT
06 окт 02:15:01 nas.example.com charon[3607]: 15[ENC] генерируется ответ IKE_SA_INIT 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(MULT_AUTH) ]
06 окт 02:15:01 nas.example.com charon[3607]: 15[NET] отправка пакета: от 89.89.89.89[500] к 99.99.99.99[500] (316 байт)
06 окт 02:15:01 nas.example.com charon[3607]: 03[NET] получен пакет: от 99.99.99.99[4500] к 89.89.89.89[4500] (484 байта)
06 окт 02:15:01 nas.example.com charon[3607]: 03[ENC] неизвестный тип атрибута (25)
06 окт 02:15:01 nas.example.com charon[3607]: 03[ENC] разобран запрос IKE_AUTH 1 [ IDi N(INIT_CONTACT) N(MOBIKE_SUP) IDr CPRQ(ADDR DHCP DNS MASK ADDR6 DHCP6 DNS6 (25)) N(ESP_TFC_PAD_N) N(NON_FIRST_FRAG) SA TSi TSr ]
06 окт 02:15:01 nas.example.com charon[3607]: 03[CFG] ищу конфигурации ровера, соответствующие 89.89.89.89[89.89.89.89]...99.99.99.99[varun]
06 окт 02:15:01 nas.example.com charon[3607]: 03[CFG] выбрана конфигурация ровера 'ikev2-vpn'
06 окт 02:15:01 nas.example.com charon[3607]: 03[IKE] инициирован метод EAP_IDENTITY (id 0x00)
06 окт 02:15:01 nas.example.com charon[3607]: 03[IKE] получено ESP_TFC_PADDING_NOT_SUPPORTED, не используется ESPv3 TFC padding
06 окт 02:15:01 nas.example.com charon[3607]: 03[IKE] ровера поддерживает MOBIKE
06 окт 02:15:01 nas.example.com charon[3607]: 03[IKE] аутентификация '89.89.89.89' (я) с использованием RSA подписи успешна
06 окт 02:15:01 nas.example.com charon[3607]: 03[IKE] отправка сертификата конечного узла "C=US, O=nas.example.com, CN=89.89.89.89"
06 окт 02:15:01 nas.example.com charon[3607]: 03[ENC] генерируется ответ IKE_AUTH 1 [ IDr CERT AUTH EAP/REQ/ID ]
06 окт 02:15:01 nas.example.com charon[3607]: 03[ENC] разделение сообщения IKE длиной 1980 байт на 2 фрагмента
06 окт 02:15:01 nas.example.com charon[3607]: 03[ENC] генерируется ответ IKE_AUTH 1 [ EF(1/2) ]
06 окт 02:15:01 nas.example.com charon[3607]: 03[ENC] генерируется ответ IKE_AUTH 1 [ EF(2/2) ]
06 окт 02:15:01 nas.example.com charon[3607]: 03[NET] отправка пакета: от 89.89.89.89[4500] к 99.99.99.99[4500] (1248 байт)
06 окт 02:15:01 nas.example.com charon[3607]: 03[NET] отправка пакета: от 89.89.89.89[4500] к 99.99.99.99[4500] (792 байта)
06 окт 02:15:12 nas.example.com charon[3607]: 16[JOB] удаление полураскрытого IKE_SA с 99.99.99.99 после истечения времени

Любая помощь будет оценена. Спасибо

Вам необходимо добавить сертификат /etc/ipsec.d/certs/vpn-server-cert.pem на MacBook, дважды щелкнув по нему, и установить полный уровень доверия для него (установить “параметры использования сертификата”) в настройках хранилища сертификатов MacBook.

На IOS/MAC вам не нужно устанавливать сертификат, если вы используете EAP. Вы можете создать 2 типа профиля подключения. Лучший, который работает для меня, таков.

config setup
   strictcrlpolicy=no
   uniqueids=never

    conn %default
       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-modp1024!
       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!
       leftid=111.111.111.111
       ikelifetime=24h
       keylife=24h
       dpdaction=clear
       dpdtimeout=3600s
       dpddelay=1800s
       compress=no
       rekey=yes
       inactivity=1800s
       forceencaps=yes
       left=%defaultroute
       leftsubnet=0.0.0.0/0,::/0
       rightsourceip=%config4,%config6
       leftfirewall=yes
       rightsourceip=10.10.0.0/16,2001:db8::3:0/16
       keyingtries=%forever
       fragmentation=yes
       right=%any
       mobike=yes
       rekeymargin=1m
       keyingtries=1
       lefthostaccess=yes
       type=tunnel
    
    conn IPSec-IKEv2
      leftauth=pubkey
      leftcert=vpnHostCert.pem
      rightid=%any
      eap_identity=%any
      auto=add
    
    conn IOS-PSK-VPN
       also=IPSec-IKEv2
       rightauth=psk
       rightsendcert=never
    
    conn IOS-EAP-VPN
       also=IPSec-IKEv2
       rightauth=eap-mschapv2
       rightsendcert=never

    conn IOS-EAP-Radius
       also=IPSec-IKEv2
       rightauth=eap-radius
       rightsendcert=never

    conn windows-android
            also=IPSec-IKEv2
            rightauth=pubkey
            rightcert=userCert.pem

Мы создали .sh файл для установки strongswan на ubuntu и запуска ipsec vpn. Скрипт можно найти по адресу

https://0a0.uk/ss

Также вы можете использовать наше приложение IKEv2, которое работает для IOS и MAC и может быть загружено из магазина apple по ссылке
Brooog IKEv2

Ответ или решение

К подключению VPN с использованием IKEv2 на устройствах iOS с использованием Strongswan и FreeRADIUS для аутентификации пользователей существует несколько важных аспектов, которые необходимо учесть. Учитывая, что данное решение уже успешно работает на Android и Windows, возникшие проблемы могут быть связаны с настройками конфигурации или ограничениями на стороне iOS. Расмотрим основные моменты, которые помогут осуществить успешное подключение.

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

1. Конфигурация Strongswan

Ваша конфигурация ipsec.conf выглядит хорошо, однако существуют некоторые параметры, которые могут вызывать несовместимость с iOS. Я рекомендую внести изменения в секцию conn для расширения поддержки криптографических алгоритмов:

conn %default
    ...
    ike=aes256-sha1-modp1024!
    esp=aes256-sha1!
    ...

iOS устройства могут не поддерживать некоторые параметры автоматически. Параметры должны быть настроены таким образом, чтобы включать более распространённые шифры, такие как aes128-sha256 и aes256-sha256.

2. Поддержка NAT

Поскольку ваше устройство находится за NAT, убедитесь, что включены все необходимые параметры NAT и MOBIKE:

nat_traversal=yes
mobike=yes

Это позволит VPN корректно работать, когда клиент находится за NAT.

Установка и доверие сертификатов

На устройствах iOS, в отличие от Windows и Android, могут быть свои нюансы в установке сертификатов. Вам необходимо убедиться, что сертификат сервера установлен правильно и установлен в доверенные. Следуйте этим шагам:

  1. Установите сертификат сервера (например, vpn-server-cert.pem) на ваше iOS устройство.
  2. Перейдите в Настройки > Основные > Профили и убедитесь, что сертификат доверен. Для этого выберите сертификат и нажмите "Доверять".

При использовании EAP на iOS, установка пользовательских сертификатов может не требоваться, но такой шаг уберет все возможные проблемы с доверием сертификатов.

Конфигурация профиля VPN

Вы также можете создать VPN профиль для iOS, которому необходимо соответствовать стандартам IKEv2. Можно использовать следующую структуру для конфигурирования:

conn IOS-EAP-Radius
    also=IPSec-IKEv2
    rightauth=eap-radius
    rightsendcert=never

Этот профиль должен быть активно настроен для работы с EAP-RADIUS, причем rightauth должен быть настроен на eap-radius, как у вас уже указано в конфигурации ikev2-vpn.

Логи сервера

Из приведенных логов видно, что сервер отвечает с ошибкой N(INVAL_KE), что указывает на невозможность согласования параметров обмена ключами. Убедитесь, что:

  • Имеющиеся параметры Диффи-Хеллмана соответствуют тем, которые поддерживаются на iOS. Рассмотрите возможность изменить DH group на modp1024.

Тестирование и поиск ошибок

После выполнения всех перечисленных шагов:

  1. Выполните тестовые подключения и внимательно анализируйте логи.
  2. Используйте инструменты, такие как tcpdump на сервере для анализа трафика, чтобы убедиться, что пакеты правильно обмениваются.

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

Заключение

Подключение Strongswan IKEv2 VPN на устройствах iOS возможно и при соблюдении всех вышеперечисленных рекомендаций должно пройти без ошибок. Рекомендуем провести все тесты в безопасной среде и учитывать соответствие всех настроек требованиям безопасности, установленным для вашего бизнеса. Если возникнут остаточные проблемы, успешное взаимодействие с сообществом в форумах и официальная поддержка Strongswan могут также оказать значительное содействие.

Оцените материал
Добавить комментарий

Капча загружается...