====== 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_tunnel|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: [[redirect_traffic|Redirecting your filtered IP]]. ===== Supported Operating Systems ==== All operating systems with IPSEC support are, you guessed it, supported. ===== Prerequisites ===== * iptables installed on your BuyVM VPS (included already in most cases) ===== 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.