Er is tegenwoordig veel belangstelling voor VPN (Virtual Private Network) om je dataverkeer te beschermen tegen meekijkers.
Frank Thuijs
Je kan daarvoor een abonnement nemen bij een van de vele VPN-aanbieders, maar je kunt ook een eigen VPN-server aan je netwerk koppelen. Dit heeft twee voordelen: je kan vanaf elke locatie ter wereld via je eigen internetverbinding het internet op en hebt op die manier een veilige manier toegang tot je eigen netwerk.
Nog niet zo heel lang geleden had je de nodige (technische) kennis nodig om een eigen VPN-server te configureren, maar tegenwoordig is het door initiatieven uit de open source-community behoorlijk eenvoudig. Enige vereiste is dat je enigszins thuis bent op een Raspberry Pi, want dat is de computer die we gaan gebruiken voor onze eigen VPN-server. We maken gebruik van de OpenVPN-software. Deze is vrij toegankelijk (want open source) en veilig.
Deze handleiding bestaat uit drie onderdelen: een Raspberry Pi inrichten (kort), het configureren van een OpenVPN server op je Raspberry Pi en je modem/router instellen voor het doorlaten van het VPN-verkeer.
Raspbery Pi
Als basis voor onze OpenVPN-server gebruiken we een Raspberry Pi. Dit hoeft zeker niet de nieuwste Raspberry Pi 4 te zijn, zelf draai ik mijn server nog op de eerste Raspberry Pi. Het is voldoende om hier de ‘lite’ versie van het besturingssysteem op te zetten. Raspian Buster Lite is de meest recente versie, maar draai je nog op een oudere versie, is dat ook prima. Nadat je het besturingssysteem op de geheugenkaart hebt gekopieerd en je Pi is opgestart, is het verstandig om een aantal stappen standaard te doorlopen:
- Verander het standaardwachtwoord (raspberry) van de user ‘pi’;
- Enable de mogelijkheid van SSH, zodat je eenvoudig vanaf je computer op de Raspberry Pi kan werken met een programma zoals PuTTY;
- Zorg dat je Raspberry Pi de laatste updates krijgt door achtereenvolgens de commando’s sudo apt update, sudo apt upgrade, sudo apt full-upgrade en sudo apt autoremove uit te voeren. Het laatste commando verwijdert eventueel overbodige onderdelen.
De eerste twee stappen doe je eenvoudig via sudo raspi-config, de laatste stap vanaf de command prompt. Vanaf dit moment kun je de Raspberry Pi vanaf je computer benaderen.
PIVPN
Nu onze Raspberry Pi up and running is, gaan we hem geschikt maken als OpenVPN-server. Dit gaat heel eenvoudig met de tool PIVPN. Dit installatiescript doorloopt één voor één alle stappen die nodig zijn om OpenVPN op je Raspberry Pi te installeren en juist te configureren. Dit script werkt het best onder root-rechten. Om het script te downloaden en te starten type je achtereenvolgens: sudo -i (om rootrechten te verkrijgen) en curl L http://install.pivpn.io | bash (om het script te downloaden en automatisch te starten).
Eerst controleert het script de nodige zaken: is je Raspberry Pi voldoende up-to-date, zijn alle benodigde packages aanwezig, heb je voldoende opslagruimte, etc. Vervolgens installeert het script de packages die het nodig heeft.
Belangrijk is dat je Raspberry Pi een vast IP-adres krijgt. Waarom, wordt in het derde deel (modem/router-configuratie) duidelijk. Het script faciliteert dit. Gedurende het script ga je ook certificaten genereren. OpenVPN werkt met certificaten die de sleutels bevatten waarmee het dataverkeer wordt versleuteld. Om later gemakkelijk bij deze certificaten te komen, is het handig om de user ‘pi’ (default) aan te geven als user waar deze certificaten worden opgeslagen.
Sinds kort ondersteunt PIVPN twee encryptieprotocollen: WireGuard en OpenVPN. Aangezien deze lezerstip gaat over OpenVPN, kies je voor het OpenVPN-protocol. OpenVPN ondersteunt twee netwerkprotocollen: UDP en TCP. UDP werkt het snelst, dus kies deze (default). Nu sta je voor een belangrijke keuze. OpenVPN gebruikt namelijk een netwerkpoort om te communiceren. Standaard is dit poort 1194. Het gebruik van dit poortnummer heeft echter twee nadelen: het is het gekende poortnummer voor OpenVPN, dus bij een poortscan kan een aanvaller eenvoudig ontdekken dat er een OpenVPN-server draait. Echter: OpenVPN is bij gebruik van goede sleutels zeer robuust, dus kan wel een stootje hebben. Het tweede nadeel is lastiger en dat is dat lang niet overal (in het buitenland) poort 1194 bereikbaar is. Vaak wordt deze door een firewall afgeschermd, waardoor je VPN-verbinding niet werkt. Zelf gebruik ik poort 443. Deze wordt normaliter gebruikt voor encrypted webverkeer (https) en staat dus altijd open. Als je zelf geen webserver draait, zou ik poort 443 adviseren! Onthoud welke poort je hier invult, je hebt dit later nodig.
Vervolgens geef je aan welke DNS-provider je wilt gebruiken voor je VPN-clients. OpenDNS is een goede, veilige keuze. Kies je eigen, publieke IP-adres (default) als adres voor je OpenVPN-server en kies vervolgens hoeveel-bits je certificaat moet worden. 256-bit (default) is veilig genoeg, maar kies gerust meer bits als je je daar prettiger bij voelt. Als een van de laatste keuzes kun je aangeven dat je Raspberry Pi automatisch van updates wordt voorzien. Omdat je OpenVPN-server rechtstreeks aan het internet hangt, verdient het aanbeveling hiervoor te kiezen. Het script eindigt met het volgende scherm:
Het enige dat je nu nog moet doen, is het aanmaken van een zogenaamd ovpn-profiel voor elke client (laptop, iPad, smartphone) van waaruit je contact wilt maken met je OpenVPN-server. Dit doe je met sudo pivpn add vanaf de command line. Dit commando vraagt achtereenvolgens om een naam (bijv. VPN-Client1), hoeveel dagen het certificaat geldig moet zijn (3650 is 10 jaar) en optioneel een wachtwoord. Hierna wordt een ovpn-profiel gemaakt en geplaatst in /home/pi/ovpns, oftewel de directory ovpns in de homedirectory van de pi-user. Definieer zoveel ovpn-profielen als dat je clients denkt te gaan gebruiken. Naderhand nieuwe genereren kan ook.
Modem/router instellen
Een laatste, niet onbelangrijke stap, is dat je in je modem/router moet aangeven dat UDP-verkeer dat binnenkomt op poort 1194 of 443 (afhankelijk wat je hebt opgegeven in het PIVPN-script), moet worden doorgezet naar je Raspberry Pi waar je OpenVPN-server op draait. Daarom is een vast IP-adres voor je Raspberry Pi noodzakelijk. Per modem/router kan de manier waarop je dit moet doen verschillen (raadpleeg de handleiding/Google). Meestal vind je het bij ‘Port Forwarding’. Hier geef je op dat UDP-netwerkverkeer dat binnenkomt op genoemde poort, moet worden doorgezet naar het interne IP-adres van je Raspberry Pi. Voor mijn Asus-router ziet dat er als volgt uit:
Gebruik vervolgens op je mobiele apparaten de OpenVPN Connect-app (in PlayStore/AppStore voor Android/iOS en op www.openvpn.net/community-downloads voor Windows/Linux-laptop). Kopieer een ovpn-profiel naar een mobiel apparaat en importeer het in de OpenVPN Connect-app. Hierbij kan je eventueel een wachtwoord ingeven. Vanuit deze OpenVPN Connect-app start je vervolgens je VPN-verbinding op. Wil je op je OpenVPN-server via de logfile in de gaten houden of de connectie werkt, type dan tail -f var/log/openvpn.log.
Na deze relatief eenvoudige stappen heb je je eigen VPN-server draaien en kan je overal ter wereld op een veilige manier naar je eigen netwerk toe en via daar het internet op.