Raspberry Pi: OpenVPN VPN-Client installieren

25 Okt
25. Oktober 2014

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

Step 1

Zunächst müssen wir OpenVPN mittels des Paketmanagers APT installieren.

sudo apt-get install openvpn

Step 2

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.

Step 3

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

Step 4 (optional)

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

Step 5 (optional)

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

Step 6

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.

Status von OpenVPN

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

Öffentliche IP-Adresse überprüfen

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

Dir hat der Artikel gefallen?
Teile ihn mit deinen Freunden!
31 Antworten
  1. Doert says:

    Was für einen Download/Upload Speed mit AES 256 (128) schafft den der pi auf deiner Leitung so?

    Antworten
  2. Bernd says:

    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?

    Antworten
  3. Fabi says:

    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 !

    Antworten
  4. Grem says:

    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…

    Antworten
  5. Mike says:

    Bei mir startet openvpn immer automatisch bei jedem Neustart, gibt es eine Möglichkeit diesen Autostart zu verhindern?

    Antworten
  6. Mike says:

    Danke für den Tipp! Hat geholfen, jetzt startet der Pi auch wieder flotter.

    Antworten
  7. Frank says:

    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.

    Antworten
    • Frank says:

      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.

      Antworten
    • Jan Karres says:

      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.

      Antworten
      • Frank says:

        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.

        Antworten
  8. Frank says:

    Jetzt doch wieder timeout. Bin also immer noch auf der Suche.

    Antworten
  9. Matthias says:

    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.

    Antworten
    • Jan Karres says:

      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.

      Antworten
      • Matthias says:

        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.

        Antworten
        • Jan Karres says:

          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.

          Antworten
          • Matthias says:

            Ich nutze den selben Anbieter wie hier angegeben. Welche Dateien muss ich mit WinSCP in den Ordner /etc/openvpn/Servers kopieren?

          • Jan Karres says:

            Die in Step 3 verlinkten Dateien müssen hochgeladen werden. Inklsive der ca.crt Datei.

  10. Bernd says:

    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?

    Antworten
    • Bernd says:

      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

      Antworten
  11. Roland says:

    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.

    Antworten
  12. phantomaniac says:

    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.

    Antworten
  13. Dmitry says:

    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?

    Antworten
  14. Marcel says:

    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

    Antworten
  15. Oli says:

    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

    Antworten
  16. Alex says:

    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

    Antworten
  17. Chris says:

    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

    Antworten
  18. Dan says:

    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

    Antworten

Antworten

Kommentar verfassen

JanKarres.de © 2007-2018