OpenVPN Server auf dem PI

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hier wird jetzt gezeigt wie man den PI als VON Gateway für sein Netzwerk konfiguriert.
    User können nachher Zertifikatbasiert über den VPN Server auf euer Netzwerk zugreifen.
    Das ganze funktioniert auch Wunderbar mit dem OpenVPN Clienten für Android.
    Was richten wir ein ?
    Wir richten einen VPN Tunnel über ein TUN Device über UDP.
    Hiermit wird im Tunnel Layer3 genutzt. Schafft ein paar Vorteile, aber hat sicher auch Nachteile.
    Warum UDP und nicht TCP ?
    Innerhalb des Tunnel wird TCP gesprochen, also werden Pakete gesichert zugestellt.
    Daher brauchen wir für den Tunnel kein TCP, UDP reicht.
    Was benötigen wir ?
    1. Einen Account bei einem DynDNS Dienst
    2. Eine Port Weiterleitung auf dem Router
    3. Eine Additional Route auf dem Router
    4. Eine feste IP für den PI
    Angenommene Ausgangskonfiguration :
    Euer Netzwerk : 192.168.2.0/24
    Das VPN : 10.0.0.0/24
    IP des Router : 192.168.2.1
    IP des PI : 192.168.2.10
    UDP Port des VPN : 4624 # wir benutzen NICHT die Standartports !!
    Bei bedarf die IP Adressen anpassen.
    Vorbereitung des DSL Router:
    Meldet euch auf euerem Router an und richtet ein Portforwarding ein.
    Port UDP 4624 nach 192.168.2.10 4624 UDP
    Jetzt machen wir dem Router noch das neue Netzwerk (VPN Netz) bekannt.
    Dazu müssen wir eine Statische Route hinzufügen.
    Bei der FB7170 findet sich das unter :
    Heimnetz->Netzwerk->Netwerkeinstellungen->IP-Routen
    Hier fügen wir nun das neue Netz ein :
    Netzwerk 10.0.0.0
    Netzmaske 255.255.255.0
    Gateway 192.168.2.10
    Was haben wir gemacht ?
    Eure Geräte im Netzwerk kennen nur die 192.168.2.xxx er Adressen.
    Alles was nicht in diesem Netzwerk ist wird nun an den Router geschickt.
    Der Router leitet im normalfall jetzt alles ins Internet.
    Jetzt aber weis er das er die Pakete für das 10.0.0.xxx nicht ins Internet sondern an die 192.168.2.10, euren PI schicken soll.
    Der leitet das nun weiter ins VPN.
    Anders herrum, vom VPN zum 192.168.2.xxx muß auch eine Route gesetzt werden, das macht aber der VON Client nachher für euch.

    Kurz vorweg :
    Ich nutze kein Sudo, ich benutze su.
    Warum ?
    Zum Erlangen von Adminrechten benötigt sudo das Userpasswort, su hingegen das Admin Passwort.
    Wer nun mein Userpasswort in die Finger bekommt kann noch lange nicht als Root auf den PI.
    Per Default disable ich auch den User PI und lege mir einen eigenen User an, welcher auch nicht in der suoers list steht.
    Wer mag :

    Code
    sudo adduser imperator  # Den neuen User anlegen
    sudo passwd root        # Das Root Passwort ändern
    logout
    Neu Anmelden 
    su
    Passwort : <hier das root passwort>
    usermod -L pi  # Sperrt den User pi

    Jetzt geht es los mit dem PI :

    Erst einmal sorgen wir dafür das der PI auch Routen kann.

    Code
    echo 1 > /proc/sys/net/ipv4/ip_forward

    Damit das nach einem Reboot noch vorhanden ist :

    Code
    nano /etc/sysctl.conf


    Dann suchen wir diesen Eintrag und entfernen die # davor.:

    Code
    # Uncomment the next line to enable packet forwarding for IPv4
    net.ipv4.ip_forward=1


    Speichern nicht vergessen ;)


    Diejenigen die iptables aktiv haben sollten noch folgende Regeln setzen.
    Alle anderen oder die nicht es nicht genau Wissen ignorieren es erst mal.

    Code
    iptables -A FORWARD -i tun+ -j ACCEPT

    Openssl und Openvpn installieren.

    Code
    apt-get install openssl openvpn


    Nun legen wir das Verzeichnis für die Zertifikate an :

    Code
    mkdir /etc/openvpn/certstore


    Jetzt kopieren wir den Order easy-rsa in unser Openvpn Verzeichnis
    Das Verzeichnis sollte hier zu finden sein : /usr/share/doc/openvpn/examples/

    Code
    cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn


    Jetzt editieren wir die Datei VARS und passen einige Werte an

    Code
    nano /etc/openvpn/easy-rsa/2.0/vars


    Folgende Werte werden gesetzt :

    Code
    export KEY_SIZE=1024
    export CA_EXPIRE=365
    export KEY_EXPIRE=365  
    export KEY_COUNTRY="DE"
    export KEY_PROVINCE="NRW"
    export KEY_CITY="meine Stadt"
    export KEY_ORG="meine OU"
    export KEY_EMAIL="Email des Server"


    Jetzt können wir das erste Zertifikat erstellen :
    Wir bauen die CA

    Code
    cd /etc/openvpn/easy-rsa/2.0
    . ./vars       # !! hier auf den . ./ achten !!
    ./clean-all
    ./build-ca


    Wir beantworten jetzt brav alle Fragen oder übernehmen die Voreinstellungen.
    ACHTUNG !! DER COMMON NAME DARF IN KEINEM ANDEREN ZERTIFIKAT VORKOMMEN !!
    Jetzt erstellen wir das Zertifikat und den Key des Server

    Code
    ./build-key-server pivpn


    Auch hier beantworten wir alles Brav und bestätigen am Ende 2x mit y
    Jetzt die Zertifikate für den ersten User :
    Aber Achtung !
    Der Common Name darf nicht der des Server sein.
    Auch Name und Email sollte man jetzt auf den Benutzer angepasst ändern.

    Code
    ./build-key <username>


    Fast fertig
    jetzt noch den dh, das dauert etwas, also Kaffee holen ;)

    Code
    ./build-dh

    Jetzt erstellen wir die openvpn_ssl.conf

    Code
    touch /etc/openvpn/openvpn_ssl.conf


    folgenden Inhalt sollte diese haben :

    Jetzt kopieren wir noch die benötigten Dateien
    dh1024.pem
    ca.crt
    pivpn.crt
    pivpn.key
    von /etc/openvpn/easy-rsa/2.0/keys/
    nach /etc/openvpn/certstore/
    nun können wir den Server neu starten

    Code
    /etc/init.d/openvpn restart


    in einer zweiten Console kann man das Log beobachten

    Code
    tail -f /var/log/syslog


    Jetzt sollte der Server laufen und auf eine Verbindung warten.
    Zum Clienten :
    der Client benötigt folgende Dateien aus /etc/openvpn/easy-rsa/2.0/keys/
    ca.crt
    <username>.crt
    <username>.key
    Username ist der welchenwir oben bei ./build-key <username> angegeben haben.
    Diese Kopieren wir erst mal an einen sicheren Ort, z.B. ~/openvpnkeys
    Jetzt brauchen wir noch die Client Config.


    Jetzt sollten wir 4 Dateien im Sicherungsverzeichnis haben:

    Code
    ca.crt
    <username>.crt
    <username>.key
    pi.ovpn


    Diese werden jetzt auf den Clienten gepackt und importiert.
    Der Client kann Linux, Windows oder auch Android sein.
    Folgendes aus dem Kopf, könnte abweichen :
    Windows :
    den Installer runter laden :
    http://openvpn.net/index.php/download.html
    Installieren.
    Jetzt im Startmenü Start->Programme->OpenVPN->OpenVPN configuration file directory öffnen
    Es öffnet sich ein Ordner, dort die vier Dateien hinein kopieren.
    Die GUI Starten, Icon neben der Uhr.
    Rechts anklicken und das VPN starten.
    (Unter Windows 7 muß die GUI als Amin gestartet werden.)
    Debian Gnome
    Die vier Files in das eigene HOME kopieren.

    Code
    apt-get install network-manager-openvpn-gnome


    Installieren mit allen Abhängikeiten.

    Dann das Netzwerksymbol oben links anklicken.
    VPN Verbindungen -> konfigurieren
    Verbindung importieren
    *.ovpn im HOME auswählen.
    Übernehmen, fertig
    Kann jetzt über den Netzworkmanager gestartet werden.

    Debian Console, ohne GUI

    Code
    apt-get install openvpn


    Installieren mit allen Abhängikeiten.
    Die vier Dateien nach /etc/openvpn kopieren
    Autostart des Clienten configurieren :

    Code
    nano /etc/default/openvpn


    Hier Editieren

    Code
    # Start only these VPNs automatically via init script.
    # Allowed values are "all", "none" or space separated list of
    # names of the VPNs. If empty, "all" is assumed.
    # The VPN name refers to the VPN configutation file name.
    # i.e. "home" would be /etc/openvpn/home.conf
    #
    #AUTOSTART="all"
    #AUTOSTART="none"
    #AUTOSTART="home office"


    AUTOSTART="none"
    der Client wird nicht automatisch gestartet.
    um die VPN Verbindung aufzubauen geben wir folgendes ein :

    Code
    openvpn /etc/openvpn/<namederdatei>.ovpn


    Wer Autostart möchte muß folgendes eingeben
    AUTOSTART="<namederdatei>"
    Der Client startet automatisch nach dem Boot.

    Der Android Client ist selbsterklärend.
    Auch hier müssen die vier Files auf das Smartphone.
    Dann im Clienten einfach die *.ovpn importieren.

    Entdeckte Fehler bitte Posten, Danke.
    [/code][/code]

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

    Einmal editiert, zuletzt von Der_Imperator (25. Februar 2015 um 08:33)

  • Sehr schön das wird in Kürze getest. Danke

    Was mich noch mehr interessieren würde ist ein LAN-to-LAN Verbindung zwischen zwei pi's

    Hast du da evtl auch was zur Hand! ?

    Danke im voraus

  • Um meine frage zu konkretisieren, ich habe aktuell zwei Haushalte. Beide mit 100mbit down. Der eine Haushalt hat 6mbit upload und der andere 30mbit. In beiden Haushalten ist eine fritzbox 7390 verbaut und per fritzvpn miteinander verbunden. Die Verbindung steht und es gibt eigentlich keine Probleme. Ich musste aber verstellen dss die Performance eher schlecht als recht ist.
    In beiden Haushalten befindet sich in pi. Auf dem einen ist raspbmc und auf dem ander raspbian. Jetzt stellt sich mir die Frage ob ich die pi's performanter sind als die beiden fritzboxen.
    Mit den beiden fritzboxen komme ich auf max 100kb/s Übertragungsrate.
    Ist die lan-to-lan mit den beiden pi's im aktuellen Zustand realisierbar und was ist mit der Performance! ?

  • Sehr schönes Tutorial ;).

    Normalerweise benutze ich das Howto von openvpn direkt - aber jetzt bin ich Deiner Anleitung gefolgt um meine Pi zu einem OpenVPN Server zu machen. Das ist ein sehr wichtiges Thema, denn nur damit kann man sicher aus dem Internet auf seine Pi und seine lokalen Rechner zugreifen.

    Anbei ein paar - hoffentlich konstruktive - Kommentare:

    1) 365 Tage für die Key expiry ist etwas knapp. Ich jedenfalls habe keine Lust jedes Jahr wieder einen neuen key zu generieren. 3650 ist wohl besser.
    2) Ich hatte in den Confidateien ein paar Typos und deshalb kam der Server nicht hoch. Ein Hinweis, dass man alle Fehlermeldungen in /var/log/syslog findet wäre ganz hilfreich.
    3) Beim Erstellen ist es wichtig die Keys zu signieren. Das würde ich etwas deutlicher beschreiben.
    4) Der Port ist bei Dir 4624. Standard von OpenVPN ist 1194. Das ist Port obscufating - aber ich glaube nicht dass das notwendig ist. Anyhow solltest Du darauf hinweisen dass jeder einen beliebigen Port benutzen sollte, denn sonst findest Du Milliarden Pis die alle auf 4624 lauschen und das Obscufating ist keines mehr :rolleyes:
    5) Die Keys sollten auch entsprechend geschützt werden und mit entsprechenden Rechten versehen sein. Dazu findet sich nix in dem HowTo
    6) Du beschreibst dass man die Pi zum Router machen muss und u.U. iptables rules ausführen muss. Nach einem Restart der Pi ist alles wieder weg. Eine weitere Beschreibung wie man erreicht dass es immer nach einem Restart wieder aktiv ist wäre sicherlich hilfreich.
    7) Das Howto beschreibt nur wie man einen Server aufsetzt. Dazu gehört immer noch ein oder mehrere Clients :rolleyes:

    Wenn Du willst kann ich gerne ein bash Script erstellen, welches Deine Schritte alle nacheinander ausführt (So habe ich es schon beim OwnCloud howto gemacht) und es somit wesentlich einfacher macht einen OpenServer aufzusetzen.


  • 4) Der Port ist bei Dir 4624. Standard von OpenVPN ist 1194. Das ist Port obscufating - aber ich glaube nicht dass das notwendig ist. Anyhow solltest Du darauf hinweisen dass jeder einen beliebigen Port benutzen sollte, denn sonst findest Du Milliarden Pis die alle auf 4624 lauschen und das Obscufating ist keines mehr :rolleyes:


    Schau Dir mal das Icon an, mit dem der selbsternannte Netzwerkguru hier Werbung macht. Die Firma vertritt schon lange den Ansatz, daß 'security through obscurity' funktioniert. Wenn man denen auf Lehrgängen mit Kerckhoff gekommen ist wurden die meist sehr einsilbig.



  • Schau Dir mal das Icon an, mit dem der selbsternannte Netzwerkguru hier Werbung macht. Die Firma vertritt schon lange den Ansatz, daß 'security through obscurity' funktioniert. Wenn man denen auf Lehrgängen mit Kerckhoff gekommen ist wurden die meist sehr einsilbig.

    Zu framp :
    Erst mal Danke für deine Kritik, werde ich die Tage überarbeiten.
    Das mit dem Port ist kein Sicherheitsaspekt, es ist einfach so das es mir persönlich auf die Nüsse geht wenn Logcheck mir permanent Mails sendet weil irgend welche Prolls oder Bots den Standart Port connecten. SSH wird bei mir auch auf dem Router verbogen. Public lauscht der nicht auf 22, Intern schon.
    Ein abweichender Port bringt Ruhe rein.
    Aber du hast recht, ich werde darauf hinweisen.

    Zu orb
    Die Meinung der Firma meiner Zertifizierung spiegelt sicher nicht meine Meinung wieder.
    Es ist lediglich der Nachweis einer bescheidenen Fachkentniss.
    Sollte es anders sein hätte ich mit Sicherheit ein Tut über vpnc geschrieben.
    Mein selbstgegebener Title zeugt zu einem von einem gewissen Größenwahn, andererseits hört sich KleinerLayer4 einfach nur Scheisse an ;)

    Für alle die welche hier nicht mehr folgen können, es aber gerne wissen würden dem Empfehle ich die WIKI Seiten.
    Sollte man mal gelesen haben.
    http://de.wikipedia.org/wiki/Security_through_obscurity
    http://de.wikipedia.org/wiki/Kerckhoffs%E2%80%99_Prinzip

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.


  • Könnte ich evtl noch eine Antwort auf meine Frage bekommen! ?
    Das wäre furchtbar nett.

    Danke im voraus ;)

    Das ist jetzt zu müßig zum Rechnen.
    Der schmalste Anschluß gibt die Geschwindigkeit vor.
    Ist bei dir der 6000er Upload.
    Dann ziehen wir noch ein paar Bytes für den Overhead ab, der Tunnel braucht auch noch ein paar Bytes, dann wird aus 6000 Brutto schnell 3000 Netto.
    Dann kommt es noch auf die Qualität der Verbindung an, die Windowsize, Latenz, QoS etc...
    IP-TV ? Das wird priorisiert.
    Zu viele Variablen jetzt.

    Konfigurier einfach die zwei PI und starte einen Versuch.
    Ich kenne das VPN der Fritzboxen nicht.

    Welchen Durchsatz hast du wenn du Daten per FTP kopierst ?
    Ohne Tunnel, direkt von Server über Fritzbox Fritzbox zu Server ?

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.


  • Ich kenne das VPN der Fritzboxen nicht.


    AVM nutzt IPSec für die VPN und die Umsetzungen auf den Fritz-Boxen ist eigenlich gut, bei VDSL25 hab ich zwischen zwei 7390 keine Geschwindigkeitsreduzierung festgestellt. Die 71er sind allerdings mit etwas schwächer auf der CPU.
    Ich wollt die ganzen Tage schon was zum FritzVPN auf dem Pi schreiben ...



  • AVM nutzt IPSec für die VPN und die Umsetzungen auf den Fritz-Boxen ist eigenlich gut, bei VDSL25 hab ich zwischen zwei 7390 keine Geschwindigkeitsreduzierung festgestellt. Die 71er sind allerdings mit etwas schwächer auf der CPU.
    Ich wollt die ganzen Tage schon was zum FritzVPN auf dem Pi schreiben ...

    Hab zwischenzeitlich auch mal bei AVM ein wenig gelesen.
    Habe selber eine 7170 zu Hause (unter anderm) aber mich noch nie mit deren VPN auseinandergesetzt.
    Gibt ein paar gute Tut bei AVM. Aber schreib mal was, interessiert mich auch.

    Die Telekomiker haben bei VDSL ein VLAN Tagging und auch QoS aktiv.
    Geht nicht anders weil sonst das Home-Entertainment nur grottenschlecht funktioniert und die Kunden weglaufen. Das IP-TV wird wie jeck priorisiert darunter leidet dann das "Surfen".
    Aber ich denke das wisst ihr bereits.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.


  • Die Telekomiker haben bei VDSL ein VLAN Tagging und auch QoS aktiv.
    Geht nicht anders weil sonst das Home-Entertainment nur grottenschlecht funktioniert und die Kunden weglaufen. Das IP-TV wird wie jeck priorisiert darunter leidet dann das "Surfen".


    Nicht nur bei VDSL, auch bei ADSL+ wenn Entertain gebucht ist. Davon hat der Kundendienst aber keine Ahnung.

    'Was für'n Router? Linux? Das geht nicht, ich kann ihnen einen Speedport für nur €€€€ schicken...'

    Ich hab dann aus Faulheit doch ne Fritz 7240 genommen.

  • Hallo Leute,

    ich habe nun OpenVPN bei mir auf dem PI eingerichtet und alles beachtet,was in der Anleitung steht. Leider bekomme ich beim Verbinden immer die Fehlermeldung : "Options error: Unrecognized option or missing parameter(s) in pi.ovpn:15: script-security (2.0.9)"

    Meine pi.opvn-Datei sieht wie folgt aus :

    Client
    dev tun
    proto udp
    remote <meine dyndns> Port
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    ca ca.crt
    cert <username>.crt
    key <username>.key
    ns-cert-type server
    cipher AES-256-CBC
    comp-lzo
    verb 3
    script-security 2

    Selbstverständlich habe ich bei der dyndns "meine" drin zustehen, genauso beim Port und beim Username das gleiche.

    Kann mir jmd helfen??

    Danke
    Benny

  • Mit was verbindest du dich ?
    Windows Client ?
    Da war mal was wegen der Version des Clienten und dem Script Security Parameter.

    Code
    The --script-security option was introduced in OpenVPN 2.1_rc9. For configuration file compatibility with previous OpenVPN versions, use: --script-security 3 system

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.


  • ja genau benutze windwos clienten

    Dann mach mal ein Update deiner Version.
    http://sourceforge.net/projects/openvpn-gui/
    oder hier
    http://openvpn.se/download.html

    Dann geht auch die Script security

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

    Einmal editiert, zuletzt von Der_Imperator (24. Juni 2013 um 17:54)

  • So, ich habe das jetzt auch mal ausprobiert und habe folgendes Problem: Das VPN wird problemlos vom Android-Client aufgebaut. Allerdings scheint mit dem Routing was nicht zu stimmen. Im "Normalfall" erhalte ich auf den klassischen IP-Resolve-Websites immer noch die IP vom realen Anschluss. Eigentlich sollte die Route ja gepusht werden... Stelle ich beim Android-Client "Benutze Default Route" ein (Beschreibung: Leitet allen Internet Verkehr über das VPN) komme ich gar nicht mehr raus. IPv4-Forwarding habe ich mit dem angegebenen Befehl aktiviert (da kommt keine Bestätigung, oder?). iptables sind nicht aktiv.

    In der Anleitung irritiert mich vor allem das ifconfig - laut anderen Websites sollte bei TUN gerade nicht die Netzwerkmaske hinten stehen, sondern eine andere IP des 10.* Netzwerks (welche, erklärt sich mir aber nicht).

    Config: Router 192.168.0.1, pi 192.168.0.105

    Hier meine openvpn_ssl.conf:

    Meine .opvn:

    Muss beim .ovpn nicht irgendwo noch ein pull hin?

    Wo liegt mein Fehler?

    EDIT: Mein Routing im D-Link noch beigefügt.

  • EDIT: Vielleicht bin ich auch von ner völlig falschen Prämisse ausgegangen: Das Tutorial dient nur dazu, ins eigene Netzwerk zu kommen, aber nicht, von diesem wieder raus zu kommen? Ich möchte im Urlaub aus nem offenen/unsicheren WLAN meinen Internet-Traffic komplett durchs VPN routen.

    Wenn ich ein anderes Tutorial richtig verstehe, muss ich hierzu noch folgende iptables-Regel erstellen:
    sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -o eth0 -j MASQUERADE
    Würde das zu meiner Konfiguration passen? (eth0 stimmt)

    Muss ich dazu aus raspbian iptables noch aktivieren, wenn ich mich bislang daran nicht vergriffen habe oder läuft das so out of the box? Oder geht das noch irgendwie ganz anders ohne iptables?

    Einmal editiert, zuletzt von DCSH (17. Juli 2013 um 16:11)

  • Du mußt dem Android die Default Route auf das VPN setzen.
    Damit Routet er alles was er nicht kennt ins VPN.
    Auf dem PI brauch nir ipv4 forward enabled zu sein, das reicht wenn du eine Route auf dem Dlink hast.
    versuch mal mit
    push "route 0.0.0.0 0.0.0.0"
    in der ovpn.config

    EDIT grade mal nachgeschaut, geht auch mit Redirect.
    ;push "redirect-gateway"

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

    Einmal editiert, zuletzt von Der_Imperator (17. Juli 2013 um 17:25)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!