Vor kurzen hab ich wieder das Thema OpenVPN Server mit dem Raspberry PI aufgenommen.
Der laufende VPN-Server lief nur mit einem OpenVPN-Client, auf dem Android Smartphone.
Dh. ich konnte kein iPhone , kein iPad, kein Windows 8 nutzen.
Zielvorgabe für OpenVPN
Nun hab ich einen virtuellen Server aufgebaut mit ubuntu als „KVM“ Maschine, mit dem Ziel einen VPN-Server lauffähig installiert zu bekommen mit folgenden Clients:
- Android Smartphone
- iPhone mit IOS 7/8/9
- iPad mit IOS7/8/9
- Windows 8/8.1/8.1Pro/10
Die Ausstattung
- FritzBox ( in meinem Fall eine 7390)
- Raspberry PI mit 2013-12-20-wheezy-raspbian.zip
- iTunes OpenVPN für iPhone
- Google Play Store OpenVPN Connect für Android
- Windows 8 OpenVPN Client -> zum Download hier klicken
Beginnen wir mit der Installation auf dem Raspberry PI:
Ohne ROOT geht gar nix und macht vieles einfacher
sudo -s
Installation OpenVPN Server Software
apt-get install openvpn
cd /etc/openvpn cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0 ./easy-rsa
cd easy-rsa nano vars
Anpassung von der Datei „vars“
# This variable should point to # the openssl.cnf file included # with easy-rsa. export KEY_CONFIG=$EASY_RSA/openssl-1.0.0.cnf
Erhöhung der Sicherheit kann nicht schaden, in „vars“ editieren
# Increase this to 2048 if you # are paranoid. This will slow # down TLS negotiation performance # as well as the one-time DH parms # generation process. export KEY_SIZE=2048
Anpassung der eigenen Parameter die aber nicht funktionsrelvant sind
# These are the default values for fields # which will be placed in the certificate. # Don't leave any of these fields blank. export KEY_COUNTRY="DE" export KEY_PROVINCE="BY" export KEY_CITY="Muenchen" export KEY_ORG="myserver.org" export KEY_EMAIL="1234@web.de" export KEY_EMAIL=1234@web.de export KEY_CN="myserver.org" export KEY_NAME="Max Muster" export KEY_OU=changeme export PKCS11_MODULE_PATH=changeme export PKCS11_PIN=1234
Serverzertifikate generieren
source ./vars ./clean-all ./build-dh ./build-ca ./build-key-server server
Server Konfiguration
nano /etc/openvpn/server.conf
Erstellen der Konfigurationsdatei
push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" push "topology subnet" topology subnet route 10.8.0.0 255.255.255.0 keepalive 10 120 comp-lzo user nobody group nogroup persist-key persist-tun
IPTable für Weiterleitung und SNAT einrichten
Damit die Clients Internetzugriff haben müssen jetzt noch ein paar iptables Regeln erstellt werden. Sonst haben die Client nur Zugriff auf das Subnetz 10.8.0.0/24 .
sysctl -w net.ipv4.ip_forward=1 iptables -A FORWARD -o eth0 -i tun0 -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Wir Starten den VPN-Server
service openvpn restart
Dauerhaft starten beim Ein- und Ausschalten des Raspberry PI
sudo update-rc.d openvpn defaults
Prüfen ob Interface richtig konfiguriert und gestartet ist
ip add show
Clientzertifikate erstellen
Es werden jeweils für jeden Client ein eigenes Zertifikat erstellt.
- für Android
- für iPhone
- für Windows 8 / Windows 10
Es reicht aus nur ein Client Zertifikat erstellen um die Funktion zu testen. Die zusätzlichen Zertifikate können später erstellt werden je nach Gebrauch.
./build-key android ./build-key iPhone ./build-key windows8 ./build-key windows10
Erstellung Client Konfigurationsfile „android.ovpn“
client remote dyndsnclientname.myserver.org ca ca.crt cert android.crt key android.key comp-lzo yes dev tun proto udp nobind auth-nocache script-security 2 persist-key persist-tun
Folgende 4 Dateien auf das Android Smartphone kopieren
- android.ovpn
- ca.crt
- android.crt
- android.key
OpenVPN auf dem Smartphone starten und Datei „android.ovpn“ importieren
FERTIG
Hier eine funktionierende Port Weiterleitung für OpenVPN für eine Fritzbox.
Wichtig : Es darf in der Fritzbox kein VPN aktiviert sein.
Ein kleines Video in Englisch was die Eingaben in der Raspberry PI Konsole zeigt:
Einfach, aber die Datei Android.ovpn ist nirgends zu finden.
Hallo,
Die Datei musst Du erstellen mit dem Namen und dann auf das Android Smartphone kopieren.
Hallo Joachim,
super Anleitung! Wie kann man es denn machen, dass alles nach einem Neustart des Raspi erhalten bleibt?
Vielen Dank und viele Grüße
Michael
Hallo Michael
Freut mich dass der Artikel Dir helfen konnte.
Nun ich nehme an Du meinst dass beim Einschalten des Raspberry PI der VPN-Server automatisch mit gestartet wird richtig?
Dann gibst Du folgenden Befehl ein:
sudo update-rc.d openvpn defaults
Hierzu muss ein Startscript unter /etc/init.d/openvpn vorhanden sein.
Herzliche Grüße , Joachim
Hallo Joachim,
leider geht es bei mir nicht. Ich habe es jetzt schon mehrmals Versucht nur leider beim Starten den VPN-Servers kommt die Fehlermeldung:
[FAIL] Starting virtual private network daemon: server failed!
Vielleicht hättest noch an Tip.
Danke
MFG
Christian
Hallo Michael,
habe soweit alles befolgt. Nutze den Raspberry über WLAN. Hier die Frage: Ohne OpenVPN habe ich eine feste Netzwerk IP 192.168.2.23 vergeben. Mit dieser konnte ich mich im Netzwerk per SSH und Port 22 auf den Pi schalten. Nach Installation VPN wird dem Pi die Adresse 10.8.0.1 zugewiesen. Nun bekomme ich auf PING 10.8.0.1 keine Antwort und die SSH Verbindung funktioniert auch nicht mehr. Muß ich nun ausschließlich übers Internet mit der getunnelten Verbindung arbeiten. Die Fragen mögen komisch klingen aber ich bin noch ein Anfänger in der Materie.
Vielen dank für eine Antwort
MfG Uwe
Hallo Uwe
Du kannst den Raspberry nur mit der 10.8.0.1 anpingen wenn Du bereits per VPN verbunden bist.
Dein lokaler Rechner von dem Du aus den VPN-Client startest kennt das Netzwerk nicht.
Erst beim Verbinden werden Routen, virtuelles Interface mit 10.8.0.2 angelegt.
Vorher sind keinerlei Routen angelegt und woher soll Dein Rechner wissen wo das Netzwerk
10.8.0.0 ereichbar ist.
Hoffe dass ich Dir damit helfen konnte.
Grüße , Joachim
Hallo Joachim,
zunächst große Lobs für die super Anleitung. Sowas habe ich vergeblich gesucht. Dennoch habe ich noch Netzwerkstechnisch Verstädnisfragen:
Vorab; ich bin absoluter Anfänger also berücksichtige bitte meine dumme Fragen 🙂
1-
Bei „Serverzertifikate generieren“ verstehe ich diese Zeile nicht:
./build-key-server my server.org
was muss ich anstelle „my server.org“ angeben?
2-
Muss die Raspberry PI nicht mitglied meines Netzweks sein?
Also sie bekommt die Adresse (zb) 192.168.178.10 statt 10.8.0.0?
Denn er kann nur eine Adresse aus meiner Subnetz bekommen, die auch der Fritz-Router vergeben kann. Oder denke ich hier falsch?
3-
Muss ich bei der IPTABLE & FORWORDING dem VPN-server sagen, welche IP aus meiner Subnetz er an die VPN-Clients vergeben darf.?
Denn wenn die Clients die Adressen 10.8.0.6, 10.8.0.7, 10.8.0.8, (…) bekommen dann haben sie keinen Zugriff im Internen Netz oder?
ICh werden zB meine SynologyNAS der ja die Adresse 192.168.178.55 hat nicht sehen können. Oder wie kann ich das verstehen?
4-
Bei <>
Hier hast du den Befehl: remote dyndsnclientname.myserver.org
Muss ich wircklich die Adresse im Format subdomain.DynDNS.com angeben
Also IP-Adresse-Raspberry.DynDNS.com z.B [192.168.178.10.DynDNS.com]
5-
Was ist mit der Portweiterleitung? Oder über welche Port wird der Tunel durch Fritz-Router in meinem Netzwerk ausgebaut?
Mein Ziel ist eigentlich ein OpenVPN über mein Raspberry aufzubauen. Zurzeit haben ich folgende Konfiguration.
Fritzbox WAN-Adresse ==> Zodiac.DynDNS.com
Fritzbox Gateway ==> 192.168.178.1
Raspbery-PI ==> 192.168.178.10/24 (static)
Synologyy ==> 192.168.178.55/24 (static)
Ich hoffe Du kannst mir beim Verstehen helfen
Gruß
Gerd W.
Hallo Gerd
zu 1.)
./build-key-server server01 kannst Du benennen wie Du möchtest, es geht hier nur darum ein Server-Keypaar zu erstellen.
Hier ein kleiner Überblick
ca.crt Server + Clients Root CA Zertifikat
ca.key Root CA Schlüssel
dh{Wert}.pem Server Diffie Hellman
server.crt Server Server Zertifikat
server.key Server Server Schlüssel
vpnclient01.crt Client 1 Client 1 Zertifikat
vpnclient01.key Client 1 Client 1 Schlüssel
2.) Bei UNIX gibt es keine Mitgliedschaft in einem Netzwerk wie man es von Windows kennt. Da gibt es nur IP-Adressen und Netzwerk Interfaces.
eth0 Link encap:Ethernet Hardware Adresse XXXX
inet Adresse:192.168.1.100 Bcast:192.168.1.255 Maske:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1
RX packets:10301766 errors:0 dropped:865150 overruns:0 frame:0
TX packets:5177390 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:1000
RX bytes:264875736 (252.6 MiB) TX bytes:1340897873 (1.2 GiB)
tun0 Link encap:UNSPEC Hardware Adresse 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet Adresse:192.168.0.1 P-z-P:192.168.0.1 Maske:255.255.255.0
UP PUNKTZUPUNKT RUNNING NOARP MULTICAST MTU:1500 Metrik:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Dass Interface „tun0“ wird erzeugt und erstellt wenn OpenVPN gestartet wird und korrekt fehlerfrei konfiguriert ist.
3.) Du musst lediglich dieses Befehl ausführen, oder diesen in ein Shell-Script verpacken:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT –to 192.168.1.100
iptables –list PREROUTING -t nat
iptables –list POSTROUTING -t nat
Empfehlung hier : Arbeite mit 192.168.xxx.xxx Adressen und nicht mit 10.xxx IP-Adressen. Es ist einfacher zu verstehen. SNAT ist Source-NAT dh. die Source-IP-Adressen werden für VPN nicht verändert wie bei NAT. Die 192.168.1.100 ist bei Dir die 192.168.178.10.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT –to 192.168.178.5 Fertig !
4.) Nein Du musst diese nehmen : Zodiac.DynDNS.com, das Internet kennt deinen Raspberry nicht und wird ihn auch nicht kennen. Erst eine VPN-Verbindung macht Deinen Raspberry PI erreichbar.
Bedenke wenn die IP-Adresse der Interface „tun0“ nicht da ist kannst Du den Raspberry PI nicht „pingen“. Erst bei einer erfolgreichen VPN-Verbindung kannst Du dieses Interface „pingen“.
5.) Du benötigst für den Aufbau nur 2 IP-Adressen :
Fritzbox WAN-Adresse ==> Zodiac.DynDNS.com
Raspbery-PI ==> 192.168.178.10/24 (static)
Alles andere ist irrelevant. Versuch erst mal eine erfolgreiche Verbindung hinzubekommen.
Zur Fritzbox Weiterleitung hab ich Dir einen Screenshot erstellt. Es muss unbedingt das Protokoll UDP aktivert sein, denn TCP geht nicht.
https://www.evernote.com/l/AAHC5h2QUZtHm6CkEiqviBiMwlVurkJBP7g
Viel Erfolg und wenn es Fragen gibt einfach nochmal melden.
Grüße Joachim
Hallo
habe nach deiner Anleitung installiert.
doch nun kommt beim starten
root@nuclear:/etc/openvpn/easy-rsa# service openvpn start
[FAIL] Starting virtual private network daemon: server failed!
root@nuclear:/etc/openvpn/easy-rsa# logout
pi@nuclear /etc/openvpn/easy-rsa $ service openvpn start
[FAIL] Starting virtual private network daemon: server failed!
pi@nuclear /etc/openvpn/easy-rsa $
meine server conf
IP raspi 192.168.170.5
push „dhcp-option DNS 8.8.8.8“
push „dhcp-option DNS 192.168.100.8“
push „topology subnet“
topology subnet
route 192.168.170.5 255.255.255.0
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
gibt es da ein tip.
logs sagen nichts
Deine IP-Adresse ist falsch. Du brauchst ein Subnetz.
push „topology subnet“
topology subnet
route 10.8.0.0 255.255.255.0
keepalive 10 120
Übernehmen die IP-Adressen wie sie im Beispiel angegeben sind 1:1 dann klappt es auch mit dem Start.
Grüße Joachim
Hey,
erstmal herzliches Dankeschön für das Tutorial!
Ich bekomme die Datein nicht so auf das iPhone wie es die App haben will.
Die Ovpn Datei Reicht nicht.
Aus Drive läst sich die ovpn nicht starten.
Das rein kopieren der ca usw in die ovpn datei schaff ich nicht ohne Fehler.
Könnten Sie das Bitte auch noch erklären! 🙂
Hallo Herbert
mangels iPhone kann ich das nicht mehr erklären. Eventuell gibt es einen Leser der Dir helfen kann.
Beste Grüße , Joachim
Hallo Joachim,
vielen Dank für diesen BLOG. Nun ist dieser ja schon etwas älter, und das BS ist nicht mehr aktuell.
Ich bin dabei, einen RasPi als OpenVPN einzurichten, so dass die Familie hierüber sicher ins Internet können, auch wenn sie in einem öffentlichem Netz sind. Da ich durch einen Providerwechsel nun auch einen Upload habe, den man hierfür nutzen kann, dachte ich dabei an einen Pi. Auf der Suche nach einer guten Anleitung habe ich nun schon hunderte Seiten durchforstet, jedoch wollte nie eine wirklich funktionieren.
In wie weit, muss die obige Installation angepasst werden, damit sie auch unter dem neuem BS läuft?
Ist es auch möglich, dass ich meine IPv6 Adressen nutze, und dennoch aus einem IPv4 Netz alles erreichen kann?
Es existiert bereits ein A- und ein AAAA-Record bei einem DynDNS – Anbieter für einen Hostnamen, somit habe ich einen festen DNS Eintrag für beide Möglichkeiten.
Geht so etwas überhaupt?
Hallo Achim
Danke für Deinen Kommentar hier.
Schau Dir mal diese Anleitung an :
https://www.kuketz-blog.de/pivpn-raspberry-pi-mit-openvpn-raspberry-pi-teil3/
Die Installation selbst geht wirklich sehr einfach:
curl -L https://raw.githubusercontent.com/pivpn/pivpn/master/auto_install/install.sh | bash
Damit hab ich mir ebenfalls 2 VPN Server installiert. Einen mit TCP und einen anderen mit UDP.
Und die Raspberry Pi sind jetzt keine Pi 3 sondern nur Pi 2 und es funktioniert bestens.
Viel Erfolg und Grüße , Joachim
Hallo Joachim,
vielen Dank für Deine schnelle Reaktion.
Ich kann bestätigen, dass die Installation relativ einfach ist. Auch mir gelingt nun, dass ich mich aus dem mobil-Netz (GSM) einloggen kann. Wenn ich dies jedoch aus dem eigenem Netz versuche, bekomme ich keine Antwort vom Server. Mein Heimnetz hat nur IPv6.
Muss ich bei der Nameserverkonfiguration etwas beachten?
Ich habe bei der Installation vier DNS Adressen angegeben, 2 als IPv4, und 2 als IPv6 (mit Komma getrennt), in der Bestätigung zeigte er mir nur die IPv4 DNS-Nameserveradressen.
Hallo Achim
das Thema IPV6 ist nicht so einfach und ich kenne Deine Firewall und Router Konfiguration nicht im Detail.
Was ich hierzu gefunden habe, eventuell hilft dass bei der Fehlersuche:
https://www.bjoerns-techblog.de/2017/07/openvpn-und-ipv6/
Sorry aber da kann ich Dir wirklich nicht weiter helfen.
Viel Erfolg und Grüße , Joachim