Hochverfügbares VPN

Hochverfügbares VPN

Virtuelle private Netze binden eine Außenstelle sicher und bequem ins firmeninterne Netz ein. Am Ein- und Ausgang des VPN-Tunnels verrichtet beispielsweise ein OpenVPN-Gateway seinen Dienst. Fällt es aus, wäre die Außenstelle abgeklemmt – es sei denn, die Admins haben vorgesorgt und beide Enden mit Linux-HA und je einem Reserve-Gateway ausgestattet.

Wer eine VPN-Verbindung betreibt, hält die übertragenen Daten für schützenswert und ist in der Regel darauf angewiesen, dass die Verbindung besteht. Den Schutz vor Abhören oder Fälschen besorgt die VPN-Software, etwa das funktionsreiche, bewährte und einfach benutzbare OpenVPN [1]. Diese Implementierung bringt sogar einen simplen Ausfallschutz mit: Der Client kann beliebig viele Server angeben. Es genügt dazu, mehrere »remote«-Optionen zu setzen. Fällt ein Server aus, versucht der Client es beim nächsten. Mit gesetzter »remote-random«-Option wählt er zufällig einen aus der Liste. Der simple Ansatz greift aber nicht beim Ausfall des VPN-Clients. Diese Lücke füllt eine Kombination aus OpenVPN und Linux-HA [2]. Die Kernkomponente dieses HA-Projekts ist der Heartbeat-Dienst, der die einzelnen Knoten des Cluster überwacht, die Kommunikation zwischen ihnen steuert, Ausfälle automatisch erkennt und geeignet darauf reagiert.

Dieser Artikel beschreibt, wie die Kombination aus Heartbeat und OpenVPN eine ausfallsichere VPN-Lösung ergibt. Er konzentriert sich auf die wesentlichen Aspekte. Zur Einfachheit beschränken sich die Betrachtungen auf die Heartbeat-Version 1 und auf den OpenVPN-Einsatz mit Pre-Shared Keys. Für komplexe Umgebungen mit vielen Außenstellen oder vielen Road Warriors (Host-to-Net-VPN) bringt OpenVPN dank PKI-Unterstützung (Public Key Infrastructure) auch die passenden Features mit. Für erste Tests hält der Verzicht auf Zertifikate das System aber überschaubarer.

Das hier besprochene Beispiel beschreibt eine Verbindung zwischen dem Hauptsitz einer Firma (im Namensschema: Nummer 1) und einer Außenstelle (Nummer 2). Da sich die Konfigurationen der beiden Standorte nur durch die IP-Adressen unterscheiden, beziehen sich die abgedruckten Parameter auf den Hauptsitz.

Aufbau

Der Aufbau des Systems ist in Abbildung 1 skizziert. Auf beiden Seiten stehen jeweils zwei Cluster-Knoten bereit. Verbunden sind die Knoten a und b untereinander mit einem Nullmodemkabel. Darüber kommuniziert Heartbeat jeweils mit der Partnermaschine. Die VPN-Gegenstellen kommunizieren im einfachsten Fall nicht über Kreuz, sondern VPNGW1a mit VPNGW2a und VPNGW1b mit VPNGW2b. Auf diese Weise dürfen die Leitungen sogar physisch getrennt und völlig unterschiedlich realisiert sein. Denkbar wäre, als primäre Leitung eine Standardfestverbindung einzurichten und die sekundäre Verbindung via DSL und Internet aufzubauen. Heartbeat erkennt den Ausfall der Leitungen, ohne sich auf den Linkstate des angeschlossenen Router verlassen zu müssen.

Abbildung 1: Die Außenstelle kommuniziert mit dem Hauptsitz nur durch einen sicheren VPN-Tunnel (Net-to-Net-VPN). Beide Tunnelzugänge sind doppelt vorhanden. Linux-HA schaltet automatisch um, wenn eines der HA-VPN-Gateways ausfällt.

Heartbeat einrichten

Heartbeat und OpenVPN sind mittlerweile Bestandteil aller gängigen Distributionen. Es empfiehlt sich, deren Pakete zu verwenden, um vom Update-Service des Herstellers zu profitieren. Nach der erfolgreichen Installation liegen die Konfigurationsdateien von Heartbeat normalerweise unter »/etc/ha.d«. Für den hier beschriebenen Aufbau sind die drei Files »authkeys«, »haresources« und »ha.cf« wichtig. Die Inhalte von »authkeys« und »haresecoures« müssen auf beiden Knoten eines Cluster identisch sein. Über den in »authkeys« hinterlegten Schlüssel authentifizieren sich die beiden Knoten gegenseitig. Für das Generieren eines sicheren Schlüssels empfiehlt das Linux-HA-Projekt folgenden Aufruf:

cat <<-!AUTH >/etc/ha.d/authkeys
   auth 1
   1 sha1 `dd if=/dev/urandom count=4 U
   2>/dev/null | md5sum | cut -c1-32`
!AUTH

Der Key bleibt im Filesystem beider HA-Cluster-Knoten, niemand muss ihn sich merken. Daher holt ein »dd«-Aufruf vier Blöcke Zufallsdaten aus dem Urandom-Device. Danach wandelt »md5sum« den Schlüssel in ein ASCII-Format um, und »cut« sorgt für ein Länge von 32 Buchstaben.

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2020