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 )
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.
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:
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
ö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.
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.
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
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
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
(damit wird die Config sauber geschrieben)
Nun noch ein kleines init.d Schript
sudo nano /etc/init.d/vpnserver
#unten stehendes Skrip reinkopieren
STRG+X
sudo update-rc.d vpnserver defaults
sudo reboot
#!/bin/sh
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
DAEMON=/usr/bin/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
;;
stop)
$DAEMON stop
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
Alles anzeigen
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.