ADMIN-Magazin

VPN zwischen Windows und Linux

Die sicherste Methode, Unternehmensnetze miteinander zu verbinden stellen Virtual Private Networks (VPN) dar. Leider sind die Implementierungen von Firmen wie Microsoft und Cisco nicht automatisch mit Linux kompatibel. Dieser Artikel zeigt Lösungsmöglichkeiten.

James Stanger
Share this

Die zwei größten Vorteile von VPN-Tunnels bestehen darin, dass die Verbindung verschlüsselt ist und man damit bei richtiger Konfiguration an Ressourcen innerhalb der Unternehmens-Firewall herankommt. Aus Perspektive der Interoperabilität hingegen ist es manchmal schwierig, solche Tunnels mit Linux-Clients aufzubauen. Sie haben häufig Schwierigkeiten damit, VPN-Verbindungen mit Servern in heterogenen Umgebungen aufzunehmen. Das liegt meist daran, dass die GUI-Programme nicht mit dem Tempo der Linux-Entwicklung Schritt halten können.

Oft sind es ein Schritt vor, zwei Schritte zurück: Wenn eine Linux-Distribution erscheint, ändert sich eine Shared Library und die vom Benutzer favorisierte VPN-Anwendung, die eben noch funktionierte, kann keine Verbindungen zwischen unterschiedlichen Betriebssystemen mehr aufbauen. In letzter Zeit hat sich diese Situation etwas verbessert. Dieser Artikel gibt einige Tipps dazu, wie Sie vom Linux-Desktop aus VPN-Verbindungen nutzen können.

Ein VPN baut eine Punkt-zu-Punkt-Verbindung über ein öffentliches Netz, meist das Internet, auf. Eine Reihe von Protokollen unterstützen VPN-Verbindungen, zum Beispiel:

  • L2TP über IPsec: Ciscos primäres Tunnel-Protokoll. L2TPv3 ist die neueste Version, man sollte aber darauf achten, die fürs eigene Netz passende Version zu verwenden. Für Linux-Systeme gibt es im wesentlichen zwei Implementierungen. Ältere Systeme verwenden beispielsweise FreeS/WAN oder Openswan für IPsec. Neuere Systeme mit einem Kernel aus der 2.6-Reihe besitzen nativen IPsec-Support.
  • Point-to-Point Tunneling Protocol (PPTP): Ein älteres Protokoll, das oft in Microsoft-Umgebungen eingesetzt wird.
  • Secure Sockets Layer / Transport Layer Security (SSL/TLS): Als eines der für Interoperabilität brauchbarsten Protokolle unterstützt SSL/TLS viele Typen von VPN-Verbindungen. OpenVPN [1] ist zum Beispiel eine SSL/TLS-basierte Tunnellösung.

In den letzten Jahren gab es viele Diskussionen darüber, welches Protokoll das sicherste oder Open-Source-freundlichste ist. Oft bewegten sie sich schon jenseits der Grenze zum Religiösen. Tatsächlich sind solche Diskussionen meistens weniger sinnvoll, als einfach eine praktikable Lösung für das eigene Netz zu finden und sie zu implementieren.

Welches Protokoll Sie auch immer verwenden, die Firewall betrachtet die Pakete, die durch ihn fließen, als interne Pakete. Die Schwierigkeit liegt darin, dafür zu sorgen, dass sie die richtige Schnittstelle und den richtigen Tunnel passieren.

Die Linux-Welt bietet einige Werkzeuge, um VPN-Verbindungen einzurichten und aufzubauen. Das KDE-Tool KVpnc unterstützt mehrere Protokolle, von Cisco über Microsoft bis zu OpenVPN. Vpnc ist ein Kommandozeilenprogramm für Cisco-VPNs. Viele Distributionen verwenden Red Hats Networkmanager [2], in den der Anwender VPN-Plugins für Microsoft und Cisco einbauen kann. Pptpconfig [3] ist ein älterer Client, der besonders gut mit Red-Hat-, Novell-Linux- und einigen BSD-Implementierungen funktioniert. Wie der Name bereits andeutet, ist Pptpconfig für Microsoft-basierte VPNs gedacht.

Tunnel-Aufbau

Egal welchen Client oder welches Protokoll Sie verwenden, es sind zunächst einige Informationen über Verbindung nötig, die Sie aufbauen möchten, so zum Beispiel:

  • Authentifizierung: Abhängig von der Netzwerkumgebung gibt es unterschiedliche Methoden, sich gegenüber dem Server auszuweisen. Die am wenigsten sichere, aber am weitesten verbreitete ist die Username/Passwort-Kombination. Alternativen sind geheime Schlüssel und Zerifikaten, die zum Beispiel Cisco bevorzugt.
  • Gateway (oft auch VPN-Server benannt): Die IP-Adresse oder der Hostname des Rechners, der den Tunnel nach der Authentifizierung bereitstellt.
  • Protokolltyp: Wie bereits angesprochen, müssen Sie sich für eins der Protokolle L2TP, PPTP, OpenVPN und so fort entscheiden. Das Konfigurations-Tool fragt normalerweise die Optionen ab, die spezifisch für das jeweilige Protokoll sind.
  • Allgemeine Einstellungen: Egal, welches Protokoll sie verwenden, es gibt immer auch einige Variablen, die sich auf die Verbindung an sich beziehen. So erfordern zum Beispiel einige Netzwerk die korrekte Einstellung der MTU (Maximum Transfer Unit).
  • Routing-Informationen: Unabhängig vom Protokoll müssen Sie sicherstellen, dass die richtigen Pakete den richtigen Weg nehmen.

Microsoft PPTP

Auch wenn viele PPTP für weniger sicher halten als Cisco- oder OpenVPN-Verbindungen, ist es dennoch weit verbreitet. Wer das Microsoft-Protokoll einrichten will, braucht dafür eine ganze Reihe von Authentifizierungs-, Kompressions- und Verschlüsselungsoptionen.

Die erste Herausforderung besteht darin, sich für eine Authentifizierungsmethode zu entscheiden. Peer-Authentifizierung bedeutet, dass der Server den Host dazu auffordert, sich auszuweisen. Optionen dafür sind:

  • Challenge Handshake Authentication Protocol (CHAP): Das RFC-standardisierte Protokoll. Alles, was Sie für CHAP-Authentifizierung brauchen, ist ein Benutzername und ein Passwort. Microsofts Implementierung des Protokolls heißt MS-CHAP. Wenn Sie eine VPN-Verbindung mit einem Microsoft-Server aufbauen wollen, entscheiden Sie sich im Zweifelsfall besser für diese Methode.
  • EAP: Ein Erweiterung des ursprünglichen PPP-Authentifizierungsprotokolls, die ein Zertifikat anstelle eines Passworts erlaubt. EAP ist nicht so weit verbreitet wie MS-CHAP und CHAP.

Viele Clients besitzen eine Einstellung, um jede einzelne dieser Methoden abzuweisen. Wenn Sie wollen, dass das Zusammenspiel mit dem entfernten VPN-Server reibungslos klappt, müssen Sie das eventuell dem PPP-Daemon auf Ihrem System machen.

Üblicherweise komprimieren VPN-Verbindungen Pakete, um sie effektiv zu tunneln. Grundsätzlich gibt es drei Optionen zur Komprimierung:

  • Microsofts Point-to-Point Compression (MPCC): Ein älteres Protokoll, das auf dem Lempel-Ziv-Algorithmus (LZ) basiert und üblicherweise für ältere Windows-Clients wie Windows 95 oder NT reserviert ist.
  • Deflate Compression: Ein patentfreies Protokoll ähnlich zu MPPC. Es universeller als MPPC, wird aber in den meisten Microft-VPN-Umgebungen nicht eingesetzt.
  • BSD Compression: Das tradtionelle BSD-Protokoll, das in RFC 1977 standardisiert ist.

Häufig haben Probleme mit VPNs ihre Ursache in der Komprimierung. Wenn Sie also nicht definitiv wissen, was Sie einstellen müssen, lassen Sie die Komprimierung erst einmal weg, bis alles funktioniert und experimentieren erst dann damit.

Weiteres Augenmerk gilt der Verschlüsselung. Microsoft Point-to-Point Encryption (MPPE) ist eine Untermenge von MPPC. Dabei gibt es zwei Schlüsselstufen: 40 Bit und 128 Bit. In vielen Ländern setzen Firmen nur 40-Bit-Verschlüsselung ein.

Zustandsbehaftetes MPPE stellt normalerweise die beste Verschlüsselungsoption dar, weil es die beste Netzwerk-Performance bietet

DNS

Die meisten VPN-Clients fragen den Anwender, ob er die Standard-DNS-Informationen aus der Datei »/etc/resolv.conf« oder diejenigen, die vom VPN-Server stammen. Das ist letztlich Geschmackssache, allerdings gibt es in der Praxis häufig Probleme mit der Namensaufläsung, wenn eine VPN-Verbindung aufgebaut wird. Meistens ist der Grund dafür, dass der VPN-Client die Datei »/etc/resolv.conf« verändert, auch wenn man ihm sagt, dass er das lassen soll.

Die beste Lösung ist deshalb, einen VPN-Client zu verwenden, der sich in dieser Hinsicht zurückhält. Geht das nicht, können Sie zur Not ein Skript verwenden, das die korrekte Resolv.conf kopiert.

GRE

Wer einen VPN-Client mit einem Microsoft-PPTP-Server verbinden will und eine Linux-Firewall verwendet, muss einen zusätzlichen Schritt gehen: GRE-Traffic (Generic Route Encapsulation) erlauben. Wenn beispielsweise die Firewall IPTables verwendet und der VPN-Server die Adresse 189.44.45.3 verwendet, lautet die passende Kommandozeile so:

iptables -I FORWARD -p 47 -d 189.44.45.3 -j ACCEPT

Die Zahl 47 steht hierbei für das GRE-Protokoll.

Routing

Manchmal ist es nötig, Pakete explizit über ein bestimmtes Netzwerk-Interface zu routen. Für viele Windows-Administratoren stellt das die größte Schwierigkeit dar, wenn Sie mit Linux-Clients arbeiten müssen. Explizites Routing ist besonders wichtig, wenn das entfernte Netz öffentliche IP-Adressen verwendet. Trotz einer VPN-Verbindung könnte das System versuchen, alle Pakete über das Internet zu routen statt über das VPN. Häufig genug erschöpfte sich die Fehlerbehebung bei einem VPN darin, ein paar Alternativrouten zur Default Route einzutragen. Das geht entweder mit dem gewohnten Befehl »route«. Alternativ lässt sich dazu auch die VPN-GUI heranziehen. Der Route-Befehl sieht beispielsweise so aus:

route add -net 13.163.97.23 netmask 255.255.255.255 dev ppp0

Alternativ lässt sich das IP-Kommando verwenden:

ip route add 171.87.44.54/24

Heutzutage beherrschen VPN-Clients es auch immer besser, selber das Routing zu managen. Abbildung 1 zeigt die Einstellungen in KVpnc, Abbildung 2 eine ähnliche Konfiguration in KVpnc. Wie diese Bilder zeigen, werden Pakete, deren IP-Adresse und Netzwerkmaske auf das Muster zutreffen, nicht über die normale Netzwerkverbindung verschickt sondern über den VPN-Tunnel.

Abbildung 1: Neue Routen im VPN-Client KVpnc.

Abbildung 2: Routing-Informationen im NetworkManager.

KVpnc (Abbildung 3), das von vielen Distributionen unterstützt wird, ist vermutlich der vielseitigste Client, denn er unterstützt L2TP, Ciscos freie und proprietäre Protokolle, OpenVPN und Microsoft-PPTP. Außerdem kann KVpnc Zertifikate importieren.

Abbildung 3: KVpnc running a legacy pptp session.

Das altehrwürdige Tool »pptconfig« steht ebenfalls in vielen Distributionen zur Verfügung. Der Schlüssel zum Erfolg besteht darin, exakt dieselben Einstellungen zur Verschlüsselung vorzunehmen wie am Server. Oft es es so, dass man MPPE-Verschlüsselung obligatorisch machen und zustandsbehaftetes MPPE einstellen muss. Bei »pptconfig« führen die Einstellungen ,,Require Microsoft Point-to-Point Encryption`` und ,,Refuse Stateless Encryption`` zum Erfolg. Pptconfig kann automatisch Routen hinzufügen. Klicken Sie dazu auf den Routing-Reiter, wählen Sie dann »Client to LAN« und geben Sie die Routen zu den Systemen ein, die Sie über das VPN erreichen wollen.

Viele Linux-Benutzer bevorzugen den Networkmanager aus einem einfachen Grund. Er funktioniert meistens. Es gibt Plugins für verschiedene Protokolle, zum Beispiel OpenVPN, Microsofts PPTP und Ciscos L2TP, die sich normalerweise leicht über den Paketmanager installieren lassen. Abbildung 4 zeigt das Fenster mit den Einstellungen für ein Cisco-VPN auf einem Ubuntu-System.

Abbildung 4: Verschlüsselungsoptionen in Pptpconfig.

Networkmanager unterstützt sowohl Shared-Key- wie auch X.509-Zertifikatsbasierte Verschlüsselung. Damit er richtig funktioniert, muss man die Racoon-Daemon-Software installieren, die für den Schlüsselaustausch (Internet Key Exchange) zuständig ist und dabei entweder einen neuen Shared Key sowie signierte Zertifikate erzeugt oder anfordert. Außerdem bietet es die Option, gespeicherte Konfigurationdateien zu importieren.

IPsec im Kernel

Wenn Ihr System einen Kernel 2.6 verwendet, beherrscht es nativ das IPSec-Protokoll, aber wenn Sie KVpnc oder Vpnc verwenden, brauchen Sie den Racoon-Daemon trotzdem, der sich auch bei IPsec um den Schlüsselaustausch kümmert. Installieren Sie Racoon über den Paketmanager oder kompilieren Sie das Programm aus den Quellen selbst, siehe [4].

Um FreeS/WAN, den alten IPSec-Standard zu unterstützen, müssen Sie den Daemon »ipsec« installieren. Wenn Sie den passenden Daemon nicht haben, werden Sie keine VPN-Verbindung zustande bringen, weil der Schlüsselaustausch beim Aufbau des Tunnels nicht klappt.

Fazit

Im Gegensatz zu früher ist die Einrichtung einer VPN-Verbindung kein Hexenkunst mehr, aber alles nehmen die GUI-Clients einem auch nicht ab. Gerade wer mit Microsoft-, Cisco- oder OpenVPN-Servern Tunnels aufbauen will, muss vermutlich ein bisschen herumprobieren. Wer ausdauernd ist, hat normalerweise aber auch Erfolg. (ofr)

Troubleshooting

Wenn Sie den Fehler suchen, überprüfen Sie zuerst, dass auch die richtigen Module geladen sind. Das sind zum Beispiel die gelanden Module auf einem Ubuntu-Linux-System, wenn der Client sich mit einem PPTP-VPN verbindet:

ppp_mppe    8068  2
ppp_async   13312  1
crc_ccitt    3072  1 ppp_async
ppp_generic   29588  6
ppp_mppe
ppp_async
slhc         7040  1 ppp_generic
ppdev        10372  0

Entnehmen Sie der Dokumentation zur verwendeten VPN-Technologie, welche Module notwendig sind, und laden Sie diese dann mit »modprobe«. Funktioniert das VPN, können Sie sie in »/etc/modules« eintragen.

Die Maximum Transfer Unit (MTU) ist eine weitere, wichtige Einstellung. Normalerweise sollten die Standardeinstellungen funktionieren. Es sind in der Praxis aber schon Fälle vorgekommen, in denen eine Änderung auf den Wert 1490 nötig war.

IP-Masquerading und andere Formen von Network Address Translation (NAT) können für ein VPN weitere Schwierigkeiten bedeuten. Wer zum Beispiel ESP und Authentication-Header (AH) verwendet, wird Schwierigkeiten mit NAT bekommen, denn AH berechnet Checksummen über Werte wie die IP-Adresse der Verbindung. Weil Masquerading/NAT die IP-Adresse verändert, stimmt die Checksumme aber dann nicht mehr. Weil die meisten NAT-Firewalls keine AH-Keys weiterleiten können, gibt es dann ein Problem.


Infos

[1] OpenVPN: [http://openvpn.net]
[2] Networkmanager: [http://www.gnome.org/projects/NetworkManager]
[3] Pptp: [http://pptpclient.sourceforge.net]
[4] RAS-VPN: [http://www.netbsd.org/docs/network/ipsec/rasvpn.html]

Kommentare

Kommentar hinzufügen

CAPTCHA
Diese Frage hat den Zweck zu testen, ob Sie ein menschlicher Benutzer sind und um automatisierten Spam vorzubeugen.