Устанавливаем репозиторий EPEL
Купить виртуалку под VPN можно тут
[sourcecode language=»plain»]yum install epel-release[/sourcecode]
Устанавливаем StrongSwan
[sourcecode language=»plain»]yum install strongswan[/sourcecode]
Будем считать что у вас уже есть сертификат от Let’s Encrypt certificates, вам необходимо создать симлинки к ним в каталог strongswan
[sourcecode language=»plain»]ln -s /etc/letsencrypt/live/hd.zp.ua/fullchain.pem /etc/strongswan/ipsec.d/certs/fullchain.pem
ln -s /etc/letsencrypt/live/hd.zp.ua/privkey.pem /etc/strongswan/ipsec.d/private/privkey.pem
ln -s /etc/letsencrypt/live/hd.zp.ua/chain.pem /etc/strongswan/ipsec.d/cacerts/chain.pem[/sourcecode]
Если VestaCP или Hestia:
[bash title=»код»]ln -s /home/admin/conf/web/ssl.hd.zp.ua.crt /etc/strongswan/ipsec.d/certs/fullchain.pem
ln -s /home/admin/conf/web/ssl.hd.zp.ua.ca /etc/strongswan/ipsec.d/cacerts/chain.pem
ln -s /home/admin/conf/web/ssl.hd.zp.ua.key /etc/strongswan/ipsec.d/private/privkey.pem[/bash]
Вместо hd.zp.ua ваш домен
Конфиг strongswan
Редактируем конфиг /etc/strongswan/ipsec.conf
[sourcecode language=»plain»]
config setup
uniqueids=no
charondebug = ike 3, cfg 3
conn %default
dpdaction=clear
dpddelay=35s
dpdtimeout=2000s
keyexchange=ikev2
auto=add
rekey=no
reauth=no
fragmentation=yes
compress=yes
### left — local (server) side
# filename of certificate chain located in /etc/strongswan/ipsec.d/certs/
leftcert=fullchain.pem
leftsendcert=always
leftsubnet=0.0.0.0/0,::/0
### right — remote (client) side
eap_identity=%identity
rightsourceip=10.1.1.0/24
rightdns=8.8.8.8
type = tunnel
conn ikev2-mschapv2
rightauth=eap-mschapv2
conn ikev2-mschapv2-apple
rightauth=eap-mschapv2
leftid=hd.zp.ua
[/sourcecode]
Пользователи для подключения у нас содержатся в этом файле /etc/strongswan/ipsec.secrets
[sourcecode language=»plain»]#filename of private key located in /etc/strongswan/ipsec.d/private/
: RSA privkey.pem
# syntax is `username : EAP "plaintextpassword"`
rusty : EAP "IAmRustyTheMoodle"[/sourcecode]
Открываем порты для IKEv2 трафика
[sourcecode language=»plain»]iptables -I INPUT -p udp —dport 500 -j ACCEPT
iptables -I INPUT -p udp —dport 4500 -j ACCEPT
iptables -I INPUT -p esp -j ACCEPT[/sourcecode]
Настроим преобразование адреса источника, так чтобы VPN трафик, исходящий из VPN сервера в Интернет, выглядел бы так, что сервер является его источником
[sourcecode]iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth0 -m policy —dir out —pol ipsec -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE[/sourcecode]
Поскольку речь идет про дополнительные заголовки, могут возникнуть проблемы с IP фрагментацией. Для того чтобы этого избежать, нужно указать MSS используемый при установке TCP соединения, чтобы сегмент вмещал в себя пакет целиком. Но у меня работает и без этого
[sourcecode language=»plain»]iptables -t mangle -I FORWARD -p tcp -m policy —pol ipsec —dir in —syn -m tcpmss —mss 1361:1536 -j TCPMSS —set-mss 1360
iptables -t mangle -I FORWARD -p tcp -m policy —pol ipsec —dir out —syn -m tcpmss —mss 1361:1536 -j TCPMSS —set-mss 1360[/sourcecode]
В /etc/sysctl.conf добавляем
[sourcecode language=»plain»]net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0[/sourcecode]
Применяем изменения sysctl -p
Добавляем в автозапуск
[php]
chkconfig strongswan on
service strongswan start[/php]
[php][root@r ~]# swanctl -L
ikev2-mschapv2: IKEv2
local: %any
remote: %any
local public key authentication:
id: CN=hd.zp.ua
certs: CN=hd.zp.ua
remote EAP authentication:
ikev2-mschapv2: TUNNEL
local: 0.0.0.0/0 ::/0
remote: dynamic
ikev2-mschapv2-apple: TUNNEL
local: 0.0.0.0/0 ::/0
remote: dynamic[/php]
[php][root@r ~]# strongswan listcerts
List of X.509 End Entity Certificates
subject: "CN=hd.zp.ua"
issuer: "C=US, O=Let’s Encrypt, CN=Let’s Encrypt Authority X3"
validity: not before Oct 25 02:14:09 2019, ok
not after Jan 23 01:14:09 2020, ok (expires in 71 days)
serial: 03:d4:fb:ce:a0:31:ed:a1:23:9d:32:8c:76:70:de:8f:95:a8
altNames: hd.zp.ua
flags: serverAuth clientAuth
OCSP URIs: http://ocsp.int-x3.letsencrypt.org
certificatePolicies:
2.23.140.1.2.1
1.3.6.1.4.1.44947.1.1.1
CPS: http://cps.letsencrypt.org
authkeyId: a8:4a:6a:63:04:7d:dd:ba:e6:d1:39:b7:a6:45:65:ef:f3:a8:ec:a1
subjkeyId: 07:8a:72:e1:e6:3f:87:86:3f:36:fe:f7:a4:ee:ca:09:86:70:a1:56
pubkey: RSA 4096 bits, has private key
keyid: bf:1f:3c:ae:f0:65:16:6b:35:fa:32:6f:c7:d0:3a:34:c7:2c:31:62
subjkey: 07:8a:72:e1:e6:3f:87:86:3f:06:fe:f7:a4:ee:ca:09:86:70:a1:56[/php]
Может возникнуть ошибка
swanctl -L
[bash title=»код»]unable to set openssl FIPS mode(2) from (0)
plugin ‘openssl’: failed to load — openssl_plugin_create returned NULL[/bash]
Правим /etc/strongswan/strongswan.d/swanctl.conf
[bash title=»код»]swanctl {
# Plugins to load in swanctl.
# load =
plugins {
openssl {
fips_mode = 0
}
}
}[/bash]