OpenVPN: Unterschied zwischen den Versionen

4.934 Bytes hinzugefügt ,  8. Februar 2021
ungepflegt?
Keine Bearbeitungszusammenfassung
(ungepflegt?)
 
(64 dazwischenliegende Versionen von 11 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== Überblick ==
{{Ungepflegt|Diese Seite ist > 10 Jahre alt und vermutlich nicht mehr aktuell}}
OpenVPN leitet IP-Verbindungen durch unsichere Netze mithilfe kryptographisch gesicherter Tunnel. Die Nutzdaten werden mit SSL / TLS verschlüsselt, wodurch eine hohe Abhörsicherheit erzielt wird. Die OpenVPN-Software läuft als Hintergrundprozeß ("Daemon"), die Anbindung an den IP-Stack des jeweiligen Betriebssystemes wird durch einen Tunnel-Driver hergestellt.
[[Kategorie:Ungepflegt]]


Der Vorzüge von OpenVPN gegenüber PPTP oder IPsec sind Portabilität, offene Standards und einfache Konfiguration. Für folgende Systeme ist OpenVPN verfügbar:
Ein  [http://de.wikipedia.org/wiki/Virtual_Private_Network VPN] (virtuelles privates Netzwerk) baut einen verschlüsselter Tunnel von Deinem Rechner zu einer vertrauenswürdigen Gegenstelle im Internet auf. Sämtlicher Datenverkehr von Deinem Rechner wird durch den Tunnel geschickt. Damit ist automatisch '''alles''' verschlüsselt, auf der WLAN-Strecke sind die Daten also sicher.
* Linux: In den meisten Distributionen vorhanden.
* Windoze: [http://openvpn.se/ GUI + Installer]  
* Mac OS X: [http://tunnelblick.net/ Tunnelblick]


Ein VPN besteht aus:
== Windows ==
* Einem '''Server''', der den Zugang zum virtuellen Netz kontrolliert und das Routing zwischen den Clients und Nicht-VPN-Netzen regelt,
=== OpenVPN runterladen und installieren ===
* Mehreren '''Clients''', die durch einen VPN-Tunnel mit dem Server kommunizieren. Mit Umweg über den Server ist so auch eine Client-zu-Client-Kommunikation möglich, sofern die Routing-Regeln des Servers dies zulassen.
* Lade Dir von [http://openvpn.se/ http://openvpn.se/] die [http://openvpn.se/files/install_packages/openvpn-2.0.9-gui-1.0.3-install.exe letzte stabile Version der  OpenVPN GUI] herunter.
* Den Installer <code>openvpn-2.0.5-gui-1.0.3-install-auto_xp64.exe</code> starten
:[[Bild:Open vpn gui installation 1.png]]
* Lizenzen akzeptieren
:[[Bild:Open vpn gui installation 2.png]]
* Alle Optionen anwählen, bis auf "Hide the TAP-Win32 Virtual Ethernet Adapter". '''"My Certificate Wizard" wird unbedingt gebraucht.
:[[Bild:Open vpn gui installation 3.png]]
* Installationsordner auswählen
:[[Bild:Open vpn gui installation 4.png]]
* Ein bisschen warten ...
:[[Bild:Open vpn gui installation 5.png]]
* Der Treiber muss installiert werden, sonst funktioniert OpenVPN nicht...
:[[Bild:Open vpn gui installation 6.png]]
* Fertig :)
:[[Bild:Open vpn gui installation 7.png]]
:[[Bild:Open vpn gui installation 8.png]]


Im üblichen Aufbau von OpenVPN-Netzen melden sich die Clients über ein SSL-Zertifikat am Server an, wobei der CN (''Canonical Name'') des Zertifikates als Rechnername verwendet wird, um die korrekte Netzwerk-Konfiguration des Client zu bestimmen. Dies setzt voraus, daß jeder Client ein individuelles Zertifikat erhält. ''Wenn die Clients nur ins Internet wollen, wäre ein Cert für alle und ein DHCP-Pool besser.  Todo: Rausfinden, wie das geht.''
=== Schlüssel und Zertifikat ===
 
Für die sichere Kommunikation benötigst Du einen privaten Schlüssel und ein [http://de.wikipedia.org/wiki/Digitales_Zertifikat Zertifikat]. Den Schlüssel erzeugst Du Dir auf Deinem Computer, das Zertifikat schicken wir Dir.
== Einrichtung ==
Für ein einfaches Client / Server-Setup wird benötigt:
* SSL-Zertifikate für alle Beteiligten. Um die kostengünstig (umsonst) und einfach zu erhalten, sei eine Anmeldung bei [http://cacert.org CaCert] empfohlen.
* Ein Netzwerkplan für das VPN, um folgende Fragen zu klären (''Melle, bitte ergänzen''):
** Welche LAN-Adressen (nach RFC 1918) sollen für das VPN verwendet werden? ''Todo: Ausnahmeregeln für Windoze verstehen und erklären.''
** Wer darf mit wem kommunizieren? Welches Routing und welche Firewall-Regeln werden dazu auf dem Server benötigt?
** Welche Namen haben die VPN-Clients?


=== SSL-Certs ===
Starte die Schlüsselerzeugung unter '''Programme -> OpenVPN -> My Certificate Wizard'''. In trage in den Feldern folgendes ein:
Um ein Cert zu erstellen, wird ein Key benötigt. Mit OpenSSL geht das so:
:[[Bild:Openvpn certificate wizard 1.png]]
openssl genrsa -out vpn.key 2048


Anschließend wird für jeden Client und den Server ein CSR (''Certificate Signing Request'') benötigt:
* Common Name (e.g. your name): '''vorname_nachname.vpn.freifunk-potsdam.de'''. Bitte trage Deinen richtigen Namen ein. Lasse unbedingt den Teil <code>vpn.freifunk-potsdam.de</code> intakt. Wenn Du mehrere Computer absichern willst, brauchst Du für jeden einzelnen Computer ein eigenes Zertifikat.
openssl req -new -key vpn.key -out client.csr
* Mail-Address: '''deine@mail-adresse.de'''
* Country Name: '''DE'''
* State or Province: '''Brandenburg'''
* Locality Name: '''Potsdam'''
* Organisation Name: '''Freifunk Potsdam e.V.'''
* Organisational Unit Name: '''VPN'''


Es folgt ein Frage-und-Antwort-Spiel. Dabei ist die einzig wichtige Frage: <code>Common Name (eg, YOUR name)</code>. Dort den jeweiligen Rechnernamen eintragen, z.B. <code>client001.vpn.freifunk-potsdam.de</code>.
* Im Feld '''Passphrase''' musst Du ein Passwort für Deinen Schlüssel angeben. Damit wird der Schlüssel vor dem Zugriff anderer geschützt. Nur mit dem Passwort kannst Du Deinen Schlüssel benutzen.


Die CSRs klebt man der Reihe nach in das Eingabefeld bei [http://www.cacert.org/ CaCert] (unter <tt>Server Certificates</tt> &rarr; <tt>New</tt>). Postwendend erhält man ein halbwegs glaubwürdiges Zertifikat. Außerdem braucht man noch das [http://www.cacert.org/certs/root.crt Root-Cert] von CACert.
* Gib als Output Folder das Config-Verzeichnis von OpenVPN an, das ist i.d.R. '''C:\Programme\OpenVPN\config'''.


Die Gültigkeitsdauer der Zertifikate beträgt 6 Monate bis 2 Jahre, abhängig von den ''Assurance''-Punkten des Antragstellers.  
Jetzt kannst Du mit '''Create Request''' Deinen Schlüssel und einen Zertifikatsrequest erzeugen. Ein neues Fenster enthält den Request.
:[[Bild:Openvpn certificate wizard 2.png]]


=== Server-Config ===
Wie im Fenster zu lesen ist, findest Du
''Noch nicht fertig, weil kein VPN-Plan vorhanden''
* Deinen '''privaten Schlüssel''' unter <code>C:\Programme\OpenVPN\config\vorname_nachname_vpn_freifunk-potsdam_de.key</code>
* Deinen '''Zertifikatsrequest''' unter <code>C:\Programme\OpenVPN\config\vorname_nachname_vpn_freifunk-potsdam_de.req</code>


Die Server-Config besteht aus:
Kopiere den Request in die Zwischenablage (Knopf '''Copy to clipboard''') und schicke uns diesen per [http://wiki.freifunk-potsdam.de/Kontakt E-Mail]. Du kannst auch direkt die Datei <code>vorname_nachname_vpn_freifunk-potsdam_de.req</code> als Attatchment schicken. '''Schicke uns nicht Deinen privaten Schlüssel (*.key)!!!'''
* Der globalen Konfiguration <code>/etc/openvpn/server.conf</code>
* Einer Konfigurationsdatei pro Client in <code>/etc/openvpn/ccd</code>


Die globale Config in <code>/etc/openvpn/server.conf</code> sieht so aus:
'''Komm zu unserem [[Treffen]] und bring Deinen Personalausweis mit.''' Dort erhältst Du von uns eine Datei <code>vorname_nachname_vpn_freifunk-potsdam_de.crt</code>. Kopiere die in das Verzeichnis <code>C:\Programme\OpenVPN\config\</code>.
port 33469
proto udp
dev tun0
ca /etc/ssl/certs/cacert.org.pem
cert /etc/ssl/certs/vpn-server.crt
key /etc/ssl/private/vpn.key
dh dh1024.pem
mode server
tls-server
ifconfig 10.0.0.1 10.0.0.2
route 10.0.0.0 255.0.0.0
push "route 10.0.0.1"
user nobody
group nogroup
client-config-dir ccd
ccd-exclusive
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log


In <code>/etc/openvpn/ccd</code> befindet sich eine Konfigurationsdatei pro Client, die exakt so heißen muß wie der CN im Zertifikat des Clients, also z.B. <code>/etc/openvpn/ccd/client001.vpn.freifunk-potsdam.de</code>:
=== Konfiguration ===
ifconfig-push 10.0.1.2 10.0.1.1
Erstelle eine Textdatei <code>C:\Programme\OpenVPN\config\'''freifunk-vpn.ovpn'''</code> mit folgendem Inhalt (die Dateiendung muss .'''ovpn''' sein, nicht .'''txt'''!). Achte darauf den korrekten Dateinamen des Zertifikats und des Schlüssels anzugeben.
push "route 10.0.0.0 255.255.0.0"


=== Client-Config ===
Die Clients werden alle identisch konfiguriert, wobei jeweils die Zertifikate in <code>client.crt</code> individuelle CNs haben:
client
dev tun
proto udp
remote vpn.freifunk-potsdam.de 33469
nobind
persist-key
persist-tun
ca root.crt
cert client.crt
key vpn.key
comp-lzo
verb 3
mute 20


=== Routing / Firewall ===
<pre>client
''Todo''
dev tun
proto udp
remote vpn.freifunk-potsdam.de 1192
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert vorname_nachname_vpn_freifunk-potsdam_de.crt
key vorname_nachname_vpn_freifunk-potsdam_de.key
ns-cert-type server
comp-lzo
verb 3</pre>
 
* Erstelle mit einem Texteditor eine Datei ca.crt und kopiere das CA-Zertifikat unten dort hinein. Die Datei gehört in das Verzeichnis <code>c:\Programme\OpenVPN\config\</code>.
 
Der Inhalt der Datei <code>c:\Programme\OpenVPN\config\ca.crt</code> sollte dieser sein:
 
<pre>-----BEGIN CERTIFICATE-----
MIIEQDCCA6mgAwIBAgIJAMvturRGeNfbMA0GCSqGSIb3DQEBBQUAMIHHMQswCQYD
VQQGEwJTSTERMA8GA1UECBMIU2xvdmVuaWExEjAQBgNVBAcTCUxqdWJsamFuYTEg
MB4GA1UEChMXdnBuLmZyZWlmdW5rLXBvdHNkYW0uZGUxITAfBgNVBAsUGGluZm9A
ZnJlaWZ1bmstcG90c2RhbS5kZTEjMCEGA1UEAxMadnBuLmZyZWlmdW5rLXBvdHNk
YW0uZGUgQ0ExJzAlBgkqhkiG9w0BCQEWGGluZm9AZnJlaWZ1bmstcG90c2RhbS5k
ZTAeFw0xMDA5MTgxOTE5MTRaFw0yMDA5MTUxOTE5MTRaMIHHMQswCQYDVQQGEwJT
STERMA8GA1UECBMIU2xvdmVuaWExEjAQBgNVBAcTCUxqdWJsamFuYTEgMB4GA1UE
ChMXdnBuLmZyZWlmdW5rLXBvdHNkYW0uZGUxITAfBgNVBAsUGGluZm9AZnJlaWZ1
bmstcG90c2RhbS5kZTEjMCEGA1UEAxMadnBuLmZyZWlmdW5rLXBvdHNkYW0uZGUg
Q0ExJzAlBgkqhkiG9w0BCQEWGGluZm9AZnJlaWZ1bmstcG90c2RhbS5kZTCBnzAN
BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqa8rQJMIjBXGAt9piGCJQGPPcMFqABHa
AoYdoiGsw4hpwyUzwwiV8CDfrCCrcYqHe3dl5KJjqnPaTUafDDyAobRnlli8/vbe
sVNtrhljYCGlGeEs+LYtB3O5VsFVEojPHV7ta8AEiNliT/kryUmgwp0JKglJAv1S
orijYZbW9J8CAwEAAaOCATAwggEsMB0GA1UdDgQWBBRF6wX9Z+7jV66UFCAxw0Mn
yKo5xTCB/AYDVR0jBIH0MIHxgBRF6wX9Z+7jV66UFCAxw0MnyKo5xaGBzaSByjCB
xzELMAkGA1UEBhMCU0kxETAPBgNVBAgTCFNsb3ZlbmlhMRIwEAYDVQQHEwlManVi
bGphbmExIDAeBgNVBAoTF3Zwbi5mcmVpZnVuay1wb3RzZGFtLmRlMSEwHwYDVQQL
FBhpbmZvQGZyZWlmdW5rLXBvdHNkYW0uZGUxIzAhBgNVBAMTGnZwbi5mcmVpZnVu
ay1wb3RzZGFtLmRlIENBMScwJQYJKoZIhvcNAQkBFhhpbmZvQGZyZWlmdW5rLXBv
dHNkYW0uZGWCCQDL7bq0RnjX2zAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUA
A4GBAJeCZO4IcvcimpvCiohWzolAoYBV4mga2/ZcKcRjQNXYfuepVu1nPjDJzfVd
kT1XzCesLvlJK2ulcxdOgh6J/ULwStmu2zdOYD7Het4o2pFAewZacqA8y2FXKIVo
xFjvkROmtYrz53VXXkkpPuSbnS51M9JBT3Vwx3v1gokJogpW
-----END CERTIFICATE-----
</pre>
 
=== Verbindungsaufbau ===
* Wähle im Kontextmenü der OpenVPN GUI die Option '''connect'''.
:[[Bild:Openvpn connecting.png]]
* Nach ein paar Sekunden sollte die Farbe des OpenVPN-Icons von gelb nach grün wechseln und das Fenster ausgeblendet werden. Du bist jetzt sicher im Freifunk-Netz unterwegs :-)
:[[Bild:Openvpn connected.png]]
 
=== Fehlersuche ===
* Nur das Root-Zertifikat:
<code>VERIFY ERROR: depth=0, error='''unable to get local issuer certificate''': /CN=vpn.freifunk-potsdam.de</code>
* Nur das class3-Zertifikat
<code>VERIFY ERROR: depth=1, error='''unable to get issuer certificate''': /O=CAcert_Inc./OU=http://www.CAcert.org/CN=CAcert_Class_3_Root</code>
 
=== Windows ===
* Unbedingt darauf achten, daß alle Config-/Zertifikats-/Text-Dateien "without Byte Order Mark (BOM)" (also am besten als reines UTF-8) im Editor abgespeichert werden, sonst regnet's unplausibel klingende Fehlermeldungen.
 
== Mac OS X ==
... bitte die Doku für Mac OS ergänzen :)
 
* [http://www.tunnelblick.net/ Tunnelblick] ist der Client der Wahl unter Mac OS X
 
== Linux ==
=== Konfiguration ===
* Erzeuge Dir einen privaten Schlüssel
$ openssl genrsa -out vorname_nachname.key 2048
* Erzeuge Dir einen Certificate Request
$ openssl req -new -key vorname_nachname.key -out vorname_nachname.req
* Die Konfiguration liegt unter <code>/etc/openvpn/'''client.ovpn'''</code>
* kopiere die Dateien <code>vorname_nachname.cert</code> und <code>vorname_nachname.key</code> in dieses Verzeichnis
* Lade das [https://www.cacert.org/certs/class3.crt class3] und [https://www.cacert.org/certs/root.crt class1] Root-Zertifikat von [http://www.cacert.org/index.php?id=3 cacert.org] herunter:
$ wget http://www.cacert.org/certs/root.crt
$ wget https://www.cacert.org/certs/class3.crt
* Kopiere beide Zertifikate in eine Textdatei:
$ cat root.crt class3.crt > ca.crt
 
=== Routing ===
* wenn du unter Linux den Konsolen OpenVPN Client nutzt, kann es sein, dass er die Routen nicht automatisch setzen kann. Falls das so ist, ändere die Konfigurationszeile <code>remote vpn.freifunk-potsdam.de 1194</code> durch <code>remote 78.47.210.100 1194</code> (halt die IP von iggy) und gebe folgendes in die Shell ein:
 
* lösche alte default Route (in dem Beispiel ppp0, was eine Modemschnittstelle ist). wenn ihr nicht wisst was eure default Route ist schaut mit 'route -n' nach
route del default ppp0
* Den Weg zu iggy (VPN Server) weisen:
route add -host 78.47.210.100 dev ppp0
* Nun das VPN starten (yourConfig ist eure Konfigurationsdatei):
openvpn --config [yourConfig].ovpn 
* Default Route für alle INet Anfragen auf den VPN Tunnel zeigen lassen:
route add default tun0
* Wenn man wie in meinem Fall durch Einwählen über das Handy im VPN des Netzbetreibers seid, dann ist dessen DNS natürlich nicht mehr erreichbar. Damit der Rechner weiterhin Domains auflösen kann gibt man ein:
echo "nameserver 141.1.1.1" > /etc/resolv.conf
Nun sollte es funktionieren. Bei Problemen meldet euch bei uns - am Besten bei einem [[Treffen]] oder auf der [[Kontakt#Mailingliste|Mailingliste]]
 
== Eigener Server ==
Das Funktionsprinzip und einige Hinweise zum Aufsetzen eines eigenen Servers erfahrt ihr unter [[OpenVPN-Server]]
 
[[Kategorie:Technik]]
 
[[Kategorie:Technik]]
51

Bearbeitungen