Raspberry Pi – ein RPi WLAN Access Point mit OpenVPN Tunnel

Die Idee

Der als WLAN AP eingerichtete Raspberry Pi wird um eine OpenVPN Client-Konfiguration erweitert, mit der er einen OpenVPN Tunnel auf dem eth0 Interface zu einem externen OpenVPN Server aufbaut.

 

Wozu?

Egal wo man diesen an ein fremdes und unbekanntes (und damit automatisch unsicheres!) Netzwerk ansteckt (und dieser nicht bei seiner Internetverbindung gehindert wird) baut der RPi einen verschlüsselten Tunnel zu dem OpenVPN Server auf. Danach kann über die WLAN Verbindung von den Clients über den Tunnel auf den Server zugegriffen werden. Und natürlich wird auch der gesamte Datenverkehr der WLAN Clients durch den Tunnel zum VPN Server geschickt. Von dort geht dieser dann (unverschlüsselt) ins normale Internet.
Erneut die Frage, wozu?
Sicherheit. Sicherheit. Sicherheit.
Kenne ich das Netzwerk nicht und habe damit keine Vertrauensstufe zu selbigem Netzwerk möchte ich ja nicht, dass mein Internetverkehr meiner WLAN Clients „mitgehört“ werden kann. Da ich nun nicht auf jedem WLAN Client jeweils einen VPN Client starten möchte übernimmt der RPi diese Aufgabe. Automatisch.

 

Installation von OpenVPN auf dem Raspberry Pi unter Raspbian

Shell #> sudo apt-get update
Shell #> sudo apt-get upgrade
Shell #> sudo apt-get install openvpn
  Reading package lists… Done
  Building dependency tree
  Reading state information… Done
  The following extra packages will be installed:
      liblzo2-2 libpkcs11-helper1
  Suggested packages:
      resolvconf
  The following NEW packages will be installed:
      liblzo2-2 libpkcs11-helper1 openvpn
  0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
  Need to get 582 kB of archives.
  After this operation, 1,324 kB of additional disk space will be used.

 

Installation der Zertifikate und Client-Konfig

Nun auf dem Raspberry Pi die Konfigurationsdatei im Verzeichnis /etc/openvpn/ anlegen und die Zertifikate auf gesichertem Wege vom OpenVPN Server in selbiges Verzeichnis legen.

 

Start von OpenVPN

Nun kann OpenVPN gestartet werden
      Shell #> sudo service openvpn start

Es sollte, hat man die Konfiguration richtig gemacht, seine Zertifikate an der richtigen Stelle usw. das VPN Interface tun0 erscheinen. Der Tunnel steht und man kann zumindest schon mal den VPN Server erreichen. Ein Ping, SSH oder ähnliches geht nun vom Raspberry Pi durch den OpenVPN Tunnel. Schon mal ein guter Anfang.
Zum Debugging kann man in der Client-Konfiguration das Debugging aktivieren und in eine Log Datei schreiben:

    verb 5
    log-append /var/log/openvpn/openvpn.log

Danach den openvpn wieder neu starten
      Shell #> sudo service openvpn restart

Die Debugmeldungen sollten einem recht schnell helfen, was dort schief läuft.

 

OpenVPN beim Booten automatisch starten

Damit der OpenVPN Client nach einem Booten automatisch gestartet wird muss in der Datei /etc/default/openvpn folgende Zeile angepasst werden
      AUTOSTART="clientname"
(Angeben, wie die Konfigurationsdatei ohne .conf in /etc/openvpn/ heißt)

 

Routing des gesamten Traffics in den Tunnel

Damit nun der gesamte Traffic vom RaspberryPi in den VPN Tunnel gelangt muss das Default-Gateway nach Aufbau des OpenVPN Tunnels geändert werden.
Der Server ist dabei so konfiguriert, dass es für die Clients eigene Konfigurationsdateien gibt/ geben kann.

Zur Änderung des Default-GW setzen wir in der Client-Konfigurationsdatei
/etc/openvpn/client-configs/vpn-client-name
einen Eintrag:
      push "redirect-gateway def1"

Damit wird der Client angewiesen, nach Aufbau des Tunnels sein Default-GW abzuändern und auf den Tunnelendpunkt (VPN Server) zu setzen.

Ob die Konfigurationsdatei für den Client genutzt wird kann man im Log (sofern Logging aktiv) des OpenVPN Servers gut erkennen:
…. OPTIONS IMPORT: reading client specific options from: /etc/openvpn/client-configs/vpn-client-name...

und weiter unten im Log noch die Änderung des Default-GW
....... SENT CONTROL [vpn-client-name]: 'PUSH_REPLY,......redirect-gateway def1, ....

 

Änderung der IPtables Regeln

Bisher wurde über IPtables geregelt, dass von wlan0 auf eth0 ge’nat’tet wurde. Also ändern wir eth0 und tun0 in den iptables-Regeln ab:

      iptables -A FORWARD -o tun0 -i wlan0 -m conntrack --ctstate NEW -j ACCEPT
      iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
      iptables -t nat -F POSTROUTING
      iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Somit verhindert man zusätzlich, dass bei einem nicht aufgebauten Tunnel trotzdem „normales“ (aber unsicheres) Surfen möglich wäre.
Ist der Tunnel nicht aufgebaut kann nicht auf tun0 zugegriffen werden und der Internetverkehr bleibt im RPi „hängen“.
Damit kriegt man zumindest mit, wenn es noch ein Problem gibt und kann sich darum kümmern. Man läuft somit nicht in die Gefahr, dass man versehentlich unverschlüsselten Datenverkehr durch das fremde Netz schickt in der fälschlichen Annahme, der Tunnel bestehe. Quasi ein Eigenschutz 😉

 

Links
http://openvpn.net/index.php/open-source/documentation/howto.html
http://openvpn.net/index.php/open-source/documentation/howto.html#redirect
http://blog.johnford.org/openvpn-tunnel-to-home-server/
https://blog.rotzoll.net/2013/04/raspberry-pi-wlan-access-point-einrichten-mit-realtek-8188cus-usb-wlan-adapter/“ title=“https://blog.rotzoll.net/2013/04/raspberry-pi-wlan-access-point-einrichten-mit-realtek-8188cus-usb-wlan-adapter/
http://www.revsys.com/writings/quicktips/nat.html

Dieser Beitrag wurde unter Dokus und Tipps, Linux/ UNIX, RaspberryPI abgelegt und mit , , , , , , , , , , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

2 Antworten zu Raspberry Pi – ein RPi WLAN Access Point mit OpenVPN Tunnel

  1. Chrys sagt:

    Hallo!
    Danke für dieses ausführliche Tutorial, ich habe es auf Anhieb auf meinem Raspberry Pi zu laufen gebracht. Mein einziges Problem ist, dass ich nun nicht mehr auf Netzwerkressourcen im lokalen Netzwerk zugreifen kann. Ist es möglich durch Änderungen an der IPtable diese Funktionalität wieder herzustellen und wie würden diese Änderungen lauten?
    mfG

  2. Lukas sagt:

    Hallo,
    habe diese Anleitung befolgt und es hat funktioniert, jedoch wurden meine OPENVPN Configs geupdatet sodass ich diese neu auf meinen PI übertragen musste.
    Nachdem ich meine neuen Configs übertragen habe erscheint bei dem Befehl ifconfig kein tun0 Adapter. Ich kann mit dem Access-Point normal ins Internet. Also soweit klappt alles.

    Hat wer Tipps?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert