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.

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.

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.