Dies ist eine AlteSeite aus unserem UseModWiki bei Sourceforge.
Bitte überarbeite die Seite, passe die Formatierung für das JSPWiki an und entferne diesen Text.
Vielen Dank!
= OpenVPN =
OpenVPN ist ein Softwarepaket, um ein VirtualPrivateNetwork zu
realisieren. Es ist modular
aufgebaut und unterstützt dadurch verschiedene
Verschlüsselungssysteme und auch Kompression.
Das Paket ist scheinbar die einzige VPN-Lösung, die eine
TLS-Infrastruktur für
Authentifizierungen nutzen kann, die auch von SSL benutzt wird.
== Basisprotokoll, Verträglichkeit mit Firewalls ==
Als Basisprotokoll wird UPD benutzt. Einerseits hat es als
verbindungsloses Protokoll keine
Probleme, die durch die Schachtelung von Protokollen auftreten
können (TCPueberTCP),
andererseits ist UDP durch Firewalls gut zu bearbeiten, freizugeben
(nur ein Prt freigeben
und fertig) und wird, da nur ein einziger UDP-Port benutzt wird,
auch evtl. von stateful
Firewalls durchgelassen, während andere Protokolle wie GRE
(VPNmitPPTP) und IPSec
(VPNmitIPSec) von manchen Firewalls nicht richtig erkannt werden.
Hat man eine Firewall, die
dies auch nicht kann, kann man OpenVPN ab Version 2 auch über TCP
betreiben.
(Alternativen siehe auch VirtualPrivateNetwork).
== Debian-Installation ==
Eigentlich installiert man nur das '''openvpn'''-Debian-Paket und
fertig! Die Konfiguration in ''/etc/openvpn'' ist weiter unten
beschrieben.
== Bedingungen an den Kernel ==
Normale Kernel sollten bereits richtig konfiguriert sein. Für
selbstgebackene muss die Unterstützung für das tun/tap-Device
eingeschaltet werden:
Network-Device-Support / Universal TUN/TAP DEvice Driver Support
-> (Y)es oder (M)odule
Wenn tuntap als Modul erzeugt ist, muss noch mit '''modconf'''
dafür gesorgt werden, das es
auch geladen wird.
Das Modul stellt das Device /dev/net/tun zur Verfügung. Dieses muss
ggf. noch manuell angelegt werden mit:
mkdir /dev/net
mknod /dev/net/tun c 10 200
== Konfiguration für die Verbindung von 2 Rechnern ==
Im Verzeichnis ''/etc/openvpn'' wird die Konfiguration abgelegt.
Zur Verschlüsselung gibt es ein etwas komplizierteres Verfahren,
das mit SSL arbeitet und ein einfacheres, das mit festen Schlüsseln
arbeitet. Ich habe hier letzteres benutzt. Dazu muss mit
openvpn --genkey --secret /etc/openvpn/verbindung.key
eine Schlüsseldatei erzeugt werden. Diese muss sodann auf beide
beteiligte Rechner an die gleiche Stelle kopiert werden.
Dann muss eine Datei '''/etc/openvpn/verbindung.conf''' erzeugt
werden, die z.B. dieses enthält:
remote adresseder.gegenstell.le
float
port 4711
dev tun
ifconfig 192.168.4.3 192.168.4.131
persist-tun
comp-lzo
ping 30
# verb 5
secret /etc/openvpn/verbindung.key
# Key erzeugen mit folgender Zeile und dann mit scp auf den
anderen Rechner
# schaffen:
# openvpn --genkey --secret /etc/openvpn/verbindung.key
Auf der anderen Verbindungsseite müssen die ''ifconfig''-Adressen
entsprechend vertauscht werden. Damit sollte das VPN auch schon
laufen, wenn der Dienst mit '''/etc/init.d/openvpn restart''' neu
gestartet wird.
Der "remote"-Eintrag sollte aber nur auf einer Seite stehen, sonst
beschäftigt openvpn die
CPU ohne Unterlass --SusanneWenz
Will man mehrere Verbindungen aufbauen, werden einfach mehrere
''*.conf''-Dateien angelegt. Jede openvpn-Instanz läuft dann
getrennt von den anderen für einen Tunnel. Aber nicht vergessen,
dass für Jede neue "*.conf"-Datei auch ein extra Port verwendet
werden muss! Sonst geht es nicht.
Natürlich gibt es noch einige verschiedene Möglichkeiten, Parameter
anzugeben. Dazu sollte man aber am besten die Manpage zu openvpn
lesen. -- ThomasBayen
== Konfiguration als Server für mehrere Clients ==
Um OpenVPN als Server zu betreiben muß man eigene Zertifikate
anlegen und zwar eins zum Unterschreiben Eins für den
Server und für jeden Benutzer eins. Das ist einfacher als es sich
anhört:
Erstmal folgendes lesen: http://openvpn.net/howto.html#pki. Konkret
gebe ich hier nochmal in Kurzform an, welche Schritte wir gemacht
haben, um eine PKI-Infrastruktur aufzubauen:
=== Schlüsselerzeugung (z.B. auf einem dritten Rechner) ===
Die Schlüsselgenerierung kann auf einem beliebigen Rechner
stattfinden. Dies sollte nicht einer der OpenVPN-Endpunkte sein, da
man die CA (Certificate Authority) besser getrennt verwahrt (bzw.
auf eine Diskette schreibt und in den Tresor legt). Dort
installieren wir die Pakete '''openvpn''' und '''openssl''' Auf
diesem Rechner haben wir das Verzeichnis
''/etc/share/doc/openvpn/examples/easy-rsa'' nach ''/etc/openvpn''
kopiert. Dann gehen wir in dieses Verzeichnis.
Man kann die Einträge ''vars'' ganz am Ende der Datei anpassen, es
wird aber später ohnehin nochmals abgefragt.
gunzip pkitools.gz
chmod +x pkitools
. ./vars
./clean-all
./build-ca
./build-dh
Die erzeugten Schlüssel befinden sich im Unterverzeichnis ''keys''.
Hier befinden sich jetzt die Dateien '''ca.crt''' (öffentlicher
Schlüssel) und '''ca.key''' (privater Schlüssel). Der letzte Befehl
hat Diffie-Hellmann-Parameter erzeugt, diese benötigt der Server.
Nun haben wir eine Zertifikat-Autorität, d.h. eine Art
"Ober-Instanz", um damit Schlüssel zu unterschreiben. Wer im Besitz
dieses CA-Schlüssels ist, kann neue Zertifikate ausstellen. Das
wollen wir jetzt tun:
./build-key-server server
Dabei muss der "Common Name" auf '''server''' gesetzt werden (ist
bei obigem Programmaufruf schon richtig vorgegeben). Bei "challenge
Password" drücken wir einfach "Return", um auf ein solches zu
verzichten, da unser OpenVPN von selber starten soll (ohne die
Eingabe eines Passwortes abzuwarten). Auch diese Schlüssel werden
im ''keys''-Verzeichnis erstellt. Sie heissen '''server.crt'''
(öffentlich) und '''server.key''' (privat).
Einen Client-Key erzeugt man nun mit dem selben Verfahren über den
folgenden Aufruf und ähnliche Einstellungen für den Client
"client1":
./build-key client1
=== Kopieren der Schlüssel ===
Nun kopieren wir
* auf den Server (nach ''/etc/openvpn/'')
dh1024.pem (benötigt nur der Server)
ca.crt
server.crt
server.key
* auf den Client (nach ''/etc/openvpn/'')
ca.crt
client1.crt
client1.key
=== Konfigurieren von OpenVPN ===
Auf den Server kommt dann folgende '''server.conf''':
dev tap0
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
mode server
tls-server
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
keepalive 30 120
client-config-dir clientconfig
Im Verzeichnis ''/etc/openvpn/clientconfig'' kann ich
Konfigurationen für jeden Client ablegen, was allerdings bei einer
Bridge-Konfiguration normalerweise nicht nötig ist.
Auf den Client kommt folgende '''client1.conf''':
dev tap0
client
ca ca.crt
cert thinkpad_bridge.crt
key thinkpad_bridge.key
ns-cert-type server
remote bayen.mine.nu
float
resolv-retry infinite
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
keepalive 30 120
=== Bridging einrichten ===
Nun müssen wir eine Bridge sowohl auf dem Server als auch auf dem
Client einrichten. Dazu entfernen wir aus
''/etc/network/interfaces'' den auto-Eintrag für eth0 und schreiben
folgenden neuen:
auto br0
iface br0 inet static
address 192.168.230.3
netmask 255.255.255.0
pre-up openvpn --mktun --dev tap0
post-down openvpn --rmtun --dev tap0
bridge_ports eth0 tap0
Dann starten wir das Interface und dann OpenVPN neu mit
ifdown eth0
ifup eth0
/etc/init.d/openvpn restart
== Hardwarebeschleunigung ==
FranzLischka stellte die Frage nach einer Möglichkeit der
Hardwarebeyschleunigung. Eine Internet-Recherche hierzu hat
ergeben, das der einzige Ansatz hierzu unter Linux wohl über die
[http://www.cs.auckland.ac.nz/~pgut001/cryptlib/ cryptlib] von
[http://www.cs.auckland.ac.nz/~pgut001/ Peter Gutmann] führt. Diese
wird jedoch scheinbar nicht von OpenVPN benutzt. Auf
http://www.closeconsultants.com/~peter/m0n0-ovpn-wifi.html steht
allerdings, das es doch irgendwie geht.
== Links ==
* http://openvpn.net/ - die OpenVPN Homepage
* http://www.rm-f.de/drupal/node/10 - Tutorial mit Server-Keys und
Wiederrufen von Client-Keys
* http://freifunk.net/wiki/OpenVPN - Mini Howto in deutscher
Sprache
* http://www.pronix.de/pronix-935.html - gutes Tutorial mit OpenVPN
Server
*
http://www.linux-magazin.de/Artikel/ausgabe/2005/08/openvpn/openvpn.html
- Artikel im Linux Magazin