1925719

Sicher surfen

VPN mit dem Raspberry Pi - so geht's

06.07.2014 | 09:15 Uhr |

In den zwielichtigen Gewässern des öffentlichen Internets ist VPN ein sicherer Hafen. Der Raspberry Pi kann für Heimnetzwerke dabei als VPN-Server dienen.

Ein VPN verschlüsselt den gesamten Datenverkehr auf Netzwerkebene. Wer mit dem Mobilgerät oder Notebooks in öffentlichen WLANs unterwegs ist, kann mit einem VPN den gesamten Datenverkehr verschlüsselt über den VPN-Server zu Hause oder im Büro umleiten. Und nicht nur das: Der VPN-Server ist auch ein sicheres Eingangstor zum Netzwerk dahinter. Mit dem richtigen Routing, das der Server dem Client mitteilt, kann der VPN-Server eine Verbindung zum gesamten Netzwerk herstellen. So, als ob Sie sich direkt im lokalen Netzwerk befänden. Diese Lösung eignet sich nicht nur für Reisende und Außendienstmitarbeiter, die unterwegs auf Dokumente im Büro zugreifen müssen. Auch für Privatanwender ist die Lösung ideal, um sicher und verschlüsselt von öffentlichen WLANs auf den heimischen PC zu kommen.

Der VPN-Server muss dazu von außen erreichbar sein. Er authentifiziert den VPN-Client und stellt die Verbindung zu anderen Rechnern im VPN mittels Routing her. Für diese Rolle ist der Raspberry Pi prädestiniert, da hier alle Werkzeuge zur Verfügung stehen. Die Leistung der CPU und die Geschwindigkeit der 100-MBit- Ethernet-Ports reicht für ein kleineres Netzwerk, das per DSL an die Außenwelt angebunden wird.

Open VPN: Open Source für Server und Clients

Eine Linux-Distribution wie Raspbian liefert die benötigten Software-Pakete für den Aufbau eines Virtual Private Networks mit Open VPN. Für dieses VPN-Protokoll ist nicht nur die Server- Komponente frei, es gibt auch freie Clients für Windows, Mac-OS, iOS, Android und natürlich für Linux. Die Hardware-Voraussetzungen sind ebenfalls übersichtlich: Ein Mini-Linux-System wie der Raspberry Pi wird als Server benötigt und muss an den Internetanbieter über einen Router angeschlossen sein, der Port-Forwarding unterstützt. Ein grundlegendes Feature, das die meisten Router – auch ganz einfache Modelle – unterstützen.

Open VPN ist für den professionellen Einsatz geschaffen, und die erste Konfiguration des Servers stellt immer eine gewisse Hürde dar, da einige Software-Komponenten des Linux-Systems richtig konfiguriert und aufeinander abgestimmt werden müssen. Dies erfolgt auf dem Raspberry Pi ganz in der Linux-Tradition in der Kommandozeile und mit textbasierenden Konfigurationsdateien. Dabei sind ein paar Netzwerkkenntnisse sowie Linux-Kenntnisse, etwa zur Arbeit als root mit sudo und zum Umgang mit Texteditoren von Vorteil.

Als Linux-Distribution für den Raspberry Pi eignen sich die Debian-Varianten Raspbian und Raspbmc, die sich über das Installations-Tool Noobs installieren lassen. Die folgende Anleitung bezieht sich auf Raspbian/ Raspbmc. Die Befehle und Paketnamen weichen bei anderen Linux-Distributionen im Detail ab, etwa beim ebenfalls geeigneten Pidora. Die Einrichtung und Konfiguration auf Kommandozeile (Shell) erfolgt wahlweise direkt auf dem Raspberry Pi, an dem dazu Bildschirm und Tastatur angeschlossen sind. Oder auch einfach per SSH über das Netzwerk mit Hilfe eines SSH-Clients wie Putty .

Sicherer Fernzugriff aufs Heimnetz per VPN

Den Port für Open VPN weiterleiten: Der Router muss den Port 1194 (UDP) von außen erreichbar machen und im lokalen Netzwerk an die IP-Adresse des Raspberry Pi weiterleiten. Hier die Einstellungen bei einem Router von D-Link.
Vergrößern Den Port für Open VPN weiterleiten: Der Router muss den Port 1194 (UDP) von außen erreichbar machen und im lokalen Netzwerk an die IP-Adresse des Raspberry Pi weiterleiten. Hier die Einstellungen bei einem Router von D-Link.

Vorarbeit: Einen Port am Router weiterleiten

Der Router muss außerdem wissen, welche Anfragen aus dem Internet durchgelassen werden solleen und welcher Teilnehmer im Netzwerk der Open-VPN-Server ist. Zu diesem Zweck richten Sie auf dem Router Port-Forwarding ein, um gezielt nach außen einen einzigen Port zu öffnen und an die passende Adresse im LAN weiterzuleiten. Der Port für Open VPN ist der Port 1194 (UDP). Wenn der Open-VPN-Server im LAN beispielsweise die IP 192.168.1.6 hat, dann leiten Sie vom Router den Traffic vom Typ UDP am Ports 1194 auf die interne IP-Adresse und den dortigen Port 1194 um. Welche IP-Adresse die Netzwerkschnittstelle (WLAN oder Ethernet) des Raspberry Pi hat, finden Sie dort in der Kommandozeile mit dem Befehl

/sbin/ifconfig  

heraus. Der Server, der von außen die VPN-Verbindungen akzeptieren soll, muss zudem aus dem Internet erreichbar sein. Und zwar über eine feste IP-Adresse oder über einen eindeutigen DNS-Namen.

Bei DSL-Anbindung fällt eine feste IP aus, da bei jedem Verbindungsaufbau der Provider neue IP-Adressen vergibt. Für diesem Fall kommt ein dynamischer DNS-Dienst wie beispielsweise Noip zur Hilfe, der auch einer sich ändernden IP-Adresse feste Host-Namen im DNS zuteilt. Die meisten DSL-Router unterstützen Noip und teilen dem Dienst nach der Einrichtung automatisch die neue IP des Providers mit.

Parameter für Schlüssel festlegen: Legen Sie diese Einstellungen in der Datei „/etc/ openvpn/easy-rsa/vars“ fest, damit die Scripts zur Schlüsselerzeugung für Client und Server die Werte übernehmen.
Vergrößern Parameter für Schlüssel festlegen: Legen Sie diese Einstellungen in der Datei „/etc/ openvpn/easy-rsa/vars“ fest, damit die Scripts zur Schlüsselerzeugung für Client und Server die Werte übernehmen.

Open VPN: Installation unter Raspbian

In der Kommandozeile von Raspbian/Raspbmc dient der Paketmanager APT von Debian zur Installation von Open VPN – man muss nichts selbst kompilieren. Mit den beiden Befehlen

sudo apt-get update  sudo apt-get install openvpn  

werden die Pakete über die bestehende Internetverbindung aus dem Software-Verzeichnis der Distribution installiert. Für die spätere Erstellung der eigenen Zertifikate für die VPNVerschlüsselung gibt es fertige Scripts, die noch an die richtige Stelle kopiert werden müssen:

sudo cp -r /usr/share/doc/ openvpn/examples/easy-rsa/2.0 / etc/openvpn/easy-rsa  

Anschließend gehen Sie mit

cd /etc/openvpn/easy-rsa  

in das Script-Verzeichnis und editieren mit

sudo nano vars  

die Konfigurationsdatei „vars“. Gehen Sie dort zuerst zur Zeile, die mit „export KEY_CONFIG=“ beginnt und ändern Sie diese zu:

export KEY_CONFIG=$EASY_RSA/ openssl-1.0.0.cnf  

Die Zeile „EASY_RSA=“ ändern Sie zudem

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

Die nächsten Anpassungen sind nahe am Ende der Datei zu machen, um Namen und Identität des VPNs anzupassen. Viele dieser Parameter sind zwar nicht unbedingt für die korrekte Funktion des VPNs relevant, müssen aber trotzdem gesetzt sein:

export KEY_COUNTRY="DE"  

Landeskürzel, beispielsweise „DE“ für Deutschland.

export KEY_PROVINCE="BY"  

Ein beliebiger Name für das Bundesland.

export KEY_CITY="Muenchen"  

Eine Ortsangabe, die den Standort angibt.

export KEY_ORG="MeinVPN"  

Ein Firmenname Ihrer Wahl. Kann auch einfach der Domain-Name sein.

export KEY_EMAIL="pcwelt@gmail.com"  export KEY_EMAIL=pcwelt@gmail.com  

Zweimalige Angabe einer beliebigen Mailadresse des VPN-Administrators, also meist einfach die eigene Adresse.

export KEY_CN="example.no-ip.com"  

Der gewünschte Name dieses VPNs. Es sollte hier die Angabe des dynamischen Domain- Namens erfolgen, der zuvor über Noip eingerichtet wurde.

export KEY_NAME="MeinVPN"  

Ein beliebiger Name für den Aussteller der Zertifikate.

export KEY_OU="MeinVPN"  

Eine Angabe zum Abteilungsnamen, der frei gewählt werden kann. Die abschließenden beiden Parameter

export PKCS11_MODULE_ PATH=changeme  export PKCS11_PIN=1234  

kommen nicht zum Einsatz und brauchen nicht geändert zu werden.

Mit dem Raspberry Pi ein Überwachungssystem einrichten

Schlüsselaustausch mittels Diffie-Hellman: Bei dieser kryptografischen Methode werden zufällige Diffie-Hellman-Parameter erzeugt, was auf der ARM-CPU des Raspberry Pi eine Weile dauert.
Vergrößern Schlüsselaustausch mittels Diffie-Hellman: Bei dieser kryptografischen Methode werden zufällige Diffie-Hellman-Parameter erzeugt, was auf der ARM-CPU des Raspberry Pi eine Weile dauert.

Server: Die Schlüssel erzeugen

Bevor es daran geht, die Schlüssel für den den Server und für die Clients zu erstellen, ist es erst noch nötig, ein eigenes CA-Zertifikat für die Signatur der Schlüssel zu erzeugen. Dies gelingt, indem Sie zuerst mit

cd /etc/openvpn/easy-rsa  

in das Script-Verzeichnis gehen und dann mit

sudo -s  

eine Root-Shell öffnen. Die folgenden Befehle werden dann gleich mit Root-Rechten ausgeführt, und ein vorangestelltes sudo ist nicht nötig. Mit

source ./vars  

lesen Sie zuerst die zuvor gesetzten Variablen der Datei „vars“ ein. Dann führen Sie die beiden Befehle

./clean-all  ./build-dh  

aus, um ein sauberes Schlüsselverzeichnis zu erzeugen und die Diffie-Hellmann-Werte, welche für die Kryptographie-Funktionen des VPNs nötig sind. Die Berechnung dieser zufälligen Werte nimmt auf dem Raspberry Pi rund eine Minute in Anspruch.

Bevor Sie nun die Zertifikate für den Open-VPN-Server sowie die Clients erstellen können, ist es notwendig, das CA-Zertifikat zum Signieren der Server- und Client-Zertifikate zu erstellen. Dies führen Sie mit den folgenden beiden Befehlen aus:

./build-ca  ./build-key-server MeinVPN  

Es erfolgen jeweils nach jedem Befehl einige Abfragen der bereits festgelegten Parameter, und Sie können die Werte in eckigen Klammern einfach durch einen Druck auf die Eingabetaste übernehmen. Beim letzten Befehl zum Erzeugen der Server-Schlüssel erfolgt zudem noch die Rückfrage nach einem optionalen Passwort, dass Sie leer lassen. Abschließend Beantworten Sie noch die Rückfragen „Sign the certificate?“ und „Commit“ mit „y“.

Als Nächstes geht es zur eigentlichen Konfiguration des Open-VPN-Servers. Mit dem Befehl

nano /etc/openvpn/server.conf  

öffnen Sie eine neue, noch leere Konfigurationsdatei im Texteditor. Tragen Sie dort die Zeilen ein, die im Kasten „Konfigurationsdatei des Open-VPN-Servers“ abgedruckt ist.

Für die Clients: Zertifikate und Schlüssel

Der Server hat nun alle benötigten Schlüssel und Zertifikate. Damit Sie sich aber mit einem VPN-Client später verbinden können, braucht jeder Client natürlich auch sein eigenes Schlüsselbund. Dieses erzeugen Sie in diesem Schritt mit dem Aufruf von

./build-key client1  

Auch hier können Sie wieder die vorgegebenen Werte übernehmen und lassen „Passwort“ leer. Die Client-Dateien werden ebenfalls im Verzeichnis „/etc/openvpn/easy-rsa/keys“ abgelegt. Aus diesem Verzeichnis brauchen Sie für den Client Nummer eins die Dateien „ca. cert“, „client1.crt“ und „client1.key“.

Serverschlüssel erzeugen: Client und Server bekommen eigene Schlüssel, die jeweils mit Scripts aus dem Paket von Open VPN erzeugt werden. Die optionale Passwortabfrage lassen Sie jeweils leer.
Vergrößern Serverschlüssel erzeugen: Client und Server bekommen eigene Schlüssel, die jeweils mit Scripts aus dem Paket von Open VPN erzeugt werden. Die optionale Passwortabfrage lassen Sie jeweils leer.

Routing: Vom VPN ins Netzwerk

Das Linux-System auf dem Raspberry Pi soll den Datenverkehr aus dem VPN ins lokale Netzwerk weiterleiten und zudem noch eine Internetverbindung für die Clients zur Verfügung stellen. Öffnen Sie wieder eine Root-Shell mit

sudo -s  

da alle weiteren Befehle wieder Root-Rechte verlangen. Öffnen Sie die Datei „2/etc/sysctl. conf“ mittels

nano /etc/sysctl.conf  

im Texteditor, entfernen das Kommentarzeichen „#“ vor der Zeile „#net.ipv4.ip_forward=1“ und aktivieren nach dem Speichern der Datei die Änderung mit diesem Befehl:

sysctl -p /etc/sysctl.conf  

Nun muss noch mit dem Paketfilter iptables, der Teil des Linux-Kernels ist, eine Weiterleitung für die VPN-Pakete eingerichtet werden. Mit den beiden Befehlen

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

erstellen Sie die Regeln für das VPN-Netzwerk-Interface und mit den weiteren drei Befehlen

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

legen Sie fest, dass die VPN-Clients auch in das lokale Netzwerk und ins Internet kommen. Damit diese Regeln immer gleich automatisch nach dem Start des Raspberry Pi aktiv werden, geben Sie

iptables-save > /etc/iptables.up.rules  

ein, um die aktuellen Einstellungen von iptables zu sichern. Erstellen Sie mit

nano /etc/network/if-pre-up.d/ iptables  

eine neue Script-Datei, der Sie den Inhalt

#!/bin/bash /sbin/iptables-restore < /etc/ iptables.up.rules  

geben und speichern. Jetzt müssen Sie die Datei nur noch mit

chmod +x /etc/network/ if-pre-up.d/iptables  

ausführbar machen.

Raspberry Pi als Mediencenter einrichten

Verbindung mit Windows: Ist alles korrekt konfiguriert, kann sich ein Client – hier etwa Windows 7 – mit dem Raspberry Pi verbinden und kommt über ihn in das VPN. Ein Statusfenster zeigt den Verbindungsaufbau und eventuelle Fehler.
Vergrößern Verbindung mit Windows: Ist alles korrekt konfiguriert, kann sich ein Client – hier etwa Windows 7 – mit dem Raspberry Pi verbinden und kommt über ihn in das VPN. Ein Statusfenster zeigt den Verbindungsaufbau und eventuelle Fehler.

Konfiguration: Windows als Client

Wer die bisherigen Einrichtungsschritte obskur und umfangreich fand, kann beruhigt sein: Die Konfiguration des Clients fällt deutlich knapper und geradliniger aus. Auf einem Windows-System als Client installieren Sie Open VPN 2.3.2 . Kopieren Sie die erzeugten Client-Schlüssel „client1.crt“ und „client1.key“ sowie das allgemeine Zertifikat „ca.crt“ nach „C:\Program Files\OpenVPN\config“ („C:\Program Files(x86)\OpenVPN\config“ bei 64-Bit-Systemen). Anschließend legen Sie im gleichen Verzeichnis die neue Textdatei mit dem Namen „client.ovpn“ an, der Sie den Inhalt geben, wie er im Kasten „Konfigurationsdatei des Open- VPN-Servers“ steht.

Nun ist es an der Zeit, den Client zu starten. Dazu bringt Open VPN unter Windows ein Werkzeug für den unkomplizierten Start bereits mit: Open VPN GUI ist ein Tool, das bei der Installation von Open VPN mit Standard-Einstellungen gleich mit installiert wird. Sie finden es im Startmenü im Ordner „OpenVPN“. Es ist wichtig, dieses Tool stets als Administrator auszuführen, da der Aufbau einer VPN-Verbindung auch neue Routen in den Netzwerkeinstellungen setzt. Um nicht jedes Mal Open VPN per Rechtsklick zu starten, können Sie auch in den Eigenschaften der Verknüpfung zu Open VPN GUI im Startmenü oder auf dem Desktop im Dialog unter „Kompatibilität“ die Option „Programm als Administrator ausführen“.

Nach dem Aufruf von Open VPN GUI präsentiert sich im Infobereich neben der Zeitanzeige ein neues Netzwerksymbol, das ohne VPNVerbindung rot eingefärbt ist. Mit einem Rechtsklick auf das Symbol wählen Sie im Menü den Punkt „Connect“ aus. Es öffnet sich ein Programmfenster, das Sie mit detaillierten Meldungen über den Verbindungsaufbau informiert. Nachdem die VPN-Verbindung steht, schließt sich das Fenster, und das Symbol im Infobereich zeigt sich in Grün. Windows fügt auf dem Client die neue virtuelle Netzwerkschnittstelle von Open VPN als „LAN-Verbindung 2“ hinzu, und das System fragt, um welche Art von Netzwerk es sich handelt. Wählen Sie für das VPN als Typ das Heimnetzwerk oder das Arbeitsplatznetzwerk. Rechner im lokalen Netzwerk erreichen Sie über deren IP-Adresse, und der gesamte Internet-Traffic geht nun verschlüsselt immer über den Raspberry Pi. Zwar können Sie Netzwerkdienste wie Windows- Freigaben vom Open-VPN-Server nutzen, der Client antwortet jedoch selbst nicht auf Ping- Anfragen und kann keine Freigaben über das VPN anbieten.

Konfigurationsdatei des Open-VPN-Servers

Die folgende Open-VPN-Beispielkonfiguration tragen Sie auf dem Raspberry Pi in der Datei „/etc/openvpn/server.conf“ ein. Passen Sie die Dateinamen in den Zeilen „cert“ und „key“ an, wenn Sie nicht wie im Beispiel „MeinVPN“ verwenden.

dev tun  proto udp  port 1194  ca /etc/openvpn/easy-rsa/keys/ca.crt  cert /etc/openvpn/easy-rsa/keys/MeinVPN.crt  key /etc/openvpn/easy-rsa/keys/MeinVPN.key  dh /etc/openvpn/easy-rsa/keys/dh1024.pem  user nobody  group nogroup  server 10.8.0.0 255.255.255.0  persist-key  persist-tun  status /var/log/openvpn-status.log  verb 3  client-to-client  push "redirect-gateway def1"  push "dhcp-option DNS 208.67.222.222"  push "dhcp-option DNS 208.67.220.220"  log-append /var/log/openvpn  comp-lzo

Konfigurationsdatei des Open-VPN-Clients

Die Client-Konfiguration für Open VPN unter Windows. Die folgenden Zeilen tragen Sie in der Datei „client.ovpn“ ein. Anzupassen ist hier nur der Domain-Name „beispiel. no-ip.com“ in der Zeile „remote“, damit hier der korrekte dynamische Domain- Name des VPN-Servers steht. Die Port-Angabe dahinter muss beibehalten werden.

dev tun  client  proto udp  remote beispiel.no-ip.com 1194  ca ca.crt  cert client1.crt  key client1.key  resolv-retry infinite  route-method exe  route-delay 30  route-metric 512  route 0.0.0.0 0.0.0.0  nobind  persist-key  persist-tun  comp-lzo  verb 3
0 Kommentare zu diesem Artikel

PC-WELT Hacks - Technik zum Selbermachen?

Raspberry Pi erfreut sich gerade unter Bastlern einer großen Beliebtheit. Kein Wunder, denn mit der 35-Euro-Platine lassen sich viele spannende Projekte realisieren. Vom Mediacenter, Netzwerkspeicher, Fotomaschine bis hin zum Überwachungssystem ist alles möglich. Dieser Bereich ist aber nicht nur dem Raspberry Pi gewidmet, sondern bietet auch viele Tipps, Tricks und Anleitungen für andere spannende Bastelprojekte.

1925719