Die Anleitung funktioniert aber genauso mit einem Debian-Linux oder Ubuntu.
Erst mal eine Root-Shell öffnen und alles auf den neuesten Stand bringen:
sudo -s
apt-get update
apt-get upgrade
Dann den OpenVPN Server und ein Tool zum generieren der nötigen Schlüssel installieren:
apt-get install openvpn
apt-get install easy-rsa
easy-rsa benötigt ein wenig Konfiguration:
sudo make-cadir /etc/openvpn/easy-rsa
Damit wurden die Konfigurationsdaten kopiert, wir müssen uns nur noch für die richtige openssl-Version entscheiden und die entsprechende Datei umbennen:
cd /etc/openvpn/easy-rsa
mv openssl-1.0.0.cnf openssl.cnf
Nun mittels nano die Datei vars ändern. Also nano vars
ausführen und die Zeile
export EASY_RSA="`pwd`"
so ändern:
export EASY_RSA="/etc/openvpn/easy-rsa"
Wer Lust hat, kann auch noch die Angaben für den Ort, Firma usw. ändern, aber das ist nicht unbendingt nötig:
export KEY_COUNTRY="AT"
export KEY_PROVINCE="Vienna"
export KEY_CITY="Vienna"
export KEY_ORG="tethis IT"
export KEY_EMAIL="support@tethis-it.at"
export KEY_OU="VPN"
Speichern und verlassen mit STRG-o, Return und STRG-x
Jetzt können wir die Skripte benutzen um Schlüssel zu generieren. Eine genaue Erklärung der Schritte findet sich in der OpenVPN Dokumentation.
source ./vars
./clean-all
./build-ca
Jetzt kommen ein paar Fragen. Was man da eingibt ist eigentlich egal, einfach mehrmals Return drücken ist ok.
./build-key-server Server
Anstelle von “Server” könnt Ihr auch irgendwas anderes benutzen. Merkt es Euch, denn jetzt kommen ein paar Fragen. Nur die folgenden sich dabei wichtig:
Common Name (eg, your name or your server's hostname) [Server]:
=> einfach Return drücken
A challenge password []:
=> einfach Return drücken
Sign the certificate? [y/n]: y
1 out of 1 certificate requests certified, commit? [y/n] y
Nun erzeugen wir je einen Schlüssel für alle Benutzer, die das VPN nutzen wollen. Hier heißt er beispielhaft “user” und bekommt das Passwort “password”
./build-key-pass user
Enter PEM pass phrase:
=> password + Return
Verifying - Enter PEM pass phrase:
=> password + Return
Die folgenden Fragen einfach mit Return beantworten. Wer Lust hat, kann die E-Mail-Adresse ändern, aber das Challenge Passwort MUSS leer bleiben und die beiden letzten Fragen werden mit y beantwortet:
A challenge password []:
=> einfach Return drücken
Sign the certificate? [y/n]: y
1 out of 1 certificate requests certified, commit? [y/n] y
Jetzt noch die DES3-Version dieses Schlüssels erzeugen (für Handys nötig):
cd keys
openssl rsa -in user.key -des3 -out user.3des.key
Man wird zuerst nach der pass phrase von oben gefragt, danach muss man zwei mal eine neue pass phrase eingeben. Einfach drei mal das oben festgelegte “password” eingeben.
Dann brauchen wir noch Schutz gegen Denial-of-Service Attacken und einen Diffie-Hellmann-Key:
cd /etc/openvpn/easy-rsa
openvpn --genkey --secret keys/ta.key
./build-dh
Das dauert. Geht euch ein, zwei Tassen Kaffee holen, oder macht einfach in einem zweiten Putty Fenster weiter, bis Ihr an den Punkt kommt, wo der Raspi rebootet werden muss.
Der OpenVPN Server braucht eine Konfiguration.
Meine Vorlage dazu gibt es hier: server.conf
nano /etc/openvpn/server.conf
Dann den Inhalt der Vorlagen hier hinein kopieren (Strg-C auf der Webseite, dann rechts-klick im nano Fenster).
Es müssen einige IP Adressen angepasst werden. An diesen Stellen sind in der Datei GROSSGESCHRIEBENE Kommentare.
Danach die Daten mit Strg-O und Strg-X speichern.
Jetzt kümmern wir uns um den Linux-Kernel und die Firewall.
Erst mal dem Kernel erlauben, überhaupt Netzwerkpakete weiterzuleiten:
nano /etc/sysctl.conf
Das ‘#’ am Anfang der Zeile #net.ipv4.ip_forward=1
entfernen.
Die Datei mit Strg-O und Strg-X speichern.
sysctl -p
macht die Änderung wirksam.
Um eine Ausnahme für die Firewall einzurichten, geben wir folgendes ein:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT –to-source 192.168.XX.XX
Dabei die IP Adresse am Ende durch die IP Adresse des Raspberry ersetzen.
Mit iptables -L -t nat kann man sich ansehen, ob das funktioniert hat. Es sollte etwas wie folgt angezeigt werden:
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all — 10.8.0.0/24 anywhere to:192.168.178.56
Dummerweise geht die Regel beim nächsten Boot wieder verloren, also müssen sie noch permanent machen:
apt-get install iptables-persistent
iptables-save > /etc/iptables/rules.v4
Damit ist der Server fertig!! Fehlt nur noch ein Reboot:
reboot
Nun wieder dem Raspberry verbinden, sudo su -
und nun den OpenVPN Server starten
systemctl start openvpn@server
systemctl enable openvpn@server