Raspberry PI als VPN Gateway nutzen

RaspberryPI als VPN Gateway

Es gibt viele Gründe für die Nutzung eines VPN (Virtual Private Network). Bei einem VPN handelt es sich um eine gesicherte Verbindung die man zum Beispiel über das Internet herstellen kann. Unternehmen nutzen ein VPN um ihren Mitarbeitern darüber abhörsicheren Zugriff von außerhalb des Unternehmensnetzwerkes, auf das selbige zu ermöglichen. Aber auch viele Privatleute nutzen VPN. Entweder. um damit auf das Heimnetzwerk zuzugreifen, oder aber auch um über öffentliche Hotspots eine abhörsichere Verbindung in das Internet aufzubauen. Ein weiterer Anwendungsfall wäre z.B. die Nutzung eines VPN um so eine IP Adresse aus einem anderen Land zu erhalten. Beispielsweise könnte ein Anwender sich so in Deutschland in das Internet einwählen, dann über das VPN eine IP Adresse in den USA bekommen, um so auf einen nur dort erhältlichen Stream zuzugreifen.

Der letzte Anwendungsfall könnte für den ein oder anderen interessant sein, deswegen beschreibe ich in diesem Artikel, wie man eine solche Lösung mit einem Raspberry PI umsetzen kann. Es gibt bereits verschiedene Internet Router am Markt, die es ermöglichen, die Internetverbindung komplett über ein VPN zu leiten, jedoch konnte ich nichts finden, was mir es erlauben würde nur bestimmte Netzwerkgeräte zu verbinden, nicht aber alle. Mit einer Fritzbox ist das z.B. nicht ohne Weiteres möglich. Bei meinen Ubiquiti Komponenten ist es über Umwege möglich, jedoch war mit die Umsetzung zu kompliziert.

Denn genau hier ist der Anwendungsfall. Alle Netzwerkgeräte sollen über die normale Internetverbindung gehen, die TV-Geräte jedoch sollen den Weg über das VPN Gateway nutzen, um so den Zugriff auf einen Stream im Ausland zu ermöglichen.

Was wird benötigt um den Raspberry PI als VPN Gateway zu nutzen?

Zunächst einmal wird ein Raspberry PI benötigt. Hier wird vermutlich schon ein Gerät der 1. Generation ausreichen, ich hatte noch ein Gerät der 4. Generation liegen und konnte dieses verwenden. Das Gerät kann ohne Monitor und Tastatur/Maus betrieben werden, wer sich damit jedoch wohler fühlt, kann es natürlich nutzen.

Als nächstes wird ein Abonnement (Subscription) für einen VPN Dienst gebraucht. Hier kann ich persönlich NordVPN empfehlen. Ich nutze de Dienst bereits mehrere Jahre und er hat bisher immer verlässlich funktioniert, und das zu einem annehmbaren Preis. Bei der Buchung des VPN Dienst sollte man immer auf aktuelle Angebote achten.

Zum Abschluss werden noch die OpenVPN Konfigurationsdateien des jeweiligen VPN Anbieter benötigt. Für meine Streaming Zwecke nutze ich die UDP Konfigurationen.

Wie bereitet man den Raspberry PI auf seine neuen Zwecke vor?

Ich gehe erst einmal davon aus, dass der Raspberry PI bereits mit einem Betriebssystem, wie zum Beispiel Raspbian installiert wurde. Sollte dies nicht der Fall sein, so muss dies erst geschehen. Es gibt fertige Images von Raspbian, die ohne Probleme auf eine SD Karte gespielt werden können. Sollte kein Monitor/Maus/Tastatur angeschlossen werden, so muss noch SSH auf der SD Karte aktiviert werden. Das ist relativ einfach.

1.) SD Karte in den PC stecken
2.) Im Explorer in das Verzeichnis Boot wechseln
3.) Eine leere Datei mit dem Namen ssh anlegen
4.) SD Karte in den Raspberry stecken und diesen starten.

Aber auch für spätere Zwecke sollte SSH aktiviert werden. Wenn Eingabe/Ausgabegeräte angeschlossen sind, dann kann man diese Anleitung nutzen.

Wenn der Raspberry PI gestartet ist und man Zugriff auf eine Konsole hat, so geht es weiter.

Zunächst ordnet man dem Raspberry PI eine feste IP Adresse zu. Dies wird hier gut erklärt. Dem PI selbst habe ich als DNS Server 1.1.1.1 und 8.8.8.8 zugeordnet.

Dann muss OpenVPN installiert werden. Dazu gibt man an der Konsole den Befehl apt-get install openvpn ein und bestätigt die Installation mit Y. Danach lädt man die OpenVPN Konfigurationsdateien vom VPN Betreiber herunter und stellt diese im Verzeichnis etc/openvpn bereit.

Jetzt kann man bereits einen Verbindungstest durchführen. Dazu nutzt man den Befehl: openvpn datei.ovpn -daemon

„Datei“ muss durch den passenden Dateinamen der Konfiguration ersetzt werden. Das Skript wird nun nach Benutzername und Passwort für die Verbindung fragen. Sofern dieses korrekt eingegeben wurde, sollte die Verbindung erfolgreich hergestellt werden. Dies kann man dann mit einem einfachen ifconfig testen. Ist ein Interface mit dem Namen tun0 zu sehen, so ist die Verbindung hergestellt. Dies ist der VPN Tunnel.

Da es ein wenig nervig sein würde jedes mal Benutzername und Passwort einzugeben, müssen wir hier noch einen Workaround schaffen.

1.) Navigiere nach /etc/openvpn und führe dort sudo nano vpnlogin aus.
2.) Im Nano Editor öffnet sich die frisch erstellte Datei vpnlogin.
3.) In dieser Datei werden zuerst der Benutzername in einer Zeile angegeben, dann das Passwort in einer neuen Zeile
4.) STRG-x Drücken.
5.) Die Datei speichern.
6.) Auswählen der datei.ovpn Datei die genutzt werden soll und diese mit sudo nano datei.ovpn öffnen.
7.) Zeile mit dem Parameter auth-user-pass ändern in auth-user-pass vpnlogin.

Beim Starten der VPN Verbindung über die gerade editierte Datei sollte nun keine Benutzer/Passwortabfrage mehr kommen.

Wie leitet man nun den Netzwerkverkehr der gewünschten Geräte über das VPN?

Dafür sind noch ein paar Änderungen an der Konfiguration nötig. Erst einmal muss dem PI erlaubt werden, die eingehenden IP Anfragen weiterzuleiten. Dazu ist eine Änderung der Konfigurationsdatei sysctl.conf nötig.

1.) sudo nano /etc/sysctl.conf
2.) Suchen nach: #net.ipv4.ip_forward=1 und das # vorne wegnehmen um den Befehl zu aktivieren.
3.) Sollte es in der Datei noch nicht vorhanden sein, einfach net.ipv4.ip_forward=1 am Ende hinzufügen
4.) Datei speichern.

Im letzten Schritt sind noch ein paar Änderungen an der Firewall nötig, damit der Netzwerkverkehr auch dahin kommt wo er hin soll. Dazu noch folgende Befehle in der Konsole eingeben.

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Damit die Firewall Konfiguration auch nach einem Neustart des PI bestehen bleibt muss noch etwas installiert werden. Dazu noch den Befehl apt-get install iptables-persistent nutzen. Über iptables-save > /etc/iptables/rules.v4 können die Parameter dann persistent gespeichert werden.

Es macht in den meisten Fällen noch Sinn, die OpenVPN Konfiguration so zu präparieren, dass sie beim Systemstart direkt aufgerufen wird. Dies kann man über folgenden Befehl realisieren: systemctl enable openvpn@beispiel.service

Dabei muss „beispiel“ durch den Dateinamen der *.ovpn Datei ausgetauscht werden.

Netzwerkgeräte für den Zugriff auf das VPN konfigurieren

Nun muss jedem Netzwerkgerät das über das VPN auf das Internet zugreifen soll noch gesagt werden, dass es auch wirklich den Weg über das VPN gehen soll. Dies ist wieder sehr einfach. Man wechselt in die Netzwerkkonfiguration des gewünschten Geräts, z.B. des Fernsehers. Hier konfiguriert man die manuelle IP Einstellungen und vergibt eine feste IP Adresse. Dies sollte am Besten definiert werden, so dass der Internet Router, der in der Regel die DHCP Adressen vergibt auch weiß, dass dieses Gerät die Adresse bekommen soll. Dies wird Router spezifisch über die jeweilige Webseite des Routers gemacht. Bei einer Fritzbox könnte man beispielsweise 192.168.178.100 vergeben, als Subnetmaske 255.255.255.0 und als Gateway dann die IP Adresse des Raspberry PI. Als DNS Server habe ich an dieser Stelle die beiden DNS Server meines VPN Anbieters verwendet.

Wenn alles richtig konfiguriert wurde kann man nun den Raspberry PI als VPN Gateway nutzen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.