Sicheres Netzwerk

VPN-Server mit dem Raspberry Pi aufbauen

21.11.2014 von David Wolski
Eine VPN-Vernetzung ermöglicht einen sicheren Zugang zum Büro oder Heimnetzwerk und bietet auch im öffentlichen Internets Sicherheit. Mit dem Raspberry Pi lässt sich ein VPN-Server realisieren, der sichere Datenverbindungen in einem Netzwerk garantiert.

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.

Mit dem Raspberry Pi lässt sich ein VPN-Server realisieren, der sichere Datenverbindungen in einem Netzwerk garantiert.
Foto: vege, Fotolia.com

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.

Raspberry Pi in der Praxis -
Raspberry Pi in der Praxis
Exotische Projekte rund um den Raspberry Pi.
Raspberry Pi in der Praxis
Kano: Bis auf den Bildschirm umfasst das über Kickstarter finanzierte Einsteigerset alles, um einen Computer mit dem enthaltenen Raspberry Pi zusammenzusetzen. Der Preis liegt bei 99 US-Dollar.
Raspberry Pi in der Praxis
Raspberry Pi als Internet- Radio: Als Player für eine Liste von vorbereiteten Streaming-URLs dient MPD. Dieser kann in diesem Projekt auch über die beiden Taster Radiostationen wechseln.
Raspberry Pi in der Praxis
H2O IQ: Das grüne Gehäuse beherbergt Feuchtigkeitssensor, Funkmodul und servogesteuerertes Ventil zur Bewässerung Ein Raspberry Pi dient als zentraler Bewässerungscomputer.
Raspberry Pi in der Praxis
Ein Gehäuse als PDF einfach ausdrucken: Aus Pappe lässt sich diese Einfassung namens „Punnet“ für den Raspberry Pi anfertigen, um die Platine vorerst provisorisch zu verstauen.
Raspberry Pi in der Praxis
Per Kopfdruck scannen und verschicken: Diese Scanner-Steuerung über das Raspberry Pi nimmt Dokumente über den USB-Port entgegen und leitet sie per E-Mail weiter.
Raspberry Pi in der Praxis
Hobby-Brauerei: Ein Mikro-Controller behält die Sensoren der Fermentierung im Blick, und ein Raspberry Pi sorgt für die richtige Temperatur während des Brauens.
Raspberry Pi in der Praxis
Lego Mindstorms mit dem Raspberry Pi als Schaltzentrale: Das Modul Brickpi vereinigt die Robotik-Plattform von Lego über eine separate Aufsteck-Platine mit dem Raspberry Pi.
Raspberry Pi in der Praxis
Kameramodul aus einer USB-Webcam: Viele der Billigkameras verstehen sich auch mit dem Raspberry PI beziehungsweise mit der dort installierten Linux-Distribution Raspbian.
Raspberry Pi in der Praxis
Raspberry Pi im Höhenrausch: Das Gehäuse in der passenden Form einer Himbeere (englisch „Raspberry“) schützt die Elektronik gegen die rauen Minustemperaturen auf 4 000 Metern.
Raspberry Pi in der Praxis
Zeitraffer und Dolly-Steuerung mit dem Raspberry Pi: Für beeindruckende Videos aus Einzelbildern lässt dieser Aufbau eine Kamera mit Motorsteuerung langsam über eine Schiene gleiten.
Raspberry Pi in der Praxis
Fernbedienung für den Raspberry Pi: Anstatt einen USB-Port mit einem IR-Receiver zu belegen, kann ein Sensor auch direkt an den GPIO-Pins der Platine angeschlossen werden.
Raspberry Pi in der Praxis
Blick über Südwest-England aus 40 Kilometern Höhe: An einem Wetterballon reiste der Raspberry Pi samt Kamera und CB-Funk-Transmitter in die Stratosphäre und wurde nach der Landung über GPS-Ortung geborgen.
Raspberry Pi in der Praxis
Tablet mit dem Raspberry Pi: Als Display kommt ein kapazitiver Touchscreen mit 10 Inch Bildschirmdiagonale zum Einsatz. Das Gehäuse besteht aus Birke und Kohlefaser und der Rahmen ist passgenau aus Sperrholz gefräst.

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.

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.


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.

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.

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.

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.

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@googlemail.com"
export KEY_EMAIL=pcwelt@googlemail.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.

Server: Die Schlüssel erzeugen

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.

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

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.

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".

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.

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.

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.

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

(hal)

Dieser Artikel basiert auf einem Beitrag der TecChannel-Schwesterpublikation PC-Welt.