Создаем свой собственный 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.
Добавить комментарий