Website-Icon Datenreise

Raspberry Pi – VPN Server einrichten (Anleitung)

Öffentliche Wlan-Hotspots, wie z.B. im Cafe oder Hotel, sind praktisch. Jedoch sollte man sich dabei bewusst sein, dass das Risiko immer mitsurft. Denn in einem öffentlichen Wlan-Netz ist nichts privat und der gesamte Datenverkehr, auch persönliche Daten und Passwörter, können von anderen Clients im Netzwerk problemlos mitgeschnitten werden. Um dies zu verhindern, sollte die gesamte Kommunikation verschlüsselt stattfinden.

Dank verschiedener (und teils sogar kostenloser) Colocation-Angebote für den Raspberry Pi, steht einer meiner Mini-Rechner nun seit Kurzem in einem professionellen Rechenzentrum und verfügt über eine feste IP-Adresse. Ideale Voraussetzungen um darauf ein OpenVPN-Gateway einzurichten, das mir bei Bedarf eine sichere Internet-Verbindung zur Verfügung stellt.

Anleitung

Schritt 1

Zu Beginn muss OpenVPN und OpenSSL installiert werden. Für Raspbian stehen entsprechende Pakete bereit, die einfach mit apt-get installiert werden können:

$ sudo apt-get install openvpn openssl

 


Schritt 2

Zum Erstellen der Zertifikate und Schlüssel bringt OpenVPN bereits eine praktische Scriptsammlung (easy-rsa) mit, die uns einige Handarbeit erspart. Diese Scripte kopieren wir für die weiteren Schritte in das Konfigurationsverzeichnis von OpenVPN:

Beim aktuellen Raspbian Jessie liegen diese Scripte unter “/usr/share/easy-rsa/”:

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

Beim Vorgänger Raspbian Wheezy finden sich die Scripte noch unter dem Pfad “/usr/share/doc/openvpn/examples/easy-rsa/2.0”:

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

 


Schritt 3

Bevor die Zertifikate und Schlüssel erstellt werden können, müssen die Grundeinstellungen angepasst werden. Dies geschieht in der Datei “/etc/openvpn/easy-rsa/vars”. Dort muss folgende Zeile geändert werden:

Zeile 15:

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

Zeile 53 (optional):
Wer möchte, kann die Standard-Schlüssellänge (1024 Bit) erhöhen:

export KEY_SIZE=1024
 export KEY_SIZE=2048

 


Schritt 4

Nun wechseln wir in das easy-rsa Verzeichnis und melden uns als Root an. Die Datei mit den Grundeinstellungen muss für die weiteren Konfigurationsschritte in die Umgebungsvariablen aufgenommen werden:

$ cd /etc/openvpn/easy-rsa
$ sudo su
$ source vars

Außerdem muss für easy-rsa noch die openssl.cnf angelegt werden, was wir einfach mit einem symbolischen Link erledigen:

$ ln -s openssl-1.0.0.cnf openssl.cnf

 


Schritt 5

Mit den bereitliegenden Scripten können wir nun die Zertifikate und Schlüssel des OpenVPN Zugangs generieren.
 
CA-Zertifikat und CA-Schlüssel
Dabei werden wir zu Beginn nach dem Land gefragt, das abgekürzt angegeben werden muss (z.B. DE = Deutschland). Alle weiteren Angaben sind für OpenVPN nicht relevant und können einfach bestätigt werden:

$ ./clean-all
$ ./build-ca OpenVPN

 
Zertifikat und Schlüssel für den Server
Hierbei kann das “Challenge Password” einfach leer gelassen werden. Am Ende muss noch zwei mal mit “Y” bestätigt werden, um die Datenbank zu aktualisieren:

$ ./build-key-server server

 
Zertifikat und Schlüssel für die Benutzer
Für jeden VPN-Benutzer muss ein Zertifikat + Schlüssel angelegt werden, was nach dem gleichen Prinzip wie beim Server erfolgt. Auch hier muss am Ende noch zwei mal mit “Y” bestätigt werden. Alle weiteren Angaben sind für OpenVPN nicht relevant und können einfach wieder bestätigt werden:

$ ./build-key client1
$ ./build-key client2
$ ./build-key client3
...

Bzw. wenn die Benutzer-Schlüssel mit einem Passwort gesichert werden sollen, muss stattdessen folgender Befehl verwendet werden. Das Passwort muss dann bei jeder VPN-Anmelden eingegeben werden:

$ ./build-key-pass client1
$ ./build-key-pass client2
$ ./build-key-pass client3
...

 
Diffie-Hellman-Parameter
Zum Abschluss der Zertifikat- und Schlüsselerstellung müssen noch die Diffie-Hellman-Parameter für den sicheren Schlüsselaustausch generiert werden. Dieser Vorgang kann einige Zeit dauern:

$ ./build-dh
$ exit

 


Schritt 6

Nachdem alle Zertifikate und Schlüssel erzeugt wurden, muss noch die Konfigurationsdatei für den OpenVPN-Server erstellt werden:

$ sudo vi /etc/openvpn/openvpn.conf

In diese Datei fügen wir anschließend folgenden Inhalt ein:

Anmerkung: Ich habe in meinem Fall den Port auf dem der OpenVPN Deamon lauscht auf Port 443 (anstatt 1194) geändert. Das hat den einfachen Grund, dass in öffentlichen Netzen oftmals der Großteils der Ports gesperrt ist. Mit dem HTTPS-Port 443 kann man dieses Problem meist erfolgreich umgehen.

dev tun
proto udp
port 1194
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
# WICHTIG: Hier die Datei entsprechend der Schlüssellänge (Schritt 3) eintragen
dh /etc/openvpn/easy-rsa/keys/dh2048.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 bypass-dhcp"
push "dhcp-option DNS 85.214.20.141"
push "dhcp-option DNS 8.8.8.8"
log-append /var/log/openvpn
comp-lzo

 


Schritt 7

Um als Client über den OpenVPN-Server Internetzugriff zu erhalten, muss mittels iptables eine entsprechende Weiterleitung eingerichtet werden. Damit diese Einstellungen auch nach einem Neustart alle erhalten bleiben, habe ich diesen Schritt komplett in ein Startscript unter “/etc/init.d/rpivpn” ausgelagert. Das Script hat folgenden Inhalt:

#! /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 initialisation script
### END INIT INFO
echo 'echo "1"  > /proc/sys/net/ipv4/ip_forward' | sudo -s
sudo iptables -A INPUT -i tun+ -j ACCEPT
sudo iptables -A FORWARD -i tun+ -j ACCEPT
sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Nachdem das Startscript angelegt wurde, müssen noch die Rechte angepasst und das Script in den einzelnen Runleveln aktiviert werden. Anschließend führen wir das Startscript erstmalig von Hand selbst aus und können dann den OpenVPN-Server starten:

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

So, der schwerste Teil wäre damit nun geschafft. Der VPN-Server läuft nun und wartet auf Verbindungen von den Clients.

 


Schritt 8

Um zum VPN-Server eine Verbindung aufbauen zu können, müssen die erforderlichen Zetifikate und Schlüssel für jeden Benutzer als Paket zusammengestellt werden. Diese liegen im Verzeichnis “/etc/openvpn/easy-rsa/keys/” bereit. Zusätzlich erstellen wir zur einfacheren Einrichtung des VPN-Clients noch eine Konfigurationsdatei. Ich zeige den ganzen Ablauf exemplarisch für Client 1, für die anderen Benutzer verläuft der Vorgang jedoch analog.

Dazu müssen wir wieder zu Root wechseln, um auf die erzeugten Schlüssel zugreifen zu können. Im Verzeichnis “/etc/openvpn/easy-rsa/keys” erstellen wir die neue Konfigurationsdatei für den Client:

sudo su
cd /etc/openvpn/easy-rsa/keys
vi client1.ovpn

Die Datei “client1.ovpn” sollte folgenden Inhalte haben, lediglich x.x.x.x muss durch die IP des eigenen VPN-Servers ersetzt werden:

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

Anschließend packen wir diese Konfigurationsdatei und die dazugehörigen Zertifikate und Schlüssel in eine Zip-Datei, passen die Rechte an und verlassen den Root-Modis wieder:

zip /home/pi/raspberry_client1.zip ca.crt client1.crt client1.key client1.ovpn
chown pi:pi /home/pi/raspberry_client1.zip
exit

Die erstellte Zip-Datei “raspberry_client1.zip” kann nun, z.B. mit scp, auf den Client-Rechner übertragen werden und anschließend zur Einrichtung des OpenVPN Clients genutzt werden.

Meine Empfehlungen waren hilfreich?
Dann sag einfach "Danke" mit einem Kaffee!

Kaffee spendieren


Note: There is a rating embedded within this post, please visit this post to rate it.
 

Zur normalen Version dieser Seite

Impressum | Datenschutz

Die mobile Version verlassen