Raspberry Pi als VPN-Server einrichten: Tutorial mit OpenVPN

Die Sicherheit öffentlicher Internetzugänge lässt häufig zu wünschen übrig. Wenn Sie sich auch unterwegs sicher im Netz bewegen möchten, lässt sich dies gut über ein eigenes VPN („Virtual Private Network“ bzw. virtuelles privates Netzwerk) bewältigen. Wer sich einen persönlichen VPN-Server erstellt, hat außerdem über jede Internetverbindung Zugriff auf das heimische lokale Netzwerk.

Für die Einrichtung des eigenen virtuellen, privaten Netzwerks benötigt man einen Rechner, der als Server für dieses fungiert. Der Raspberry Pi stellt hierfür eine kostengünstige Option dar. Einen VPN-Server können Sie auf dem Raspberry Pi mit der freien VPN-Server-Software OpenVPN umsetzen, die als kostenfreier Download verfügbar ist.

Tipp: Free VPS Trial

Sie wollen Ihren eigenen vServer? IONOS bietet Ihnen leistungsstarke und kostengünstige VPS-Pakete. Nutzen Sie jetzt das IONOS Free VPS Trial und testen Sie Ihren vServer kostenlos für 30 Tage.

Ein VPN richtet man in einem lokalen Netzwerk (LAN) ein, um auf dieses auch von außerhalb zugreifen zu können. Es stellt ein virtuelles Kommunikationsnetz dar, bei dem zumeist über das Internet die Anfragen und Antworten zwischen dem VPN-Server und den VPN-Clients (mit dem Server verknüpfte Geräte) transportiert werden.

Mit einem selbst eingerichteten VPN ist es somit möglich, von jedem beliebigen Internetzugang aus auf das eigene lokale Netzwerk zuzugreifen. Dadurch können Sie die im LAN befindlichen Daten zugreifen und einzelne Geräte aus der Ferne ansprechen (z. B. einen Drucker oder ein Faxgerät) sowie die Internetverbindung Ihres lokalen Netzwerks nutzen. Dank einer verschlüsselten Verbindung zu Ihrem VPN-Server können Sie sich zudem weitaus sicherer im Netz bewegen, als wenn Sie auf risikobehaftete, offen zugängliche Internetanschlüsse (wie öffentliche WLANs) zurückgreifen würden.

Damit eine solch sichere Verbindung zu einem VPN-Server möglich ist, müssen Sie allerdings in Ihrem lokalen Netzwerk auf einem Rechner einen VPN-Server einrichten, der ständig mit dem Internet verbunden ist. Der Computer fungiert dann als Host für das virtuelle private Netzwerk. Über eine Client-Software verbinden Sie Geräte (wie Laptop, Smartphone oder Tablet) mit dem Server. Wenn Sie nun mit einem Client über eine Internetverbindung, die außerhalb Ihres persönlichen LANs liegt, auf Ihren VPN-Server zugreifen, geschieht dies über eine verschlüsselte Verbindung (VPN-Tunnel genannt).

Dieser VPN-Tunnel beginnt bei Ihrem Client und endet bei Ihrem VPN-Server – er erstreckt sich durch die komplette Internetverbindung. Dabei ist der Tunnel um ein Vielfaches sicherer als durchschnittliche öffentliche Internetverbindungen. Hacker haben es dementsprechend schwer, in den Tunnel einzudringen und den Datenverkehr mitzuschneiden. Über eine persönliche VPN-Verbindung können Sie deshalb auch in öffentlichen WLANs sehr sicher mit sensiblen Daten arbeiten (wie z. B. beim Online-Banking).

VPN-Server erstellen mit dem Raspberry Pi und OpenVPN: Die Vorteile

Die geringen Kosten für einen Raspberry Pi machen ihn als VPN-Server so attraktiv. Der Einkaufspreis des kleinen Computers und des nötigen Zubehörs ist vergleichsweise niedrig. Darüber hinaus ist auch sein Stromverbrauch für den dauerhaften Betrieb eines Servers auf dem Rechner relativ gering. Generell bietet er ein gutes Preis-Leistungs-Verhältnis (auch wenn inzwischen verschiedene Raspberry-Pi-Alternativen existieren).

OpenVPN eignet sich für ein VPN aus mehreren Gründen: Es handelt sich dabei um ein kostenfreie, weit verbreitete VPN-Server-Software, die eine große Anzahl an Betriebssystemen unterstützt (Windows, OS X, Android, iOS, Linux und weitere). Außerdem überzeugt das Programm mit einer vergleichsweise einfachen Einrichtung und einer hohen Stabilität.

Was benötigt man für die Einrichtung eines VPN-Servers auf dem Raspberry Pi?

Für das nachstehende Tutorial benötigen Sie Folgendes:

  • Raspberry Pi (empfohlen: Modell 2 oder höher)
  • Kontinuierlich vorhandene Internetverbindung (am besten per Netzwerkkabel) und Stromversorgung (Micro-USB-Kabel) für den Raspberry Pi.

Darüber hinaus müssen Sie entscheiden, ob Sie direkt am Raspberry Pi den VPN-Server einrichten möchten (mit angeschlossenem Monitor und verbundener Maus und Tastatur) oder aber über einen SSH-Client. Die Fernwartung des Servers mittels SSH ist in den meisten Fällen die empfehlenswertere Variante, da Sie hierüber am einfachsten von einem anderen Rechner aus auf den späteren VPN-Server zugreifen können.

Zu diesem Zweck gibt es verschiedene weit verbreitete Software wie PuTTY, WinSCP oder OpenSSH (für Unix-Betriebssysteme), über die Sie den Raspberry Pi ansteuern und bedienen können. Sie verbinden die SSH-Software mit dem Raspberry Pi, indem Sie dessen IPv4-Adresse in dem Client (den Rechner, mit dem Sie auf den Raspberry Pi zugreifen möchten) angeben und beide miteinander verknüpfen. Die IP-Adresse Ihres Raspberry Pis können Sie sich beispielsweise über das Router-Menü im Browser anzeigen lassen. Sie gelangen in der Regel dorthin, wenn Sie die Adresse „192.168.0.1“ (bzw. bei Fritz!Box-Besitzern „fritz.box“) in Ihrem Browser aufrufen.

IP-Adressen anpassen

Für die Nutzung eines SSH-Clients ist es ratsam, dem Raspberry Pi eine statische private IP-Adresse im lokalen Netzwerk zuzuordnen – andernfalls müssen Sie jeden Tag, an dem Sie via SSH auf den Mini-Computer zugreifen möchten, aufs Neue seine momentane dynamische Adresse heraussuchen und den Client mit dieser verbinden. Noch wichtiger ist die Verknüpfung einer beständigen privaten IP-Adresse mit dem Raspberry Pi für die Nutzung von OpenVPN: Der VPN-Server muss im lokalen Netzwerk permanent unter derselben Adresse erreichbar sein, damit Sie kontinuierlich auf ihn zugreifen können. Darüber hinaus sollten Sie den VPN-Server auch permanent unter derselben Adresse über das Internet erreichbar halten. Für gewöhnlich verfügt ein Internetanschluss jedoch nur über eine dynamische öffentliche IP-Adresse, die spätestens nach 24 Stunden wechselt und so die ständige Erreichbarkeit des Servers unter derselben IP-Adresse vereitelt. Falls Ihre Internetverbindung über keine statische öffentliche IP-Adresse verfügt, können Sie sich aber mit der Einrichtung eines dynamischen DNS (DDNS) behelfen.

In einem anderen Artikel können Sie nachlesen, wie Sie dem Raspberry Pi eine statische IP-Adresse zuordnen und welche Möglichkeiten es für die Einrichtung von DDNS gibt. Wenn Sie Ihren Raspberry Pi als Server permanent online verfügbar halten möchten, sollten Sie sich regelmäßig um seine Aktualisierung und Sicherheit kümmern.

Mit OpenVPN einen eigenen VPN-Server auf dem Raspberry Pi installieren

Nun kann die Einrichtung von OpenVPN beginnen. Zu diesem Zweck öffnen Sie das Terminal (die Eingabe-Konsole) Ihres Raspberry Pis.

Vorbereitung des Raspberry Pis

Bevor Sie sich der Installation von OpenVPN zuwenden, empfiehlt es sich, für die bereits vorhandenen Pakete auf dem Raspberry Pi nach Updates zu suchen und diese zu installieren. Geben Sie hierfür folgende Kommandos in die Konsole ein:

sudo apt-get update

sudo apt-get upgrade

Falls Sie das voreingestellte Standardpasswort Ihres Raspberry Pis (Benutzername: „Pi“; Passwort: „Raspberry“) noch nicht geändert haben, sollten Sie dies nun dringend nachholen: Andernfalls kann sich jeder Zugang zum System verschaffen – sowohl lokal als auch über das Netzwerk via SSH. Mit dem unten stehenden Befehl rufen Sie die Konfiguration des Mini-Rechners auf, in der Sie ein sicheres Kennwort anlegen können.

sudo raspi-config

OpenVPN installieren und easy-rsa-Datei einrichten

Zunächst installieren Sie über den folgenden Befehl die OpenVPN-Software sowie OpenSSL, das der Verschlüsselung der Internetverbindung dient.

sudo apt-get install openvpn openssl

Nach der Installation von OpenVPN kopieren Sie die vorgefertigten Skripte „easy-rsa“ in das OpenVPN-Konfigurationsverzeichnis. Hierüber legen Sie verschiedene Zertifikate und Schlüssel an. Das folgende Kommando funktioniert nur unter Raspbian Jessie (beim Vorläufer-Betriebssystem Wheezy liegen die Skripte unter „/usr/share/doc/openvpn/examples/easy-rsa/2.0“).

sudo cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa

Öffnen Sie als Nächstes in der Konsole die Datei „/etc/openvpn/easy-rsa/vars“, indem Sie folgenden Befehl ausführen:

sudo nano /etc/openvpn/easy-rsa/vars

Jetzt gilt es, diese Datei anzupassen. Sie ändern die Einstellungen, indem Sie die komplette Zeile „export EASY_RSA="`pwd`"“ durch die Folgende ersetzen:

export EASY_RSA="/etc/openvpn/easy-rsa"

Die Schlüssellänge lässt sich in der Datei ebenfalls anpassen, wodurch Sie das Sicherheitsniveau der Verschlüsselung festlegen. Ein Raspberry Pi 3 verfügt über genügend Rechenleistung, um ohne Probleme eine Schlüssellänge von 2048 Bit verarbeiten zu können. Bei dem Modell 2 führt diese Verschlüsselung jedoch schon zu merklichen Performance-Einbußen, sodass Sie in diesem Fall eventuell nur eine 1024-Bit-Verschlüsselung verwenden sollten – je nachdem, ob Ihnen die Geschwindigkeit oder die Verschlüsselung der Verbindung wichtiger ist. Eine 4096-Bit-Verschlüsselung ist hingegen nur in den wenigsten Fällen sinnvoll. Sie ändern die Schlüssellänge durch die Anpassung der Bit-Zahl in der Zeile „export KEY_SIZE=2048

Nun gehen Sie zurück in das Konfigurationsverzeichnis „easy-rsa“, geben sich Root-Rechte und integrieren dann die vorher getätigten Einstellungen in die Umgebungsvariablen, indem Sie das Skript „vars“ mit dem Befehl „source“ ausführen. Anschließend machen Sie die entstehende Konfigurationsdatei über einen symbolischen Link unter dem Namen „openssl.cnf“ zugänglich.

cd /etc/openvpn/easy-rsa
sudo su
source vars
ln -s openssl-1.0.0.cnf openssl.cnf

Zertifikate und Schlüssel für OpenVPN erstellen

Zunächst setzen Sie die Schlüssel zurück und erstellen dann die ersten Schlüsseldateien für OpenVPN.

./clean-all
./build-ca OpenVPN

Sie werden aufgefordert, den zwei Buchstaben umfassenden „Country Name“ Ihres Landes einzutragen (DE für Deutschland, AT für Österreich und CH für die Schweiz). Die anschließenden Abfragen sind nicht weiter von Belang und Sie können sie einfach ohne Angaben mit der Eingabetaste bestätigen.

Anschließend generieren Sie die Schlüsseldateien für den Server:

./build-key-server server

Geben Sie ein weiteres Mal den zweistelligen Länder-Code ein und belassen die darauffolgenden Felder leer. Abschließend bestätigen Sie die Anfrage, ob das Zertifikat generiert werden soll, zwei Mal mit „Y“.

Nachfolgend widmen Sie sich der Einrichtung eines oder mehrerer VPN-Clients. Dabei erstellen Sie für jedes Gerät, mit dem Sie auf den VPN-Server zugreifen möchten, ein Zertifikat und einen Schlüssel. Der Ablauf ähnelt dabei dem bei der Einrichtung von Zertifikat und Schlüssel beim Server (Länderkürzel eintragen und zwei Mal bestätigen). Sie können jedem der Geräte einen spezifischen Namen zuweisen (im unten stehenden Befehl wird je ein Client für ein „laptop“, „smartphone“ und ein „tablet“ angelegt).

./build-key laptop
./build-key smartphone
./build-key tablet
…

Wenn Sie die Clients mit einem Passwort versehen möchten, nutzen Sie statt der oben stehenden Befehle die Folgenden:

./build-key-pass laptop
./build-key-pass smartphone
./build-key-pass tablet
…

Die Erzeugung der Zertifikate und Schlüssel schließen Sie mit dem Befehl für den Diffie-Hellman-Schlüsselaustausch ab:

./build-dh

Dies kann unter Umständen etwas mehr Zeit in Anspruch nehmen. Sobald der Vorgang abgeschlossen ist, melden Sie sich als Root-Benutzer ab:

exit

Konfigurationsdatei für OpenVPN-Server generieren

Rufen Sie die OpenVPN-Konfigurationsdatei auf:

sudo nano /etc/openvpn/openvpn.conf

Die leere Datei füllen Sie nun mit diversen Befehlen, die wir im Folgenden erläutern. Zunächst aktivieren Sie über „dev tun“ das Routing durch einen IP-Tunnel und wählen mit „proto udp“ UDP als Transportprotokoll aus (falls Sie TCP verwenden möchten, wählen Sie „proto tcp“). In der darauffolgenden Zeile legen Sie fest, dass der OpenVPN-Server auf dem Port 1194 erreichbar ist – Sie können diesen aber auch ändern.

dev tun
proto udp
port 1194

Als Nächstes erstellen Sie ein SSL/TLS Root-Zertifikat (ca), ein digitales Zertifikat (cert) und einen digitalen Schlüssel (key) über das Verzeichnis „easy-rsa“. Des Weiteren sollten Sie darauf achten, dass Sie die richtige Bit-Verschlüsselung eintragen (1024, 2048 etc.).

ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem

Nun legen Sie fest, dass der Raspberry Pi als VPN-Server genutzt wird. Hierfür nennen Sie IP-Adresse sowie die Netzmaske, die dem VPN zugeordnet werden soll.

server 10.8.0.0 255.255.255.0

Mit dem Kommando „redirect-gateway def1 bypass-dhcp” leiten Sie nun den kompletten IP-Traffic durch den IP-Tunnel. Wenn Sie hohe Sicherheitsanforderungen haben, können Sie mit dieser Einstellung experimentieren – falls sich dadurch Schwierigkeiten ergeben oder das Surfen zu langsam wird, ist es jedoch ratsam, diese Konfiguration wieder abzustellen. Die anderen unten aufgelisteten Anweisungen sollten Sie hingegen in jedem Fall verwenden: Über sie benennen Sie die öffentlichen DNS-Server, mit denen Ihr VPN-Server arbeiten wird. Im nachstehenden Befehl ist mit „217.237.150.188“ ein Server von IONOS sowie mit „8.8.8.8“ einer von Google gelistet. Diese können Sie aber durch die Angabe der IPv4-Adressen anderer DNS-Server nach Belieben austauschen. Über „log-append /var/log/openvpn“ stellen Sie dann noch ein, dass die Log-Information in die Datei „/var/log/openvpn“ geschrieben wird.

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 217.237.150.188"
push "dhcp-option DNS 8.8.8.8"
log-append /var/log/openvpn

Via „persist-key“ werden Key-Dateien nicht erneut gelesen und mit „persist-tun“ die TUN- und TAP-Netzwerk-Treiber nicht neu gestartet. Die Rechte des OpenVPN-Daemons nach einem Programmstart setzen Sie über „user nobody“ und „group nogroup“ herab. Mit „status /var/log/openvpn-status.log“ erstellen Sie eine Status-Datei, die Ihnen die gegenwärtige Verbindung anzeigt. Weiterhin ist es ratsam, die Ausführlichkeit der Log-Informationen mithilfe des Befehls „verb“ zu vereinbaren. Wenn Sie dabei „0“ wählen, erhalten Sie – abgesehen von Fehlermeldungen – keine Ausgaben. Ein Wert zwischen 1 und 4 eignet sich für den normalen Gebrauch, wohingegen sich darüber liegende Werte für die Fehlerbehebung eignen. Zuletzt bestimmen Sie noch über das Kommando „client-to-client“, dass VPN-Clients nicht nur den Server, sondern auch andere VPN-Clients erkennen, und aktivieren mit „comp-lzo“ die LZO-Komprimierung (diese müssen Sie auch in der config-Datei des Clients freigeben).

persist-key
persist-tun
user nobody
group nogroup
status /var/log/openvpn-status.log
verb 3
client-to-client
comp-lzo

Mit “Strg + O” speichern Sie die Änderungen und mit „Strg + X“ beenden Sie den Editor.

Skript für den Internetzugriff mit einem Client anlegen

Damit Sie über Ihren VPN-Tunnel auf den Internetanschluss Ihres lokalen Netzwerks zugreifen können, müssen Sie eine Weiterleitung erstellen. Legen Sie hierfür zunächst die Datei „/etc/init.d/rpivpn“ an:

Sudo nano /etc/init.d/rpivpn

Indem Sie die folgenden Kommentare in die Datei kopieren, erstellen Sie den Header für ein Linux-Init-Skript:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          rpivpn
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: VPN initialization script
### END INIT INFO

Nachfolgend aktivieren Sie „ip_forward“, indem Sie eine „1“ in diese Datei schreiben:

echo 'echo "1" > /proc/sys/net/ipv4/ip_forward' | sudo -s

Als Nächstes legen Sie über den Paketfilter „iptables“ eine Weiterleitung für VPN-Pakete an.

iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT

Es sind nun noch Befehle erforderlich, die Ihren VPN-Clients den Zugang zum LAN und zum Internet gewähren. Diese richten Sie mit den folgenden Zeilen ein:

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Speichern und schließen Sie die Datei erneut mit „Strg + O“ und „Strg + X“.

Damit die Weiterleitung funktioniert, müssen Sie dem Skript noch die entsprechenden Rechte zuteilen und es als Init-Skript installieren.

sudo chmod +x /etc/init.d/rpivpn
sudo update-rc.d rpivpn defaults

Nun führen Sie das Skript aus und starten danach den OpenVPN-Server neu.

sudo /etc/init.d/rpivpn
sudo /etc/init.d/openvpn restart

Einrichtung der Clients abschließen

Im letzten Schritt bündeln Sie die Zertifikate und Schlüssel jedes Clients in einem eigenen Paket. Hierfür geben Sie sich wieder Root-Rechte, öffnen den Ordner „/etc/openvpn/easy-rsa/keys/“ und legen die Client-Konfigurationsdatei an. Über die folgenden Befehle rufen Sie die Datei des „laptop“-Clients auf. Die Einrichtung jedes Clients funktioniert immer gleich – Sie müssen lediglich die Bezeichnung des Geräts entsprechend abändern.

sudo su
cd /etc/openvpn/easy-rsa/keys
nano laptop.ovpn

In der „.ovpn“-Datei des Clients fügen Sie nun Folgendes ein:

dev tun
client
proto udp
remote x.x.x.x 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert laptop.crt
key laptop.key
comp-lzo
verb 3

Den oben stehenden Dateiinhalt müssen Sie allerdings noch anpassen. In der vierten Zeile ersetzen Sie „x.x.x.x“ mit der IP-Adresse Ihres DDNS-Anbieters (falls Sie eine statische öffentliche IP-Adresse nutzen, können Sie selbstverständlich einfach diese dort eintragen), gefolgt von dem Port, über den der VPN-Server erreichbar sein soll. In der dritt- und viertletzten Zeile tragen Sie den Namen Ihres Clients ein (hier: „laptop“). Nachdem Sie die Änderungen vorgenommen haben, speichern Sie diese mit „Strg + O“ und schließen den Editor mit „Strg + X“.

Als Letztes fügen Sie die Konfigurationsdatei mit ihren Zertifikaten und Schlüsseln in einer Zip-Datei zusammen. Falls Sie noch kein Zip-Paket auf dem Raspberry Pi installiert haben, gelingt dies beispielsweise mit folgendem Befehl:

apt-get install zip

Zum Erstellen der Zip-Datei nutzen Sie die folgenden Befehle und achten dabei wieder darauf, dass Sie überall den richtigen Client-Namen einsetzen.

zip /home/pi/raspberry_laptop.zip ca.crt laptop.crt laptop.key laptop.ovpn

Nun müssen Sie noch die Rechte der Dateien anpassen und beenden danach die Einrichtung mit „exit“.

chown pi:pi /home/pi/raspberry_laptop.zip
exit

Die nun fertige Zip-Datei übertragen Sie vom Raspberry Pi auf den Client (beispielsweise über ein SCP- oder SFTP-Programm) und richten dann auf dem Gerät den Client ein. Nun können Sie mit dem Gerät von jedem beliebigen Internetanschluss aus auf das mit dem Client verbundene lokale Netzwerk und dessen Internetanschluss zugreifen.

Auf dem Raspberry Pi den eigenen VPN-Server einrichten lohnt sich

Das eigene VPN ist weit weniger kostspielig, als viele denken: Dank des geringen Stromverbrauchs des Raspberry Pis fallen keine großen laufenden Kosten an. Und auch die Ausgabe für die einzelnen Komponenten des Servers (Raspberry Pi, Micro-SD-Karte, usw.) sind überschaubar.

Zudem ist ein Raspberry-Pi-VPN-Server zu vielem imstande. Denn mit Ihrem selbstgehosteten VPN-Server auf dem Raspberry Pi können Sie von jeder Internetverbindung aus auf Ihr lokales Rechnernetzwerk zugreifen. Dabei ist die VPN-Verbindung verschlüsselt und ermöglicht es Ihnen, sich sowohl in einem offenen und/oder nicht vertrauenswürdigen WLAN als auch über die Datenleitung Ihres Mobilfunkvertrags deutlich sicherer im Netz zu bewegen. Viel mehr Schutz kann eine mobile Internetverbindung kaum bieten.