Raspberry Pi: OpenVPN VPN-Client installieren
Wer etwas anonymer durch das Internet surfen möchte, der wird schnell darauf kommen, einen VPN-Tunnel hierfür zu benötigen. Dieser leitet den Datenverkehr verschlüsselt über einen dritten Server um, sodass die eigene IP-Adresse nicht ohne weiteres für Webseitenbetreiber herausfindbar ist. Einige Leser wünschten sich auch einen VPN-Client für den Raspberry Pi. Da der OpenVPN Standard für VPN-Server weit verbreitet ist, erkläre ich im Folgenden wie man auf dem Raspberry Pi einen OpenVPN VPN-Client installiert und einrichtet.
Für diesen Zweck stellte mir der VPN Anbieter Perfect Privacy VPN einen Zugang zu dessen Dienst bereit, den ich im folgenden Artikel zur Einrichtung als Beispiel verwenden werde. Der nicht gänzlich unbekannte Anbieter wirbt mit AES 256 Bit verschlüsselten Verbindungen, zensurfreien VPN-Servern in momentan 22 Ländern, Kaskadierung der VPN-Server (Multi-Hop VPN genannt), keine Log-Dateien sollten mitgeschrieben werden und der Traffic ist unbeschränkt. Ein solcher Service hat natürlich seinen Preis, wobei mich die Geschwindigkeitsperformance von Perfect Privacy VPN, im Gegensatz zu manch anderem VPN-Anbieter auf dem Markt, überzeugen konnte.
Voraussetzung: Raspbian oder vergleichbare Distribution installiert
Zunächst müssen wir OpenVPN mittels des Paketmanagers APT installieren.
sudo apt-get install openvpn
Nun sollten wir unter /etc/openvpn einen Ordner (servers genannt) anlegen in dem alle OpenVPN Konfigurationsdateien, Schlüssel und Zertifikate unseres VPN-Providers abgelegt werden. Dazu legen wir einen eigenen Ordner an, da dies je nach Anbieter und verfügbarem Server mehrere sein können.
cd /etc/openvpn
sudo mkdir servers
cd servers
Im Falle von Perfect Privacy VPN findet man als eingeloggter Benutzer unter Download > Linux die ppConfig_linux.zip, welche alle benötigten Daten enthält. Diese kann nur aus dem Browser heruntergeladen werden und die entpackten Dateien sollten mittels einen SFTP Clients (bspw. WinSCP) auf den Raspberry Pi in das Verzeichnis /etc/openvpn/servers übertragen werden.
Jetzt müssen wir die passende Konfigurationsdatei (Endung .ovpn), die Zertifikate und den Schlüssel verlinken, sodass diese Standardkonfiguration verwendet wird. Bei vielen VPN-Providern, genauso wie bei Perfect Privacy VPN, sind die Dateien nach Standort benannt. Im Beispiel verwende ich einfach die Konfiguration Amsterdam.ovpn und dazu gehörige Dateien.
sudo ln -s /etc/openvpn/servers/Amsterdam.ovpn /etc/openvpn/client.conf
sudo ln -s /etc/openvpn/servers/Amsterdam_cl.crt /etc/openvpn/Amsterdam_cl.crt
sudo ln -s /etc/openvpn/servers/Amsterdam_cl.key /etc/openvpn/Amsterdam_cl.key
sudo ln -s /etc/openvpn/servers/Amsterdam_ta.key /etc/openvpn/Amsterdam_ta.key
sudo ln -s /etc/openvpn/servers/ca.crt /etc/openvpn/ca.crt
Sofern wir zu einem späteren Zeitpunkt die Konfiguration austauschen möchten, müssen wir folgendes Kommando ausführen, um die Verlinkung zu entfernen, einen neuen Link zu setzen und OpenVPN neu zu starten (siehe weiter unten).
sudo rm /etc/openvpn/client.conf
sudo rm /etc/openvpn/Amsterdam_cl.crt
sudo rm /etc/openvpn/Amsterdam_cl.key
sudo rm /etc/openvpn/Amsterdam_ta.key
sudo rm /etc/openvpn/ca.crt
Sofern wir nicht jedes mal beim Start von OpenVPN den Benutzernamen und das Passwort eingeben möchten, falls von VPN-Provider benötigt, können wir diese Zugangsdaten noch in eine Datei ablegen (Benutzername und Passwort je in eine Zeile). In dem Editor nano kann man mittels STRG + X, Y und Enter speichern.
sudo nano /etc/openvpn/auth.data
SuperNutzerName DasStr3ngG3heime*Passwort
Anschließend müssen wir in der in Step 3 verlinkten Konfigurationsdatei noch angeben, dass diese Zugangsdaten verwendet werden sollen. Dies können wir bewerkstelligen indem wir folgende Zeile am Ende der Datei einfügen.
sudo nano /etc/openvpn/client.conf
auth-user-pass /etc/openvpn/auth.data
Abschließend müssen wir OpenVPN starten, damit die Verbindung zum OpenVPN Provider hergestellt wird.
sudo /etc/init.d/openvpn start
Der Raspberry Pi sollte sich nun mit dem VPN-Provider verbunden haben und der Traffic sollte darüber umgeleitet werden. Wie man die öffentliche IP-Adresse überprüft und OpenVPN auch wieder ausschaltet, erkläre ich noch im Folgenden.
Möchte man die Kommunikation mit dem Internet nicht mehr oder wieder über den VPN-Server laufen lassen, so kann man dies mit folgenden Kommandos bewerkstelligen.
Aktueller Status
sudo /etc/init.d/openvpn status
Stoppen
sudo /etc/init.d/openvpn stop
Starten
sudo /etc/init.d/openvpn start
Zumindest bei der Einrichtung sollte man überprüfen ob die Verbindung zum VPN-Server ordentlich hergestellt wurde. Über folgendes Kommando kann man sich die öffentliche IP-Adresse anzeigen lassen. Wenn diese nach dem Einschalten von OpenVPN eine andere Adresse ist, kann man davon ausgehen, dass der Dienst ordentlich läuft. Zu beachten ist, dass es nach dem Start von OpenVPN ein paar Sekunden dauern kann bis die Verbindung hergestellt ist.
wget -qO- http://ipecho.net/plain ; echo
34 Kommentare. Hinterlasse eine Antwort
Was für einen Download/Upload Speed mit AES 256 (128) schafft den der pi auf deiner Leitung so?
Frage zu einer Lösung: Ich habe vor längerer Zeit erfolgreich einen OpenVPN Server sowie einen DHCP Server per DNSMASQ auf der Pi in Betrieb genommen. Nun möchte ich aus dem heimischen Netz eine VPN Verbindung zu einer anderen PI etablieren, ohne dass ich jedes mal auf dem Client eine OpenVPN Verbindung manuell herstellen muss. Kann ich eine OpenVPN Client Verbindung zu dem vorhandenen OpenVPN Server konfigurieren, der mich mit der „anderen“ Pi verbindet? Wenn ich aber von außen mit dem heimischen OpenVPN Server verbunden bin, darf der Traffic aber nicht automatisch an die externe Pi weitergeleitet werden. Es soll nur weiter geleitet werden, wenn ich Anfragen aus dem heimischen Netz, die per Routing über Clients stattfinden, an eine spezielle IP-Range schicke. Ist das möglich oder muss ich das über eine weitere Pi konfigurieren, damit Server und Client Funktion nicht auf der selben Pi stattfinden?
hi,
habe einen funktionierenden client mit dem ich eine verbindung zu einem externen vpn dienstleister erstellen und nutzen kann.
zusätzlich habe ich einen funktionierenden openvpn server, mit dem ich mit per handy in „mein“ vpn einwählen kann.
wie bekomme ich es hin, das ich meinen raspberry/ bananapi per vpn client an den externen anbieter hängen kann und gleichzeitig von außen per handy in mein vpn komme?
habe das bereits per dyndns über noip versucht, aber es klappt einfach nicht. scheinbar finde ich nicht die entsprechenden iptables. oder könnte das ein hardware problem sein? HAbe einen speedport w504v.
vielleicht hast einen denkansatz /lösung 🙂
Danke !
ich hab nach TAGEN das mal zum Laufen gebracht. Das Ergebnis ist erschütternd: 120kb/sec schafft OpenVPN, bei angeblich 35% CPU-Auslastung. Das deckt sich mit Versuchen auf meiner NAS, Abschalten der Verschlüsselung holt nur ein paar kb raus. Es liegt NICHT wie so oft erwähnt an der USB-Anbindung der Netzwerkschnittstelle. Die schafft im Pi _deutlich_ mehr als 120kb/sek! Die Internetleitung schafft übrigens 7Mbit, und genau das schafft beispielsweise mein 2008er Server als VPN-Server. Davon abgesehen war VPN dort auch in unter 30 Minuten eingerichtet… achja…nach nem Reboot vom Pi funktioniert das Routing nicht mehr, allen Versuchen und Anleitungen zum Trotz. Linux und ich werden NIE Freunde! So viel Zeit hab ich nicht…
Bei mir startet openvpn immer automatisch bei jedem Neustart, gibt es eine Möglichkeit diesen Autostart zu verhindern?
Mittels des folgenden Kommandos sollte dies möglich sein.
sudo update-rc.d openvpn disable
Danke für den Tipp! Hat geholfen, jetzt startet der Pi auch wieder flotter.
Hallo, ich habe das Problem dass ich nach einigen Stunden (gefühl halber Tag) eine neue IP Adresse bekomme, Ziel ist es aber konstant die selbe zu behalten. Gestartet wird der Openvpn bei mir wie folgt:
sudo openvpn –config ~/vpn/ipvanish-***-***-***.ovpn –keepalive 5 300 –auth-user-pass ~/vpn/auth.txt
Zum Einsatz kommt bei mir das neuste openvpn 2.3.6 , selbst kompiliert, da das ältere, über apt-get verfügbare, „tls-cipher“-Probleme machte und es gar nicht erst zu einer Verbindung kam. Der VPN Anbieter ist http://www.ipvanish.com
Zurück zum Problem. beim sichten der logs fielen mir folgende Zeilen auf die für die Abbrüche verantwortlich sein könnten:
Fri Apr 24 09:54:12 2015 [***-***.ipvanish.com] Inactivity timeout (–ping-restart), restarting
Fri Apr 24 09:54:12 2015 SIGUSR1[soft,ping-restart] received, process restarting
Fri Apr 24 09:54:12 2015 Restart pause, 2 second(s)
Ich hoffte den timeouts mir dem Parameter –keepalive 5 300 beikommen zu können, was aber nicht funktioniert.
Eventuell hast du eine Idee? Würde mich freuen.
Habe jetzt mal den Parameter abgeändert zu –keepalive 1 30 und damit schon ziemlich lange keinen timeout mehr. Vllt des Rätsels Lösung.
Das wirst du nicht verhindern können. Dein DSL-Provider führt in der Regel alle 24 Stunden eine Zwangstrennung und Neuzuweisung der IP-Adresse durch. Daher empfielt sich zum Verbindungsaufbau eine DynDNS Domain.
Das kann nicht der Grund sein. Mein DSL-Router (O2) zeigt an wie lange die aktuelle Verbindung besteht. Daraus wird ersichtlich dass nicht alle 24 Stunden getrennt wird. Das sind mehrere hundert Stunden. Ausserdem hatte ich das Problem unter Windows und Linux Mint (GUI OpenVPN konfiguration) nicht.
Jetzt doch wieder timeout. Bin also immer noch auf der Suche.
Hallo,
habe alles so gemacht wie es da steht. Bekomme immer die Meldung: “
[FAIL] Starting virtual private network daemon: client failed!“
Habe sogar den Pi komplett neu aufgesetzt. Nutzte Raspbian als System. Mit aktuellster Version.
Mir klingt es so als ob eine Konfiguration falsch umgesetzt wurde. Schau doch mal in die Logfiles im Ordner /var/log/. Diese sollte dir genaueren Aufschluss darüber bringen was schief läuft.
Da kommt unteranderem die Meldung: Cannot load CA certificate file ca.crt path ( null) (SSL_CTX_load_verify_locations): error:02001002:system library:fopen:No su ch file or directory: error:2006D080:BIO routines:BIO_new_file:no such file: err or:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib“
Habe dann halt mal händisch die Dateien nur in /etc/Openvpn reinkopiert und dann den Service gestartet. Dann kommt die Meldung nicht, jedoch kann ich mich dann weiterhin nicht mit den VPN verbinden. Es kommt dann keine Abfrage von Benutzername und Kennwort.
Wenn ich dann die Datei mit dem Benutzernamen erstelle und dann noch die Konfigurationsdatei verlinke, kommt wieder die Meldung. Habe wirklich die Anleiutung 1:! umgesetzt.
Die ca.crt deines VPN-Anbieters scheint nicht oder nicht an der im Artikel definierten Stelleauf dem Raspberry Pi zu sein. Ohne diesen Teil ist eine Authentifizierung nicht möglich.
Ich nutze den selben Anbieter wie hier angegeben. Welche Dateien muss ich mit WinSCP in den Ordner /etc/openvpn/Servers kopieren?
Die in Step 3 verlinkten Dateien müssen hochgeladen werden. Inklsive der ca.crt Datei.
Hallo Jan,
erstmal großes Lob an Dich für das ganze hier 😀
Deine Anleitung funktioniert einwandfrei, nur kann es manchmal sein das beim VPN-Anbieter am Server geschraubt wird o.ä. und die Verbindung bricht ab. Wenn man den Raspi nun als Gateway benutzt dann ist man also plötzlich ohne vpn unterwegs ohne es zu merken.
Gibt es eine Möglichkeit den Traffic komplett zu blocken, falls der VPN nicht erreichbar ist?
Habe es schon selbst herausgefunden.
Wer seinen Raspi also als VPN Gateway benutzt und allen anderen Traffic außer über den VPN blocken möchte macht folgendes:
sudo nano /etc/rc.local
und gibt dort über „exit 0“ dies ein :
iptables -I FORWARD ! -o tun0 -s 192.168.XXX.0/24 -j DROP
Wenn ich mich in mein Openelec einlogge, dann bekomme ich die Meldung, dass „sudo“ nicht ausgeführt werden kann, da ich schon root Rechte habe.
Welchen Befehl muss ich denn dann nutzen?
Openvpn konnte ich nur über Kodi installieren und zwar nach
/storage/.kodi/addons/network.openvpn
Ich bin echt am Verzweifeln.
Mit der Struktur von OpenELEC, da dies nicht auf Debian basiert, kenne ich mich leider nicht so gut aus und kann dir deswegen leider nicht helfen. Sorry.
Trotzdem Danke. Man kann ja nicht alles wissen. 🙂
Bei Step 3:
wäre es nicht einfacher die genauen speicherorte in der ovpn datei einzutragen und nur diese zu verlinken ?
und irgendwie haut das mit den IPTables nicht hin bei mir, in denen ich einstellen kann, das der RPI nur und ausschließlich über den VPN verbinden kann….
Hat da wer eine Idee. das von Bernd greift etwas zu kurz, wenn ich das System auch nur annähernd verstanden habe.
Das Verlinken erscheint mir als dynamischer.
Hi Jan. Ich versuche schon seit Wochen die eingehende Verbindung auf mein Raspi zu bekommen, leider ohne Erfolg. Ping zu Clienten/zum Server klappt perfekt. Nur kein Ping vom Server zu einem der Clienten. Hast Du das mal gehabt? Kennst ne Lösung?
Habe jetzt Deinen Artikel gefunden. Konnte mir Deinen Artikeln schon viel einrichten. Ich nutze bereits VPN Unlimited von Keepsolid, ist Dir damit die Einrichtung auf dem Rasp auch schon einmal gelungen? Ich würde das gern hier ebenfalls nutzen, allerdings läuft es ja aber als Standalone nicht
Hallo, ich habe einen eigenen VPN Server. Reicht das wenn ich die Zertifikate in /etc/openvpn reinlege? Die Zertifikate sind nicht PW gesichert. Ich habe auch festgestellt, das ich keine *ta.key Datei habe. Brauch ich die???
Vielen Dank
Hallo Jan,
vielen Dank für den Beitrag. Mich würde interessieren ob man noch aus dem lokalen netzwerk auf den PI per samba zugreifen kann solange openvpn läuft. Oder befindet sich der gesamte PI dann in einem anderen entfernten Netz ?
Danke und Gruß
Alex
Danke für die Anleitung. Ich bin auch bei PPrivacy – habe alles so installiert und der OpenVPN läuft auch – aber ich bekomme nur meine ’normale‘ öffentliche IP zu sehen und nicht meine PPrivacy IP Adresse.
Status sagt:
● openvpn.service – OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; enabled)
Active: active (exited) since So 2016-11-13 22:36:02 CET; 5min ago
Process: 527 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 527 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/openvpn.service
Hast Du eine Idee?
LG Chris
Moin Moin und ein gutes neues Jahr.
Ich hadere mit dem Routing Problem mit OPEN VPN. Nachdem ich gestern ziemlich viele Foren durchstöbert habe und div Tests gemacht habe muss ich mich nun doch mit meiner Frage an Dich wenden.
Ich sehe den Wald vor lauter Bäumen nicht mehr.
Situation: Home Netz 192.168.8.x/24
Open VPN Server ist ein Raspi
Zugriff von aussen mit Laptop open VPN ( eigener Client ) ok = sämtliche Clients im 192.168.8.x erreichbar
Zugriff von aussen mit Handy open VPN ( eigener Client ) ok = sämtliche Clients im 192.168.8.x erreichbar
Ferienwohnung:
GSM Router IP 192.168.10.x/24 KEIN STATISCHES ROUTING MÖGLICH
2 tes Raspi als VPN CLient
VPN zu SERVER steht PING mittels CONSOLE Raspi ins Home NETZ geht
Aber andere Clients finden so den Gateway natürlich nicht.
Wie oder wo muss ich eine Route einstellen damit eine Wlan Camera die auch im 192.168.10.x Netz ist von beiden Seiten erreichbar ist?
Beim Client raspi habe ich das Routing freigeschaltet …
Was sicher fehlt ist doch der Routing Eintrag auf Client Seite damit ein PC weiss dass er nicht den 192.168.10.1 GW sondern über den Tunnel ins andere Netz muss
Da happerts bei mir
Hallo
Ich bin gerade dabei den VPN von RA4W Dienstleister in den Client einzubinden.
Die Kollengen haben in der .ovpn die conf den statischen Schlüssel und das Certifikat eingebettet.
Muss ich die jetzt auseinander fummeln und beim log und auth-user-pass das Verzeichnis anpassen.
Die Zeichen und sind die notwendig oder sind die für ein Ausführungsscript von RA4W oder nutzt das sogar openvpn um die Daten entsprechen im Programm zu verwenden?
client
dev tun
proto udp
remote xxxxxxxxxxxxxxxxxxxxxxxxxx1194
verb 3
nobind
auth SHA1
cipher AES-128-CBC
comp-lzo
log (bin/log/connectionlog.txt)
auth-user-pass bin/log/Account.txt
persist-tun
reneg-sec 0
key-direction 1
—–BEGIN OpenVPN Static key V1—–
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
—–END OpenVPN Static key V1—–
—–BEGIN CERTIFICATE—–
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
—–END CERTIFICATE—–
Danke und Gruß
Marc
die Zeichen sind nicht mit aufgeführt worden : TLS-auth vor und hinter dem schlüssel und ca vor und hinter dem certifikat jeweils eingeklammert mizt größer undkleiner Klammer sowie vor den Buchstaben ein Backslash. 🙂
Hi Jan,
auch wenn der Blogeintrag schon ewig her ist, eventuell siehst du das ja noch. Wie/wo entscheide ich denn, mit welchem Server bzw. Land ich mich verbinde? Das geht mit den Windows und LibreELEC Clients sehr bequem, wo man Server aus einer Liste auswählen kann. Beim Debian OpenVPN finde ich da nirgendwo (auch in keiner Anleitung) einen Hinweis, so als ob das nicht relevant wäre. Danke im Vorraus