Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
howtos:pivpn [2017/09/14 10:29] – [Installation] morquai | howtos:pivpn [2017/09/14 14:42] – [Konfiguration] morquai | ||
---|---|---|---|
Zeile 30: | Zeile 30: | ||
* Das Protokoll das benutzt werden soll, zur Auswahl stehen UDP oder TCP, die jeweils Vor- und Nachteile bieten. Ich persönlich ziehe UDP vor, das es ein verbindungsloses Protokoll ist und eine bessere Performance bietet. TCP bietet den Vorteil, das man es besser verstecken kann, falls eine Firewall zu umgehen ist. In diesem Fall empfiehlt es sich, den TCP Port 443 und port-sharing mit dem Webserver zu verwenden. | * Das Protokoll das benutzt werden soll, zur Auswahl stehen UDP oder TCP, die jeweils Vor- und Nachteile bieten. Ich persönlich ziehe UDP vor, das es ein verbindungsloses Protokoll ist und eine bessere Performance bietet. TCP bietet den Vorteil, das man es besser verstecken kann, falls eine Firewall zu umgehen ist. In diesem Fall empfiehlt es sich, den TCP Port 443 und port-sharing mit dem Webserver zu verwenden. | ||
* Die Einrichtung einer dynamischen Adresse ist ebenfalls von Nöten. Es gibt diverse kostenlose Anbieter solcher Dienste, welcher der Beste ist hängt von der Ünterstützung im heimischen Router ab. | * Die Einrichtung einer dynamischen Adresse ist ebenfalls von Nöten. Es gibt diverse kostenlose Anbieter solcher Dienste, welcher der Beste ist hängt von der Ünterstützung im heimischen Router ab. | ||
- | ===== Überschrift | + | ===== Installation |
- | b | + | curl -L https:// |
+ | |||
+ | Das war es schon, es werden im Verlauf der Installations eingie Fragen gestellt, deren Antworten für den " | ||
+ | \\ | ||
+ | Nach erfolgter Installation ist [[http:// | ||
+ | \\ | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
===== Konfiguration ===== | ===== Konfiguration ===== | ||
- | c | + | Wir haben nun ein funktionierendes VPN (__V__irtual __P__rivat __N__etwork) in dem alle teilnehmenden Geräte miteinander verbunden sind. Alle Teilnehmer (Clients) benutzen den Internetzugang des OpenVPN Servers (in diesem Fall unser Raspberry Pi) und jeglicher Internetzugriff erfolgt über das heimische Netz. Dabei ist der Verkehr zwischen OpenVPN Client und OpenVPN Server immer verschlüsselt. Damit ist auch in öffentlichen HotSpots eine gesicherte Verbindung gewährleistet.\\ |
+ | Manchmal wollen wir aber mehr, z.B. Zugriff auf andere Geräte in unserem Heimnetz, das NAS Laufwerk ist dafür ein Beispiel. Um Zugriff auf das Heimnetz zu erhalten, muss eine " | ||
+ | Dazu muss die Konfigurationsdatei des OpenVPN Servers (etc/ | ||
+ | |||
+ | push "route 192.168.178.0 255.255.255.0 10.8.0.1" | ||
+ | route 192.168.178.0 255.255.255.0 10.8.0.1 | ||
+ | |||
+ | Damit kommen wir nun über den VPN an die Geräte in unserem Heimnetz, können diese aber nicht mit einem Namen ansprechen. Sollte der heimische Router einen DNS Service für das Heimnetz (wie z.B. die Fritz Box) zur Verfügung stellen, können die Geräte auch über Namen angesprochen werden. In der / | ||
+ | push " | ||
+ | push " | ||
+ | ergänzt werden. | ||
+ | |||
+ | ===== Clients anlegen und verwalten ===== | ||
+ | Der Server läuft, kommen wir nun zu den Clients. Auf jedem Client muss die OpenVPN Software installiert werden und eine Konfigurationsdatei übergeben werden. Diese Konfigurationsdatei wird für den OpenVPN Client benötigt. Die Installation der OpenVPN Software zu beschreiben erübrigt sich, das sich diese je nach Plattform unterscheidet, | ||
+ | Wie kommen wir nun an eine Konfigurationsdatei? | ||
+ | pivpn --help | ||
+ | ::: Control all PiVPN specific functions! | ||
+ | ::: | ||
+ | ::: Usage: pivpn < | ||
+ | ::: | ||
+ | ::: Commands: | ||
+ | ::: -a, add [nopass] | ||
+ | ::: -c, clients | ||
+ | ::: -d, debug Start a debugging session if having trouble | ||
+ | ::: -l, list List all valid and revoked certificates | ||
+ | ::: -r, revoke | ||
+ | ::: -h, help Show this help dialog | ||
+ | ::: -u, uninstall | ||
+ | |||
+ | und erhalten eine Liste der verfügbaren Optionen. Eine Client Konfigurationsdatei wird z.B. mit | ||
+ | pivpn -a | ||
+ | Enter a Name for the Client: | ||
+ | Enter the password for the client: | ||
+ | Enter the password again to verify: | ||
+ | spawn ./easyrsa build-client-full meiniphone | ||
+ | Note: using Easy-RSA configuration from: ./vars | ||
+ | rand: Use -help for summary. | ||
+ | Generating a 4096 bit RSA private key | ||
+ | ..........................++ | ||
+ | ......................................................++ | ||
+ | writing new private key to '/ | ||
+ | Enter PEM pass phrase: | ||
+ | Verifying - Enter PEM pass phrase: | ||
+ | ----- | ||
+ | Using configuration from / | ||
+ | Check that the request matches the signature | ||
+ | Signature ok | ||
+ | The Subject' | ||
+ | commonName | ||
+ | Certificate is to be certified until Sep 12 12:54:03 2027 GMT (3650 days) | ||
+ | Write out database with 1 new entries | ||
+ | Data Base Updated | ||
+ | Client' | ||
+ | Client' | ||
+ | CA public Key found: ca.crt | ||
+ | tls-auth Private Key found: ta.key | ||
+ | ======================================================== | ||
+ | Done! meiniphone.ovpn successfully created! | ||
+ | meiniphone.ovpn was copied to: | ||
+ | / | ||
+ | for easy transfer. | ||
+ | ======================================================== | ||
+ | |||
+ | Damit haben wir jetzt unseren ersten Client angelegt und müssen die so entstandende Konfigurationsdatei auf den Client übertragen. Wo sie zu finden ist, sehen wir im letzten Absatz des Output. | ||
+ | |||
+ | ====== Für Experten ====== | ||
+ | Über die gängige Nutzung hinaus, Nutzung der Heimnetzes von außerhalb, habe ich folgendes Setup implementiert. Der OpenVPN Server ist auf einem KVM Server meines WebHosters mit Debian 9 installiert, | ||
+ | Das Ziel soll sein folgende Verbindung zu ermöglichen: | ||
+ | Heimnetz <- Raspberry Pi <-> OpenVPN Server <-> OpenVPN Client | ||
+ | zu realisieren. Beachte, das zwischen Heimnetz und Raspberry Pi der Pfeil nur in eine Richtung zeigt. | ||
+ | ===== Vorbereitung ===== | ||
+ | Mein Server im Internet hat also erstmal keinen Zugriff auf andere, private Netze. In meinem Heimnetz habe ich nun einen Raspberry Pi als Client implementiert, | ||
+ | net.ipv4.ip_forward=1 | ||
+ | Um dies ohne reboot zu aktivieren muss der Befehl | ||
+ | sudo sysctl -w net.ipv4.ip_forward=1 | ||
+ | abgesetzt werden. Der Eintrag in der sysctl.conf dient nur dazu das diese Einstellung nach dem reboot wieder aktiviert ist. Um uns das Leben schwer zu machen (und den Server sicher) mischt sich nun die Firewall auf dem Raspberry Pi ein, die den technisch möglichen Traffic wieder unterbindet. Die Befehle | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | sorgen dafür, das die Firewall den Traffic akzeptiert. Diese Einstellungen überleben keinen Reboot, also muss unter /etc/init.d ein Script hinterlegt werden, das diese Einstellungen nach dem Netzwerk Start wieder aktiviert. Besser (und empfohlen) ist die Methode über das Paket [[https:// | ||
+ | sudo apt-get install iptables-persistent netfilter-persistent | ||
+ | Die Frage, ob die aktuellen Regeln übernommen werden sollen, kann man getrost mit " | ||
+ | sudo iptables-save > | ||
+ | sudo iptables-restore < | ||
+ | dienen dazu die aktuellen Regeln zu sicher oder wiederherzustellen. Um geänderte Regeln für den Reboot zu speichern muss die Datei / | ||
+ | sudo iptables-save >/ | ||
+ | geändert werden. Wie das Ganze mit IPv6 funktioniert überlasse ich den man-pages. =) | ||
+ | ===== Konfiguration ===== | ||
+ | Jetzt ist der Moment gekommen, die Verbindung zu ermöglichen. Der OpenVPN Client auf dem Raspberry Pi muss dem OpenVPN Server nun mitteilen, das er eine Route in ein Netzwerk zur Verfügung stellt. Dazu muss auf dem OpenVPN Server eine neue Datei unter / | ||
+ | ifconfig-push 10.8.0.250 255.255.255.0 | ||
+ | iroute 192.168.178.0 255.255.255.0 | ||
+ | Sobald sich der Raspberry Pi am VPN anmeldet werden die entsprechenden Route an alle Clients, die sich DANACH am VPN anmelden, mitgeteilt. Auch der OpenVPN Server nimmt die Routen sofort zur Kenntnis.\\ | ||
+ | Stellt sich die Frage, wie man sicherstellt, | ||
+ | / | ||
+ | client_name, | ||
+ | " | ||
+ | Wenn ich nichts vergessen habe und alles richtig installiert und konfiguriert wurde funktioniert jetzt alles. Ein weiteres " | ||