Date Tags VPN

Diese Anleitung zeigt auf, wie unter Linux mit CIPE - Crypto IP Encapsulation eine einfache, sichere und schnelle VPN Lösung realisiert werden kann. Auch funktioniert diese Lösung prima über ein NAT hinweg, da alles in UDP-Paketen verschlüsselt wird. Hierzu kann jedes beliebige Linux (oder sogar Windows) verwendet werden. Ich selber habe SuSE Linux 8.1 verwendet. Die Konfiguration ist aber völlig distributionsunabhängig. (nur für die Installation greife ich auf YaST zurück, damit auch nicht so erfahrene User das Ganze durchspielen können ;-) )

Zunächst brauchen wir 2 PC's, die mindestens mit einer Minimalinstallation aufgespielt sind (d.h. Netzwerk ist vorhanden). Dann solltest Du natürlich noch CIPE installieren. Dazu kannst Du entweder das in der Distribution vorhandene Paket nehmen oder es selber kompilieren. Die Quellpakete findest Du auf der CIPE-Projektseite. Hier wird genau erklärt, wie das Paket kompiliert wird und welche Voraussetzungen benötigt werden.

Wir nehmen jetzt hier einfach mal die Pakete aus der Distribution. Dazu installieren wir unter YaST das Paket CIPE in der Paketgruppe Productivity / Networking / Security. Das ganze legt uns die Konfigurationsdateien unter /etc/cipe ab. Außerdem wird gleich ein Startskript installiert, welches uns auch gleich das benötigte Modul cipcb lädt.

Da jetzt die Software installiert ist, müssen wir uns nur noch Gedanken über die Konfiguration machen. Wir wollen hier jetzt einfach zwei entfernte Netzwerke über das Internet koppeln. Die beiden Netze haben verschiedene (private) IP-Adressbereiche. Außerdem soll keine Datenfilterung zwischen den Netzen stattfinden. (Die Einrichtung einer Firewall als Absicherung zum Internet wird im Firewall-Artikel beschrieben)

Übersicht Netzwerk

Prinzipiell ist für jeden Tunnel eine eigene Konfigurationsdatei nötig. Das SuSE-Skript arbeitet dazu unter /etc/cipe/ alle Dateien ab, die mit option beginnen. Daher ist es sinnvoll für unseren Testtunnel auf beiden VPN-Rechnern eine Datei namens /etc/cipe/option.vpn-test anzulegen. So können wir bei mehreren Tunneln nachher schnell sehen, welche Konfiguration für welchen Tunnel ist.

# /etc/cipe/option.vpn-test auf linker Seite
ptpaddr 192.168.2.1
ipaddr 192.168.3.1
me 62.50.0.51:10000
peer 194.23.40.6:10000
key ba7e54d467c674eb52495befa3678784
# /etc/cipe/option.vpn-test auf rechter Seite
ptpaddr 192.168.3.1
ipaddr 192.168.2.1
me 194.23.40.6:10000
peer 62.50.0.51:10000
key ba7e54d467c674eb52495befa3678784

Der Aufbau der beiden Konfigurationsdateien ist relativ simpel. in Zeile 2 ist einfach die interne IP-Adresse des Partners eingetragen. Dies sollte die Adresse sein, an die das CIPE-Interface des Partners angebunden ist. Die IP-Adresse, an die das CIPE-Interface gebunden wird, ist in Zeile 3 festgelegt. Sie sollte also immer mit der IP-Adresse aus Zeile 2 in der Konfigurationsdatei des Partners übereinstimmen. Damit jetzt auch noch die verschlüsselte Verbindung über das Internet aufgebaut werden kann, ist in Zeile 4 jeweils noch die eigene externe UDP-Adresse festgelegt und in Zeile 5 die des Partners. Der UDP-Port kann hierbei der gleiche sein, muß aber nicht. Nun wird noch mit echo "Das hier ist unser gemeinsamer Schlüssel" | md5sum ein gemeinsam genutzer Schlüssel generiert und in Zeile 6 eingetragen. Dieser wird zum Aufbau der Verbindung genutzt und als Basis für einen Seitzungsschlüssel verwendet. Dieser wird aus Sicherheitsgründen natürlich immer wieder erneuert.

Angenommen, wir würden auf der rechten Seite keine feste externe IP-Adresse benutzen (z.B. DSL Einwahl), so müßte die Konfiguration der beiden Seiten etwas anders aussehen. Der Partner mit der festen IP (links) darf nun keine Verbindungen aufbauen, da er die IP-Adresse der rechten Seite nicht kennen kann. Daher muß der Verbindungsaufbau des Rechners mit der festen IP geblockt werden. Dies geht einfach, indem wir behaupten der Partner hätte die UDP-Adresse des localhost auf Port 9. Allerdings müßen wir dann auch die Anzahl der maximalen Fehlversuche auf unendlich setzen, da er sonst irgendwann abbricht.

Für die Seite mit der festen IP sieht das Ganze dann so aus:

me      62.50.0.51:10000
peer    127.0.0.1:9
maxerr  -1

Die Seite mit der dynamischen IP bekommt folgende Einstellungen:

me      0.0.0.0:10000
peer    62.50.0.51:10000
dynip

Sollten beide Seiten keine feste IP-Adresse benutzen, so kann die ursprüngliche Konfiguration genommen werden. Es müssen dann halt DNS-Namen statt der externen IP-Adressen genutzt werden (z.B. über DynDNS). Allerdings ist dies natürlich ein potentielles Risiko, da dies leichter gefälscht werden kann.

Damit das Routing zwischen den beiden Netzwerken nun noch klappt müssen wir noch die Datei /etc/cipe/ip-up angepasst werden. Hier muß noch das Gateway wie folgt eingtragen werden (wobei $5 die ptpaddr ist) ist:

route add -net 172.18.0.0 netmask 255.255.0.0 gw $5

Falls dieser VPN-Router mehrer VPN-Tunnel besitzt müssen natürlich mehere Routen angegeben werden.

So nun muß das VPN nur noch gestartet werden. Unter SuSE ist das ganze komfortabel mit rccipe start erledigt. Ansonsten muß halt /etc/init.d/cipe start eingegeben werden (sofern man sich schon ein Start-Skript gebaut bzw. mitinstalliert hat).