Mac nix basteln:OpenVPN

Aus Attraktor Wiki

Wechseln zu: Navigation, Suche

Einleitung

Um diesen Artikel einigermassen sinnvoll nutzen zu können, sei empfohlen vorher die Krypto Grundlagen gelesen zu haben. Darüber hinaus wird es zum Anwenden der aufgelisteten Beispiele erforderlich werden Schlüssel per OpenSSL erzeugt zu haben (mit Außnahme des Testbeispiels).

Bei VPN geht es grundsätzlich darum, eine verschlüsselte Verbindung zwischen Rechnern über ein Drittnetz aufzubauen, damit sie aggieren können, als hingen sie im selben Netz. VPN ist jedoch nicht automatisch gleich VPN. Es gibt viele Möglichkeiten ein virtuelles privates Netzwerk aufzusetzen:

  1. Verbinden zweier Rechner über ein anderes Netz, damit sie aggieren können, als würden sie im selben Netz hängen. (Wenn es sich lediglich um zwei Rechner handelt, gibt es sicherlich auch einfacherere Wege zum Erfolg)
  2. Einzelne Rechner (Klienten) sollen sich über ein anderes Netz (z.B. dem Internet) mit einem privaten Netz verbinden (z.B. Firmennetz)
  3. Zusätzlich zum Letzteren kann man auch den Internetverkehr der Klienten über das private Netz wieder ins Internet routen. Das kann sinnvoll sein, wenn man sich an einem Ort mit Internetsperren befindet
  4. Verbinden zweier Netze über ein drittes, damit die beiden so aggieren können, als wären sie eins. (Z.B. zum Verbinden mehrerer Firmenstandorte)

Die hier aufgeführten Beispiele sind aus verschiedenen Quellen zusammengetragen. Um einen guten Durchblick zum bekommen, lohnt es sich sie alle zu studieren:

Die Installation von OpenVPN ist die selbe, ob man Klient oder server ist. Gesteuert wird das Verhalten des jeweiligen Rechners über Konfigurationsdateien. Genau diese werden hier für verschiedene Beispielkonfigurationen gezeigt und erläutert. Sie sind der Einfachheit halber auf das lauffähige Minimum reduziert. Es gibt durchaus noch weitere Einstellungsmöglichkeiten zum Anpassen individueller Bedürfnisse. Ein guten Ausgangspunkt für individuelle Anpassungen findet man am Ende der OpenVPN Hilfeseiten. Die meisten (alle?) Parameter sind dort enthalten und man kann sie nach Bedarf ein und auskommentieren.

Neben den Konfigurationsdateien braucht man zum Betrieb ggf. noch die bereits genannten Schlüssel.

Es wird in den Beispielen davon ausgegangen, dass OpenVPN auf dem Port 1194 läuft, diese ist ggf. auf dem Router zum OpenVPN-server durchzuleiten.

Die VPN-Verbindung wird über eine virtuelle Netzverkkarte getunnelt. Dieses virtuelle Gerät heisst entweder tun oder tap. Während ein tun-Gerät auf IP-Ebene läuft, läuft das tap-Gerät eine Ebene darunter auf ethernet-Ebene. Möglicher Weise müssen diese Geräte bei OS X nachinstalliert werden. Dafür gibt es TunTap (Möglicher Weise deshalb, weil TunTap auf meinen Testrechnern installiert ist und ich nicht weiss, ob es auch ohne funktionert. Möglicherweise stellt auch OpenVPN selbst tun- & tap-Geräte zur Verfügung).


Testkonfiguration

Dieser Absatz stellt den denkbar einfachsten Aufbau dar, ist aber nicht wirklich praxistauglich. Der Absatz kann übersprungen werden.

Installation

Zunächst wird zum Test eine Verbindung zwischen nur zwei Rechnern aufgebaut. Da diese Anleitung für Anfänger nicht gerade ausführlich ist und für Fortgeschrittene belanglos, wird sie ein wenig weiter aufgeschlüsselt.

Im ersten Schritt braucht man zwei Rechner zum Testen. Dabei ist es auch ausreichend wenn man sich beispielsweise zwei Virtuelle Maschinen mit Linux aufsetzt. Also...

  • VirtualBox installieren und zwei Linuxmaschinen der Wahl aufsetzen. Dabei kann die zweite VM eine Kopie der ersten sein - geht schneller (rechtsklick auf die VM / Klonen). Wichtig beim Anlegen des Klons ist, darauf zu achten dass man den Haken bei Zuweisen neuer MAC-Adressen für alle Netzwerkkarten setzt
  • Dafür sorgen, dass die VMs vom router jeweils eigene IP-Adressen zugewiesen bekommen, als wären es Rechner die ganz normal im Intranet hängen: VM anklicken / Ändern / Netzwerk / Adapter 1 / Angeschlossen an: Netzwerkbrücke. Da die VMs unterschiedliche MACs haben, bekommen sie nun auch individuelle IPs
  • Auf den VMs muss jeweils OpenVPN installiert werden. Unter Linux: $ apt-get install openvpn

Konfiguration

Jetzt kann man wieder der Anleitung folgen.

  • Statischen Schlüssel für die Verschlüsselung der Verbindung auf dem OpenVPN-Server erzeugen:
    $ openvpn --genkey --secret static.key.
    Dieser Schlüssel muss auch auf das den Klienten kopiert werden.
  • Die Konfigurationsdatei server.conf auf dem Server anlegen:
    dev tun
    ifconfig 10.8.0.1 10.8.0.2
    secret static.key
    Es wird eine Virtuelle Netzwerkkarte tunnel device angelegt. Die server-IP im VPN endet auf 1, die des Klienten auf 2 und die Datei static.key wird für die Verschlüsselung benutzt
  • Die Konfigurationsdatei client.conf auf dem Klienten anlegen:
    remote myremote.mydomain
    dev tun
    ifconfig 10.8.0.2 10.8.0.1
    secret static.key
    myremote.mydomain ist durch dei Adresse des servers im Intranet zu ersetzen. Auch hier wird das virtuelle Tunnelgerät angelegt. Jetzt kommt die Klienten-IP im VPN zuerst, dann die server-IP und die Datei static.key wird für die Verschlüsselung benutzt
  • Starten auf dem server als root:
    $ sudo openvpn --config server.conf &
  • Starten auf dem Klienten als root:
    $ sudo openvpn --config client.conf &

Testlauf

Jetzt sollte der Klient in der Lage sein den serven anzupingen:
$ ping 10.8.0.1
Wenn's klappt, kann man sich die routing-Informationen anschauen:
$ route -n

Ziel Router Genmask FLags Metric Ref Use Iface
0.0.0.0 router-IP im Intranet 0.0.0.0 UG 0 0 0 eth0
10.8.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 thn0

Die IP 10.8.0.1 ist also dem Tunnelgerät zugeordnet worüber die beiden Rechner nun kommunizieren können.


Klient zu Netz Verbindung

klient.conf

client # Diese Datei konfiguriert einen Klienten

remote openvpn.beispiel.de 1194 # Hostname/externe IP des Servers/Routers, Port entsprechend anpassen proto udp # Protokoll UDP, für TCP: proto tcp-client dev tun0 # Die Verbindung geht über die Virtuelle Netzwerkkarte tun0. Alternativ, tap
# Hier die Pfade anpassen um auf die erstellten Keys zu verweisen ca ./Zertifikate/vpn-ca.pem cert ./Zertifikate/klient1cert.pem key ./Schluessel/klient1key.pem

Die Konfiguartion des Klienten ist also recht simpel: Adresse & Port des Servers werden angegeben, das Protokoll ist UDP, das ganze soll über das tun0-Gerät laufen und es wird das Zertifikat der CA, das eigene Zertifikat und der eigene Schlüssel benötigt. Das war's.

server.conf

server 10.8.0.0 255.255.255.0 # virtuelles VPN-Netzwerk
port 1194 # Auf Port 1194 horchen
proto udp # Protokoll UDP, für TCP: proto tcp-server
dev tun0 # Die Verbindung geht über die Virtuelle Netzwerkkarte tun0. Alternativ, tap

# Hier die Pfade anpassen um auf die erstellten Keys zu verweisen ca ./Zertifikate/vpn-ca.pem cert ./Zertifikate/servercert.pem key ./Schluessel/serverkey.pem dh ./dh1024.pem
keepalive 20 180 # Alle 20 Sekunden pingen. 3 Minuten Timeout fuer Clientverbindung

Das VPN wird unter 10.8.0.0/24 laufen. Entsprechend ist darauf zu achten, dass dieser IP-Bereich weder im regulären Intranet des Klienten noch des servers vorkommt. Port ist 1194 (ggf. auf der firewall durchleiten nicht vergessen). Es wird UDP verwendet. Wenn in beiden Konfigurationsdateien TCP steht funktioniert es auch. UDP wurde gewählt, da eine der Anleitungen sagt TCP über TCP zu tunneln wäre die schlechteste Idee. Auch hier kommt das tun0-Gerät zum Einsatz und es werden die Zertifikate der CA, des servers sowie der server-Schlüssel als auch die Diffie-Hellmann-Zufallszahlen angegeben. Die Verbindung wird bis zu 3min mit einem keepalive aufrecht erhalten.

Nun kann es losgehen. Auf dem server:
$ sudo openvpn --config server.conf

Auf dem Klienten:
$ sudo openvpn --config klient.conf