}
abonneren

Raspberry Pi als vpn-server met OpenVPN

Raspberry Pi als vpn-server

Inhoudsopgave

  1. Inleiding
  2. Lees verder op de volgende pagina

Portforwarding

De volgende stap is om de OpenVPN-service op onze Pi beschikbaar te maken voor de buitenwereld. Daarvoor voeg je een portforwarding-regel toe op je router. De precieze procedure daarvoor is erg merk-gebonden, dus zoek zelf even uit hoe dit voor jouw router werkt. Het komt erop neer dat je een bepaalde poort op de externe interface van je router doorstuurt naar het interne ip-adres van de Pi en de poort die je in /etc/openvpn/home.conf gespecificeerd had.

Let ook op dat je hetzelfde protocol selecteert (tcp of udp) als in dat configuratiebestand. Je hoeft overigens extern niet dezelfde poort te gebruiken als intern. Sommige providers blokkeren namelijk bepaalde poorten. In dat geval ben je verplicht een andere poort te gebruiken. Zo is het bijvoorbeeld prima mogelijk om poort 8443 of 11194 op je router te forwarden naar 1194 op je Pi.

Linux-client instellen

We beginnen met een Linux Mint-machine om onze OpenVPN-server te testen. Kopieer alvast de bestanden ca.crt, ta.key, linuxmint.crt en linuxmint.key naar de client. De benodigde software is in Linux Mint standaard al geïnstalleerd. Gebruik je een andere Linux-distributie en is dat niet het geval? Installeer dan het pakket Network-manager-openvpn-gnome. Klik vervolgens op het netwerkpictogram in het systeemvak en ga naar Netwerverbindingen. Klik op Toevoegen, kies OpenVPN als verbindingstype en klik op Aanmaken. In het VPN-tabblad vul je volgende gegevens in:

- Gateway: het externe ip-adres van jouw router.

- Gebruikerscertificaat: linuxmint.crt

- CA-certificaat: ca.crt

- Privé-sleutel: linuxmint.key

- Wachtwoord van de privésleutel: de eerder ingestelde passphrase

Klik vervolgens op Geavanceerd, ga naar TLS-authenticatie en vul bij Overeenkomst met onderwerp de hostname in van je Pi zoals die in het servercertificaat staat (raspberrypi in ons voorbeeld). Selecteer de optie Verify peer (server) certificate usage signature. Vink tot slot de optie Extra TLS-authenticatie gebruiken aan. Selecteer het bestand ta.key en laat Sleutelrichting op Geen staan. Onder Beveiliging selecteer je dezelfde algoritmes als op de server: AES-256-CBC voor Vercijfering en SHA-256 voor HMAC-authenticatie. Onder Algemeen vink je volgende opties aan:

- LZO-datacompressie gebruiken.

- TCP-verbinding gebruiken (indien je voor tcp in plaats van udp gekozen had op de server).

- Aangepaste gateway-poort (indien je niet poort 1194 op je Pi gebruikt).

Raspberry Pi als vpn-server

Klik tot slot op OK en Opslaan om de vpn-verbinding te bewaren. Sluit het configuratievenster voor netwerkverbindingen, klik opnieuw op netwerkpictogram in het systeemvak en selecteer de nieuwe vpn-verbinding om die te testen. Verschijnt er geen netwerkinterface tun0 met het gekozen ip-adres (192.168.200.2 in ons geval), zoek dan naar foutmeldingen in /var/log/syslog op de client en /var/log/openvpn.log op de server. Om zeker te zijn dat je verbinding correct werkt, installeer je bijvoorbeeld het pakket apache2 op je Pi.

Open na installatie het vpn-ip-adres van je Pi in een browser op de client: 192.168.200.1. Zie je een pagina zoals de afbeelding, dan werkt je vpn-verbinding correct. Maak daarna met pkitool een nieuw certificaat aan op de server en zet een configuratiebestand klaar in /etc/openvpn/chroot/clients voor een tweede client. Wij kozen voor de hostname windows10 en ip-adres 192.168.200.3.

Windows-client instellen

Wil je vanaf Windows met je vpn verbinden, download dan de Windows-installer. Na installatie krijg je een shortcut met de misleidende naam OpenVPN GUI. De naam GUI mag je met een korreltje zout nemen, want de interface bestaat uit een pictogram in het systeemvak met maar enkele opties. De eigenlijke vpn-verbinding configureer je via een tekstbestand met de benodigde parameters. In de afbeelding hiernaast zie je een voorbeeld dat correct samenwerkt met onze serverconfiguratie. Bewaar dit met de extensie .ovpn, klik rechts op het OpenVPN-pictogram in het systeemvak en kies Bestand importeren.

OpenVPN maakt nu een nieuwe map aan onder ~/OpenVPN/config. Kopieer de .key- en .crt-bestanden in die directory en kies daarna Verbinden uit het menu van de OpenVPN GUI. Vul het wachtwoord van de private key in, klik Toegang toestaan in het waarschuwingsvenster van de Windows Firewall en de verbinding wordt opgezet. De optie Status weergeven toont je eventuele foutmeldingen. Sluit je de OpenVPN GUI, dan vind je die meldingen in een logbestand onder ~/OpenVPN/log.

Raspberry Pi als vpn-server

Services

Via de vpn-verbinding krijg je toegang tot alle services op jouw Raspberry Pi die niet aan één specifiek ip-adres gebonden zijn. Het lsof-commando uit de afbeelding toont je alle actieve services met bijbehorende ip-adressen en poortnummers. Merk op dat onze Pi intussen over drie ip-adressen beschikt: localhost of 127.0.0.1 (onbereikbaar voor andere machines), 192.168.1.7 (bereikbaar via het lan) en 192.168.200.1 (bereikbaar via het vpn).

In ons voorbeeld zijn ssh, dansguardian en minidlna via alle ip-adressen bereikbaar (*). Squid en Postfix (master) zijn enkel bereikbaar vanaf localhost en Samba enkel via het lan. Wil je bijvoorbeeld Samba ook benaderen via het vpn? Pas dan de opties interfaces en bind interfaces only in /etc/samba/smb.conf aan zodat die service ook op ip-adres 192.168.200.1 luistert. De meeste services hebben vergelijkbare opties.

Verbinden

Wil je toegang krijgen tot services op andere machines, dan moet je die nog verbinden met je vpn. Op een homeserver kun je het best een permanente verbinding opzetten met de vpn-server. Op een Linux-machine zonder de Network Manager-gui installeer je daarvoor het openvpn-pakket. Maak een certificaat en private key aan zonder wachtwoordzin door de --pass-optie weg te laten bij pkitool. Plaats die bestanden samen met ca.crt en ta.key in /etc/openvpn. Bewaar ook het configuratiebestand van onze Windows-client met .conf-extensie in die directory, uiteraard aangepast voor de correcte certificaten.

Vervolgens start je openvpn net zoals we dat bij onze server gedaan hadden in de paragraaf Clients toevoegen. Voor een Windows-machine gebruik je ook een private key zonder wachtwoord. Kopieer de map met de bestaande configuratiebestanden van ~/OpenVPN/config naar C:\Program Files\OpenVPN\config. In het ovpn-bestand moet je wel het volledig pad invullen naar de ca-, cert-, key- en tls-auth-bestanden. Plaats elk pad tussen dubbele aanhalingstekens en gebruik overal \\ in plaats van \. Open de Services Management Console (services.msc) en selecteer OpenVPNService. Kies Eigenschappen uit het contextmenu, wijzig het Opstarttype naar Automatisch en klik op Starten en OK.

Tunnels en proxy's

Wil je tenslotte snel toegang krijgen tot een bepaalde service in je lan die niet via een vpn-ip-adres bereikbaar is? Gebruik dan de portforwarding-functie van ssh om het netwerkverkeer in een ssh-verbinding te tunnelen. Vanaf een Linux-machine werkt dat als volgt. Stel dat je poort 8080 op de machine met ip-adres 192.168.1.8 wilt bereiken. Jouw vpn-client komt niet bij dat adres, maar de Pi wel. Met volgend commando forward je poort 8080 op jouw client via de vpn-server naar die machine:

ssh -L 8080:192.168.1.8:8080 192.168.200.1

Verbind je vervolgens met poort 8080 op jouw client, dan kom je via de Pi terecht op poort 8080 op de machine met ip-adres 192.168.1.8. Een vergelijkbaar trucje gebruik je om snel via jouw thuisverbinding te surfen:

ssh -D 1080 192.168.200.1

Daarmee zet ssh op poort 1080 een lokale socks-server op. Stel je vervolgens in je browser localhost:1080 in als socks-proxy, dan wordt al het netwerkverkeer via ssh getunneld naar je vpn-server. Dat is erg handig om te surfen vanuit een publiek netwerk dat je niet vertrouwt. Ook onbeveiligd http-verkeer is op die manier immers versleuteld tussen jouw pc en je vpn-server thuis. Zowel portforwarding als een socks-proxy kan je onder Windows configureren via Putty.

Geschreven door: Filip Vervloesem op

Category: Nieuws

Tags: Linux, Raspberry Pi, Privacy, Vpn, openvpn

Laatste Vacatures

Uitgelicht: Technisch Applicatiebeheerder - CGI