Apps en software

Gebruik je Raspberry Pi als L2TP VPN Server

De Raspberry Pi, wie kent hem niet? Een goedkope mini computer die werkt op basis van een eigen besturingssysteem op een SD-kaart en uit te breiden is met allerlei verschillende stukken hardware, software en accessoires. In deze blogpost gaan we de Raspberry Pi inzetten als L2TP VPN Server, zodat we via onze mobiele apparaten eenvoudig en veilig verbinding kunnen maken met ons eigen netwerk.

Een VPN verbinding maakt het mogelijk om over een onbetrouwbare internetverbinding (lees: een openbare verbinding of het netwerk van iemand anders) verbinding te maken met je eigen netwerk. Hierdoor kun je eenvoudig bij al je resources in het netwerk, zoals bijvoorbeeld je eigen bestandsopslag, printer of webapplicaties. Ook kun je op deze manier afgeschermd surfen over het internet op deze onbetrouwbare locaties, omdat het verkeer via de VPN tunnel loopt in plaats van over het netwerk waar je verbinding mee hebt.

In deze posts gaan we een L2TP (Layer 2 Tunneling Protocol) installeren op je Raspberry Pi. We gaan er vanuit dat je Pi is voorzien van Raspbian en voorzien is van een vast ip-adres of een DHCP reservering. Dit is immers noodzakelijk voor het doorzetten van de poorten in de router naar de Pi.

De installatie bestaat uit drie stappen, namelijk:

  1. Installatie van Openswan, xl2tpd en ppp
  2. Configureren van de geïnstalleerde software
  3. Aanpassingen in router/firewall.
  4. Configuratie van je VP client (Mac+Windows)

In dit voorbeeld heeft onze Raspberry Pi het ip-adres: 192.168.1.15, de gateway: 192.168.1.1 en hebben we als bereik voor de ip-adressen naar de clients toe gekozen voor: 192.168.1.201 tot 192.168.1.250. Indien je hiervoor andere adressen wil gebruiken dien je deze aan te passen in de verschillende stukken code.

raspberry pi

1. Installatie Openswan, xl2tpd en PPP

De commando’s als super user of root uit te voeren:
sudo passwd
su

Vervolgens gaan de system en install packages vernieuwen, zodat de meest recente versie beschikbaar zijn:
apt-get update
apt-get install openswan xl2tpd ppp lsof

Tijdens de installatie worden er mogelijk nog vragen gesteld, hierbij volstaat het om de standaard instellingen te bevestigen. Controleer of de installaties succesvol zijn verlopen en er geen foutmeldingen zijn opgetreden.

 

2. Configuratie

Als editor voor de verschillende bestanden wordt “nano” gebruikt. Wijzigingen in deze editor kun je opslaan met control+o en sluit je af met control+x.

De volgende commando’s dienen regel voor regel uitgevoerd te worden op de Pi. Je kun ze ook eenvoudig kopiëren en plakken.
iptables --table nat --append POSTROUTING --jump MASQUERADE
echo "net.ipv4.ip_forward = 1" | tee -a /etc/sysctl.conf
echo "net.ipv4.conf.all.accept_redirects = 0" | tee -a /etc/sysctl.conf
echo "net.ipv4.conf.all.send_redirects = 0" | tee -a /etc/sysctl.conf
for vpn in /proc/sys/net/ipv4/conf/*; do echo 0 > $vpn/accept_redirects; echo 0 > $vpn/send_redirects; done
sysctl -p

Bewerk het bestand /etc/rc.local
nano /etc/rc.local
Plak de onderstaande code in het rc.local bestand.
for vpn in /proc/sys/net/ipv4/conf/*; do echo 0 > $vpn/accept_redirects; echo 0 > $vpn/send_redirects; done
iptables --table nat --append POSTROUTING --jump MASQUERADE

Hernoem het bestand /etc/ipsec.conf naar bijvoorbeeld /etc/ipsec.conf.old
mv /etc/ipsec.conf /etc/ipsec.conf.old

Bewerk het bestand /etc/ipsec.conf
nano /etc/ipsec.conf

Kopieer en plak de volgende instellingen in het ipsec.conf bestand. LET OP! alle regels behalve ‘conn’, ‘version’ en ‘config’  moeten worden voorzien van een <tab> aan het begin van de regel.
version 2.0
config setup
nat_traversal=yes
protostack=netkey
virtual_private=%v4:192.168.0.0/16,%v4:10.0.0.0/8,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v4:!10.25$
oe=off
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
# we cannot rekey for %any, let client rekey
rekey=no
# Apple iOS doesn't send delete notify so we need dead peer detection
# to detect vanishing clients
dpddelay=30
dpdtimeout=120
dpdaction=clear
# Set ikelifetime and keylife to same defaults windows has
ikelifetime=8h
keylife=1h
# l2tp-over-ipsec is transport mode
type=transport
#
left=192.168.1.15
#
# For updated Windows 2000/XP clients,
# to support old clients as well, use leftprotoport=17/%any
leftprotoport=17/1701
#
# The remote user.
#
right=%any
# Using the magic port of "%any" means "any one single port". This is
# a work around required for Apple OSX clients that use a randomly
# high port.
rightprotoport=17/%any
#force all to be nat'ed. because of ios
forceencaps=yes
# Normally, KLIPS drops all plaintext traffic from IP's it has a crypted
# connection with. With L2TP clients behind NAT, that's not really what
# you want. The connection below allows both l2tp/ipsec and plaintext
# connections from behind the same NAT router.
# The l2tpd use a leftprotoport, so they are more specific and will be used
# first. Then, packets for the host on different ports and protocols (eg ssh)
# will match this passthrough conn.
conn passthrough-for-non-l2tp
type=passthrough
left=192.168.1.15
leftnexthop=192.168.1.1
right=0.0.0.0
rightsubnet=0.0.0.0/0
auto=route

Bewerk het bestand /etc/ipsec.secrets
nano /etc/ipsec.secrets

Voeg de persoonlijke sleutel toe, in dit voorbeeld “testsecret”
192.168.1.15 %any: PSK "TESTSECRET"

Bewerk het bestand /etc/xl2tpd/xl2tpd.conf
nano /etc/xl2tpd/xl2tpd.conf

Kopieer en plak onderstaande instellingen in het bestand.
[global] ipsec saref = yes
listen-addr = 192.168.1.15
[lns default] ip range = 192.168.1.201-192.168.1.250
local ip = 192.168.1.15
assign ip = yes
require chap = yes
refuse pap = yes
require authentication = yes
name = linkVPN
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

Bewerk het bestand /etc/ppp/options.xl2tpd
nano /etc/ppp/options.xl2tpd

Plak de volgende instellingen in het bestand
ipcp-accept-local
ipcp-accept-remote
ms-dns 192.168.1.1
asyncmap 0
auth
crtscts
lock
idle 1800
mtu 1200
mru 1200
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
nodefaultroute
connect-delay 5000

Bewerk /etc/ppp/chap-secrets
nano /etc/ppp/chap-secrets

Plak de volgende gegevens in het bestand en zorg dat je voor USERNAME en PASSWORD je gewenste gebruikersnaam en wachtwoord op geeft.
# Secrets for authentication using CHAP
# client server secret IP addresses
USERNAME * PASSWORD *

Voeg de service toe aan de opstartcyclus van Raspbian:
update-rc.d -f ipsec remove
update-rc.d ipsec defaults

Herstart de services
/etc/init.d/xl2tpd restart
/etc/init.d/ipsec restart

3. Router configuration

Om te zorgen dat het VPN verkeer bij de Pi aankomt is het nodig om een tweetal poorten te door te sturen. De manier waarop dit ingesteld wordt verschilt per leverancier en is ons voorbeeld maken we gebruik van een Cisco router.

De volgende poorten moeten worden doorgezet naar de Pi:

  • 4500/udp
  • 500/udp

firewall_poorten_l2tp

 

4. Voorbeeld configuratie VPN client

 

4.1 Mac OS X Mavricks

In Apple’s OS X besturingssysteem is de VPN client software geïntegreerd. Onderstaande afbeeldingen geven een voorbeeld van een configuratie voor het gebruik van een VPN verbinding.

Mac VPN Client 001

Kies als VPN-type de L2TP over IPSec verbinding.

Mac VPN Client 002

Vervang <<externipadres>> door het externe ip-adres van je internetverbinding en geef de gebruikersnaam op die je eerder hebt gebruikt bij het configureren van de VPN software. Klik hierna op Instellingen identiteitscontrole.

Mac VPN Client 003

Geeft het eerder ingestelde wachtwoord op en het gedeelde geheim (PSK sleutel ingevoerd tijdens de configuratie). Hierna kun je eenvoudig verbinding maken met je VPN server vanuit locaties met een internet verbinding.

 

4.2 Microsoft Windows

Een eenvoudige manier om een VPN connectie aan te maken in Windows is via het Netwerkcentrum.

Raspberry_Pi_VPN_Windows_01

Klik op Een nieuwe verbinding of een nieuw netwerk instellen om de wizard te starten.

Raspberry_Pi_VPN_Windows_02

Kies voor de optie Verbinding met een bedrijfsnetwerk maken en klik op Volgende.

Raspberry_Pi_VPN_Windows_03

Kies voor Mijn internetverbinding (VPN) gebruiken.

Raspberry_Pi_VPN_Windows_04

Geeft het internetadres op waarnaar je wilt verbinden. Dat kan het externe IP-adres zijn of een DNS naam. Dit is niet het IP-adres van de Raspberry Pi, maar het externe IP-adres van je internetverbinding.

Raspberry_Pi_VPN_Windows_05

Als de verbinding is aangemaakt verschijnt deze in het overzicht bij de netwerkverbindingen. Rechtsklik op de nieuwe VPN-verbinding en kies voor eigenschappen.

Raspberry_Pi_VPN_Windows_06

Selecteer het tabblad Beveiliging en klik op Geavanceerde instellingen. Activeer de optie Vooraf gedeelde sleutel voor authenticatie gebruiken en geef de geheime sleutel op die je hebt ingevoerd bij het configureren van de VPN op de Raspberry Pi. Sla vervolgens de instellingen op.

Raspberry_Pi_VPN_Windows_05

Rechtsklik op je VPN verbinding en kies voor Verbinding maken om de verbinding tot stand te brengen. Tijdens het verbinden wordt gevraagd om je gebruikersnaam en wachtwoord die je eerder hebt aangemaakt bij het configureren van de VPN server.

Bron informatie: Tutorials by singh

Martijn

Martijn is naast eigenaar van tech365 ook werkzaam als IT Professional. Zijn passies zijn gadgets, fotografie en alles wat met automotive te maken heeft. Je kunt hem ook vinden als blogger op wielerblog www.lifebehindbars.nl

Gerelateerde berichten

10 reacties

  1. Hi,

    Ik ben de tutorial aan het uitvoeren alleen snap ik 1 ding niet helemaal.
    Deze commando’s: iptables –table nat –append POSTROUTING –jump MASQUERADE
    echo “net.ipv4.ip_forward = 1” | tee -a /etc/sysctl.conf
    echo “net.ipv4.conf.all.accept_redirects = 0” | tee -a /etc/sysctl.conf
    echo “net.ipv4.conf.all.send_redirects = 0” | tee -a /etc/sysctl.conf
    for vpn in /proc/sys/net/ipv4/conf/*; do echo 0 > $vpn/accept_redirects; echo 0 > $vpn/send_redirects; done
    sysctl -p

    Moeten die in de terminal worden ingevoerd want dan lukt dat namelijk niet bij mij..

    Groet,

    Marijn

    1. Hi Marijn! Klopt, die moet je invoeren via de terminal of middels SSH. De iptables zijn de eigen firewall rules op de Pi en de echo’s schrijven die regels weg in de config bestanden.

  2. Heb alles geïnstalleerd en het werkt perfect op een ding na, als ik verbonden ben kan ik wel op het interne netwerk maar kan niet door naar buiten om bv te internetten…..

  3. Maak je verbinding vanuit je eigen netwerk naar de VPN server of vanaf het internet? Mocht je het vanaf het internet proberen, dan is het verstandig om eerst even binnen je eigen LAN te kijken of het werkt. Sommige routers vereisen namelijk dat je PPTP en/of L2TP ondersteunen activeert, zoals bijvoorbeeld Linksys.

  4. Het lukt mij niet te verbinden met de VPN, zowel niet via ios als win 8. Bij windows 8 krijg een error:800.
    Wat doe ik fout? Kan iemand mij te hulp schieten?

  5. als je copy-past gaat het mis bij ipsec.conf: Make sure that all the parameters inside ipsec.conf except ‘conn’, ‘version’ and ‘config’ are started after a TAB!
    dus Tabjes ervoorzetten en het gaat goed

  6. Bedankt voor je tip Eric! We hebben het artikel gelijk aangepast en de forwarding van poort 1701 eruit gehaald. In veel artikelen kom je deze poort tegen, echter is dit veiliger om niet te doen zoals jij al aangeeft.

    De versie met Strongswan hebben we nog niet eerder gebruikt. Mocht je hier zelf ervaring mee hebben of krijgen, laat ons het dan gerust weten!

  7. Een kleine waarschuwing die ik tegen kwam op het forum van RapberryPi.org:

    Just came across this post. If you follow this then please DO NOT open and forward port 1701 on your firewall/router. You should only do this for ports 500 and 4500. The l2tp tunnel (port 1701) is encapsulated in the authenticated and encrypted IPsec session setup by Openswan. The l2tp server should not be exposed to the outside world as the tunnel is accessed by IPsec on the local server. Exposing the l2tp port 1701 to the internet is a security risk.

    Also consider Strongswan in place of Openswan as the latter has not been regularly maintained. Better still is Openvpn which is simpler to deploy and has apps for all the major OS.

Geef een reactie

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

Back to top button