Softether VPN-Server (https-VPN, OpenVPN, L2TP/IPsec, SSTP)

  • Hi,


    dies ist der Versuch ein ausführliches und dennoch verständliches Tutorial zur Umsetzung des PIs als VPN-Server. Gerade die Sache mit der Verständlichkeit ist leider doch nicht so einfach, wie ich mir das vorgestellt habe. Hoffe man kann es trotzdem einigermaßen nachvollziehen.
    Ich nutze hier das übliche "Road-Warrior" Szenario. Also der Server steht daheim, man möchte von Unterwegs aufs Heimnetzwerk zugreifen.


    Im Gegensatz zu anderen Tutorials wird hier NICHT OpenVPN verwendet, sondern SoftetherVPN. Dabei handelt es sich um eine relativ neue (open source) VPN-Software. Besonderheit ist, dass sie verschiedene VPN-Protokolle in sich vereint. Zum einen hat es ein eigenens https-VPN. Damit kommt man durch (noch) mehr Firewalls, als mit OpenVPN im TCP/443 Modus. Zusätzlich "spricht" es auch noch OpenVPN, L2TP/IPsec und SSTP. Man kann also mit einem OpenVPN Clienten, mit einem nativen Windows oder einem nativen (also ohne zusätzliche App) Android/iOS eine Verbindung aufbauen. Es ist zudem ein Layer2-VPN (für OpenVPN'ler: TAP).


    Was wird benötigt:
    ein Raspberry PI
    Grundkenntnisse in Netzwerkkram
    etwas Geduld


    Was ist empfehlenswert:
    ein Windows-PC (ja wirklich :D )



    Zunächst muss das Programm auf den PI. Da es nicht in den Paketquellen enthalten ist, muss es selbst kompiliert werden. Aber bis auf etwas Geduld wird dazu fast nix benötigt.


    Erst mal mit apt-get alles auf Vordermann bringen und zwei Abhängigkeiten installieren. Git wird nicht zwingen benötigt. Man kann den Sourcecode auch via Browser/wget/curl/was-auch-immer herunterladen. Ich nutze halt git. Screen kann man sich auch schenken, aber gerade bei langen ssh-Aktion wird es nützlich.

    Code
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install git
    sudo apt-get install screen
    sudo apt-get install libreadline-dev
    sudo apt-get install libncurses-dev



    Nun den Quellcode holen:

    Code
    cd ~/
    git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git
    cd SoftEtherVPN



    Jetzt hole ich doch nochmal etwas weiter aus. Wer die Einrichtung via SSH durchführt, möchte vielleicht nicht unbedingt den ganzen Buildprozess die Verbindung aufrecht erhalten. Dafür ist screen da.
    Einfach mit

    Code
    screen -S vpn


    öffnen. "-S vpn" ist nur als Bezeichner vorgesehen. Kann man auch weglassen.
    Wenn dann später das Kompilieren läuft, kann man mit STRG+A --> D (STRG gedrückt halten, A drücken, STRG loslassen, d drücken) die Sitzung verlassen, ohne dass die Programme beendet werden. Mit screen -r vpn kann man diese später wieder aufnehmen.
    Mit STRG+A --> C kann man innerhalb einer Screen-Session neue Konsolen öffnen, mit STRG+A --> N diese durchschalten.


    Aber zurück zum Tutorial. Nun kann man das Config-Programm aufrufen, in welchen man das Betriebssystem auswählt und die Bitzahl festlegt. Anschließend mit make das Programm erstellen.

    Code
    ./configure
    1
    1
    make


    Bei Nutzung von screen kann man sich nun mit STRG+A --> D von screen lösen und die SSH-Verbindung trennen. Das kompilieren dauert gut eine Stunde (+/- 60 Minuten^^).
    Wenn die Zeit gefühlt um ist, wieder mit SSH verbdinden, screen zurückholen und die VPN-Software installieren.


    Code
    screen -ls 
    screen -r vpn  # oder screen -r NUMMER
    sudo make install


    Das wars ;)


    Nein nicht wirklich.
    Muss jetzt wieder etwas weiter ausholen. SoftEtherVPN wird zwar auch mit einer Konfigurationsdatei gesteuert, die schreibt man aber normalerweise nicht manuell sondern mithilfe der Konfigurationsprogramme. Eine weitere Besonderheit ist, dass das Programm "Live" konfiguriert wird. Es muss also laufen, um es einstellen zu können.
    Bevor man es jedoch startet, noch eine weitere Anmerkung.
    Sobald man es startet, lauscht es auf verschiedenen "Standardports" (u.a. 443, 1194, 5555) und lässt sich so auch remote konfigurieren. Da noch kein Passwort gesetzt ist, könnte theoretisch jeder aus dem Netz, der auf diese Ports kommt, eine Konfiguration vornehmen. Um da etwas vorzubeugen, limitieren wir die zulässigen IPs.
    Dabei sei folgendes angenommen:
    192.168.0.1 ist der Router
    192.168.0.2 ist der PI
    192.168.0.3 ist der Windows-PC


    Code
    sudo nano /usr/vpnserver/adminip.txt
    127.0.0.1
    192.168.0.2
    192.168.0.3
    STRG+O --> Enter
    STRG+X --> Enter
    ### mit 192.168.0.0/24 würde man 192.168.0.XXX erlauben


    Nun wird der VPN-Server gestartet

    Code
    sudo vpnserver start


    Nicht sonderlich spannend, oder?


    Jetzt empfehle ich zum Windows-PC zu wechseln. (man kann sich auch durch vpncmd durchwühlen, ist aber weniger angenehm)
    Dort öffnen wir im Browser:
    http://www.softether-download.com/en.aspx?product=softether
    und wählen Softether VPN und dann "Softether VPN Server Manager for Windows" und laden+installieren das Ganze (bisher ist der Server-Manager nur im Paket mit dem Server-Installer zu haben, also nicht wundern. Beim Installieren kann man den Server dann aber weglassen)
    Wer mag, kann auch gleich die Client-Software mit laden.


    Im nun installierten und geöffneten Server Manager auf "new Setting" klicken und Werte eintragen. Also Name beliebig, bei Host Name die IP des PIs. Wer den https-Port nicht fürs VPN "opfern" möchte, sollte hier schon auf 5555 wechseln, damit man ihn Problemlos deaktiveren kann. Sobald alles eingetragen ist, Speichern und dann mit der Konfiguration verbinden.
    Passwort festlegen.


    Nun öffnet sich der Wizard.
    Hier den ersten Punkt wählen. Fragen einfach lesen und bestätigen (oder abändern, falls gewünscht).
    Hinweis zur DNS Funktion. Der dort gewählte Name wird dauerhaft reserviert. Also wer einen "persönlichen" Namen wählt, sollte später unbedingt die Konfigurationsdatei sichern , da der dort enthaltene "ByteKey" zur Authentizierung des DynDNS-Namens genutzt wird. Persönlich lasse ich den voreingestellten Wert (und deaktiviere später DynDNS ganz) und nutze ausschließlich meine eigene DynDNS Adresse. Mit EXIT die schließen.


    Nun die gewünschten L2TP Funktionen aktiveren. Ich nutze es z.B. gar nicht und lasse alle Kästchen leer. Ansonsten das erste Feld aktiveren. Das ist das "normale" IPsec. (benötigt UDP-Port 500 und 4500)


    VPN Azure deaktivieren, außer man kann keine Portweiterleitungen einrichten.


    Create User anklicken und ausfüllen. Bei AuthType "Password" wählen und rechts gewünschte entsprechend das PW eintragen.


    Bei "Set Local Bridge" eth0 auswählen. Close & Fertig. Jetzt ist der Server ansich "betriebsbereit".


    Nun den Menupunkt Encryption & Network auswählen und dort von RC4-Md5 auf AES erhöhen. Wer ein eigenen DynDNS Dienst nutzt, sollte ein neues Zertifikat erstellen und als common name den DynDNS-Namen (z.b. qupfer.no-ip.com) eintragen. Ggf. keepalive deaktivieren.


    Nun in die OpenVPN/SSTP Konfiguration wechseln. Dort zum 1194er Port (wenn gewünscht) noch weitere Ports hinzufügen. Ich würde noch "5555" hinzufügen.
    Das sind ausschließlich die für OpenVPN genutzten UDP Ports. Für OpenVPN via TCP werden die Ports im Hauptmenu genutzt.
    Mit "Generate...." kann man sich die OVPN-Files gleich runterladen. ;)



    Nun mit Exit/Close alles schließen. Zum PI wechseln.
    Dort nun

    Code
    sudo vpnserver stop


    (damit wird die Config sauber geschrieben)


    Nun noch ein kleines init.d Schript

    Code
    sudo nano /etc/init.d/vpnserver
    #unten stehendes Skrip reinkopieren
    STRG+X
    sudo update-rc.d vpnserver defaults
    sudo reboot




    Nun noch die entsprechenden Ports weiterleiten. Ich leite "alles" (also 443, 1194 und 5555) auf Pi-Port 5555. In der SoftEther-Konfig habe ich alle "Listen-Ports" außer 5555 deaktivert. In den ovpn-Files muss dann natürlich der Port auch angepasst werden, falls OpenVPN genutzt werden soll. Wer IPsec nutzen will, braucht entsprechend noch UDP 500 und UDP 4500. Die müssen 1zu1 an PI-Port 500 bzw PI-Port-4500 geleitet werden. Ein Umbiegen mittels Weiterleitungsregel ist da nicht möglich.


    Die Client-Software ist eigentlich selbsterklärend. IP/Host+Benutzername+Passwort eintragen. Verbinden.
    Für Openvpn die oben geladenen ovpn-Files benutzen. Eventuell Host und Port und Protokoll (TCP/UDP) anpassen.


    Wer ein bisschen mit dem VPN "rumspielt" wird feststellen, dass der PI übers VPN nicht erreichbar ist. Das liegt am direkten "bridge'ing" aufs eth0-Device.
    Um das zu Umgehen, muss man die Brücke zum eth0-Device deaktiveren und eine Brücke zu einen "echten" TAP-Device einrichten. Anschließend muss man den Traffic noch vom TAP-Device wegbekommen.


    Dies geht z.B.
    - mittels "Routing" wie im OpenVPN-Tutorial
    - mittels NAT
    - oder einer zweiten Bridge, die das tap-Device dann mit eth0 verbindet


    Aber das sind Sachen, die gehören in ein weiterführendes Tutorial.

    Edited once, last by qupfer ().

  • Hallo qupfer,
    vielen Dank für den Beitrag. Da ich auf der Suche nach einem VPN-Server bin und schon mit dem Gedanken eines Open-VPN auf einem RPi gespielt habe, kommt das gerade recht.
    Leider bin ich - was Unix/Linux betrifft - nicht sehr bewandert. Ich muss recht häufig Google fragen, wie ich evtl mein Problem lösen kann.
    Ich hätte da noch mal 'ne Frage: Nach der Kompilierung soll ich den Server mit sudo make install installieren.
    1. woher weiß das Programm, was zu installieren ist?
    2. ich möchte den Server auf einem anderen RPi kompilieren. Wie komme ich an das Installationspaket, um es auf einen anderen Pi zu übertragen und wie wird es dann dort installiert?
    3. Bei "Set Local Bridge" eth0 auswählen. - Der Pi hat nur ein Interface. Werden USB2LAN-Adapter vom Pi erkannt und könnte das Bridging auch darauf erfolgen? Ist das performanter?

  • Hey qupfer,


    Danke! Hast mir viel Suche/Zeit gespart, so hatte ich es innert Minuten installiert (Deine Konfig beurteile ich nicht, die habe ich nicht gelesen/probiert).
    BTW: Deinem StartUp-Script fehlt noch ein

    Code
    chmod 755 /etc/init.d/vpnserver


    [hr]


    1. woher weiß das Programm, was zu installieren ist?
    2. ich möchte den Server auf einem anderen RPi kompilieren. Wie komme ich an das Installationspaket, um es auf einen anderen Pi zu übertragen und wie wird es dann dort installiert?
    3. Bei "Set Local Bridge" eth0 auswählen. - Der Pi hat nur ein Interface. Werden USB2LAN-Adapter vom Pi erkannt und könnte das Bridging auch darauf erfolgen? Ist das performanter?


    1. aus dem makefile
    2. kopiere doch einfach das gesamte (fertig kompilierte) ./SoftEtherVPN und führe auf dem anderen System "make install" aus
    3. Erste Frage: logisch (wenn die Treiber da sind!). 2. Frage: Nö. USB ist lahm auf dem Pi. Aber wenn Du keine Ahnung hast: Nicht basteln, Standards (eth0) nutzen!

    Edited once, last by rlse ().


  • Genau das benötige ich, den PI über VPN zu erreichen.
    Wie macht man das genau? Das sind 3 Beispiele, wie muss man da genau vorgehen?

  • Da bin ich wieder der neue unwissende,


    ich habe mir diesen Server "nachgebaut" da ich von meinem Windows-Pc auf Arbeit zuhause zugreifen kann aber ich habe jetz 2 Probleme:


    • irgendwie muss ich es schaffen, das der Server automatisch beim Neustart des Pi getartet wird aber ich weiß nicht wie, da linux nicht meine Welt ist und ich noch absolut in den Anfagsschuhen stecke > Bin aber lernfähig, genauso geht es mir mit Englich
    • Ich konnte zwar den User einrichten aber ich kann nicht von "draußen" zugreifen, der Pckommt zwar an (sehe ich im Router) aber weiter auch nicht er wird nicht ins Netzwerk gelassen

    wer kann mir helfen.

  • Hallo Andreas,


    Du musst auf Deinem Router eine Port-Weiterleitung (Port Forwarding) einrichten. Wie das geht, steht in dessen Betriebsanleitung.


    Mach das aber nur, wenn Du weißt, was Du das tust. Denn jeder, der die IP-Adresse Deines Routers kennt, ist dann auch auf dem RPi...



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Danke euch beiden für die Antworten, was ich im Router mache, ist mir vollkommen bewusct, auch das ich Löcher in mein Firewall haue. Wenn der Server alleine starten sollt, habe ich bestimmt irgentwo einen Fehler gemacht und werde Morgen nochmal von vorne anfangen (Übung macht den Meister ;) )
    Muss ich eigentlich das erzeugte Zertifikat installieren? welches Protokoll muss ich auf Firmenseite einstellen und welchen VPN Typ?


  • Ich hätte 3 Fragen, kann man die Standartports ändern ? Wie bei OpenVPN? Ich persönlich möchte halt nicht die Standartports nutzen :)


    Wenn ich das richtig verstanden habe wird der Pi als Bridge benutzt d.h ich kann von meinem clienten aus auf alle Geräte im Netzwerk zugreifen oder ? Das versuche ich nämlich schon die ganze Zeit per OpenVPN zu lösen aber irgendwie klappt es nicht :(


    Meine dritte Frage wäre hält könnte man zwei Pis verbinden so das man zwei komplette Netzwerke verbinden kann ?


    Viele Grüße


    Sonny

  • Ich schon wieder, und schon wieder eine Frage, die ich nicht beantworten kann mit


    Code
    sudo vpnserver start

    starte ich den VPN Server, aber wie halte ich Ihn wieder an, da ich mal wieder in Urlaub fahren will, benötige ich Ihn eine weile nicht und wollte ihn anhalten. kann mir einer den Befehl geben.


    Danke


    Auch und evtuell auch was ich machen muss, dass der Server nicht mehr im Autostart drinn ist.

  • Hallo, ich hoffe mein Anliegen passt hier zum Thema, ansonsten bitte verschieben.


    Ich habe die letzten Tage damit verbracht, versucht auf meinen Raspi eine VPN-Verbindung einzurichten. Unter anderem mit Hilfe dieser Videos:

    External Content www.youtube.com
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.

    External Content www.youtube.com
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.

    nur leider ohne Erfolg. Ich bekomme absolut keine Verbindung von meinem iPhone 5S aufgebaut.


    Als Router ist ein Speedport W724V TypA im Einsatz.


    Diese Anleitung hier beschreibt wieder eine andere herangehnsweise, dir mir schon etwas kompliziert/komplex ist.
    kann mir das jemand von euch auch extern einrichten?


  • ... eine VPN-Verbindung einzurichten. ...


    Da bei mir youtube geblockt ist und ich auch kein iPhone habe, ... mit welcher VPN-Software auf deinem PI?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Hallo,


    ich habe mich gerade an dem Projekt versucht. Leider komme ich schnell zum Schluß.
    An folgendem Punkt geht es nicht weiter:


    pi@raspberrypi:~ $ cd SoftEtherVPN/
    pi@raspberrypi:~/SoftEtherVPN $ make


    cc -DNDEBUG -DVPN_SPEED -DUNIX -DUNIX_LINUX -D_REENTRANT -DREENTRANT -D_THREAD_SAFE -D_THREADSAFE
    -DTHREAD_SAFE -DTHREADSAFE -D_FILE_OFFSET_BITS=64 -I./src/ -I./src/Cedar/ -I./src/Mayaqua/ -O2 -fsigned-char
    -c src/Mayaqua/Encrypt.c -o tmp/objs/Mayaqua/Encrypt.o
    src/Mayaqua/Encrypt.c:127:25: fatal error: openssl/ssl.h: No such file or directory
    #include <openssl/ssl.h>
    ^
    compilation terminated.


    Makefile:77: recipe for target 'tmp/objs/Mayaqua/Encrypt.o' failed
    make: *** [tmp/objs/Mayaqua/Encrypt.o] Error 1


    pi@raspberrypi:~/SoftEtherVPN $



    Hat einer eine Ahnung was da falsch ist?


  • Danke


    ist er damit noch im Autostart drinn, also nach einem Stromausfall wieder gestartet wenn ja wie bekomme ich ihn da raus


    Lieber Andreas
    Du kannst

    Code
    chmod 755 /etc/init.d/vpnserver
    sudo update-rc.d vpnserver defaults
    sudo reboot


    eintippen, dann sollte er eigentlich beim nächsten aufstarten automatisch laden.


    Wenn du es ausschalten, also aus dem autostart nehmen willst, kannst du einfach

    Code
    sudo update-rc.d vpnserver remove
    sudo reboot


    ausführen.


    Testen kannst du es direkt nach dem Neustart mit

    Code
    ps aux | grep vpnserver


    herzliche Grüsse
    Summervogel