Установка VPN-сервера IKEv2 StrongSwan в Ubuntu 20.04

Виртуальная частная сеть (или VPN) обеспечивает шифрование трафика при работе в небезопасных сетях (например, в публичной сети кафе или аэропорта и т.п.).

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

Этот мануал поможет установить VPN-сервер IKEv2 StrongSwan на сервер Ubuntu 20.04 и подключиться к нему с клиентов Windows, macOS, Ubuntu, iOS и Android.

Требования

Для работы нужен сервер Ubuntu 20.04, настроенный по этому мануалу (включая пользователя sudo  и брандмауэр).

1: Установка StrongSwan

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

Обновите индекс пакетов:

sudo apt update

Чтобы установить необходимые пакеты, введите:

sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins

Дополнительный пакет libcharon-extauth-plugins позволяет разным клиентам авторизоваться по общему имени и паролю.

2: Создание центра сертификации

Для идентификации клиентов серверу IKEv2 нужны сертификаты. Поэтому пакет strongswan-pki поставляется с отдельной утилитой pki для генерирования центра сертификации и самих сертификатов сервера.

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

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

Заблокируйте доступ к этим файлам:

chmod 700 ~/pki

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

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

Теперь можно создать root ЦС и использовать ключ для подписи сертификата root:

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

Флаг —lifetime 3650 задает срок действия root-сертификата ЦС, в данном случае это 10 лет. Как правило, такой сертификат не меняется, в противном случае его придется повторно распространять между всеми серверами и клиентами, которые зависят от этого ЦС. Потому мы установили такой продолжительный срок действия для этого сертификата.

Вы можете изменить значение флага —dn (distinguished name) и указать свою страну, организацию и имя. В данном случае параметр CN (common name) – просто идентификатор, вы можете просто придумать его, он не должен совпадать с чем-либо в вашей инфраструктуре.

Теперь нужно создать сертификат для сервера VPN.

3: Генерирование сертификата для VPN-сервера

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

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

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

Затем создайте сертификат для VPN-сервера и подпишите его с помощью ЦС, который вы создали в предыдущем разделе. Запустите следующий набор команд, предварительно указав в параметрах CN (Common Name) и SAN (Subject Alternate Name) ваше доменное имя или IP-адрес сервера.

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

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

--dn "CN=IP address --san @IP_address --san IP_address \

Эта дополнительная запись —san @IP_address нужна для тех клиентов, которые при проверке подлинности сертификата ищут и запись DNS, и запись IP-адреса сервера.

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

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

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

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

4: Настройка StrongSwan

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

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

Создайте новый файл:

sudo nano /etc/ipsec.conf

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

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

Настройте регистрацию состояний демона (это пригодится при отладке и устранении неполадок) и разрешите резервные соединения. Добавьте эти строки в файл:

config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no

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

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

Теперь настройте выявление нерабочих серверов.

. . .
conn ikev2-vpn
. . .
dpdaction=clear
dpddelay=300s
rekey=no

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

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

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

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

Примечание: Если в параметре leftid в качестве ID вы хотите использовать домен VPN-сервера, добавьте после = символ @:

. . .
leftid=@vpn.example.com
. . .

Если вы хотите использовать IP, просто укажите его:

. . .
leftid=your_server_ip
. . .

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

  • right=%any: значение %any для правой стороны соединения позволяет серверу принимать входящие соединения от любого удаленного клиента.
  • 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: этот параметр сообщает серверу, что для аутентификации клиентам не нужно отправлять сертификат.

Теперь, когда вы знакомы со всеми необходимыми опциями правой стороны, добавьте следующие строки в /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 должен запрашивать учётные данные пользователя при подключении клиента. Для этого добавьте:

. . .
conn ikev2-vpn
. . .
eap_identity=%identity

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

. . .
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.

В результате конфигурационный файл будет выглядеть так:

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!

Сохраните и закройте файл.

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

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

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

Откройте файл:

sudo nano /etc/ipsec.secrets

Укажите путь к закрытому ключу:

: RSA "server-key.pem"

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

your_username : EAP "your_password"

Примечание: Вместо your_username и your_password укажите свои учётные данные (имя пользователя и пароль).

Сохраните и закройте файл.

Теперь можно перезапустить сервис VPN, чтобы обновить параметры.

sudo systemctl restart strongswan-starter

6: Настойка брандмауэра и IP forwarding

Теперь нужно настроить брандмауэр для поддержки VPN-трафика.

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

sudo ufw allow OpenSSH
sudo ufw enable

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

sudo ufw allow 500,4500/udp

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

ip route show default

Открытый интерфейс указывается после слова dev (в нашем случае это eth0):

default via your_server_ip dev eth0 proto static

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

sudo nano /etc/ufw/before.rules

В начале файла (перед строкой *filter) укажите следующий блок конфигураций.

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

*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 и цепочек добавьте такие строки:

. . .
*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 при пересечении ненадежных сетей.

Сохраните и закройте файл.

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

В файле нужно сделать следующее:

  • Включить пересылку пакетов IPv4.
  • Отключить Path MTU Discovery, чтобы предотвратить фрагментацию пакетов.
  • Отключить поддержку icmp-редиректов, чтобы предупредить атаки man-in-the-middle.

Откройте файл в редакторе:

sudo nano /etc/ufw/sysctl.conf

Чтобы включить форвардинг пакетов между интерфейсами, добавьте в конец файла строку:

. . .
net/ipv4/ip_forward=1

Чтобы заблокировать получение и отправку пакетов ICMP, добавьте в конец файла эти строки:

. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0

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

. . .
net/ipv4/ip_no_pmtu_disc=1

Сохраните и закройте файл.

Перезапустите брандмауэр:

sudo ufw disable
sudo ufw enable

Подтвердите операцию, нажав Y.

7: Тестирование VPN-соединений в Windows, iOS и macOS

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

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

Вы получите такой вывод:

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

Скопируйте вывод на компьютер, включая строки ——BEGIN CERTIFICATE—— и ——END CERTIFICATE——. Сохраните эти данные в файл с описательным именем (например, ca-cert.pem). Файл должен иметь расширение .pem.

В качестве альтернативы можно использовать SFTP.

Читайте также: Использование SFTP для безопасного обмена файлами с удаленным сервером

Скопировав сертификат на компьютер, вы можете подключиться к VPN.

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

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

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

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

Импортируйте сертификат root:

  • Нажмите WINDOWS+R, чтобы открыть диалог Run, и введите mmc.exe, чтобы запустить консоль управления Windows.
  • Из меню File перейдите в Add or Remove Snap-in, выберите в списке Certificates и нажмите Add.
  • Чтобы к VPN мог подключиться любой пользователь, выберите Computer Account и нажмите Next.
  • Настройка выполняется на локальном компьютере, потому нужно выбрать Local Computer и нажать Finish.
  • В Console Root разверните Certificates (Local Computer) → Trusted Root Certification Authorities и выберите Certificates.
  • В меню Action выберите All Tasks и нажмите Import, чтобы вызвать мастер импортирования сертификатов. Нажмите Next.
  • В поле File to Import выберите файл сертификата, который вы скопировали ранее. Нажмите Next.
  • Убедитесь, что в Certificate Store выбрано Trusted Root Certification Authorities. Нажмите Next.
  • Нажмите Finish, чтобы импортировать сертификат.

Чтобы настроить VPN:

  • Запустите панель управления, перейдите в Network and Sharing Center.
  • Нажмите Set up a new connection or network и выберите Connect to a workplace.
  • Выберите Use my Internet connection (VPN).
  • Введите данные сервера VPN. Укажите домен или IP сервера в поле Internet address. В Destination name укажите описательное имя VPN-соединения. Нажмите Done.

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

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

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

Import-Certificate `
-CertStoreLocation cert:\LocalMachine\Root\ `
-FilePath C:\users\8host\Documents\ca-cert.pem

Команда выведет примерно такой результат:

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

Чтобы настроить VPN с помощью PowerShell, выполните следующую команду. Укажите домен или IP-адрес своего сервера в строке -ServerAddress. Использованные здесь флаги позволяют правильно настроить Windows с соответствующими параметрами безопасности, установленными в /etc/ipsec.conf.

Add-VpnConnection -Name "VPN Connection" `
-ServerAddress "server_domain_or_IP" `
-TunnelType "IKEv2" `
-AuthenticationMethod "EAP" `
-EncryptionLevel "Maximum" `
-RememberCredential `

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

Get-VpnConnection -Name "VPN Connection"

Вы получите следующий результат:

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 и для шифрования пакетов:

Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
-AuthenticationTransformConstants GCMAES256 `
-CipherTransformConstants GCMAES256 `
-DHGroup ECP384 `
-IntegrityCheckMethod SHA384 `
-PfsGroup ECP384 `
-EncryptionMethod GCMAES256

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

Remove-VpnConnection -Name "VPN Connection" -Force

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

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

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

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

Чтобы импортировать сертификат:

  • Дважды кликните по файлу сертификата. Появится окно Keychain Access с сообщением «Keychain Access is trying to modify the system keychain. Enter your password to allow this».
  • Введите пароль и нажмите Modify Keychain.
  • Дважды кликните по импортированному сертификату VPN. На экране появится окно свойств, где нужно выбрать уровень доверия. Установите Always Trust в IP Security (IPSec). Система снова запросит пароль.

Чтобы настроить VPN-соединение на устройстве macOS:

  • В System Preferences выберите Network. Нажмите кнопку с плюсом.
  • В появившемся окне в поле Interface укажите VPN, в VPN Type выберите IKEv2 и выберите имя соединения.
  • В полях Server и Remote ID укажите домен или IP сервера. Поле Local ID оставьте пустым.
  • В Authentication Settings выберите Username и введите имя и пароль своего пользователя VPN. Нажмите OK.
  • Нажмите Connect, чтобы подключиться к VPN.

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

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

StrongSwan как сервис

Обновите индекс локальных пакетов:

sudo apt update

Установите StrongSwan:

sudo apt install strongswan libcharon-extra-plugins

Скопируйте сертификат ЦС в каталог /etc/ipsec.d/cacerts:

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

Отключите StrongSwan, чтобы VPN не включался автоматически.

sudo systemctl disable --now strongswan-starter

Затем откройте в редакторе этот файл:

sudo nano /etc/ipsec.conf

Укажите имя и пароль пользователя VPN в файле /etc/ipsec.secrets:

your_username : EAP "your_password"

Затем добавьте в файл такие конфигурации:

config setup
conn ikev2-rw
right=server_domain_or_IP
# This should match the `leftid` value on your server's configuration
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, введите:

sudo systemctl start strongswan-starter

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

sudo systemctl stop strongswan-starter

Простой клиент charon-cmd для одноразового подключения

Чтобы управлять StrongSwan как сервисом, вам необходимо выполнить следующие шаги.

Сначала обновите индекс локальных пакетов:

sudo apt update

Установите charon-cmd и связанные с ним пакеты:

sudo apt install strongswan libcharon-extra-plugins

Создайте копию сертификата ЦС в каталоге /etc/ipsec.d/cacerts, чтобы клиент мог проверить подлинность сервера.

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

Подключитесь к VPN с помощью charon-cmd, указав сертификат CA, домен или IP сервера VPN и имя пользователя:

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

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

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

Чтобы настроить VPN-соединение на устройстве iOS:

  • Отправьте себе электронное письмо с сертификатом root.
  • Откройте письмо на устройстве iOS и нажмите на прикрепленный файл сертификата, нажмите Install и введите пароль. После завершения нажмите Done.
  • Откройте Settings → General → VPN и выберите Add VPN Configuration. На экране появится окно настройки VPN.
  • Нажмите Type и выберите IKEv2.
  • В поле Description укажите короткое имя VPN-соединения на свое усмотрение.
  • В полях Server и Remote ID укажите доменное имя или IP сервера. Поле Local ID можно оставить пустым.
  • Введите имя пользователя и пароль в разделе Authentication и нажмите Done.
  • Выберите только что созданное VPN-соединение, нажмите переключатель в верхней части страницы, и вы подключитесь.

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

Импортируйте сертификат:

  • Отправьте себе электронное письмо с сертификатом. Сохраните сертификат в папку загрузок.
  • Загрузите StrongSwan VPN клиент.
  •  Откройте приложение. В правом верхнем углу нажмите «more» (иконка с тремя точками) и выберите CA certificates.
  • Вправом верхнем углу снова нажмите «more» и выберите Import certificate.
  • Найдите нужный сертификат CA в папке загрузок и импортируйте его в приложение.

Чтобы настроить VPN-соединение:

  • В верхней панели приложения нажмите ADD VPN PROFILE.
  • В Server укажите домен или внешний IP-адрес сервера VPN.
  • Выберите IKEv2 EAP (Username/Password) как VPN Type.
  • Заполните Username Password.
  • Снимите флажок Select automatically в разделе CA certificate и кликните Select CA certificate. Откройте вкладку IMPORTED и выберите импортированный CA.
  • По желанию можно заполнить Profile name (optional) – укажите более описательное имя.

После этого кликните по созданному профилю в приложении StrongSwan.

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

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

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

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

leftid=@vpn.example.com

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

Заключение

Теперь вы умеете создавать VPN-серверы на основе протокола IKEv2.

Чтобы добавить или удалить пользователей, обратитесь к разделу 5. Каждый пользователь должен быть записан в отдельную строку. Соответственно, чтобы добавить пользователя, добавьте в файл его данные; чтобы удалить пользователя, удалите строку с его данными из файла.

Tags: , , , , ,

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