УстановкаVPN на Ikev2

от автора

в ,

Создаем свой собственный IKEv2 VPN сервер на базе Ubuntu

Internet Key Exchange v2 или IKEv2 — это протокол, позволяющий осуществлять прямое туннелирование IPSec между сервером и клиентом.

Установка ipsec (Strongswan)

Сперва обновляем локальный кеш пакетного менеджера:

sudo apt update

Устанавливаем со все зависимостями

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

После установки создадим ЦС (центр сертификации)

 IKEv2 требуется сертификат, чтобы идентифицировать себя для клиентов. Чтобы помочь создать требуемый сертификат, в strongswan-pki пакет входит утилита, вызываемая pki для создания центра сертификации и сертификатов сервера.

Для удобства создадим 3 каталога в которых создадим сертификаты и ключи:

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

Закроем доступ к этим каталогом

chmod 700 ~/pki

Первое создадим первый корневой ключ командой

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

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

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

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

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

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

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

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

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

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

Теперь все сгенерированные ключи и сертификаты скопируем в каталог настроек ipsec /etc/ipsec.d/

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

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

Настройка ipsec (StrongSwan)

Сперва сохраним оригинальный файл настроек ipsec /etc/ipsec.conf

sudo mv /etc/ipsec.conf /etc/ipsec_orig.conf

Я использую текстовый редактор nano из за его удобства и простаты , вы можете использовать любой другой.

Создадим пустой файл командой:

sudo nano /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=192.168.37.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!
  • 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.
  • right=%any Параметр %any для right стороны подключения указывает серверу принимать входящие подключения от любого удаленного клиента.
  • rightid=%any Этот параметр гарантирует, что сервер не будет отклонять подключения от клиентов, предоставляющих удостоверение, до того, как будет установлен зашифрованный туннель.
  • rightauth=eap-mschapv2 Этот параметр настраивает метод аутентификации, который клиенты будут использовать для аутентификации на сервере. eap-mschapv2 здесь используется для широкой совместимости для поддержки таких клиентов, как устройства Windows, macOS и Android.
  • rightsourceip=192.168.37.0/24 Этот параметр указывает серверу назначать частные IP-адреса клиентам из указанного 192.168.37.0/24 пула IP-адресов.
  • rightdns=8.8.8.8,8.8.4.4 Эти IP-адреса являются общедоступными преобразователями DNS Google. Их можно изменить, чтобы использовать другие общедоступные преобразователи, преобразователи VPN-сервера или любые другие преобразователи, доступные клиентам.
  • rightsendcert=never Этот параметр указывает серверу, что клиентам не нужно отправлять сертификат для аутентификации.
  • eap_identity=%identity запрашивать у клиента учетные данные пользователя при подключении.
  • ike=, esp= строки определяют различные алгоритмы обмена ключами, хеширования, аутентификации и шифрования (обычно называемые наборами шифров ), которые StrongSwan позволит использовать различным клиентам.

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

Нам нужно настроить файлик конфигураций с именем ipsec.secrets

  • Нам нужно указать StrongSwan, где найти закрытый ключ для нашего сертификата сервера, чтобы сервер мог аутентифицировать клиентов.
  • Нам также необходимо настроить список пользователей, которым будет разрешено подключаться к VPN.
sudo nano /etc/ipsec.secrets

Запишем туда

: RSA "server-key.pem"
your_username : EAP "your_password"

где your_username логин

your_password пароль

следующим шагом перезагрузим ipsec чтоб все ранее созданные настройки применились.

sudo systemctl restart strongswan-starter

настройка сервера завершена , осталось только распространить на клиентах созданный нами сертификат ЦС (/etc/ipsec.d/cacerts/ca-cert.pem)

настройка сервера завершена , осталось только распространить на клиентах созданный нами сертификат ЦС (/etc/ipsec.d/cacerts/ca-cert.pem)

чтоб импортировать его в Windows через powershell

Import-Certificate -CertStoreLocation cert:\LocalMachine\Root\ -FilePath ~\ca-cert.pem

Для Андроид есть приложение в Google Play StrongSwan.

Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Аватар пользователя yuliaadmin

Об авторе


Поиск по сайту


Полезные ссылки

Ссылки, которые я считаю полезными и хочу поделиться.