OpenVPN
Inhaltsverzeichnis |
Vorwort
Mit der Software OpenVPN läßt sich eine gesicherte Verbindung zwischen dem Opennet-Gateway und dem Computer des Endbenutzer herstellen (ein sog. Virtuelles Privates Netz). Die Anleitung beschreibt die Konfiguration von OpenVPN auf Deinem eigenen Computer, alternativ kannst Du auch das vorkonfigurierte OpenVPN auf dem Accesspoint nutzen. Bei Verwendung eines mobilen Notebooks muß OpenVPN auf dem Notebook installiert werden.
DISCLAIMER - Keine öffentliche Zertifizierungsstelle!
Die Nutzung der auf Anfrage von der Opennet Initiative ausgestellten Zertifikate ist nur für Opennet-interne Zwecke sinnvoll. An uns gestellte Anfragen für Zertifikate für Nutzung für Opennet-fremde Zwecke demonstrieren ein grundlegendes Unverständnis der benutzten Algorithmen und Technologien beim Anfragesteller, und werden von uns nicht bearbeitet.
Installation
Nach dem Download die entsprechenden Dateien installieren und den jeweiligen Installationsanleitungen folgen.
Windows: http://openvpn.net/download.html + Graphische Benutzeroberfläche http://openvpn.se/download.html (Unter Windows-XP erscheint eventuell ein Warnhinweis, dass ein Treiber nicht für Windows-XP zertifiziert ist, er kann ignoriert werden.)
Linux: http://openvpn.net/download.html + Linux-Nutzer achten darauf, dass TUN/TAP-Unterstüzung durch Kernel bereit gestellt wird (Modul tun, Kernel-Option CONFIG_TUN bzw. "Universal TUN/TAP device driver support").
Mac OS: http://tunnelblick.net/ (OpenVPN mit graphischer Nutzerschnittstelle, kann auch per Homebrew installiert werden)
Zertifikat erstellen
Für die Verschlüsselung und Authentifizierung innerhalb des Opennets ist ein digitales Zertifikat (Cert) und ein digitaler Schlüssel (Key) notwendig. Um das Zertifikat für das Opennet erstellen zu können, musst du zuerst auf deinem Rechner einen Key erzeugen. Mit dem von dir erzeugten Key wird dann eine Request-Datei (Certificate Sign Request - .csr) erstellt. Diese Request-Datei wird an csr@opennet-initiative.de geschickt.
Hier wird daraus dann mit Hilfe des Stamm-Zertifikates vom Opennet Dein Zertifikat (.crt Datei) erstellt. Das ist dann durch die Opennet- CA beglaubigt. Diese Zertifikate dienen ausschließlich der Absicherung des Opennets.
Windows
Du öffnest unter Windows eine Eingabeaufforderung (Startmenu: Ausführen: cmd) und gibst folgendes ein (jede Zeile mit Enter beenden | OpenVPN wurde hier unter c:\programme\openvpn installiert, also erste Zeile entsprechend anpassen):
cd c:\programme\openvpn\easy-rsa\ init-config.bat vars.bat mkdir keys openssl req -days 3650 -nodes -new -keyout keys\VornameNachname.key -out keys\VornameNachname.csr -config openssl.cnf
Es wurden jetzt die notwendige Konfigurationsdatei erstellt, die Umgebungsvariablen geladen und das Verzeichnis keys im Installationsordner von OpenVPN erstellt. Zuletzt wird eurer Schlüssel und ein Zertifikatsantrag erstellt. Ihr müsst dabei einige Angaben ausfüllen.
An dem Beispiel musst du nur folgendes ändern:
- Organization Name: deinen Namen (zusammen geschrieben, keine Sonderzeichen)
- Common Name: muss aus Gründen der eindeutigen Zuordnungsbarkeit der OpenVPN IP Addressen zum verantwortlichen Nutzer der Konvention XX.aps.on oder XX.mobile.on entsprechen - und dem beantragenden Nutzer muss die entsprechende Opennet-IP Adresse (192.168.1.XX bzw. 192.168.7.XX) bereits zugeordnet sein.
- Email Address: deine E-Mail-Adresse
- A challenge password: Wenn du hier ein Passwort angibst, wird jedesmal beim Öffnen der OpenVPN-Verbindung danach gefragt. Kann leer gelassen werden.
Beispiel:
Loading 'screen' into random state - done Generating a 1024 bit RSA private key ...................++++++ ....++++++ writing new private key to 'keys\VornameNachname.key' You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. Country Name (2 letter code) [US]:de State or Province Name (full name) [CA]: Mecklenburg-Vorpommern Locality Name (eg, city) [SanFrancisco]: Rostock Organization Name (eg, company) [FortFunston]: Vorname Nachname Organizational Unit Name (eg, section) []: Opennet User Common Name (eg, your name or your server's hostname) []: 1.99.aps.on Email Address [mail@host.domain]: du@provider.de Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from openssl.cnf Loading 'screen' into random state - done
Im Verzeichnis keys/ liegt dann dein eigener Schlüssel VornameNachname.key und die Request-Datei namens VornameNachname.csr. Diese Datei (und nur diese Datei) schickst du jetzt an die Opennet CA Das nur für Opennet Zwecke gültige signierte Zertifikat kommt dann per E-Mail zurück. Da es manuell erzeugt werden muss, bitte etwas Geduld.
Dazu musst du dir noch die Opennet-CA Datei downloaden und du kommst insgesamt auf vier Dateien:
- ca.crt
- VornameNachname.key
- VornameNachname.csr
- VornameNachname.crt
Linux / Mac OS
In einem beliebigen Verzeichnis (z.B. Homeverzeichnis) den Request erstellen mit
openssl req -days 3650 -nodes -new -keyout VornameNachname.key \ -out VornameNachname.csr -config /etc/ssl/openssl.cnf
Wenn das Verzeichnis /etc/ssl nicht existiert, und Openssl installiert ist, liegen die Dateien auch in /usr/share
Mit "ln -s /usr/share/ssl /etc/ssl" einen Link erstellen (als root), oder die Dateinamen entsprechend anpassen.
Wenn man bei -keyout und -out kein Verzeichnis angegeben hat, finden sich die Dateien im aktuellen Verzeichnis wieder.
Das übrige Vorgehen ist identisch mit dem vorgegangen Windows-Abschnitt.
Konfiguration
Der folgende Abschnitt beschreibt die für Opennet erforderlichen oder günstigen Einstellungen in der OpenVPN Konfigurationsdatei. Diese lässt sich beim Aufruf von OpenVPN mit der --config Option angeben. Alle der Optionen können auch direkt beim openvpn-Aufruf als Argumente angegeben werden.
Windows
- config-Ordner öffnen -->c:\programme\openvpn\config
- rechte Maustaste --> "Neu" --> "Textdokument"
- Textdokument.txt öffnen --> in den Editor folgende Angaben einfügen
client dev tun proto udp remote-cert-tls server remote 192.168.0.247 1600 nobind user nobody #für Linux weiter unten opennet.conf nachlesen group nobody #für Linux weiter unten opennet.conf nachlesen persist-key persist-tun ca C:/Programme/OpenVPN/easy-rsa/keys/ca.crt cert C:/Programme/OpenVPN/easy-rsa/keys/XX.crt key C:/Programme/OpenVPN/easy-rsa/keys/XX.key compress redirect-gateway local
- XX muss nun durch den jeweiligen Dateinamen von der .crt und .key Datei ersetzt werden --> siehe c:\programme\openvpn\easy-rsa\keys
- "Speichern" und Editor schließen
- nun muss Textdokument.txt noch umbenannt werden in z.B. client.ovpn
Linux
Die Zertifikate, Schlüssel und Konfigurationsdatei legt mal nach /etc/openvpn/, die sieht dann etwa wie folgt aus
/etc/openvpn/ opennet.conf - OpenVPN Konfiguration für Opennet 21_aps.csr - Certificate Signing Request (nicht mehr benötigt) 21_aps.key - Privater Schlüssel des AP21-Zertifikats 21_aps.crt - AP21-Zertifikat (mit öffentlichem Schlüssel) ca.crt - Opennet-CA-Zertifikat (CA = Zertizifierungstelle)
Das Starten und Stoppen der VPN-Tunnel ist denkbar sein, über die Init-Skripte können alle Tunnel gestartet werden, für die im etc-Verzeichniss von OpenVPN eine conf-Datei liegt:
/etc/init.d/openvpn start|stop
Alternativ kann die Opennet VPN-Verbindung auch mit der Hand gestartet werden:
openvpn --config /etc/opennet.conf
Alle Ausgaben laden standardmäßig in der Console oder im Syslogfile (/var/log/messages). Sie kann aber auch mit appendfile in eine Datei umgeleitet werden, siehe OpenVPN-Manpage.
MacOS
- Tunnelblick z.B. per Homebrew installieren: brew cask install tunnelblick
- in der Tunnelblick Oberfläche die Konfigurationsdatei einfügen (siehe unten)
- Zertfikikat & Co analog Linux ablegen, die Pfad fuer Tunnelblick ist ~/Libary/openvpn/
- Verbindung über Tunnelblick starten/stoppen
Konfigurationsdatei (opennet.conf)
client dev tun proto udp remote-cert-tls server remote <gateway> 1600 nobind user nobody group nobody persist-key persist-tun ca <ca-filepath> cert <cert-filepath> key <key-filepath> compress route 192.168.0.0 255.255.0.0 net_gateway redirect-gateway
- <gateway> durch die IP-Adresse oder DNS-Name des VPN-Servers ersetzen
- <*-filepath> durch den Pfad zu den Dateien ersetzen
Beschreibung der Konfigurationsdatei
Ein paar Erläuterungen, für die Interessierten:
client
- tls-client Modus
- Annahme von begrenzten Konfigurationsbefehlen vom Server
dev tun
- Nutze ein beliebiges IP-Tunnel device
proto udp
- UDP Protokoll
remote-cert-tls server
- Bestehe auf ein server-type certificate beim peer
remote 192.168.0.<gw-ip> 1600
- einen Gatewayserver entsprechend Opennet Server eintragen
- UDP-Port 1600
nobind
- Beliebiger lokaler Port
user nobody group nobody
- Wechsle prozess-uid und gid zu der von "nobody" nach Programmstart
- Erhöhung der Sicherheit für das lokale System durch Rechteverringerung des Prozesses
- Wird von der windows-version grundsätzlich ignoriert
- Bei der naiven Anwendung unter linux entsteht das Problem das beim Verbindungsabbau, die "ip route add/del" Kommandos fehlschlagen, weil der User nobody keine Rechte hat. Dies resultiert in z.B. einer fehlenden Default Route nach Verindungsabbau. Als Lösung kann man entweder diese Zeilen auskommentieren oder dem nobody User Rechte verschaffen (siehe https://community.openvpn.net/openvpn/wiki/HOWTO#UnprivilegedmodeLinuxonly).
persist-key>
- Versuche nicht key-files nach tunnel-resets erneut zu lesen (eventuell durch user/group Wechsel nicht mehr möglich)
ca <ca-filepath> cert <cert-filepath> key <key-filepath>
- <*-filepath> Ist mit Pfaden zu den relevanten Dateien ersetzen
- Das Zertifikat der Opennet-CA server_certchain.crt
- Das Zertifikat gibt es als Antwort auf eine mail des Certificate Signing Requests (CSR) an [1]
- Der key wird zusammen mit dem CSR von openssl erzeugt
compress
- Datenkomprimierung
redirect-gateway
- ersetzt die Default-Route durch den Tunnelendpunkt
- sämtlicher Datenverkehr, für den keine spezielle Route gesetzt ist, wird nun durch den Tunnel geleitet
Portmapping
Die Nutzerdokumentation findet sich unter Portforwarding. Die technische Umsetzung wird unter Server Installation/OpenVPN beschrieben.
Externer VPN Zugang
Falls man aus dem Internet sich an das Opennet koppeln will, etwa um Wartungsarbeiten durchzuführen oder einen gesicherten Internet Tunnel aufzubauen, geht man wie oben beschrieben vor. Allerdings ist die Konfiguration leicht abweichend:
remote vpn.opennet-initiative.de 1600
OLSR wird in diesem Fall nicht benötigt.