Содержание
Устанавливаем репозиторий EPEL
Купить виртуалку под VPN можно тут
yum install epel-release
Устанавливаем StrongSwan
yum install strongswan
Будем считать что у вас уже есть сертификат от Let’s Encrypt certificates, вам необходимо создать симлинки к ним в каталог strongswan
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
Если VestaCP или Hestia:
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
Вместо hd.zp.ua ваш домен
Конфиг strongswan
Редактируем конфиг /etc/strongswan/ipsec.conf
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
Пользователи для подключения у нас содержатся в этом файле /etc/strongswan/ipsec.secrets
#filename of private key located in /etc/strongswan/ipsec.d/private/ : RSA privkey.pem # syntax is `username : EAP "plaintextpassword"` rusty : EAP "IAmRustyTheMoodle"
Открываем порты для IKEv2 трафика
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
Настроим преобразование адреса источника, так чтобы VPN трафик, исходящий из VPN сервера в Интернет, выглядел бы так, что сервер является его источником
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
Поскольку речь идет про дополнительные заголовки, могут возникнуть проблемы с IP фрагментацией. Для того чтобы этого избежать, нужно указать MSS используемый при установке TCP соединения, чтобы сегмент вмещал в себя пакет целиком. Но у меня работает и без этого
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
В /etc/sysctl.conf добавляем
net.ipv4.ip_forward = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0
Применяем изменения sysctl -p
Добавляем в автозапуск
chkconfig strongswan on service strongswan start
[[email protected] ~]# 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
[[email protected] ~]# 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
Может возникнуть ошибка
swanctl -L
unable to set openssl FIPS mode(2) from (0) plugin 'openssl': failed to load - openssl_plugin_create returned NULL
Правим /etc/strongswan/strongswan.d/swanctl.conf
swanctl { # Plugins to load in swanctl. # load = plugins { openssl { fips_mode = 0 } } }