OpenVPN (deutsch)
Einleitung: OpenVPN ist eine leicht zu implementierende und zu wartende VPN-Applikation, die bis auf das notwendige TUN- bzw. TAP-Device komplett im Userspace arbeitet. Dieses Dokument beschreibt die Installation sowohl des Servers (VPN-Gateway) als auch der Clients unter den verbreiteten Betriebssystemen Windows, Linux, Mac OS X und OpenBSD.
Was wird gebraucht?
- OpenVPN-Programm
- TUN/TAP-Schnittstelle
- Konfigurationsdatei für OpenVPN (optional, aber empfohlen)
- PKI = Public-Key-Infrastruktur (optional, für größere Installationen empfohlen)
Funktionsweise
Public-Key-Authentifizierung
Zertifizierungsstelle (CA) und Public-Key-Infrastruktur (PKI)
Certificate Revocation List (CRL) - Schwarze Liste mit ungültigen Zertifikaten
Installation
Zur Installation von Server und Client wird das openvpn-Programm und ein paar Bibliotheken benötigt. Da diese auf Server- und Clientseite die gleichen sind, reicht es eine Seite zu beschreiben. Auf der anderen Seite - also dem anderen Tunnelende - wird dann entsprechend nur die conf-Datei sowie der Schlüssel und die Zertifikate ausgetauscht.
Die Installationshinweise sind teilweise http://openvpn.sourceforge.net/install.html entnommen.
Windows
Zuerst wird das Installationspaket für OpenVPN und den TUN/TAP-Treiber von:
geholt.
Linux
Die Installation wird am Beispiel von SuSE-Linux beschrieben, sollte aber vom fähigen Systemadministrator auch auf andere Distributionen übertragen werden können.
yast -i lzo openssl openvpn
OpenVPN 2.0 aus den Quellen installieren (besser, notwendig für PKI-Auth)
- lzo-Bibliothek (für die Kompression) http://www.oberhumer.com/opensource/lzo/download/lzo-1.08.tar.gz
- OpenSSL-Bibliothek
- http://openvpn.sourceforge.net/beta/openvpn-2.0_beta*.tar.gz
SuSE Linux
yast -i openssl-devel yast -i lzo-devel (ab SuSE 9.0)
(vor SuSE 9.0 - keine lzo-Bibliothek) wget http://www.oberhumer.com/opensource/lzo/download/lzo-1.08.tar.gz tar xzf lzo-1.08.tar.gz cd lzo-1.08 ./configure make make install
# Die Version von OpenVPN ist evtl. anzupassen # (mit Browser unter http://openvpn.sourceforge.net/beta/ herausfinden) wget http://openvpn.sourceforge.net/beta/openvpn-2.0_beta15.tar.gz tar xzf openvpn-2.0_beta15.tar.gz cd openvpn-2.0_beta15 # Bei selbstübersetzter lzo-Bibliothek müssen die beiden Pfade angegeben werden: #./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib ./configure make make install
Als unprivilegierter Benutzer starten
Da OpenVPN Änderungen an den Netzwerkeinstellungen vornimmt (ifconfig/route), muss das Programm mit root-Rechten ausgeführt werden. Um den normalen Benutzern nicht das root-Passwort geben zu müssen, kann man statt dessen sudo verwenden. Als root nimmt man mit visudo folgenden Eintrag vor:
# Komma-separierte Liste der VPN-Nutzer User_Alias VPNUSER=vpnuser1, vpnuser2 # Zum testen des VPN sollte man das --daemon weglassen, # um evtl. Fehler auf stdout zu erhalten. Cmnd_Alias OPENVPN=/usr/local/sbin/openvpn --config /etc/openvpn/SAR-VPN.ovpn --daemon Cmnd_Alias KILLOPENVPN=/usr/bin/killall openvpn # NOPASSWD ist optional. # Soll der Nutzer sein Passwort eingeben muessen lautet der Eintrag wie folgt: #VPNUSER ALL=OPENVPN #VPNUSER ALL=KILLOPENVPN VPNUSER ALL=NOPASSWD:OPENVPN VPNUSER ALL=NOPASSWD:KILLOPENVPN
In diesem Beispiel wird angenommen, dass die Konfigurationsdatei unter /etc/openvpn/SAR-VPN.ovpn und das openvpn-Programm unter /usr/local/sbin/openvpn zu finden ist.
Mac OS X
Die Installation erfolgt analog zu Linux (bei fehlender lzo-Bobliothek). Die Developer-Tools müssen installiert sein! (C-Compiler, make, openssl-devel, etc.) Da Mac OS X (aka Darwin) kein TUN-Device zur Verfügung stellt, muss es nachinstalliert werden. Hier findet man eine detailierte Installationsbeschreibung und ein vorkompiliertes kext-file: http://chrisp.de/en/projects/tunnel.html
wget http://www.oberhumer.com/opensource/lzo/download/lzo-1.08.tar.gz # (oder mit Safari holen, falls wget nicht verfügbar) tar xzf lzo-1.08.tar.gz cd lzo-1.08 ./configure make make install
# Die Version von OpenVPN ist evtl. anzupassen # (mit Browser unter http://openvpn.sourceforge.net/beta/ herausfinden) wget http://openvpn.sourceforge.net/beta/openvpn-2.0_beta15.tar.gz # (oder mit Safari holen, falls wget nicht verfügbar) tar xzf openvpn-2.0_beta15.tar.gz cd openvpn-2.0_beta15 ./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib make make install
OpenBSD
Andere UNIX-Systeme (ohne TUN-Device)
Client
Frontends
- OpenVPN GUI für Windows http://www.nilings.se/openvpn/
Konfiguration
Grundsätzlich können alle Konfigurations-Parameter dem openvpn-Programm an der Kommandozeile in der Form --parameter=wert mitgegeben werden. Alternativ kann man die Konfigurations-Parameter in eine Datei zeilenweise in der Form parameter wert schreiben und den Dateinamen mit dem Parameter --config Dateiname an der Kommandozeile mitgeben, z.B.:
openvpn --config openvpn.conf
Der erste Test
Zum Testen der OpenVPN-Installation sollte man zunächst eine Shared-Secret-Authentifizierung wählen, da diese einfach zu konfigurieren ist. Mit:
openvpn --genkey --secret static.key
erstellt man einen gemeinsamen Schlüssel (static.key), den man auf die beiden OpenVPN-Rechner mit den späteren Tunnelenden kopiert.
Angenommen, der Server hat die reale IP-Adresse 192.168.0.1 und der Client die IP-Adresse 192.168.0.2 kann man folgendermaßer eine erste Testverbindung aufbauen:
auf dem Server
openvpn --dev tun0 --remote 192.168.0.2 --ifconfig 192.168.10.1 192.168.10.2 --secret static.key
auf dem Client
openvpn --dev tun0 --remote 192.168.0.1 --ifconfig 192.168.10.2 192.168.10.1 --secret static.key
Der Server sollte dann durch den Tunnel vom Client aus über die virtuelle IP-Adresse 192.168.10.1 ansprechbar sein:
ping 192.168.10.1
analog ist der Client über die virtuelle IP-Adresse 192.168.10.2 erreichbar.