Benutzer-Werkzeuge

Webseiten-Werkzeuge


howtos:pivpn

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
howtos:pivpn [2017/09/14 12:39] – [Konfiguration] morquaihowtos:pivpn [2022/02/18 08:09] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 55: Zeile 55:
   push "dhcp-option DOMAIN fritz.box   push "dhcp-option DOMAIN fritz.box
 ergänzt werden.  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, ich überlasse das mal dem freundlichen Herrn Google.
 +Wie kommen wir nun an eine Konfigurationsdatei? Bisher haben wir nur über Openvpn gesprochen, aber nicht über PiVPN. PiVPN liefert uns ein paar hilfreiche Tools zur Pflege und zum Betrieb unseres VPN. Um nicht in endlosen Nächten die Konfigurationsoptionen für einen OpenVPN Client zu lesen und zu verstehen, geben wir einfach dem Befehl
 +  pivpn --help
 +  ::: Control all PiVPN specific functions!
 +  :::
 +  ::: Usage: pivpn <command> [option]
 +  :::
 +  ::: Commands:
 +  :::  -a, add [nopass]     Create a client ovpn profile, optional nopass
 +  :::  -c, clients          List any connected clients to the server
 +  :::  -d, debug            Start a debugging session if having trouble
 +  :::  -l, list             List all valid and revoked certificates
 +  :::  -r, revoke           Revoke a client ovpn profile
 +  :::  -h, help             Show this help dialog
 +  :::  -u, uninstall        Uninstall PiVPN from your system!
 +  
 +und erhalten eine Liste der verfügbaren Optionen. Eine Client Konfigurationsdatei wird z.B. mit 
 +  pivpn -a
 +  Enter a Name for the Client:  meiniphone
 +  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 '/etc/openvpn/easy-rsa/pki/private/meiniphone.key.Pc9twDGhFw'
 +  Enter PEM pass phrase:
 +  Verifying - Enter PEM pass phrase:
 +  -----
 +  Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.cnf
 +  Check that the request matches the signature
 +  Signature ok
 +  The Subject's Distinguished Name is as follows
 +  commonName            :ASN.1 12:'meiniphone'
 +  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's cert found: meiniphone.crt
 +  Client's Private Key found: meiniphone.key
 +  CA public Key found: ca.crt
 +  tls-auth Private Key found: ta.key
 +  ========================================================
 +  Done! meiniphone.ovpn successfully created!
 +  meiniphone.ovpn was copied to:
 +    /home/pi/ovpns
 +  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, also außerhalb des Heimnetzes. Die Installation von PiVPN klappt auch problemlos unter Debian, da ja die Standardpakete aus dem Repository des Servers installiert werden und Raspbian auf Debian basiert.
 +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, der sich von zu Hause mit dem Internetserver verbindet. Auch der Client ist in der Lage Routen zu propagieren, also habe ich auf dem Raspberry Pi dafür gesorgt, das Datenpakete von einem Adapter (das Tunnel Device des OpenVPN) zu einem anderen weitergeleitet werden dürfen. In der Datei /etc/sysctl.conf macht dies der Eintrag
 +  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
 +  /sbin/iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
 +  /sbin/iptables -A FORWARD -i wlan0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
 +  /sbin/iptables -A FORWARD -i tun0 -o wlan0 -j ACCEPT
 +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://packages.debian.org/iptables-persistent|iptables-persistent]] dafür zu sorgen, das nach dem Netzwerk Start auch die Firewall Regeln aktiv sind.
 +  sudo apt-get install iptables-persistent netfilter-persistent
 +Die Frage, ob die aktuellen Regeln übernommen werden sollen, kann man getrost mit "Yes" beantworten. In den Dateien /etc/iptables/rules.v4 und /etc/iptables/rules.v6 findet man nun die aktuell gültigen Einstellungen, die beim Reboot aktiviert werden. Die Befehle
 +  sudo iptables-save >dateiname
 +  sudo iptables-restore <dateiname
 +dienen dazu die aktuellen Regeln zu sicher oder wiederherzustellen. Um geänderte Regeln für den Reboot zu speichern muss die Datei /etc/iptables/rules.v4 mit den Befehlen
 +  sudo iptables-save >/etc/iptables/rules.v4
 +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 /etc/openvpn/client-config angelegt werden. Der Dateiname MUSS mit dem Namen der beim "pivpn -a" Befehl vergeben wird übereinstimmen. Der Inhalt ist wie folgt:
 +  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, das der Raspberry Pi immer die oben genannte Adresse 10.8.0.250 erhält. Gute Frage, hier die Antwort. Eine weitere Konfigurationsdatei wird auf dem Server benötigt, die ihn anweist dem Raspberry Pi immer die gleiche IP zuzuweisen. Die Datei heißt \\ 
 +/etc/openvpn/client-config/dhcp-persist und muss im ersten, durch Komma getrennten, Feld den korrekten Namen den man bei "pivpn -a" vergeben hat, enthalten.
 +  client_name,10.8.0.250
 +"client_name" ist also durch diesen Namen zu ersetzen. \\
 +Wenn ich nichts vergessen habe und alles richtig installiert und konfiguriert wurde funktioniert jetzt alles. Ein weiteres "Heimnetz" einzubinden, z.B. das der Freundin, ist jetzt nicht mehr weiter schwierig, oder?
 +
 +
 +
howtos/pivpn.1505392793.txt.gz · Zuletzt geändert: 2017/09/14 12:39 von morquai