This is an old revision of the document!
Setting up an IPSEC tunnel
This guide will teach you how to setup a basic IPSEC tunnel to allow you to use your VPS as a VPN. IPSEC tunnels are similar to GRE's in that it can pass all forms of traffic but has the added bonus of being supported by Windows.
If you you're needing a tunnel between a buyvm linux based virtual server and a linux based destination, we highly recommend you use a GRE tunnel documented here: GRE tunnelling your filtered IP.
If you don't have administrative control over your destination (using a shared service of sorts) then your only choice is using a reverse proxy documented here: Redirecting your filtered IP.
Supported Operating Systems
All operating systems with IPSEC support are, you guessed it, supported.
We still highly recommend buying a KVM based plan with us if you're needing to protect a Windows server. You'll save on latency and bandwidth costs.
Please note, if you're setting this up on an OpenVZ with us, you must use a 64bit based template.
Prerequisites
- iptables installed on your BuyVM VPS (included already in most cases)
- A 64bit based distribution if you're doing this on OpenVZ. This can't be stressed enough and will not work on a 32bit distribution (for the time being).
Setup
First you must install openswan & xl2tpd.
On Debian/Ubuntu:
apt-get update apt-get install openswan xl2tpd
Note: During the install it will ask if you wish to generate certificates. Certificates can give you added security but isn't needed nor covered here.
On CentOS:
yum -y install xl2tpd openswan
Setup ipsec.conf
Open up /etc/ipsec.conf
with your favorite editor. Replace the entire contents with the following:
# /etc/ipsec.conf - Openswan IPsec configuration file # This file: /usr/share/doc/openswan/ipsec.conf-sample # # Manual: ipsec.conf.5 version 2.0 # conforms to second version of ipsec.conf specification # basic configuration config setup # Do not set debug options to debug configuration issues! # plutodebug / klipsdebug = "all", "none" or a combation from below: # "raw crypt parsing emitting control klips pfkey natt x509 dpd private" # eg: # plutodebug="control parsing" # # enable to get logs per-peer # plutoopts="--perpeerlog" # # Again: only enable plutodebug or klipsdebug when asked by a developer # # NAT-TRAVERSAL support, see README.NAT-Traversal nat_traversal=yes # exclude networks used on server side by adding %v4:!a.b.c.0/24 virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:!172.16.8.0/24 # OE is now off by default. Uncomment and change to on, to enable. oe=off # which IPsec stack to use. auto will try netkey, then klips then mast protostack=netkey conn %default authby=secret pfs=no auto=add keyingtries=3 rekey=no ikelifetime=8h keylife=1h type=transport leftprotoport=17/1701 rightprotoport=17/%any conn L2TP-PSK-NAT rightsubnet=vhost:%priv left=YOUR_BUYVM_IP conn L2TP-PSK-noNAT left=YOUR_BUYVM_IP right=%any
Make sure you update YOUR_BUYVM_IP
with your BuyVM IP.
Setup xl2tpd.conf
Open up /etc/xl2tpd/xl2tpd.conf
with your favorite editor. Replace the entire contents with the following:
[global] ;listen-addr = 127.0.0.1 ; Global parameters: port = 1701 ; * Bind to port 1701 auth file = /etc/xl2tpd/l2tp-secrets ; * Where our challenge secrets are access control = no ; * Refuse connections without IP match rand source = dev ; Source for entropy for random [lns default] ; Our fallthrough LNS definition exclusive = yes ; * Only permit one tunnel per host ip range = 10.1.0.2 - 10.1.0.100 local ip = 10.1.0.1 refuse authentication = yes ; * Refuse authentication altogether refuse pap = yes ; * Refuse PAP authentication refuse chap = yes ppp debug = no ; * Turn on PPP debugging pppoptfile = /etc/ppp/options.l2tpd ; * ppp options file
Optional: Update the ip range
& local ip
to fit your needs.
Setup options.l2tpd
Open up /etc/ppp/options.l2tpd
with your favorite editor. Replace the entire contents with the following:
# Do not support BSD compression. nobsdcomp passive lock # Allow all usernames to connect. name * proxyarp ipcp-accept-local ipcp-accept-remote lcp-echo-failure 10 lcp-echo-interval 5 nodeflate # Do not authenticate incoming connections. This is handled by IPsec. noauth refuse-chap refuse-mschap refuse-mschap-v2 # Set the DNS servers the PPP clients will use. ms-dns 8.8.8.8 mtu 1400 mru 1400
Setup ipsec.secrets
Open up /etc/ipsec.secrets
with your favorite editor. Replace the entire contents with the following:
YOUR_BUYVM_IP %any: "mysecretpresharedkeypassword"
The mysecretpresharedkeypassword
is the shared key
you'll have to provide to your client sides configuration to connect. All authentication is handled by IPSEC.
Allow traffic to route out your VPS
As with all other VPN tutorials, use an SNAT rule to route traffic from the VPS:
iptables -A POSTROUTING -t nat -s 10.0.0.0/8 -j SNAT --to-source YOUR_BUYVM_IP
Apply the configuration files
You must now restart the ipsec
& xl2tpd
daemons:
/etc/init.d/ipsec restart /etc/init.d/xl2tpd restart
Client side configuration
From here you must configure your client side.
For a good Windows 2012/2016/2019/8/10 guide, please check out http://www.x4b.net/wiki/WindowsVPNConnecting. Follow all the steps except 9 & 10 as it's specific to their platform.