Raspberry Pi als VPN-Gateway

Nach Verwendung als Proxy und TV-Client hier nun eine weitere Verwendungsmöglichkeit für einen Raspberry Pi: als VPN-Gateway, im konkreten Fall um mehrere Geräte eine VPN-Verbindung bereitzustellen. Praktisch, wenn nicht jedes Gerät direkt VPN unterstützt.

Update vom 14.05.2015: Ich habe das Setup zum VPN-Gateway für die Verwendung des Raspberry Pi 2 noch einmal aktualisiert. Die Geschwindigkeit hängt natürlich immer noch vom verwendeten VPN-Anbieter bzw. vielen weiteren Faktoren ab.

Platine des Raspberry Pi 2: Dank Quadcore und 1 GB RAM mehr Leistung
Platine des Raspberry Pi 2: Dank Quadcore und 1 GB RAM mehr Leistung

Es gibt zwar bereits ein fertiges Image, welches einen Raspberry Pi als OpenVPN-Gateway bereitstellt, die komplette Einrichtung hat sich am Ende allerdings nicht als so kompliziert herausgestellt, dass ich es nicht auf dem bereits bestehenden Raspberry Pi zusätzlich einrichten könnte. Je schneller der Raspberry (oder der eingesetzte Single-Board-Computer eurer Wahl), desto mehr Leistung wird auch das VPN hinterher haben.

Voraussetzungen

Um den Raspberry Pi als OpenVPN-Gateway zu betreiben müssen einige Voraussetzungen erfüllt sein:

  • Raspberry Pi bzw. Pi 2 im Netzwerk integriert mit fester IP-Adresse (nicht zwingend nötig)
  • VPN-Zugang (ich verwende IPredator bzw. PureVPN)
  • Grundlegendes Verständnis von Routing und Linux ist von Vorteil, da alles auf der Konsole stattfindet

Wenn man alle Teile zusammen hat geht es an die Installation – die Anleitung von IPredator hilft, hier die wichtigsten Eckpunkte. Zuerst muss openvpn installiert werden:

~ # sudo aptitude install openvpn

Danach benötigen wir die .conf-Datei des jeweiligen Anbieters, die auch die nötigen Einstellungen und Schlüssel beinhaltet. Diese muss nach /etc/openvpn kopiert werden. Im selben Verzeichnis legen wir eine .auth-Datei an (der korrekte Name dieser Datei muss in der .conf-Datei unter auth-user-pass eingetragen sein). Die .auth-Datei beinhaltet nur zwei Zeilen mit Username und Passwort für die VPN-Verbindung.

In der .conf-Datei der VPN-Verbindung müssen noch folgende Einträge hinzugefügt werden (kann abhängig vom Anbieter obsolet sein, für PureVPN braucht man es nicht):

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

redirect-gateway

Der Aufruf des Scripts update-resolv-conf beim Aufbauen und Schließen der VPN-Verbindung stellt sicher, dass immer der richtige DNS-Server verwendet wird, redirect-gateway sorgt dafür, dass später die Datenpakete der Clients im Netzwerk über die VPN-Verbindung durchgereicht werden. Sind diese Einstellungen alle gemacht geht es an den ersten Testlauf: mit dem Befehl openvpn –config /etc/openvpn/meine-config.conf wird eine VPN-Verbindung aufgebaut, in einem zweiten Terminal kann man schauen, ob es korrekt funktioniert hat. Dort sollte ifconfig ein neues tun0-Gerät anzeigen:

tun0      Link encap:UNSPEC  Hardware Adresse 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet Adresse:x.x.x.x  P-z-P:x.x.x.x  Maske:255.255.255.0
          UP PUNKTZUPUNKT RUNNING NOARP MULTICAST  MTU:1500  Metrik:1
          RX packets:6005 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6335 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:100
          RX bytes:1554591 (1.4 MiB)  TX bytes:625622 (610.9 KiB)

Damit funktioniert die VPN-Verbindung schon einmal, OpenVPN kann jetzt regulär via /etc/init.d/openvpn start aktiviert werden und startet auch automatisch nach einem Neustart – nun müssen nur noch Datenpakete von Geräten im lokalen Netz über diese Verbindung geleitet werden.

Gateway einrichten

Zuerst einmal muss Packet-Forwarding aktiviert werden. Da wir wollen, dass es auch bei einem Neustart erhalten bleibt, in der Datei /etc/sysctl.conf das Kommentarzeichen vor folgenden Eintrag entfernen:
net.ipv4.ip_forward=1. Danach den Pi einmal Neustarten, dann wissen wir auch, ob die VPN-Verbindung automatisch aufgebaut wird – ist das der Fall, das Forwarding in den iptables aktivieren (folgende Einstellungen haben zumindest bei mir funktioniert, iptables können aber etwas tricky sein – wenn nötig muss man hier etwas experimentieren):

~ # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
~ # iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Wenn man iptables auch nach einem Reboot noch mit den gleichen Settings verwenden will, bietet es sich an das Paket iptables-persistent zu installieren – damit werden die aktuellen iptables-Einträge gespeichert und wieder geladen.

Verwendung von Wireguard

Mittels iptables kann man den Traffic statt auf das tun0-Gerät der OpenVPN-Verbindung sollte man den Traffic auch auf das Wireguard-Interface umleiten können. Besteht eine Wireguard-Verbindung, bekommt man mit folgendem Befehl angezeigt wie das Netzwerk-Interface heißt:

~ # ip a

In meinem Setup ist das Interface „wg0-client“ – will man den Traffic über dieses Interface leiten, müssen die iptables-Regeln entsprechend angepasst werden:

~ # iptables -t nat -A POSTROUTING -o wg0-client -j MASQUERADE

Die Herausforderung ist bisher, einen passenden VPN-Service zu finden der auf der Kommando-Zeile den Aufbau einer Wireguard-Verbindung erlaubt. Wer einen entsprechenden Wireguard-VPN-Service kennt, kann diesen gerne in den Kommentaren teilen – das verwenden einer speziellen App funktioniert meist nicht.

Konfiguration der Endgeräte

IP-Einstellungen für OpenVPN-Gateway-Nutzung
IP-Einstellungen für OpenVPN-Gateway-Nutzung

iOS-Geräte nutzt OpenVPN-GatewayAuf den Endgeräten muss jetzt nur als Router die IP-Adresse des Raspberry Pi eingetragen werden. In meinem Fall ist es die 192.168.0.44, auf einem iOS 7-Gerät sehen die Einstellungen dann wie links zu sehen aus. Sobald das geschehen ist werden sämtliche Datenpakete (abgesehen von der DNS-Auflösung, die noch der Router im Heimnetzwerk übernimmt) über den Raspberry Pi und von dort aus über die VPN-Verbindung geleitet – gut zu erkennen an der Standortbestimmung von z.B. wieistmeineip.de, die Schweden als Land ausgibt.

Raspberry Pi 2 als VPN-Gateway

Speedtest Raspi 2 VPN-Gateway
Speedtest Raspi 2 VPN-Gateway

Mit dem neueren und deutlich leistungsstärkeren Raspberry PI 2 Model B lässt sich dieses Setup natürlich genauso durchführen. Die Geschwindigkeit hängt vor allem vom verwendeten VPN-Anbieter ab – und vom Server, zu dem Verbunden wird. Mit einem Server in Schweden und PureVPN als Anbieter sind 15 Mbit/s möglich (also in etwas so viel wie ein durchschnittlicher DSL-Anschluss, Verbindungen in die USA sind deutlich langsamer: hier werden gut 6,5 Mbit/s erreicht. Für Netflix reicht dies nach einigem Buffern aber immer noch aus.

Um das surfen auf US-Seiten zu beschleunigen habe ich zudem einen DNS-Cache auf dem Raspberry Pi 2 installiert: pdnsd speichert die DNS-Anfragen, die ansonsten auch erst über die VPN-Verbindung geschickt würden, zwischen und sorgt damit für ein schnelleres „Surfgefühl“ bei Verwendung der VPN-Verbindung.

Raspi 2: Traffic auf der VPN-Verbindung beim Netflix-Stream
Raspi 2: Traffic auf der VPN-Verbindung beim Netflix-Stream

Geschwindigkeit des OpenVPN-Gateways und Fazit

Die Geschwindigkeit dieser Konstruktion hängt natürlich von verschiedenen Faktoren ab: wie schnell ist die Netzwerkanbindung des Raspberry Pi, wie schnell ist die VPN-Verbindung, wie schnell ist die DSL-Verbindung ins Internet, wie schnell ist das WLAN. In meinem Szenario bekommt ein iPhone 5, welches über 2,4 GHz-WLAN angebunden ist, gute 6,7 Mbit/s Download über das Raspberry-Pi-Gateway und knapp 600kb/s Upload. Statt IPredator lassen sich natürlich auch beliebige andere OpenVPN-Anbieter nutzen – z.B. PureVPN.

Wie immer bei den Anleitungen zum Pi bzw. Raspberry Pi 2, die auf dem Standard-Raspian basieren, ließe sich das ganze auch mit einem x86-PC realisieren – nur dann mit einem deutlich höheren Stromverbrauch.

[amazon box=“B07TF5PPPN“]

22 Kommentare

  1. Vielen Dank für den Artikel. Hab das auf meinem Pi 2 problemlos so installiert. Allerdings ist das VPN über das Gateway extrem langsam. Die Pings zu google.com liegen auch bei 400ms.
    CPU und Speicherauslastung konnte ich als Ursache bisher ausschließen. Am VPN Server selber liegt es auch nicht, eine direkte Verbindung von einem anderen Rechner aus läuft sehr flott. Der Pi nur als Gateway ohne VPN geht auch problemlos.
    Hast du vielleicht noch einen Tipp, wo ich auf Fehlersuche gehen kann?

      1. Habe mir einen Raspberry Pi 2 bestellt, werde das damit noch mal nachvollziehen und den Beitrag updaten. Vielleicht finde ich auch ein Setup, was es mit vernünftiger Geschwindigkeit zulässt.

  2. Cooles Angebot @PureVPN

    PureVPN bietet ein Account von 2 jahre mit einem Kostenlose SmartDNS für 1,95 Euros/monat während 2 jahre.

    Keine Logs.

    Es hat mehr als 500 Server in 141 Ländern. (Bis zu 2-fach Geschwindigkeitgegenüber den andere VPN-Service)

    Gleichzeitige Nutzung auf bis zu 5 Geräten.

    7-TAGE GELD-ZURÜCK-GARANTIE.

    Militärisch-starke Verschlüsselung.

    Zensurfrei streamen mit SmartDNS

    Ein Wunderbar Deal. 🙂

    https://www.purevpn.com/bestvpnprovider-special.php

  3. Der Thread ist zwar schon etwas älter, trotzdem habe ich noch zwei Fragen dazu.

    1. Mal angenommen ich verbinde den Laptop über den RPi mit meinem VPN-Anbieter, den Rest der netzwerkfähigen Geräte jedoch nicht, kann ich dann trotzdem noch auf Netzwerkfreigaben zugreifen?
    Also ist der Laptop noch regulär ins Netzwerk eingebunden und nur die Verbindung nach außen gesichert?

    2. Mein VPN-Anbieter stelle mir keine .conf-Datei sondern eine .ovpn-Datei zur Verfügung. Haben Sie eine Idee wie diese eingebunden wird?

    Danke und Gruß

    1. 1. Nur die Verbindungen ins Internet sollten über den RPi geroutet werden. Alles andere Lokale sollte normal bleiben.

      2. die .ovpn Datei ist deine .conf Datei…

  4. Vermutlich ganz ganz dumme Frage und ich werde sogleich gesteinigt ( 😉 ), aber:

    Kein zweiter LAN-Adapter, wie in anderen Router-Konfigurationen, nötig?

    1. Nein, das geht alles über eine Schnittstelle. Die externe „Schnittstelle“ bekommt ihre IP ja über OpenVPN, intern bleibt das LAN über die gewohnte Adresse erreichbar.

      Mit zwei Schnittstellen ginge es aber natürlich auch, z.B. mit einem USB-WLAN-Stick

  5. Ich habe alles soweit eingerichtet und läuft auch, jedoch:

    „mit dem Befehl openvpn –config /etc/openvpn/meine-config.conf wird eine VPN-Verbindung aufgebaut“, „OpenVPN kann jetzt regulär via /etc/init.d/openvpn start aktiviert werden und startet auch automatisch nach einem Neustart“

    Tut es leider nicht. Bei mir ist es die /etc/openvpn/vpn.conf die aber offensichtlich nicht genutzt wird, selbst nicht wenn ich sie unter /etc/default/openvpn unter AUTOSTART=“vpn“ eintrage. Was muß ich tun? (Derzeit muss ich die VPN immer wieder händisch anstoßen)

    BTW: Kann man OpenVPN konfigurieren um mehr als nur einen Prozessorkern zu benutzen?

    Tipp: Portforwardings definiert man ebenfalls über iptables: e.g. „iptables -t nat -I PREROUTING -i tun0 -p tcp –dport 10000 -j DNAT –to-destination 192.168.178.100“

    1. Probier mal, die konfigurations-Datei mit der Endung .ovpn zu speichern. Kann sein, dass er die Datei ansonsten nicht sauber erkennt, die Beobachtung habe ich mit einem anderen Setup gemacht. Wenn es dann klappt Update ich die Anleitung entsprechend.

  6. Aloha,

    sorry das ich die Kommentar-Funktion „missbrauche“, aber …

    Hat jemand über die oben beschrieben Konfiguration erfolgreich Port-Fowards via iptables einrichten können und könnte mir bei meiner Konfiguration ggfs. helfen?

    [email protected]

  7. Bei mir läuft das ganze ziemlich gut mit dem Pi 2, bekomme zwischen 10 und 20 Mbit zustande. Betreibe das ganze für mein WG-WLAN. Mein Rechner, der NICHT über dein Pi online geht, macht seitdem allerdings komische Sachen. Entweder geht die Webseite erst beim 2. oder 3. Aufruf auf, oder Bilder werden zum Teil nicht geladen. Ähnliche Probleme gab es schonmal, als mein Synology NAS genau die selbe Funktion erfüllen sollte.

  8. Hallo Falk,

    Kannst du mal genau sagen, was iptables genau mit diesen im TuT definierten Kommandos festlegt ?

    Kann ich die Änderungen auch wieder alle rückgängig machen ?

  9. Was müsste ich eigentlich machen, wenn ich keinen vpn gateway haben will sondern das nur der outgoing traffic vom raspberry über den vpn provider laufen soll ?

    Der RAS ist per lan an meinem router ( internet) angeschlossen.

    1. Tatsächlich dürfte das gar nicht so kompliziert sein, keine schlechte Idee. Problem dürfte hier eher sein, einen passenden VPN-Dienst zu finden, der Wireguard ohne spezielle Apps etc. unterstützt.

Schreibe einen Kommentar

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