Raspberry Pi als VPN Gateway mit NordVPN

VPN-Gateway NordVPN

In wenigen Schritten hast du die Möglichkeit deinen Raspberry Pi in ein VPN Gateway zu verwandeln. Dies hat den Vorteil, dass jedes Endgerät deines Heimnetzwerks die Vorteile von NordVPN nutzen kann.

NordVPN

NordVPN ist einer der bekanntesten und beliebtesten VPN Anbieter weltweit. Dies ist vor allem darauf zurückzuführen, dass dieser Anbieter eine Vielzahl an Sicherheitsfunktionen sowie eine sehr Verschlüsselung bietet. Darüber hinaus bricht NordVPN immer wie Geschwindigkeitsrekorde. Dies ist darauf zurückzuführen, dass der Anbieter eine abgewandelte Version der VPN Software WireGuard mit der Bezeichnung NordLynx einsetzt. Ein weiterer Pluspunkt des VPN Anbieters NordVPN ist, dass dieser auch mit Netflix & Co. sehr zuverlässig funktioniert.

Werbung

Raspberry Pi

Für dieses Projekt wird ein Rasperry Pi und Rasperberry Pi OS benötigt. Wir empfehlen dir einen Raspberry Pi mit folgenden Spezifikationen:

  • Raspberry Pi 4 mit 4GB Arbeitsspeicher (Link)
  • 64GB SD-Karte (Link)
  • Originales Raspberry Pi Netzteil (Link)
  • Gehäuse inkl. Lüfter (Link)

Alternativ kannst du auch ein aufeinander abgestimmtes Raspberry Pi 4 Bundle verwenden. Hier empfehlen wir dir folgendes:

  • Raspberry Pi 4 Model B 4GB  Bundle (Link)

VPN Gateway

Bevor wir im nächsten Schritt mit der Installation des Raspberry Pi beginnen, möchten wir dir noch kurz erklären um was es sich bei einem VPN Gateway handelt. Ein VPN Gateway ist eine zentrale Einheit in deinem Heimnetz, welche es dir ermöglicht, dass alle deine Endgeräte deinen VPN Zugang nutzen können ohne das diese hierfür eine spezielle Software benötigen. Ein weiterer Vorteil dieses VPN Gateways ist, dass die Einstellungen nur einmal zentral umgesetzt werden müssen und dir somit das Leben sehr erleichtern.

Installation

Beginnen wir nun mit der Installation der benötigten Software. Im ersten Schritt müssen wir dafür sorgen, dass dein Raspberry Pi die VPN-Software WireGuard unterstützt. Anschließend werden die von NordVPN bereitgestellte VPN Software installieren. Zum Abschluss installieren wir noch eine Software, mit welcher wir die Geschwindigkeit des VPN Tunnels messen können.

WireGuard

Damit wir sicherstellen können, dass WireGuard seine volle Geschwindigkeit entfalten kann, ist es notwendig die dafür vorgesehene Software zu installieren. Führe hierfür folgenden Befehl aus:

sudo apt install wireguard wireguard-tools

Die Installation kann einige Zeit in Anspruch nehmen. Sobald diese abgeschlossen ist, solltest du einen Neustart bei deinem Raspberry Pi durchführen. Sobald du dies erledigt hast können wir mit der Installation der NordVPN Software beginnen.

NordVPN Software

NordVPN bietet ein Installationspaket für die Installation ihrer Software an. Mit folgendem Befehl kannst du dieses herunterladen. Sobald der Download abgeschlossen ist, beginnt die Installation automatisch. Bitte beachte, dass die Prozess wieder einige Zeit dauern kann.

 sh <(curl -sSf https://downloads.nordcdn.com/apps/linux/install.sh)
Code-Sprache: JavaScript (javascript)

Sobald die Installation abgeschlossen ist, ist der NordVPN Client bereits einsatzfähig. Bevor du dich das erste Mal verbinden kannst, muss du dich jedoch mittels eines Token anmelden. Wie dieser Schritt funktioniert erklären wir dir im Abschnitt Konfiguration.

Speedtest Software

Damit wir am Ende die tatsächliche Geschwindigkeit des VPN-Tunnels ermitteln können, installieren wir uns nun eine Software, welche für uns eine Messung vornimmt. Hierzu verwenden wir folgenden Befehl:

 sudo apt install speedtest-cli

Konfiguration

Nachdem nun alle notwendigen Pakete installiert wurden, kümmern wir uns in diesem Abschnitt um die Konfiguration von NordVPN, die Aktivierung der Routing-Option sowie die Erstellung der notwendigen Firewall-Regeln.

NordVPN Einstellungen

Bevor wir eine Verbindung zu den NordVPN Servern herstellen können, müssen wir uns mittels eines Tokens bei NordVPN anmelden. Diesen Token findest du in deinen Benutzereinstellungen. Melde dich hierfür zunächst auf der Webseite von NordVPN mit deinem Zugangsdaten an. Klick anschließend in der linken Menüleiste unter dem Punkt Dienste auf NordVPN. Etwas weiter unten findest du anschließend den Punkt Zugangstoken. An dieser Stelle kannst du dir nun den notwendigen Token generieren. Bitte beachte hierbei, dass dieser Token nur bei der Generierung dargestellt wird, weshalb wir dir empfehlen diesen an einem sicheren Ort abzuspeichern. Anschließend kannst du dich mit folgendem Befehl bei NordVPN anmelden:

nordvpn login --token TOKEN

Das Schlüsselwort TOKEN musst du hierbei durch deinen eben generierten Token ersetzen. Anschließend solltest du eine Rückmeldung erhalten, dass du dich erfolgreich bei NordVPN angemeldet hast.

Werbung

Im nächsten Schritt solltest du ein paar weitere Einstellungen vornehmen. Zu diesen zählen die Deaktivierung der NordVPN Firewall. Dieser Schritt ist notwendig, da du dich ansonsten nicht mehr per SSH mit deinem Raspberry Pi verbinden kannst. Im nächsten Schritt aktivieren wir die NordVPN Technologie NordLynx. Sobald du diese Schritte durchgeführt hast, kannst du dich mit einem gewünschten NordVPN Server verbinden. Zur Umsetzung der eben beschriebenen Einstellungen kannst du folgende Befehle verwenden:

nordvpn set firewall disable
nordvpn set technology nordlynx
nordvpn connect LAND SERVER-STANDORTCode-Sprache: JavaScript (javascript)

Im letzten Befehl musst du die beiden Punkte LAND und SERVER-STANDORT durch das gewünschte Land und den Server-Standort ersetzen. Hier ein kurzes Beispiel:

nordvpn connect Germany Frankfurt

Raspberry PI Routing

Nachdem wir nun mit einem NordVPN Server verbunden sind, müssen wir dafür sorgen, dass alle Datenpakete über den VPN Tunnel geschickt werden. Hierfür müssen wir zunächst eine Option aktivieren, welche das Routing ermöglicht. Hierfür muss der Befehl IPv4.ip_forward in der Datei sysctl.conf aktiviert werden. Hierzu kannst du folgende Befehle verwenden:

sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1 #Suche diesen Befehl und entferne das vorstehende ZeichenCode-Sprache: PHP (php)

Firewall-Regeln

Nun müssen zusätzlich drei Firewall-Regeln angelegt werden. Diese Stellen dabei sicher, dass jeder ausgehende Datenverkehr über den VPN Tunnel geschickt wird. Darüber hinaus legen diese Regeln fest, dass nur der eingehende Datenverkehr erlaubt ist, welche auf einer internen Anfrage beruht. Die Befehle hierfür lauten:

sudo iptables -t nat -A POSTROUTING -o nordlynx -j MASQUERADE

sudo iptables -A FORWARD -i nordlynx -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

sudo iptables -A FORWARD -i eth0 -o nordlynx -j ACCEPT

Nun sind wir am Ende der Installation und Konfiguration des VPN-Gateways angelangt, sodass ihr nun ein voll funktionsfähiges VPN Gateway besitzt. Im nächsten Abschnitt geben wir dir noch ein paar Tipps im Umgang mit einem VPN Gateway.

Tipps

Wir möchten dir zum Abschuss noch ein paar hilfreiche Tipps im Umgang mit deinem VPN-Gateway mitgeben. Diese sind ein automatisierter Speedtest, welcher dafür sorgt, dass bei einer langsamen Verbindung automatisch eine Verbindung zu einem neuen NordVPN Server hergestellt wird. Darüber hinaus kam es bei uns vor, dass der NordVPN-Server bei einer längeren Verbindung nicht mehr geantwortet hat, weshalb wir uns eine kleines Shell-Skript geschrieben haben, welches diesen Ausfall bemerkt und anschließend eine neue Verbindung herstellt. Darüber hinaus kann es vorkommen, dass bestimmte Mail-Anbieter wie beispielsweise GMX oder Web.de das Abrufen von E-Mails über einen VPN Dienst blockieren. In diesem Fall müssen diese Verbindungen vom VPN Tunnel ausgenommen werden.

Speedtest

Mit folgendem Shell-Skript kannst du einen automatisierten Speedtest des VPN-Tunnels durchführen. Kopier hierzu einfach folgende Zeilen in eine Datei und erstelle anschließend einen Cronjob.

#!/bin/bash
SPEED=$(/usr/bin/speedtest --simple --secure |  /usr/bin/awk '$1 == "Download:" { rounded = sprintf("%.0f",$2); print rounded; }')
declare -i min=200 #Festlegung der minimalen Geschwindigkeit
if [ $(($SPEED)) -lt $min ] 
then
        /usr/bin/nordvpn connect Germany >> /dev/null
fi
Code-Sprache: PHP (php)

Erreichbarkeit des Server überprüfen

Mit folgendem Shell Skript kannst du unter der Verwendung eines Cronjobs überprüfen, ob das Internet über den jeweiligen VPN Server erreichbar ist:

#!/bin/bash

/bin/ping -c1 google.de >/dev/null
  if [ $? -ne 0 ]
  then 
    /usr/bin/nordvpn disconnect
    /usr/bin/nordvpn connect Germany
    exit 0
  fiCode-Sprache: JavaScript (javascript)

Mail-Anbieter vom VPN-Tunnel ausnehmen

Zum Abschluss zeigen wir dir noch eine Möglichkeit, wie du mit Hilfe einer Firewall-Regel bestimmte Dienste, wie beispielsweise einen Mail-Anbieter von deinem VPN Tunnel ausnehmen kannst. Hierzu musst zunächst ein Shell-Skript mit der Bezeichnung exculde_from_vpn.sh mit folgendem Inhalt anlegen:

#!/bin/sh

INTERFACE="nordlynx"
GATEWAY="XXX.XXX.XXX.XXX" #IP-Adresse deines Routes (z.B. FritzBox)
for name in $@
do
   echo "Hostname: $name"
   for ip in $(dig +short $name)
    do
      $(sudo ip route add $ip via $GATEWAY dev $INTERFACE);
    done
done

Dieses Shell-Skript rufst du anschließend mit folgendem Befehl auf:

bash exclude_from_vpn.sh HOSTNAMECode-Sprache: CSS (css)

Den Hostname musst du hierbei beispielsweise durch imap.web.de ersetzen. Ab jetzt solltest du wieder einen Zugriff auf deine E-Mails haben.

Wenn dir diese Anleitung gefallen hat, würden wir uns über ein kurzes Feedback in den Kommentaren freuen. Wir wünschen dir viel Spaß mit deinem neuen VPN Gateway!

Werbung

12 Comments

  1. Hallo Ihrs,
    ich habe Euer Projekt mit Freude umgesetzt, aber festgestellt, dass ich als „Neuling (mit 70jahren)“ in Debian auf Fehlermeldungen stoße und nicht weiterkomme.

    1) Das Gateway zu nordvpn steht und läuft, nur wie mache ich das, dass beim Boot alle notwendigen Befehle ausgeführt werden?
    2) in der Datei „exclude_from_vpn.sh“ wird mir die Zeile 3 “ Zeile 3: dev0: Kommando nicht gefunden.“ als Fehler angezeigt. Und schon bin ich am Ende 🙂

    Wenn Ihr mir über diese Hürden hinweghelfen könntet, wäre ich sehr dankbar.

    LG Konrad Hendricks

    1. Hallo Konrad,

      danke für dein Feedback. Zu deinen Fragen:
      1) Welche Befehle möchtest du denn beim Boot ausführen?
      2) Versuch mal dev0 durch nordlynx zu ersetzen.

      Falls du weitere Fragen hast, so gib uns einfach Bescheid.

      1. Hallo Ihrs,

        zu der Frage, welche Befehle ich beim Boot ausführen möchte :
        Ich habe mir eine Bashdatei (STADTNAMEstartvpn.sh) mit den Startsachen zusammengestellt :
        Ob Alle notwendig sind, kann ich nicht sagen.

        #!/bin/sh

        nordvpn login –token
        nordvpn set firewall disable
        nordvpn set technology nordlynx
        nordvpn connect Germany
        sudo iptables -t nat -A POSTROUTING -o nordlynx -j MASQUERADE
        sudo iptables -A FORWARD -i nordlynx -o eth0 -m state –state RELATED,ESTABLISHED -j ACCEPT
        sudo iptables -A FORWARD -i eth0 -o nordlynx -j ACCEPT
        bash /home/conny/Desktop/exculde_from_vpn.sh pop.gmx.net

        Diese Datei rufe ich im Terminal mit bash auf.

        LG Konrad

  2. Hallo Ihrs,
    ich habe das Ersetzen von „dev0“ mit „nordlynx“ und damit auch „eth0“, eingetragen und die „exclude_from_vpn.sh“ per bash aufgerufen und keine Fehlermeldung erhalten und die Emails kommen durch.

    Danke

    LG Konrad

  3. Hallo!

    Bei internetsuche habe ich diese Seite gefunden, und nach durchlesen des Artikels, sind gewisse Fragen offen für mich.
    1) Wohnort: Ungarn, aber möchte deutsche Mediatheken erreichen
    2) Glasfasermoden/Router – Router(als AP konfiguriert, mit Kabel verbunden mit erstem Router) – Fernseher(WiFi) oder PC(Ethernet), wo ich Mediathek erreichen möchte
    3) Wo sollte ich RPI anstecken? erste oder zweite Modem?
    4) Wo sollte ich irgendwas einstellen, damit die Geräte im Netz wissen, damit sie über den RPI gehen sollten?

  4. Hallo zusammen,

    danke erstmal für die detailreiche, aber vielleicht bin ich jetzt etwas blöd.
    Mir wird aus der Anleitung nicht ganz schlüssig was wohin geforwarded wird:
    sudo iptables -t nat -A POSTROUTING -o nordlynx -j MASQUERADE
    sudo iptables -A FORWARD -i nordlynx -o eth0 -m state –state RELATED,ESTABLISHED -j ACCEPT
    sudo iptables -A FORWARD -i eth0 -o nordlynx -j ACCEPT

    Bedeutet das nun:
    1. Internet/Router=>WLAN-Rapberry NordVPN=>Ethernet-Out
    Oder
    2. Internet/Router=>Ethernet-Rapberry NordVPN=>WLAN-Out

    Weil Nr.1 habe ich heute (28.02.2023) getestet mit einem weiteren Notebook per Ethernet direkt am Raspberry Pi, aber ich bekomme keine IP & kein Internet am Notebook Client.
    Der Raspberry Pi ist währendessen an einem VPN-Server via WLAN verbunden.

    Falls Nr.2 der Fall ist, fehlt die Beschreibung zum Verteilen via WLAN-HotSpot bzw. die Konfiguration der SSID + Kennwort/Schlüssel auf dem Raspberry Pi.

    Oder übersehe ich etwas komplett?

    Wäre super wenn mich hier einer Aufklären könnte! 🙂

    Bester Gruß
    Jaime

  5. hallo das mit dem exclude funktioniert leider bei mir nicht und ich habe leider fast keine linux erfahrung ich teste es z.b. mit dazn.com und bekomme immer noch den vpn tunnel auch wäre eine anleitung super nett wie man die cron jobs für die geschwindigkeit und den reconect macht. auch habe ich festgestellt das wenn die vpn verbindung nicht aufgebaut ist ich trotzdem internet habe über meine ip 🙁 kann jmd helfen?

    mein bypass script

    #!/bin/sh

    #INTERFACE=“ens18″
    INTERFACE=“nordlynx“
    GATEWAY=“192.168.179.1″ #IP-Adresse deines Routes (z.B. FritzBox)
    for name in $@
    do
    echo „Hostname: $name“
    for ip in $(dig +short $name)
    do
    $(sudo ip route add $ip via $GATEWAY dev $INTERFACE);
    done
    done

    vg
    mario

  6. Hallo,

    habe mir auch als absoluter Linux und Raspberry Neuling nach dieser Anleitung meinen RPI mit Nord VPN eingerichtet und erstaunlicher Weise auch keine Fehlermeldungen erhalten.
    Dennoch sind bei mir auch noch Fragen offen. Diese wurden hier auch teilweise schon gestellt und noch nicht beantwortet. Vor allem würde mich interessieren, wie ich mehrere Mail-Anbieter in das Script einfüge, oder ob ich für jeden Anbieter ein eigenes Script erstellen muss.
    Des weiteren würde mich brennend interessieren, wie ich nun den RPI an den Router anbinde?
    Ich habe hier nämlich einige Geräte die teilweise per W-Lan, aber überwiegend per LAN mit Ethernet Switches über eine Fritz Box ans Internet angebunden sind.
    Würde mich sehr freuen wenn es dazu auch noch ein paar Infos gibt.

    VG.
    Roman

    1. Hallo, was will man da auch beantworten? Das Script enthält zwei Schleifen, die alles mit einem „@“ filtern und über die Route des eingetragenen Gateway schickten – und eben nicht durch den Tunnel. Und was deine „Anbindungen“ betrifft, solltest du mal nach DHCP und RaspAP googlen. Sowas muss man verstehen lernen, da helfen keine quick & dirty Lösungen.

      MfG

  7. Super HowTo, Danke! Endlich mal jemand, der darauf hinweist, dass NordVPN einen Token benötigt. Diesen Hinweis liefert nicht einmal der Anbieter selbst – jedenfalls nicht, wenn man die Installation direkt von dort ausführt.

    Gruß

  8. Vielen Dank für diese ausführliche Erklärung, aber an einem Punkt komme ich nicht weiter:
    ich habe mir den Token geholt und dann mit diesem Befehl eingegeben:
    nordvpn login –token
    danach kommt:
    Permission denied accessing /run/nordvpn/nordvpnd.sock.
    Run ‚usermod -aG nordvpn $USER‘ to fix this issue and log out of OS afterwards for this to take an effect.
    Ich gebe ein: usermod -aG nordvpn xxxx
    xxxx ist dabei mein Raspberry Pi Benutzername.
    Danach kommt:
    usermod: Permission denied.
    usermod: /etc/passwd konnte nicht gesperrt werden; versuchen Sie es später noch einmal.

    Ein Neustart vom OS hat nichts gebracht.
    Was mache ich falsch?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Available for Amazon Prime