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
Grundlage des OpenVPN-Tunnels ist das openvpn-Programm, welches sowohl auf Server als auch auf Clientseite auf einem UDP-Port läuft und mit Hilfe des tun/tap-Treibers eine virtuelle Netzwerkschnittstelle anlegt, welche jeweils ein Ende des Tunnels darstellt. Im Gegensatz zum PPP, welches ähnlich arbeitet, kann der gesamte Netzwerkverkehr auf Grundlage von OpenSSL verschlüsselt werden.
Zur Authentifizierung von Server und Client können zwei Verfahren verwendet werden:
- Shared-Secret-Authentifizierung (auch Static-Key-Authentifizierung)
- Zertifikatbasierte Authentifizierung
Zertifikatbasierte 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)
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.
Szenarien
Außendienst-Mitarbeiter (Netz-zu-Host)
random