Как настроить сервер IKEv2 VPN с StrongSwan на Ubuntu 22.04

Введение

A virtual private network, or VPN, allows you to securely encrypt traffic as it travels through untrusted networks, such as those at the coffee shop, a conference, or an airport.

Internet Key Exchange v2, или IKEv2, является протоколом, который позволяет непосредственное туннелирование IPSec между сервером и клиентом. В реализациях VPN с использованием IKEv2 IPSec обеспечивает шифрование сетевого трафика. IKEv2 имеет встроенную поддержку на некоторых платформах (OS X 10.11+, iOS 9.1+ и Windows 10) без необходимости установки дополнительных приложений, и он сглаживает проблемы с клиентом довольно плавно.

В этом руководстве вы настроите сервер VPN IKEv2 с использованием StrongSwan на сервере Ubuntu 22.04. Затем вы узнаете, как подключиться к нему с помощью клиентов Windows, macOS, Ubuntu, iOS и Android.

Предварительные требования

Чтобы завершить это руководство, вам понадобится:

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

Сначала установите StrongSwan, демон IPSec с открытым исходным кодом, который вы настроите как свой сервер VPN. Также установите компонент публичного ключа (PKI), чтобы создать Центр сертификации (CA) для предоставления учетных данных для вашей инфраструктуры.

Начните с обновления локального кэша пакетов:

  1. sudo apt update

Затем установите программное обеспечение, набрав:

  1. sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins

Дополнительный пакет libcharon-extauth-plugins используется для обеспечения аутентификации различных клиентов на вашем сервере с использованием общего имени пользователя и пароля. Пакет libstrongswan-extra-plugins включен для поддержки Strongswan криптографических наборов эллиптических кривых, использующих криптографический набор Curve25519.

Теперь, когда всё установлено, перейдите к созданию ваших сертификатов.

Шаг 2 — Создание Центра сертификации

Для работы сервера IKEv2 требуется сертификат для идентификации перед клиентами. Для помощи в создании необходимого сертификата в пакете strongswan-pki есть утилита под названием pki для генерации Центра сертификации и сертификатов сервера.

Для начала создайте несколько каталогов для хранения всех ресурсов, над которыми будете работать. Структура каталогов соответствует некоторым каталогам в /etc/ipsec.d, куда вы в конечном итоге переместите все созданные элементы:

  1. mkdir -p ~/pki/{cacerts,certs,private}

Затем ограничьте разрешения, чтобы наши частные файлы не могли быть просмотрены другими пользователями:

  1. chmod 700 ~/pki

Теперь, когда у вас есть структура каталога для хранения всего, вы можете сгенерировать корневой ключ. Это будет ключ RSA с длиной 4096 бит, который будет использоваться для подписи вашего корневого сертификата удостоверяющего центра:

Выполните эти команды для генерации ключа:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

После этого вы можете перейти к созданию корневого сертификата удостоверяющего центра, используя только что сгенерированный ключ для подписи корневого сертификата:

  1. pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
  2. --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

Флаг --lifetime 3650 используется для того, чтобы убедиться, что корневой сертификат удостоверяющего центра будет действителен в течение 10 лет. Корневой сертификат для центра обычно не изменяется, так как его пришлось бы перераспространять на каждый сервер и клиент, который на него полагается, поэтому 10 лет – безопасное значение срока действия по умолчанию.

Вы можете изменить значение отличительного имени (DN) на что-то другое, если хотите. Общее имя (поле CN) здесь является всего лишь индикатором, поэтому оно не обязательно должно соответствовать чему-либо в вашей инфраструктуре.

Теперь, когда ваш корневой сертификат удостоверяющего центра запущен и работает, вы можете создать сертификат, который будет использоваться сервером VPN.

Шаг 3 — Создание сертификата для сервера VPN

Теперь вы создадите сертификат и ключ для сервера VPN. Этот сертификат позволит клиенту проверить подлинность сервера, используя сгенерированный нами сертификат ЦС.

Сначала создайте закрытый ключ для сервера VPN с помощью следующей команды:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

Теперь создайте и подпишите сертификат сервера VPN с ключом центра сертификации, созданным на предыдущем шаге. Выполните следующую команду, но измените Общее имя (CN) и поле Альтернативное имя субъекта (SAN) на имя DNS или IP-адрес вашего сервера VPN:

  1. pki --pub --in ~/pki/private/server-key.pem --type rsa \
  2. | pki --issue --lifetime 1825 \
  3. --cacert ~/pki/cacerts/ca-cert.pem \
  4. --cakey ~/pki/private/ca-key.pem \
  5. --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
  6. --flag serverAuth --flag ikeIntermediate --outform pem \
  7. > ~/pki/certs/server-cert.pem

Примечание: Если вы используете IP-адрес вместо имени DNS, вам нужно будет указать несколько записей --san. Строка в предыдущем блоке команд, где вы указываете уникальное имя (--dn ...), должна быть изменена с дополнительной записью, подобной следующей выдержке:

--dn "CN=IP-адрес" --san @IP-адрес --san IP-адрес \

Причина этой дополнительной записи --san @IP-адрес заключается в том, что некоторые клиенты проверяют, есть ли у сертификата TLS как запись DNS, так и запись IP-адреса для сервера, когда они проверяют его подлинность.

Опция --flag serverAuth используется для указания того, что сертификат будет использоваться явно для аутентификации сервера до установки зашифрованного туннеля. Опция --flag ikeIntermediate используется для поддержки более старых клиентов macOS.

Теперь, когда вы сгенерировали все необходимые файлы TLS/SSL, необходимые StrongSwan, вы можете переместить файлы в каталог /etc/ipsec.d, набрав:

  1. sudo cp -r ~/pki/* /etc/ipsec.d/

На этом этапе вы создали пару сертификатов, которая будет использоваться для обеспечения безопасности коммуникаций между клиентом и сервером. Вы также подписали сертификаты с помощью ключа ЦС, так что клиент сможет проверить подлинность сервера VPN с использованием сертификата ЦС. Со всеми этими сертификатами готово, вы готовы перейти к настройке SrongSwan.

Шаг 4 — Настройка StrongSwan

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

  1. sudo mv /etc/ipsec.conf{,.original}

Создайте и откройте новый пустой файл конфигурации с помощью предпочитаемого вами текстового редактора. Здесь вы будете использовать nano:

  1. sudo nano /etc/ipsec.conf

Примечание: При работе с этим разделом для настройки серверной части вашей VPN вы столкнетесь с параметрами, которые относятся к левой и правой сторонам соединения. При работе с IPSec VPN левая сторона по соглашению относится к локальной системе, которую вы настраиваете, в данном случае к серверу. Директивы для правой стороны в этих параметрах будут относиться к удаленным клиентам, таким как телефоны и другие компьютеры.

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

Сначала мы скажем StrongSwan записывать статусы демона для отладки и разрешим дублирование соединений. Добавьте эти строки в файл:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

Затем мы создадим раздел конфигурации для нашей VPN. Мы также скажем StrongSwan создавать туннели VPN IKEv2 и автоматически загружать этот раздел конфигурации при запуске. Добавьте следующие строки в файл:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

Мы также настроим обнаружение “мертвого пира” для очистки любых “висячих” соединений в случае неожиданного отключения клиента. Добавьте эти строки:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no

Затем мы настроим параметры IPSec “левой” стороны сервера. Каждый из следующих параметров гарантирует, что сервер настроен на прием соединений от клиентов и корректно идентифицирует себя. Вы добавите каждую из этих настроек в файл /etc/ipsec.conf, когда будете знакомы с их предназначением и использованием:

  • left=%any Значение %any гарантирует, что сервер будет использовать сетевой интерфейс, на котором он получает входящие соединения, для последующего общения с клиентами. Например, если вы подключаете клиента через частную сеть, сервер будет использовать частый IP-адрес, по которому он получает трафик, для остальной части соединения.
  • leftid=@server_domain_or_IP Этот параметр управляет именем, которое сервер представляет клиентам. В сочетании с следующим параметром leftcert, параметр leftid гарантирует соответствие настроенного имени сервера и различительного имени (DN), содержащегося в общедоступном сертификате.
  • leftcert=server-cert.pem Этот параметр представляет собой путь к общедоступному сертификату сервера, который вы сконфигурировали на шаге 3. Без него сервер не сможет аутентифицировать себя перед клиентами или завершить процесс настройки IKEv2.
  • leftsendcert=always Значение always гарантирует, что любой клиент, подключающийся к серверу, всегда получит копию общедоступного сертификата сервера в рамках начальной настройки соединения.
  • leftsubnet=0.0.0.0/0 Последний параметр с левой стороны, который вы добавите, сообщает клиентам о подсетях, доступных за сервером. В данном случае используется 0.0.0.0/0, чтобы представить весь набор IPv4-адресов, что означает, что сервер сообщит клиентам отправлять весь свой трафик через VPN по умолчанию.

Теперь, когда вы знакомы с каждым из соответствующих параметров с левой стороны, добавьте их все в файл следующим образом:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

Примечание: При настройке идентификатора сервера (leftid) включайте символ @ только в том случае, если ваш VPN-сервер будет идентифицироваться доменным именем:

/etc/ipsec.conf
    . . .    leftid=@vpn.example.com
    . . .

Если сервер будет идентифицироваться своим IP-адресом, просто укажите IP-адрес:

/etc/ipsec.conf
    . . .
    leftid=your_server_ip
    . . .

Затем мы можем настроить параметры IPSec «правой» стороны клиента. Каждый из следующих параметров сообщает серверу, как принимать подключения от клиентов, как клиенты должны аутентифицироваться на сервере, а также диапазоны частных IP-адресов и DNS-серверы, которые будут использовать клиенты. Добавьте каждую из этих настроек в файл /etc/ipsec.conf, когда вы будете знакомы с тем, что они означают и для чего они используются:

  • right=%any Опция %any для стороны right соединения указывает серверу принимать входящие подключения от любого удаленного клиента.
  • rightid=%any Эта опция гарантирует, что сервер не будет отклонять подключения от клиентов, предоставляющих идентификатор перед установлением зашифрованного туннеля.
  • rightauth=eap-mschapv2 Эта опция настраивает метод аутентификации, который будут использовать клиенты для аутентификации на сервере. Здесь используется eap-mschapv2 для обеспечения широкой совместимости и поддержки клиентов, таких как устройства Windows, macOS и Android.
  • rightsourceip=10.10.10.0/24 Эта опция указывает серверу назначать частные IP-адреса клиентам из указанного пула IP-адресов 10.10.10.0/24.
  • rightdns=8.8.8.8,8.8.4.4 Эти IP-адреса являются общедоступными DNS-разрешителями Google. Их можно изменить на другие общедоступные разрешители, разрешители сервера VPN или любые другие разрешители, которые могут быть доступны клиентам.
  • rightsendcert=never Эта опция указывает серверу, что клиентам не нужно отправлять сертификат для аутентификации себя.

Теперь, когда вы знакомы с необходимыми параметрами «right» для VPN, добавьте следующие строки в /etc/ipsec.conf:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

Теперь мы скажем StrongSwan запросить у клиента учетные данные пользователя при подключении:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

Наконец, добавьте следующие строки для поддержки клиентов Linux, Windows, macOS, iOS и Android. Эти строки указывают различные алгоритмы обмена ключами, хэширования, аутентификации и шифрования (обычно называемые Криптосистемами), которые StrongSwan позволит разным клиентам использовать:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Каждая поддерживаемая криптосистема отделена от других запятой. Например, chacha20poly1305-sha512-curve25519-prfsha512 – это одна криптосистема, а aes256gcm16-sha384-prfsha384-ecp384 – другая. Здесь перечислены криптосистемы, выбранные для обеспечения наибольшей совместимости с клиентами Windows, macOS, iOS, Android и Linux.

Полный файл конфигурации должен выглядеть следующим образом:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Сохраните и закройте файл, когда убедитесь, что каждая строка добавлена правильно. Если вы использовали nano, сделайте это, нажав CTRL + X, Y, затем ENTER.

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

Шаг 5 — Настройка аутентификации VPN

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

  • Вам нужно сообщить StrongSwan, где найти закрытый ключ для нашего серверного сертификата, чтобы сервер мог аутентифицироваться у клиентов.
  • Также вам нужно настроить список пользователей, которым будет разрешено подключаться к VPN.

Давайте откроем файл secrets для редактирования:

  1. sudo nano /etc/ipsec.secrets

Сначала укажите StrongSwan, где найти закрытый ключ и как его разбирать.

/etc/ipsec.secrets
: RSA "server-key.pem"

Убедитесь, что строка начинается с символа :, и после него есть пробел, чтобы вся строка выглядела следующим образом: : RSA "server-key.pem".

Затем определите учетные данные пользователя. Вы можете придумать любое сочетание имени пользователя и пароля, которое вам нравится:

/etc/ipsec.secrets
your_username : EAP "your_password"

Сохраните и закройте файл. Теперь, когда вы закончили работу с параметрами VPN, перезапустите службу VPN, чтобы наша конфигурация применилась:

  1. sudo systemctl restart strongswan-starter

Теперь, когда сервер VPN был полностью сконфигурирован с обеими опциями сервера и учетными данными пользователя, пришло время перейти к настройке самой важной части: брандмауэра.

Шаг 6 — Настройка брандмауэра и проброса IP-пакетов ядра

После завершения конфигурации StrongSwan вам необходимо настроить брандмауэр для пропуска трафика VPN и его проброса.

Если вы следовали руководству по начальной настройке сервера, предварительным условиям, то у вас уже должен быть включен брандмауэр UFW. Если вы еще не настроили UFW, начните с добавления правила для пропуска SSH-соединений через брандмауэр, чтобы ваша текущая сессия не закрылась при включении UFW:

  1. sudo ufw allow OpenSSH

Затем включите брандмауэр, набрав:

  1. sudo ufw enable

Затем добавьте правило для пропуска UDP-трафика через стандартные порты IPSec, 500 и 4500:

  1. sudo ufw allow 500,4500/udp

Затем откройте один из файлов конфигурации UFW, чтобы добавить несколько низкоуровневых политик для маршрутизации и проброса пакетов IPSec. Однако перед этим вам нужно узнать, какой сетевой интерфейс на вашем сервере используется для доступа к интернету. Найдите этот интерфейс, запросив устройство, связанное с маршрутом по умолчанию:

  1. ip route show default

Ваш общедоступный интерфейс должен следовать за словом “dev”. Например, в этом результате показан интерфейс с именем eth0, который выделен в следующем примере:

Output
default via your_server_ip dev eth0 proto static

Когда у вас есть общедоступный сетевой интерфейс, откройте файл /etc/ufw/before.rules в вашем текстовом редакторе. Правила в этом файле добавляются в брандмауэр перед остальными обычными правилами ввода и вывода. Они используются для настройки сетевого адресного преобразования (NAT), чтобы сервер мог правильно маршрутизировать соединения от и к клиентам и Интернету.

  1. sudo nano /etc/ufw/before.rules

В верхней части файла (перед строкой *filter) добавьте следующий блок конфигурации. Замените каждое вхождение eth0 в указанной конфигурации на имя интерфейса, которое вы нашли с помощью ip route. Строки *nat создают правила, чтобы брандмауэр мог правильно маршрутизировать и управлять трафиком между клиентами VPN и интернетом. Строка *mangle регулирует максимальный размер сегмента пакета, чтобы предотвратить возможные проблемы с определенными клиентами VPN:

/etc/ufw/before.rules
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
. . .

Затем, после строк *filter и определения цепочки, добавьте еще один блок конфигурации:

/etc/ufw/before.rules
. . .
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

Эти строки указывают брандмауэру пересылать трафик ESP (Encapsulating Security Payload), чтобы клиенты VPN могли подключаться. ESP обеспечивает дополнительную безопасность для наших пакетов VPN при их прохождении по ненадежным сетям.

Когда закончите, сохраните и закройте файл после проверки того, что каждая строка добавлена правильно. Если вы использовали nano, сделайте это, нажав CTRL + X, затем Y, а затем ENTER.

Перед перезапуском брандмауэра также необходимо изменить некоторые параметры ядра сети, чтобы разрешить маршрутизацию между интерфейсами. Файл, который управляет этими настройками, называется /etc/ufw/sysctl.conf. Вам нужно будет настроить несколько вещей в этом файле.

Сначала необходимо включить пересылку пакетов IPv4, чтобы трафик мог перемещаться между VPN и общедоступными сетевыми интерфейсами на сервере. Затем отключим обнаружение MTU пути, чтобы предотвратить проблемы с фрагментацией пакетов. Наконец, мы не будем принимать ICMP-перенаправления и не будем отправлять ICMP-перенаправления, чтобы предотвратить атаки подслушивания.

Откройте файл конфигурации параметров ядра UFW с помощью nano или вашего предпочтительного текстового редактора:

  1. sudo nano /etc/ufw/sysctl.conf

Теперь добавьте следующую настройку net/ipv4/ip_forward=1 в конец файла, чтобы разрешить пересылку пакетов между интерфейсами:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_forward=1

Затем заблокируйте отправку и прием ICMP-перенаправлений, добавив следующие строки в конец файла:

/etc/ufw/sysctl.conf
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0

Наконец, отключите обнаружение MTU пути, добавив эту строку в конец файла:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_no_pmtu_disc=1

Сохраните файл, когда закончите. Теперь вы можете применить все изменения, отключив, а затем снова включив брандмауэр, поскольку UFW применяет эти настройки при каждом перезапуске:

  1. sudo ufw disable
  2. sudo ufw enable

Вам будет предложено подтвердить процесс. Введите Y, чтобы снова включить UFW с новыми настройками.

Шаг 7 — Тестирование VPN-соединения на Windows, macOS, Ubuntu, iOS и Android

Теперь, когда всё настроено, пришло время проверить его работу. Сначала вам нужно скопировать созданный вами CA-сертификат и установить его на устройства клиента, которые будут подключаться к VPN. Самый простой способ сделать это – войти на ваш сервер и вывести содержимое файла сертификата:

  1. cat /etc/ipsec.d/cacerts/ca-cert.pem

Вы увидите вывод, аналогичный следующему:

Output
-----BEGIN CERTIFICATE----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE . . . H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----END CERTIFICATE-----

Скопируйте этот вывод на свой компьютер, включая строки -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----, и сохраните его в файл с узнаваемым именем, например, ca-cert.pem. Убедитесь, что файл, который вы создаете, имеет расширение .pem.

Кроме того, используйте SFTP для передачи файла на свой компьютер.

Как только у вас будет файл ca-cert.pem загружен на ваш компьютер, вы можете настроить подключение к VPN.Подключение с Windows

Подключение из Windows

Есть несколько способов импортировать корневой сертификат и настроить Windows для подключения к VPN. Первый метод использует графические инструменты для каждого шага. Второй метод использует команды PowerShell, которые можно скриптовать и изменять в соответствии с вашей конфигурацией VPN.

Примечание: Эти инструкции были протестированы на установках Windows 10, работающих под версиями 1903 и 1909.

Настройка Windows с использованием графических инструментов

Сначала импортируйте корневой сертификат, выполнив следующие шаги:

  1. Нажмите WINDOWS+R для открытия диалогового окна Выполнить и введите mmc.exe для запуска Консоли управления Windows.

  2. Из меню Файл перейдите в Добавить или удалить фрагмент, выберите Сертификаты из списка доступных фрагментов и нажмите Добавить.

  3. Мы хотим, чтобы VPN работал с любым пользователем, поэтому выберите Аккаунт компьютера и нажмите Далее.

  4. Мы настраиваем настройки на локальном компьютере, поэтому выберите Локальный компьютер, затем нажмите Готово.

  5. В разделе Корневое консоли разверните запись Сертификаты (Локальный компьютер), разверните Надёжные авторитетные центры сертификации и затем выберите запись Сертификаты:

  6. Из меню Действие выберите Все задачи и нажмите Импорт для отображения мастера импорта сертификата. Нажмите Далее для перехода после вступления.

  7. На экране Файл для импорта нажмите кнопку Обзор, убедитесь, что вы изменили тип файла с “Сертификат X.509 (.cer;.crt)” на “Все файлы (.)”, и выберите файл ca-cert.pem, который вы сохранили. Затем нажмите Далее.

  8. Убедитесь, что хранилище Сертификатов установлено на Доверенные корневые центры сертификации, и нажмите Далее.

  9. Нажмите Готово, чтобы импортировать сертификат.

Затем настройте VPN с помощью следующих шагов:

  1. Запустите Панель управления, затем перейдите в Центр управления сетями и общим доступом.
  2. Нажмите на Установить новый подключение или сеть, затем выберите Подключиться к рабочему месту.
  3. Выберите Использовать мое подключение к Интернету (VPN).
  4. Введите данные сервера VPN. Введите доменное имя сервера или IP-адрес в поле Internet address, затем заполните Destination name чем-то, что описывает ваше соединение VPN. Затем нажмите Done.

Настройка Windows с помощью PowerShell

Чтобы импортировать корневой сертификат CA с помощью PowerShell, сначала откройте окно PowerShell с привилегиями администратора. Для этого щелкните правой кнопкой мыши значок меню “Пуск” и выберите Windows PowerShell (Admin). Вы также можете открыть командную строку с правами администратора и ввести powershell.

Далее мы импортируем сертификат с помощью командлета PowerShell Import-Certificate. В следующей команде первый аргумент -CertStoreLocation обеспечит импорт сертификата в хранилище Trusted Root Certification Authorities компьютера, чтобы все программы и пользователи смогли проверить сертификат сервера VPN. Аргумент -FilePath должен указывать на место, где вы скопировали сертификат. В следующем примере путь C:\Users\sammy\Documents\ca-cert.pem. Убедитесь, что вы редактируете команду, чтобы она соответствовала использованному вами расположению.

  1. Import-Certificate `
  2. -CertStoreLocation cert:\LocalMachine\Root\ `
  3. -FilePath C:\users\sammy\Documents\ca-cert.pem

Команда выведет что-то вроде следующего:

Output
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root Thumbprint Subject ---------- ------- DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA

Теперь для настройки VPN с помощью PowerShell выполните следующую команду. Замените доменное имя DNS или IP-адрес вашего сервера на строке -ServerAddress. Различные флаги обеспечат правильную настройку Windows с соответствующими параметрами безопасности, которые соответствуют параметрам, установленным в /etc/ipsec.conf.

  1. Add-VpnConnection -Name "VPN Connection" `
  2. -ServerAddress "server_domain_or_IP" `
  3. -TunnelType "IKEv2" `
  4. -AuthenticationMethod "EAP" `
  5. -EncryptionLevel "Maximum" `
  6. -RememberCredential `

Если команда выполнена успешно, то выходного сообщения не будет. Чтобы подтвердить правильность настройки VPN, используйте командлет Get-VPNConnection:

  1. Get-VpnConnection -Name "VPN Connection"

Вы получите вывод, похожий на следующий:

Output
Name : VPN Connection ServerAddress : your_server_ip AllUserConnection : False Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E} TunnelType : Ikev2 AuthenticationMethod : {Eap} EncryptionLevel : Maximum L2tpIPsecAuth : UseWinlogonCredential : False EapConfigXmlStream : #document ConnectionStatus : Disconnected RememberCredential : True SplitTunneling : False DnsSuffix : IdleDisconnectSeconds : 0

По умолчанию Windows выбирает более старые и медленные алгоритмы. Запустите командлет Set-VpnConnectionIPsecConfiguration, чтобы обновить параметры шифрования, которые Windows будет использовать для обмена ключами IKEv2, и для шифрования пакетов:

  1. Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
  2. -AuthenticationTransformConstants GCMAES256 `
  3. -CipherTransformConstants GCMAES256 `
  4. -DHGroup ECP384 `
  5. -IntegrityCheckMethod SHA384 `
  6. -PfsGroup ECP384 `
  7. -EncryptionMethod GCMAES256

Примечание: Если вы хотите удалить соединение VPN и перенастроить его с другими параметрами, вы можете запустить командлет Remove-VpnConnection.

  1. Remove-VpnConnection -Name "VPN Connection" -Force

Флаг -Force позволит пропустить запрос на подтверждение удаления. Вы должны быть отключены от VPN, если вы пытаетесь удалить его с помощью этой команды.

Подключение к VPN

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

Подключение из macOS

Выполните следующие шаги, чтобы импортировать сертификат:

  1. Дважды нажмите на файл сертификата. Keychain Access появится с диалоговым окном, в котором говорится: “Keychain Access пытается изменить системный ключевой ланч. Введите пароль, чтобы разрешить это.”
  2. Введите свой пароль, затем нажмите на Изменить ключевую цепочку
  3. Дважды нажмите на импортированный сертификат VPN. Это открывает небольшое окно свойств, где вы можете указать уровни доверия. Установите Безопасность IP (IPSec) на Всегда доверять и вам снова будет предложено ввести пароль. Этот параметр сохраняется автоматически после ввода пароля.

Теперь, когда сертификат импортирован и доверен, настройте соединение VPN с помощью следующих шагов:

  1. Перейдите в Настройки системы и выберите Сеть.
  2. Нажмите на маленькую кнопку “плюс” в нижнем левом углу списка сетей.
  3. В появившемся меню установите Интерфейс на VPN, установите Тип VPN на IKEv2 и дайте соединению имя.
  4. В поле Сервер и Удаленный ID введите доменное имя или IP-адрес сервера. Оставьте поле Локальный ID пустым.
  5. Нажмите на Настройки аутентификации, выберите Имя пользователя, и введите имя пользователя и пароль, которые вы настроили для своего пользователя VPN. Затем нажмите ОК.

Наконец, нажмите на Подключиться, чтобы подключиться к VPN. Теперь вы должны быть подключены к VPN.

Подключение из Ubuntu

Для подключения с машины Ubuntu вы можете настроить и управлять StrongSwan как службу или использовать одноразовую команду каждый раз, когда хотите подключиться. Инструкции предоставлены для обоих.

Управление StrongSwan как службой

Для управления StrongSwan как службой вам нужно выполнить следующие шаги конфигурации.

Сначала обновите свой локальный кэш пакетов, используя apt

  1. sudo apt update

Затем установите StrongSwan и необходимые плагины для аутентификации:

  1. sudo apt install strongswan libcharon-extra-plugins

Теперь вам понадобится копия сертификата ЦС в каталоге /etc/ipsec.d/cacerts, чтобы ваш клиент мог проверить подлинность сервера. Выполните следующую команду для копирования файла ca-cert.pem на место:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

Чтобы VPN запускался только по требованию, используйте systemctl для отключения автоматического запуска StrongSwan:

  1. sudo systemctl disable --now strongswan-starter

Затем настройте имя пользователя и пароль, которые вы будете использовать для аутентификации на сервере VPN. Отредактируйте файл /etc/ipsec.secrets с помощью nano или вашего предпочтительного редактора:

  1. sudo nano /etc/ipsec.secrets

Добавьте следующую строку, отредактировав выделенные значения имени пользователя и пароля, чтобы они соответствовали тем, которые вы настроили на сервере:

/etc/ipsec.secrets
your_username : EAP "your_password"

Наконец, отредактируйте файл /etc/ipsec.conf, чтобы настроить ваш клиент в соответствии с конфигурацией сервера:

/etc/ipsec.conf
config setup

conn ikev2-rw
    right=server_domain_or_IP
    # Это должно соответствовать значению `leftid` в конфигурации вашего сервера
    rightid=server_domain_or_IP
    rightsubnet=0.0.0.0/0
    rightauth=pubkey
    leftsourceip=%config
    leftid=username
    leftauth=eap-mschapv2
    eap_identity=%identity
    auto=start

Для подключения к VPN введите:

  1. sudo systemctl start strongswan-starter

Чтобы отключиться, введите:

  1. sudo systemctl stop strongswan-starter

Используя клиент charon-cmd для одноразовых подключений

Для управления StrongSwan как службой вам потребуется выполнить следующие конфигурационные шаги.

Сначала обновите локальный кэш пакетов, используя apt.

  1. sudo apt update

Затем установите StrongSwan и необходимые плагины для аутентификации:

  1. sudo apt install strongswan libcharon-extra-plugins

Теперь вам понадобится копия корневого сертификата ЦС в каталоге /etc/ipsec.d/cacerts, чтобы ваш клиент мог проверить подлинность сервера. Выполните следующую команду, чтобы скопировать файл ca-cert.pem на свое место:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

На этом этапе вы можете подключиться к серверу VPN с помощью charon-cmd, используя корневой сертификат сервера VPN, IP-адрес сервера VPN и имя пользователя, которое вы настроили.

Выполните следующую команду всякий раз, когда хотите подключиться к VPN:

  1. sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

При запросе введите пароль пользователя VPN, и вы будете подключены к VPN. Чтобы отключиться, нажмите CTRL+C в терминале и дождитесь закрытия соединения.

Подключение с iOS

Чтобы настроить VPN-подключение на устройстве iOS, выполните следующие шаги:

  1. Отправьте себе электронное письмо с прикрепленным корневым сертификатом.
  2. Откройте электронное письмо на вашем устройстве iOS и коснитесь прикрепленного файла сертификата, затем коснитесь Установить и введите ваш пароль. После установки коснитесь Готово.
  3. Перейдите в Настройки, Общие, VPN и коснитесь Добавить конфигурацию VPN. Это откроет экран конфигурации соединения с VPN.
  4. Нажмите на Тип и выберите IKEv2.
  5. В поле Описание введите короткое название для соединения с VPN. Это может быть что угодно.
  6. В полях Сервер и Удаленный идентификатор введите доменное имя сервера или его IP-адрес. Поле Локальный идентификатор можно оставить пустым.
  7. Введите ваше имя пользователя и пароль в разделе Аутентификация, затем коснитесь Готово.
  8. Выберите созданное вами соединение с VPN, коснитесь переключателя в верхней части страницы, и вы будете подключены.

Подключение с Android

Следуйте этим шагам для импорта сертификата:

  1. Отправьте себе электронное письмо с прикрепленным сертификатом ЦА. Сохраните сертификат ЦА в папку загрузок.
  2. Скачайте клиент VPN StrongSwan из Play Store.
  3. Откройте приложение. Нажмите на значок “еще” (. . .) в правом верхнем углу и выберите Сертификаты ЦА.
  4. Каснитесь значка «еще» (. . .) в верхнем правом углу снова. Выберите Импорт сертификата.
  5. Перейдите в файл сертификата ЦС в папке Загрузки и выберите его для импорта в приложение.

Теперь, когда сертификат импортирован в приложение StrongSwan, вы можете настроить VPN-соединение с помощью следующих шагов:

  1. В приложении коснитесь ДОБАВИТЬ ПРОФИЛЬ VPN в верхней части.
  2. Заполните Сервер доменным именем вашего сервера VPN или его общедоступным IP-адресом.
  3. Убедитесь, что выбран тип VPN IKEv2 EAP (Имя пользователя/Пароль).
  4. Заполните поля Имя пользователя и Пароль учетными данными, которые вы установили на сервере.
  5. Снимите выбор с Выбрать автоматически в разделе Сертификат ЦС и нажмите Выбрать сертификат ЦС.
  6. Коснитесь вкладки ИМПОРТИРОВАННЫЕ в верхней части экрана и выберите импортированный ЦС (он будет назван «Корневой ЦС VPN», если вы не меняли «DN» ранее).
  7. При желании заполните Имя профиля (необязательно) более подробным названием.

Когда вы захотите подключиться к VPN, нажмите на созданный вами профиль в приложении StrongSwan.

Устранение неполадок в соединениях

Если вы не можете импортировать сертификат, убедитесь, что файл имеет расширение .pem, а не .pem.txt.

Если вы не можете подключиться к VPN, проверьте имя сервера или IP-адрес, который вы использовали. Доменное имя сервера или его IP-адрес должны совпадать с тем, что вы настроили как общее имя (CN) при создании сертификата. Если они не совпадают, подключение к VPN не будет работать. Например, если вы настроили сертификат с CN vpn.example.com, вы должны использовать vpn.example.com, когда вводите данные сервера VPN. Перепроверьте команду, которую вы использовали для создания сертификата, и значения, которые вы использовали при создании соединения с VPN.

Наконец, перепроверьте конфигурацию VPN, чтобы убедиться, что значение leftid настроено с символом @, если вы используете доменное имя:

/etc/ipsec.conf
    leftid=@vpn.example.com

Если вы используете IP-адрес, убедитесь, что символ @ опущен. Также убедитесь, что при создании файла server-cert.pem вы включили флаги --san @IP_address и --san IP_address.

Вывод

В этом руководстве вы создали сервер VPN, использующий протокол IKEv2. Вы узнали о директивах, которые контролируют левую и правую стороны соединения как на сервере, так и на клиентах. Вы также настроили клиент Windows, macOS, iOS, Android или Linux для подключения к VPN.

Чтобы добавить или удалить пользователей, перейдите к Шагу 5 снова. Каждая строка в /etc/ipsec.secrets предназначена для одного пользователя, поэтому добавление или удаление пользователей, а также изменение паролей требует только редактирования файла.

Теперь вы можете быть уверены, что ваши онлайн-активности останутся безопасными где бы вы ни находились и с любого устройства, которое вы используете для доступа в интернет.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-22-04