====== Pure IPSec VPN on OpenVZ ====== Since there is not **Native** support for IPSec in **OpenVZ** kernel, it is not possible to use **openSwan**, **strongSwan** or **Racoon** for **IPSec VPN** on **OpenVZ VM**. This has been changed, a plugin called **//kernel-libipsec//** was introduced after strongSwan Version 5.10. We can use this plugin with TUN to simulate a IPSec support in userspace. ===== Prerequisites ===== ==== TUN/TAP check ==== First We have to check whether **TUN/TAP** is enabled for the VPS: cat /dev/net/tun We should get the output: cat: /dev/net/tun: File descriptor in bad state Otherwise we cannot continue since **TUN/TAP** support is a **prerequisite**. ===== Installation ===== ==== Debian on Non-OpenVZ ==== Using APT. apt-get install strongswan libcharon-extra-plugins ==== Get the source code ==== Download the source code and decompress. wget http://download.strongswan.org/strongswan.tar.gz && tar zxvf strongswan* && cd strongswan* ==== Dependance === Install the packaged which is needed for the compiling: apt-get update && apt-get install build-essential libgmp3-dev openssl libssl-dev ==== Parameters for compiling ==== If you want to integrate **StrongSwan** with **Radius**: ./configure --sysconfdir=/etc --disable-sql --disable-mysql --disable-ldap --enable-dhcp --enable-eap-identity --enable-eap-mschapv2 --enable-md4 --enable-xauth-eap --enable-eap-peap --enable-eap-md5 --enable-openssl --enable-shared --enable-unity --enable-eap-tls --enable-eap-ttls --enable-eap-tnc --enable-eap-dynamic --enable-addrblock --enable-eap-radius --enable-radattr --enable-nat-transport --enable-cisco-quirks --enable-kernel-netlink --enable-kernel-libipsec Otherwise you can use for a minimal installation: ./configure --sysconfdir=/etc --disable-sql --disable-mysql --disable-ldap --enable-openssl --enable-shared --enable-kernel-libipsec ==== Compile and install ==== make && make install ===== Configuration ===== ==== ipsec.conf ==== Edit strongSwan IPsec configuration file: vi /etc/ipsec.conf /etc/ipsec.conf: # ipsec.conf - strongSwan IPsec configuration file config setup uniqueids=never conn %default rekey=no left=%defaultroute leftsubnet=0.0.0.0/0 right=%any dpddelay=300s dpdtimeout=1h dpdaction=clear auto=add conn ikecommon rightsourceip=10.11.0.0/24 #modeconfig=push #esp=aes128-sha1-modp2048 compress=yes conn ikev1pskaggressive aggressive=yes #type=tunnel also=ikev1psk conn ikev1psk #authby=xauthpsk leftauth=psk rightauth=psk rightauth2=xauth #xauth=server also=ikev1 conn ikev1 keyexchange=ikev1 #ikelifetime=60m #keylife=20m #rekeymargin=3m #keyingtries=3 fragmentation=yes also=ikecommon conn L2TP-PSK-NAT leftfirewall=yes rightfirewall=yes also=L2TP-PSK-noNAT conn L2TP-PSK-noNAT keyexchange=ikev1 type=transport authby=psk keyingtries=3 rekey=no leftprotoport=17/1701 rightprotoport=17/%any ike="aes256-sha1-modp2048!" esp="aes-sha1!" ==== strongswan.conf ==== Edit strongSwan configuration file: vi /etc/strongswan.conf Add below duplicheck.enable = no install_virtual_ip = yes i_dont_care_about_security_and_use_aggressive_mode_psk = yes dns1 = 8.8.8.8 dns2 = 8.8.4.4 to ///etc/strongswan.conf// **charon** block: charon { # number of worker threads in charon threads = 16 **INSERT HERE** # send strongswan vendor ID? # send_vendor_id = yes ==== ipsec.secrets ==== Edit file for public key: vi /etc/ipsec.secrets Add below to /etc/ipsec.secrets: : PSK "YOURPSKKEY" YOURUSERNAME : XAUTH "YOURPASSWORD" Replace **YOURPSKKEY** **YOURUSERNAME** **YOURPASSWORD** with your entries. ==== iptables ==== Add following rules to iptables: iptables -A INPUT -p esp -j ACCEPT iptables -A INPUT -p udp --dport 500 -j ACCEPT iptables -A INPUT -p udp --dport 4500 -j ACCEPT If your iptables supports MASQUERADE, then: iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o venet0 -j MASQUERADE Otherwise: iptables -A POSTROUTING -t nat -s 10.0.0.0/8 -j SNAT --to-source YOURSERVERIP Replace **YOURSERVERIP** with your server ip address. If you want enable internal communication between VPN clients, add: iptables -A FORWARD -s 10.0.0.0/8 -j ACCEPT ===== Startup ===== Start strongSwan: /usr/local/sbin/ipsec start If you want strongSwan running in the foreground, then use: /usr/local/sbin/ipsec start --nofork