Install packages

apt install strongswan strongswan-pki libcharon-extra-plugins netfilter-persistent iptables-persistent

Generate CA and certificates

ipsec pki --gen --type ecdsa --outform pem > vpn_ca_key.pem
ipsec pki --self --in vpn_ca_key.pem --type ecdsa --dn "C=US, O=Testig Ltd., CN=Root CA" --ca --lifetime 3650 --outform pem > vpn_ca_cert.pem
ipsec pki --gen --type ecdsa --outform pem > vpn_server_key.pem
ipsec pki --pub --in vpn_server_key.pem --type ecdsa > vpn_server_pub_key.pem
ipsec pki --issue --in vpn_server_pub_key.pem --lifetime 3650 --cacert vpn_ca_cert.pem --cakey vpn_ca_key.pem --dn "CN=FQDN" --san="FQDN" --flag serverAuth --flag ikeIntermediate --outform pem > vpn_server_cert.pem

Move certs

mv vpn_ca_cert.pem /etc/ipsec.d/cacerts/
mv vpn_server_cert.pem /etc/ipsec.d/certs/
mv vpn_server_key.pem /etc/ipsec.d/private/

Change ipsec conf

# cat /etc/ipsec.conf 
 
config setup
        strictcrlpolicy=no
        uniqueids=no
 
conn ipsec-ikev2-vpn
        ike=aes256gcm16-aes192gcm16-chacha20poly1305-prfsha512-prfsha256-ecp521-ecp256,aes256-sha512-sha256-prfsha512-prfsha256-modp3072-modp2048-modp1024-ecp521!
        esp=aes256gcm16-aes192gcm16-chacha20poly1305-ecp521-ecp256-modp3072-modp2048,aes256-sha512-sha256-modp3072-modp2048!
        auto=add
        compress=no
        type=tunnel
        keyexchange=ikev2
        fragmentation=yes
        forceencaps=yes
        dpdaction=clear
        dpddelay=300s
        rekey=no
        left=%any
        leftid=@FQDN
        leftcert=vpn_server_cert.pem
        leftsendcert=always
        leftsubnet=0.0.0.0/0
        right=%any
        rightid=%any
        rightauth=eap-mschapv2
        rightsourceip=172.16.15.2/24
        rightdns=1.1.1.1,8.8.8.8
        rightsendcert=always
        eap_identity=%identity

Change ipsec secrets conf

# cat /etc/ipsec.secrets
: ECDSA vpn_server_key.pem
USER1 : EAP "PASSWORD1"
USER2 : EAP "PASSWORD2"
...

Add changes to sysctl

net.ipv4.ip_forward = 1
net.ipv4.ip_no_pmtu_disc = 1

Iptables rules

iptables -t nat -A POSTROUTING -s 172.16.15.0/24 ! -d 172.16.15.0/24 -j SNAT --to-source SERVER_IP
iptables -t mangle -A FORWARD -s 172.16.15.0/24 -o SERVER_MAIN_ETH -p tcp -m policy --dir in --pol ipsec -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360

Clients must connect to FQDN with vpn_ca_cert.pem and credentials.