VPN verbinding

Stel je bent op vakantie in Spanje, je zit gezellig op een terras met gratis WiFi enje wilt even een excursie boeken (en online betalen). Niet doen op een openbare WiFi; voor je het weet krijg je allemaal mailtjes van zogenaamd lieve meisjes uit het voormalige Oostblok of, erger nog, heeft een hacker jouw bankrekening geplunderd. Of je wilt op de camping graag een uitzending van een Nederlandse TV-zender zien via internet. Op dit moment is dat niet zonder meer mogelijk, alleen als je een app van jouw provider (Ziggo, CanalDigitaal, KPN) hebt. Nederlandse televisieprogramma’s worden in het buitenland geblokt, en vice versa. Vanwege auteursrechtelijke beperkingen is veel audiovisueel materiaal alleen toegankelijk voor gebruikers in landen waarvoor die rechten gelden. Kun je dit voorkomen? Jazeker, door te zorgen dat je via een nederlands IP-adres over een beveiligde verbinding op het internet surft.

Virtual Private Network

Met behulp van een Virtual Private Network (VPN) kun je een versleutelde verbinding opzetten met je thuisnetwerk en vandaar uit veilig surfen over het internet met het IP adres van je vaste aansluiting. In de praktijk betekent dit dat er een privénetwerk van computers gecreëerd wordt over de infrastructuur van een publiek netwerk. Via het internet wordt dan een versleutelde beveiligde verbinding gemaakt tussen verschillende lokale netwerken en/of computers. Hierdoor is het mogelijk om op een veilige manier data uit te wisselen tussen verschillende computers en netwerken.
Om het verhaal hierboven wat duidelijkheid te geven laat ik hieronder schematisch zien hoe een VPN netwerk werkt. In de afbeelding zie je een aantal aparte netwerken, maar in feite is het 1 groot netwerk, want in principe kunnen alle verbonden apparaten met elkaar communiceren. De rode lijn is de beveiligde unieke verbinding tussen jouw laptop/tablet/smartphone en de VPN-server thuis.

Heb je eenmaal zo’n verbinding opgezet, dan ben je met die VPN van huis uit aan het surfen en staan al jouw thuismogelijkheden jou ook in Spanje ter beschikking. Zo kun je dan via internet de gebruikelijke zenders zien. En zelfs jouw Tele2 TV-app, die eigenlijk alleen thuis gebruikt kan worden (nl. via jouw vaste Tele2-lijn van jouw modem), kun je dan in heel Nederland en daarbuiten gebruiken! En niet te vergeten: een versleutelde VPN-verbinding is ook zeer veilig; je kunt hiermee ook vanuit het buitenland jouw bankzaken regelen.

Is het moeilijk om een VPN op te zetten? Nee, in het geheel niet. Je hebt niet veel kennis nodig om dat te doen.
Het is wel handig om een klein beetje hardware aan te schaffen. Je moet namelijk wel thuis een “computer” aan hebben staan tijdens jouw afwezigheid om contact mee te maken en om dus een VPN te kunnen opzetten. Nu kan dat met elke computer; er worden daar geen extra eisen aan gesteld. Zelf heb ik het met een Raspberry Pi 3B 4) gedaan, een “computertje” ter grootte van een bankpasje. Voor nog geen € 60,00 heb je bij de webwinkel SOS-Solutions een Raspberry Pi 3B met behuizing, voeding en een (micro) SD-card van 8Gb, dat als opslagmedium (“harde schijf”) wordt gebruikt. De Raspberry is een zeer zuinig apparaatje: vol in bedrijf gebruikt hij 500 mA bij 5V en dat is dus 2,5 Watt.

Het opzetten van een VPN kan ook met jouw desktop thuis via een zogenaamd WOL (Wake up LAN). Het betekent dat je een computer vanaf een andere locatie binnen je netwerk of via internet aanzet door het versturen van een magisch pakketje (magic packet) naar je netwerkkaart. Wanneer je netwerkkaart zo staat ingesteld dat hij de computer kan aanzetten via WOL zal je netwerkkaart reageren op het magische pakketje dat hij ontvangt en vervolgens daarmee een signaal afgeven aan je bios die vervolgens de stroom doorlaat naar je moederbord waardoor de computer aan gaat. Elke netwerkkaart heeft wel een wake on lan functie. Op de netwerkkaart zit een chip met een klein stukje opslag capaciteit waarin instellingen opgeslagen kunnen worden. Wanneer de netwerkkaart zo staat ingesteld dat de wake on lan functie gebruikt kan worden blijft er alleen stroom staan op je netwerkkaart wanneer je de computer uitzet zodat deze kan reageren op een magic packet die de computer kan aanzetten vanaf afstand.
Aan het eind van de sessie zul je jouw computer ook weer uit moeten zetten; daarvoor zul je de besturing moeten overnemen vanaf jouw tablet of smartphone, bijvoorbeeld met een programma zoals TeamViewer. Nadeel van deze manier is dat je weer een extra “poort” naar buiten hebt, waardoor ook kwaadwilligen misschien naar binnen kunnen, en in dit geval zelfs op jouw desktop-computer. Daarom heeft het gebruik van de Raspberry, waar verder niets op staat, geen enkele data e.d., mijn voorkeur.

Voor het inrichten en eerste gebruik van de Raspberry verwijs ik je naar mijn Raspberry-pagina op deze site.

Open VPN installeren op Raspberry

OpenVPN is een open-source VPN oplossing. Het staat dan ook voor “open source virtual private network”. Bij deze techniek wordt er gebruik gemaakt van het beproefde OpenSSL. Dit betekent dat ook alle encryptie mogelijkheden die OpenSSL biedt gebruikt kunnen worden voor OpenVPN verbinding. De AES encryptie wordt vaak als sterkst gezien. Om de verbinding tot stand te brengen wordt er gebruik gemaakt van certificaten. Op deze manier weet de VPN server en cliënt hoe de data versleuteld en ontsleuteld moet worden. Dit wordt in een VPN verbinding respectievelijk “encrypten” en “decrypten” genoemd. Doordat OpenVPN op verschillende poorten kan werken en dat je kunt kiezen voor zowel tcp/ip als udp is het overal te gebruiken. Ook wanneer het netwerk dat je gebruikt of het land waar je bent het gebruik van VPN’s probeert te blokkeren (China bijvoorbeeld). OpenVPN staat bekend als de veiligste oplossing om een VPN verbinding op te zetten. Daarnaast is het vanwege het open-source karakter beschikbaar voor veel verschillende platformen.

Open een Terminal-venster in de Raspberry door op het icoontje Terminal (4e van links op de hoofdmenu-balk) te klikken. Je krijgt nu een grotendeels zwart scherm te zien, met een flikkerende cursor. Het lijkt, voor de oudjes onder ons, een beetje op het oude DOS-scherm.

Het is verstandig om de installatie van OpenVPN uit te voeren als ‘root’ (of in windows-termen, als administrator), dit doe je door het onderstaande commando in te geven en vervolgens uit te voeren door op te drukken:

sudo -i

Hierna kunnen we starten met de geautomatiseerde PiVPN installatie van OpenVPN:

curl -L http://install.pivpn.io | bash

Het installatie script wordt gedownload en automatisch gestart, tijdens de installatie wordt je begeleid door een aantal keuze schermen.

Belangrijk voor een OpenVPN server is dat deze een vast IP adres gebruikt binnen je lokale netwerk, mocht je tijdens de installatie geen vast IP adres gebruiken dan krijg je de mogelijkheid om deze via het installatie menu in te stellen.

Bij de vraag of je UDP of TCP wilt gebruiken, kies je voor de standaard keuze ‘UDP‘.
Ook het poort nummer dat wordt gebruikt voor de verbinding ‘1194‘ laat je ongewijzigd.

Na enige tijd zal de vraag verschijnen of je een 1024, 2048 of 4096 bits sleutel wilt gaan gebruiken, ga je voor veiligheid kies dan de 4096 maar houd er rekening mee dat genereren van de key zeer lang zal duren. Voor normaal ‘huishoudelijk’ gebruik is een 1024 of 2048 bits sleutel veilig genoeg! Maak je gebruik van Android devices kies dan voor een 2048 bits sleutel.

Tegenwoordig wordt een sleutel van 512 bit als te zwak beschouwd omdat deze binnen enkele maanden gekraakt kan worden, mits er voldoende rekenkracht beschikbaar is. De verwachting is dat een sleutel van 1024 bit binnen niet al te lange termijn te kraken is met veel rekenkracht van de nieuwste quantum-computers (en maanden werk!). Zodra een sleutel gekraakt is, kan met de gekraakte sleutel verkeer afgeluisterd worden. Op dit moment worden sleutels van 2048 bit als veilig beschouwd en minimaal verplicht voor SSL certificaten. Certificaten met en langere sleutellengte aanvragen is ook mogelijk, al geeft een sleutellengte groter dan 4096 vaak problemen op bijvoorbeeld Apple devices.
Voor de wiskundigen onder ons: een encryptie met een sleutel ter grootte van 2048 bit geeft bijna 10615 mogelijkheden (voor de niet-wiskundigen: een 1 met 615 nullen). Dit aantal is zo gigantisch groot dat we ons dat niet meer kunnen voorstellen. Ter bepaling van de orde van grootte: als we elke seconde 10 miljard mogelijkheden de revue laten passeren gedurende 10 miljard jaar (ongeveer de leeftijd van ons heelal), dan hebben we in totaal ongeveer 30 maal 1026 mogelijkheden onderzocht. Dat is een sterk verwaarloosbare fractie van de benodigde 10615 . Je kunt het vergelijken met een weg ter lengte van 600 meter, waarvan je na 10 miljard jaar hard werken nog maar 25 meter hebt afgelegd en dus nog 575 meter te gaan hebt.

Nadat éénmalig de sleutel is gegenereerd (dat kan tot wel 10 minuten duren) krijg je de vraag of je verbinding wilt maken op basis van een het extern IP adres of een hieraan gekoppelde DNS naam. Je geeft aan dat je dat via het IP-adres wilt.

Dit was de laatste stap in de installatie van de OpenVPN server, en je reboot nu de Raspberry (klik op Raspberry-icoontje linksboven, kies vervolgens Shutdown en dan Reboot).

Aanmaken client

Na de herstart kunnen we een ovpn client profiel aanmaken waarmee we verbinding kunnen maken met onze OpenVPN server. Je maakt een nieuw profiel aan met het commando (in het terminal-venster;zie hierboven):

sudo pivpn add

Vul de gewenste client naam in en druk op enter, hierna zal je gevraagd worden een PEM pas phrase op te geven dit is het wachtwoord wat op de client moet worden ingegeven om verbinding te maken met de server. Hierna wordt er gevraagd of je de gegevens in het certificaat wilt wijzigen, deze vragen kun je overslaan door op enter te drukken, dit doe je ook als er wordt gevraagd om een challenge password. De vraag ‘Sign the certificate?’ beantwoord je met ‘y’.

Op de Raspberry worden de ovpn-profielen opgeslagen in de map /home/pi/ovpns. Deze ovpn-profielen bevat zowel de server instellingen als de benodigde certificaten en je hebt dit bestand nodig op het apparaat waarmee je de VPN-verbinding wilt maken.

Je kunt het bestand heel eenvoudig copieren. Ga daartoe met VNC naar jouw Raspberry, klik op File Manager-icoontje (3e van links op de menubalk; het icoontje met de twee mappen), ga dan naar de map /pi/ovpns.


Dubbelklik in het linkerdeel van het venster op de map ovpns en rechts verschijnt het client.ovpn bestand (.ovpn). Dubbelklik op het gewenste bestand, selecteer vervolgens Edit -> Select All in het menu en druk op C. Open notepad op jouw computer, toets in V en sla het bestandje op met als uitgang .ovpn

OpenVPN installeren op Tablet/Laptop/Smartphone

Je moet nu nog Open VPN op jouw apparaat installeren waarmee je de VPN verbinding wilt maken. OpenVPN is gratis te downloaden op Google Play (voor Android smartphone), AppStore (voor Iphone en Ipad), voor Macintosh-computers, voor Windows-computers , en tenslotte hier voor Linux-computers

Zodra je Open VPN hebt geinstalleerd, moet je het client-profiel dat je hierboven hebt aangemaakt nog inladen. Op smartphone of tablet is dat het handigst als je het profiel-bestandje naar jezelf toe mailt, vervolgens de mail op jouw smartphone/tablet opent en dubbelklikt op het bestandje. Jouw profiel wordt dan automatisch geladen en bij de start van de OpenVPN-app wordt de verbinding gemaakt, zonder dat je gebruikers-id of wachtwoord hoeft in te voeren (deze gegevens zitten immers versleuteld in het bestandje).

Port forwarding op router

Om vanaf het internet een verbinding met de OpenVPN server op Raspberry Pi op te kunnen te zetten moet UDP poort 1194 vanaf het publieke IP adres van jouw normale verbinding worden doorgestuurd naar het interne IP-adres van de Raspberry Pi een zogenaamde ‘Port Forwarding’. De procedure hiervan verschilt per broadband router, maar is via Google vaak snel terug te vinden. In de Experia Box (ZTE) van KPN vind je deze instellingen terug onder Application > Port Forwarding. Voor Ziggo vind je hier een handleiding.

laatstelijk gewijzigd 17 december 2017