Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
howtos:pivpn [2017/09/14 10:50] – [Überschrift] morquai | howtos:pivpn [2022/02/18 08:09] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 44: | Zeile 44: | ||
===== 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 " | ||