openVPN einrichten

Diesen Beitrag schrieb ich 15 Jahre und 1 Monat zuvor; die nachfolgenden Ausführungen müssen heute nicht unbedingt noch genau so funktionieren. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 2 Minuten

Installation

Fangen wir mal ganz vorne an; ich gehe hier von einer XEN-3.0.4 dom-U aus, die unter einem normalen Debian 2.6.16.33-xen läuft. Sollte aber keinen Unterschied zu einem normalen Host-System machen. Die Software selbst installiert sich mittels apt-get install openvpn und bringt einiges an Beispieldateien und Scripten mit, die wir noch benötigen werden. Daher kopieren wir die an die richtige Stelle:

$ cd /etc/openvpn
$ cp -r /usr/share/doc/openvpn/examples/\* .

Konfiguration

Im Ordner easy-rsa ist so einiges drin, was uns bei der Einrichtung bedeutend helfen wird; zuerst einmal müssen wir diese Vorlagen jedoch an unsere Belange anpassen:

## file: "/etc/openvpn/easy-rsa/vars"
export KEY_DIR=$D/keys ; diese Variable ist wichtig, der Ordner muss existieren
export KEY_SIZE=2048
export KEY_DIR=/etc/openvpn/certs
export KEY_COUNTRY=DE
export KEY_PROVINCE=Saarland
export KEY_CITY=Saarlouis
export KEY_ORG="mein-hoechsteigenes-VPN"
export KEY_EMAIL="ich@meine-domain.tld"

Die benötigten Zertifikate

Jetzt erzeugen wir die benötigten Zertifikate. Als erstes führen wir vars aus, um die Variablen zu setzen. Achtet auf den Punkt vor dem Punkt (gegebenenfalls vorher mit chmod +x vars ausführbar machen)!

$ . ./vars
$ ./clean-all
$ ./build-ca

Das Server-Zertifikat

Jetzt wird das Zertifikat für den Server erstellt; das geht ganz einfach:

$ ./build-key-server vpn.meine-domain.tld

Dieses wird in /etc/openvpn/certs folgendes erstellen:

  • vpn.meine-domain.tld.crt
  • vpn.meine-domain.tld.csr
  • vpn.meine-domain.tld.key

Der Schlüssel wird mit dem zuvor erstellten Zertifikat signiert; dazu sind die letzten beiden Abfragen mit ‘y’ zu beantworten; als Common name ist vpn.meine-domain.tld anzugeben.

Die Client-Zertifikate

Nun sollen Kai und Stefan Zugriff auf mein VPN erhalten; hierzu muss ich auch für sie Schlüssel bauen:

$ ./build-key stefan
$ ./build-key kai

Der Common name muss genau dem Namen entsprechen, den wir angegeben haben (also in diesem Fall ‘stefan’ bzw. ‘kai’). Dieser Vorgang wird uns in /etc/openvpn/certs folgende Dateien anlegen:

  • kai.crt
  • kai.csr
  • kai.key
  • stefan.crt
  • stefan.csr
  • stefan.key

DH-Parameter

Nachfolgend werden die Diffie-Hellman-Parameter erstellt; dies dauert auch auf einer ansatzweise modernen Maschine eine ganze Weile (in meinem Fall fast eine Viertelstunde), also: gedulden!

$ ./build-dh

Server-Konfiguration

Hernach ist die Konfiguration fällig; in /etc/openvpn/sample-config-files finden wir ein server.conf.gz, das wir benutzen können:

$ cd /etc/openvpn/sample-config-files
$ gunzip server.conf.gz
$ cp server.conf ../
## file: "/etc/openvpn/server.conf"
port 1194
proto udp
dev tun
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/vpn.meine-domain.tld.crt
key /etc/openvpn/certs/vpn.meine-domain.tld.key
dh /etc/openvpn/certs/dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3

Und das war’s im Großen und Ganzen auch schon – zumindest auf Seite des Servers. Die Bedeutung der einzelnen Parameter in der Konfiguration bitte den entsprechenden READMEs entnehmen. Man kann nun versuchen, die Sache zu starten:

$ /etc/init.d/openvpn start

Im Log, respektive syslog, sollte als (vorerst) letzte Meldung etwas in der Art von Initialization Sequence Completed auftauchen; wenn nicht, geht das Debugging los.

Troubleshooting: udev

Wichtig ist hier, dass mein Debian mit udev arbeitet, /dev/net jedoch nicht existierte. Man kann sich da behelfen mit

$ mkdir /dev/net
$ mknod /dev/net/tun c 10 200
$ chmod 0700 /dev/net/tun
$ modprobe tun

Funktioniert zwar, ist aber eine unsaubere Sache – besser ist es da, das entsprechende udev-Paket nachzuinstallieren:

$ apt-get install udev

Tunnelblick.app für die Mac-User

Nun wollen wir aber natürlich auch einen unserer Clients connecten lassen; Stefan ist jedoch passionierter Mac-User und arbeitet mit Mac OS X. Daher muss er sich, da InternetConnect.app nicht mit OpenVPN harmoniert, die Software Tunnelblick.app herunterladen und sie installieren. Außerdem braucht er natürlich seine beiden Files stefan.crt und stefan.key – und darüber hinaus benötigt er ca.crt. Die packt er an eine Stelle, an der er sie wiederfindet – beispielsweise nach /Users/stefan/.keys. Tunnelblick wird ihn auffordern, die Konfiguration anzupassen – hier muss er diese drei Files angeben.

Und das war’s; ein Klick auf ‘Connect’ verbindet nun brav. Die Logfiles, insbesondere das syslog, geben Aufschluss bezüglich eventueller Fehler. Die Verbindung steht, und das Leben ist schön :-D