Введение
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.
Предварительные требования
Чтобы завершить это руководство, вам понадобится:
- Один сервер Ubuntu 22.04, настроенный в соответствии с руководством по начальной настройке сервера Ubuntu 22.04, включая
sudo
непривилегированного пользователя и брандмауэр.
Шаг 1 — Установка StrongSwan
Сначала установите StrongSwan, демон IPSec с открытым исходным кодом, который вы настроите как свой сервер VPN. Также установите компонент публичного ключа (PKI), чтобы создать Центр сертификации (CA) для предоставления учетных данных для вашей инфраструктуры.
Начните с обновления локального кэша пакетов:
Затем установите программное обеспечение, набрав:
Дополнительный пакет libcharon-extauth-plugins
используется для обеспечения аутентификации различных клиентов на вашем сервере с использованием общего имени пользователя и пароля. Пакет libstrongswan-extra-plugins
включен для поддержки Strongswan криптографических наборов эллиптических кривых, использующих криптографический набор Curve25519
.
Теперь, когда всё установлено, перейдите к созданию ваших сертификатов.
Шаг 2 — Создание Центра сертификации
Для работы сервера IKEv2 требуется сертификат для идентификации перед клиентами. Для помощи в создании необходимого сертификата в пакете strongswan-pki
есть утилита под названием pki
для генерации Центра сертификации и сертификатов сервера.
Для начала создайте несколько каталогов для хранения всех ресурсов, над которыми будете работать. Структура каталогов соответствует некоторым каталогам в /etc/ipsec.d
, куда вы в конечном итоге переместите все созданные элементы:
Затем ограничьте разрешения, чтобы наши частные файлы не могли быть просмотрены другими пользователями:
Теперь, когда у вас есть структура каталога для хранения всего, вы можете сгенерировать корневой ключ. Это будет ключ RSA с длиной 4096 бит, который будет использоваться для подписи вашего корневого сертификата удостоверяющего центра:
Выполните эти команды для генерации ключа:
После этого вы можете перейти к созданию корневого сертификата удостоверяющего центра, используя только что сгенерированный ключ для подписи корневого сертификата:
Флаг --lifetime 3650
используется для того, чтобы убедиться, что корневой сертификат удостоверяющего центра будет действителен в течение 10 лет. Корневой сертификат для центра обычно не изменяется, так как его пришлось бы перераспространять на каждый сервер и клиент, который на него полагается, поэтому 10 лет – безопасное значение срока действия по умолчанию.
Вы можете изменить значение отличительного имени (DN) на что-то другое, если хотите. Общее имя (поле CN) здесь является всего лишь индикатором, поэтому оно не обязательно должно соответствовать чему-либо в вашей инфраструктуре.
Теперь, когда ваш корневой сертификат удостоверяющего центра запущен и работает, вы можете создать сертификат, который будет использоваться сервером VPN.
Шаг 3 — Создание сертификата для сервера VPN
Теперь вы создадите сертификат и ключ для сервера VPN. Этот сертификат позволит клиенту проверить подлинность сервера, используя сгенерированный нами сертификат ЦС.
Сначала создайте закрытый ключ для сервера VPN с помощью следующей команды:
Теперь создайте и подпишите сертификат сервера VPN с ключом центра сертификации, созданным на предыдущем шаге. Выполните следующую команду, но измените Общее имя (CN) и поле Альтернативное имя субъекта (SAN) на имя DNS или IP-адрес вашего сервера VPN:
Примечание: Если вы используете 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
, набрав:
На этом этапе вы создали пару сертификатов, которая будет использоваться для обеспечения безопасности коммуникаций между клиентом и сервером. Вы также подписали сертификаты с помощью ключа ЦС, так что клиент сможет проверить подлинность сервера VPN с использованием сертификата ЦС. Со всеми этими сертификатами готово, вы готовы перейти к настройке SrongSwan.
Шаг 4 — Настройка StrongSwan
У StrongSwan есть файл конфигурации по умолчанию с некоторыми примерами, но мы должны будем сделать большую часть конфигурации сами. Давайте сначала создадим резервную копию файла для справки перед началом с нуля:
Создайте и откройте новый пустой файл конфигурации с помощью предпочитаемого вами текстового редактора. Здесь вы будете использовать nano
:
Примечание: При работе с этим разделом для настройки серверной части вашей VPN вы столкнетесь с параметрами, которые относятся к левой и правой сторонам соединения. При работе с IPSec VPN левая сторона по соглашению относится к локальной системе, которую вы настраиваете, в данном случае к серверу. Директивы для правой стороны в этих параметрах будут относиться к удаленным клиентам, таким как телефоны и другие компьютеры.
Когда вы перейдете к настройке клиентов позже в этом учебнике, файлы конфигурации клиентов будут ссылаться на себя с использованием различных директив левой, а сервер будет называться с использованием терминологии правой стороны.
Сначала мы скажем StrongSwan записывать статусы демона для отладки и разрешим дублирование соединений. Добавьте эти строки в файл:
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
Затем мы создадим раздел конфигурации для нашей VPN. Мы также скажем StrongSwan создавать туннели 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
гарантирует соответствие настроенного имени сервера и различительного имени (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
) включайте символ @
только в том случае, если ваш VPN-сервер будет идентифицироваться доменным именем:
. . . leftid=@vpn.example.com
. . .
Если сервер будет идентифицироваться своим IP-адресом, просто укажите IP-адрес:
. . .
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
:
. . .
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!
Сохраните и закройте файл, когда убедитесь, что каждая строка добавлена правильно. Если вы использовали nano
, сделайте это, нажав CTRL + X
, Y
, затем ENTER
.
Теперь, когда вы настроили параметры VPN, вы можете перейти к созданию учетной записи, чтобы пользователи могли подключаться к серверу.
Шаг 5 — Настройка аутентификации VPN
Ваш сервер VPN теперь настроен на принятие подключений клиентов, но еще не сконфигурированы учетные данные. Вам нужно настроить несколько вещей в специальном файле конфигурации, называемом ipsec.secrets
:
- Вам нужно сообщить StrongSwan, где найти закрытый ключ для нашего серверного сертификата, чтобы сервер мог аутентифицироваться у клиентов.
- Также вам нужно настроить список пользователей, которым будет разрешено подключаться к VPN.
Давайте откроем файл secrets для редактирования:
Сначала укажите StrongSwan, где найти закрытый ключ и как его разбирать.
: RSA "server-key.pem"
Убедитесь, что строка начинается с символа :
, и после него есть пробел, чтобы вся строка выглядела следующим образом: : RSA "server-key.pem"
.
Затем определите учетные данные пользователя. Вы можете придумать любое сочетание имени пользователя и пароля, которое вам нравится:
your_username : EAP "your_password"
Сохраните и закройте файл. Теперь, когда вы закончили работу с параметрами VPN, перезапустите службу VPN, чтобы наша конфигурация применилась:
Теперь, когда сервер VPN был полностью сконфигурирован с обеими опциями сервера и учетными данными пользователя, пришло время перейти к настройке самой важной части: брандмауэра.
Шаг 6 — Настройка брандмауэра и проброса IP-пакетов ядра
После завершения конфигурации StrongSwan вам необходимо настроить брандмауэр для пропуска трафика VPN и его проброса.
Если вы следовали руководству по начальной настройке сервера, предварительным условиям, то у вас уже должен быть включен брандмауэр UFW. Если вы еще не настроили UFW, начните с добавления правила для пропуска SSH-соединений через брандмауэр, чтобы ваша текущая сессия не закрылась при включении UFW:
Затем включите брандмауэр, набрав:
Затем добавьте правило для пропуска UDP-трафика через стандартные порты IPSec, 500
и 4500
:
Затем откройте один из файлов конфигурации UFW, чтобы добавить несколько низкоуровневых политик для маршрутизации и проброса пакетов IPSec. Однако перед этим вам нужно узнать, какой сетевой интерфейс на вашем сервере используется для доступа к интернету. Найдите этот интерфейс, запросив устройство, связанное с маршрутом по умолчанию:
Ваш общедоступный интерфейс должен следовать за словом “dev”. Например, в этом результате показан интерфейс с именем eth0
, который выделен в следующем примере:
Outputdefault via your_server_ip dev eth0 proto static
Когда у вас есть общедоступный сетевой интерфейс, откройте файл /etc/ufw/before.rules
в вашем текстовом редакторе. Правила в этом файле добавляются в брандмауэр перед остальными обычными правилами ввода и вывода. Они используются для настройки сетевого адресного преобразования (NAT), чтобы сервер мог правильно маршрутизировать соединения от и к клиентам и Интернету.
В верхней части файла (перед строкой *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 при их прохождении по ненадежным сетям.
Когда закончите, сохраните и закройте файл после проверки того, что каждая строка добавлена правильно. Если вы использовали nano
, сделайте это, нажав CTRL + X
, затем Y
, а затем ENTER
.
Перед перезапуском брандмауэра также необходимо изменить некоторые параметры ядра сети, чтобы разрешить маршрутизацию между интерфейсами. Файл, который управляет этими настройками, называется /etc/ufw/sysctl.conf
. Вам нужно будет настроить несколько вещей в этом файле.
Сначала необходимо включить пересылку пакетов IPv4, чтобы трафик мог перемещаться между VPN и общедоступными сетевыми интерфейсами на сервере. Затем отключим обнаружение MTU пути, чтобы предотвратить проблемы с фрагментацией пакетов. Наконец, мы не будем принимать ICMP-перенаправления и не будем отправлять ICMP-перенаправления, чтобы предотвратить атаки подслушивания.
Откройте файл конфигурации параметров ядра UFW с помощью nano
или вашего предпочтительного текстового редактора:
Теперь добавьте следующую настройку net/ipv4/ip_forward=1
в конец файла, чтобы разрешить пересылку пакетов между интерфейсами:
. . .
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
Сохраните файл, когда закончите. Теперь вы можете применить все изменения, отключив, а затем снова включив брандмауэр, поскольку UFW применяет эти настройки при каждом перезапуске:
Вам будет предложено подтвердить процесс. Введите Y
, чтобы снова включить UFW с новыми настройками.
Шаг 7 — Тестирование VPN-соединения на Windows, macOS, Ubuntu, iOS и Android
Теперь, когда всё настроено, пришло время проверить его работу. Сначала вам нужно скопировать созданный вами CA-сертификат и установить его на устройства клиента, которые будут подключаться к VPN. Самый простой способ сделать это – войти на ваш сервер и вывести содержимое файла сертификата:
Вы увидите вывод, аналогичный следующему:
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 для подключения к VPN. Первый метод использует графические инструменты для каждого шага. Второй метод использует команды PowerShell, которые можно скриптовать и изменять в соответствии с вашей конфигурацией VPN.
Примечание: Эти инструкции были протестированы на установках Windows 10, работающих под версиями 1903 и 1909.
Настройка Windows с использованием графических инструментов
Сначала импортируйте корневой сертификат, выполнив следующие шаги:
-
Нажмите
WINDOWS+R
для открытия диалогового окна Выполнить и введитеmmc.exe
для запуска Консоли управления Windows. -
Из меню Файл перейдите в Добавить или удалить фрагмент, выберите Сертификаты из списка доступных фрагментов и нажмите Добавить.
-
Мы хотим, чтобы VPN работал с любым пользователем, поэтому выберите Аккаунт компьютера и нажмите Далее.
-
Мы настраиваем настройки на локальном компьютере, поэтому выберите Локальный компьютер, затем нажмите Готово.
-
В разделе Корневое консоли разверните запись Сертификаты (Локальный компьютер), разверните Надёжные авторитетные центры сертификации и затем выберите запись Сертификаты:
-
Из меню Действие выберите Все задачи и нажмите Импорт для отображения мастера импорта сертификата. Нажмите Далее для перехода после вступления.
-
На экране Файл для импорта нажмите кнопку Обзор, убедитесь, что вы изменили тип файла с “Сертификат X.509 (.cer;.crt)” на “Все файлы (.)”, и выберите файл
ca-cert.pem
, который вы сохранили. Затем нажмите Далее. -
Убедитесь, что хранилище Сертификатов установлено на Доверенные корневые центры сертификации, и нажмите Далее.
-
Нажмите Готово, чтобы импортировать сертификат.
Затем настройте VPN с помощью следующих шагов:
- Запустите Панель управления, затем перейдите в Центр управления сетями и общим доступом.
- Нажмите на Установить новый подключение или сеть, затем выберите Подключиться к рабочему месту.
- Выберите Использовать мое подключение к Интернету (VPN).
- Введите данные сервера 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
. Убедитесь, что вы редактируете команду, чтобы она соответствовала использованному вами расположению.
Команда выведет что-то вроде следующего:
Output PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root
Thumbprint Subject
---------- -------
DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA
Теперь для настройки VPN с помощью PowerShell выполните следующую команду. Замените доменное имя DNS или IP-адрес вашего сервера на строке -ServerAddress
. Различные флаги обеспечат правильную настройку Windows с соответствующими параметрами безопасности, которые соответствуют параметрам, установленным в /etc/ipsec.conf
.
Если команда выполнена успешно, то выходного сообщения не будет. Чтобы подтвердить правильность настройки VPN, используйте командлет Get-VPNConnection
:
Вы получите вывод, похожий на следующий:
OutputName : 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, и для шифрования пакетов:
Примечание: Если вы хотите удалить соединение VPN и перенастроить его с другими параметрами, вы можете запустить командлет Remove-VpnConnection
.
Флаг -Force
позволит пропустить запрос на подтверждение удаления. Вы должны быть отключены от VPN, если вы пытаетесь удалить его с помощью этой команды.
Подключение к VPN
После импорта сертификата и настройки VPN с помощью любого из методов, ваше новое VPN-соединение будет отображаться в списке сетей. Выберите VPN и нажмите Подключиться. Вам будет предложено ввести имя пользователя и пароль. Введите их, нажмите ОК, и вы будете подключены.
Подключение из macOS
Выполните следующие шаги, чтобы импортировать сертификат:
- Дважды нажмите на файл сертификата. Keychain Access появится с диалоговым окном, в котором говорится: “Keychain Access пытается изменить системный ключевой ланч. Введите пароль, чтобы разрешить это.”
- Введите свой пароль, затем нажмите на Изменить ключевую цепочку
- Дважды нажмите на импортированный сертификат VPN. Это открывает небольшое окно свойств, где вы можете указать уровни доверия. Установите Безопасность IP (IPSec) на Всегда доверять и вам снова будет предложено ввести пароль. Этот параметр сохраняется автоматически после ввода пароля.
Теперь, когда сертификат импортирован и доверен, настройте соединение VPN с помощью следующих шагов:
- Перейдите в Настройки системы и выберите Сеть.
- Нажмите на маленькую кнопку “плюс” в нижнем левом углу списка сетей.
- В появившемся меню установите Интерфейс на VPN, установите Тип VPN на IKEv2 и дайте соединению имя.
- В поле Сервер и Удаленный ID введите доменное имя или IP-адрес сервера. Оставьте поле Локальный ID пустым.
- Нажмите на Настройки аутентификации, выберите Имя пользователя, и введите имя пользователя и пароль, которые вы настроили для своего пользователя VPN. Затем нажмите ОК.
Наконец, нажмите на Подключиться, чтобы подключиться к VPN. Теперь вы должны быть подключены к VPN.
Подключение из Ubuntu
Для подключения с машины Ubuntu вы можете настроить и управлять StrongSwan как службу или использовать одноразовую команду каждый раз, когда хотите подключиться. Инструкции предоставлены для обоих.
Управление StrongSwan как службой
Для управления StrongSwan как службой вам нужно выполнить следующие шаги конфигурации.
Сначала обновите свой локальный кэш пакетов, используя apt
Затем установите StrongSwan и необходимые плагины для аутентификации:
Теперь вам понадобится копия сертификата ЦС в каталоге /etc/ipsec.d/cacerts
, чтобы ваш клиент мог проверить подлинность сервера. Выполните следующую команду для копирования файла ca-cert.pem
на место:
Чтобы VPN запускался только по требованию, используйте systemctl
для отключения автоматического запуска StrongSwan:
Затем настройте имя пользователя и пароль, которые вы будете использовать для аутентификации на сервере VPN. Отредактируйте файл /etc/ipsec.secrets
с помощью nano или вашего предпочтительного редактора:
Добавьте следующую строку, отредактировав выделенные значения имени пользователя и пароля, чтобы они соответствовали тем, которые вы настроили на сервере:
your_username : EAP "your_password"
Наконец, отредактируйте файл /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 введите:
Чтобы отключиться, введите:
Используя клиент charon-cmd
для одноразовых подключений
Для управления StrongSwan как службой вам потребуется выполнить следующие конфигурационные шаги.
Сначала обновите локальный кэш пакетов, используя apt
.
Затем установите StrongSwan и необходимые плагины для аутентификации:
Теперь вам понадобится копия корневого сертификата ЦС в каталоге /etc/ipsec.d/cacerts
, чтобы ваш клиент мог проверить подлинность сервера. Выполните следующую команду, чтобы скопировать файл ca-cert.pem
на свое место:
На этом этапе вы можете подключиться к серверу VPN с помощью charon-cmd
, используя корневой сертификат сервера VPN, IP-адрес сервера VPN и имя пользователя, которое вы настроили.
Выполните следующую команду всякий раз, когда хотите подключиться к VPN:
При запросе введите пароль пользователя VPN, и вы будете подключены к VPN. Чтобы отключиться, нажмите CTRL+C
в терминале и дождитесь закрытия соединения.
Подключение с iOS
Чтобы настроить VPN-подключение на устройстве iOS, выполните следующие шаги:
- Отправьте себе электронное письмо с прикрепленным корневым сертификатом.
- Откройте электронное письмо на вашем устройстве iOS и коснитесь прикрепленного файла сертификата, затем коснитесь Установить и введите ваш пароль. После установки коснитесь Готово.
- Перейдите в Настройки, Общие, VPN и коснитесь Добавить конфигурацию VPN. Это откроет экран конфигурации соединения с VPN.
- Нажмите на Тип и выберите IKEv2.
- В поле Описание введите короткое название для соединения с VPN. Это может быть что угодно.
- В полях Сервер и Удаленный идентификатор введите доменное имя сервера или его IP-адрес. Поле Локальный идентификатор можно оставить пустым.
- Введите ваше имя пользователя и пароль в разделе Аутентификация, затем коснитесь Готово.
- Выберите созданное вами соединение с VPN, коснитесь переключателя в верхней части страницы, и вы будете подключены.
Подключение с Android
Следуйте этим шагам для импорта сертификата:
- Отправьте себе электронное письмо с прикрепленным сертификатом ЦА. Сохраните сертификат ЦА в папку загрузок.
- Скачайте клиент VPN StrongSwan из Play Store.
- Откройте приложение. Нажмите на значок “еще” (. . .) в правом верхнем углу и выберите Сертификаты ЦА.
- Каснитесь значка «еще» (. . .) в верхнем правом углу снова. Выберите Импорт сертификата.
- Перейдите в файл сертификата ЦС в папке Загрузки и выберите его для импорта в приложение.
Теперь, когда сертификат импортирован в приложение StrongSwan, вы можете настроить VPN-соединение с помощью следующих шагов:
- В приложении коснитесь ДОБАВИТЬ ПРОФИЛЬ VPN в верхней части.
- Заполните Сервер доменным именем вашего сервера VPN или его общедоступным IP-адресом.
- Убедитесь, что выбран тип VPN IKEv2 EAP (Имя пользователя/Пароль).
- Заполните поля Имя пользователя и Пароль учетными данными, которые вы установили на сервере.
- Снимите выбор с Выбрать автоматически в разделе Сертификат ЦС и нажмите Выбрать сертификат ЦС.
- Коснитесь вкладки ИМПОРТИРОВАННЫЕ в верхней части экрана и выберите импортированный ЦС (он будет назван «Корневой ЦС VPN», если вы не меняли «DN» ранее).
- При желании заполните Имя профиля (необязательно) более подробным названием.
Когда вы захотите подключиться к VPN, нажмите на созданный вами профиль в приложении StrongSwan.
Устранение неполадок в соединениях
Если вы не можете импортировать сертификат, убедитесь, что файл имеет расширение .pem
, а не .pem.txt
.
Если вы не можете подключиться к VPN, проверьте имя сервера или IP-адрес, который вы использовали. Доменное имя сервера или его IP-адрес должны совпадать с тем, что вы настроили как общее имя (CN) при создании сертификата. Если они не совпадают, подключение к VPN не будет работать. Например, если вы настроили сертификат с CN vpn.example.com
, вы должны использовать vpn.example.com
, когда вводите данные сервера VPN. Перепроверьте команду, которую вы использовали для создания сертификата, и значения, которые вы использовали при создании соединения с VPN.
Наконец, перепроверьте конфигурацию VPN, чтобы убедиться, что значение leftid
настроено с символом @
, если вы используете доменное имя:
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
предназначена для одного пользователя, поэтому добавление или удаление пользователей, а также изменение паролей требует только редактирования файла.
Теперь вы можете быть уверены, что ваши онлайн-активности останутся безопасными где бы вы ни находились и с любого устройства, которое вы используете для доступа в интернет.