Die dunkle Jahreszeit ist Einbruchszeit - ein Anlass, auch die IT-Sicherheit unter die Lupe zu nehmen. In der Oktober-Ausgabe des IT-Administrator lesen Sie, ... (mehr)

OpenVPN-Server einrichten

Keepalived deckt bereits einen großen Teil des hochverfügbaren Setups ab. Er garantiert, dass eine definierte IP-Adresse auf einem der beiden Nodes aktiv ist. In weiterer Folge lauscht der OpenVPN-Dienst via UDP-Protokoll und Port 1194 auf dieser Adresse:

vpn1:~$ sudo netstat -ulnp | grep vpn 
udp 0 0 192.168.56.201:1194 0.0.0.0:* 1338/openvpn 

Grundsätzlich wird der OpenVPN-Server, wie auch Keepalived, auf beiden Nodes identisch eingerichtet. Daher sind die einzelnen Schritte zur Konfiguration auf beiden Nodes erforderlich. In der Praxis empfiehlt sich, die Installation per Provisionierungs-Werkzeug wie Ansible durchzuführen. Dadurch verringert sich der Aufwand beim Einrichten von mehreren Servern.Im ersten Schritt installiert apt nun das gleichnamige Package für OpenVPN:

vpn1:~$ sudo apt-get install openvpn 

 Listing 2: Failover-Script

 #!/bin/bash 
 TYPE=$1 
 NAME=$2 
 STATE=$3 
 CMD_START="systemctl start openvpn@server" 
 CMD_STOP="systemctl stop openvpn@server" 

 case $STATE in 
     "MASTER") $CMD_START 
         ;;  
         "BACKUP") 
                if pgrep openvpn; then $CMD_STOP 
              fi 
         ;;  
       "FAULT") 
                if pgrep openvpn; then $CMD_STOP  
                fi 
                exit 0 
     ;; 
       *) /sbin/logger "openvpn unknown state" 
       exit 1 
       ;; 
esac

Die Ausgabe des Installationsbefehls schlägt das Paket "easy-rsa" vor, wenn VPN-Server und -Client sich per Zertifikat authentifizieren sollen. Dahinter verbirgt sich eine einfache, skript-gesteuerte PKI. Eine Anleitung dazu stellt die OpenVPN-Webseite zur Verfügung [1].

Bei Punkt-zu-Punkt-Verbindungen beziehungsweise Installationen, die sich auf zwei VPN-Teilnehmer beschränken, reicht ein statischer Schlüssel aus. Der openvpn-Client erstellt ihn per genkey-Kommando:

vpn1:/etc/openvpn$ sudo openvpn 
--genkey --secret static.key 

Der statische OpenVPN-Schlüssel darf, wie bei geheimen Schlüsseln üblich, nur über sichere Medien übertragen werden und nicht in die falschen Hände gelangen. Beim Kopieren übers Netzwerk übernimmt dies scp:

vpn1:~# scp /etc/openvpn/static.key xenial@192.168.56.102:/home/xenial 

Am Backup-Server wird vom Home-Verzeichnis aus der Schlüssel nach "/etc" verschoben:

vpn2:~$ sudo mv static.key /etc/openvpn/ 
vpn2:~$ sudo chown root:root /etc/openvpn/static.key

Damit sind alle Voraussetzungen für den VPN-Service erfüllt. Die IP-Adresse und der Schlüssel werden in die Datei "server.conf" eingebaut:

local 192.168.56.201 
dev tun 
ifconfig 10.8.0.1 10.8.0.2 
secret static.key 

Die Konfiguration ist in diesem Beispiel bewusst einfach gehalten. Komplexere Set­ups verteilen statische IP-Adressen, geben Routen an die Clients weiter und authentifizieren per Zertifikat. Abschließend startet » systemctl« den OpenVPN-Server, der dann wiederum das Netzwerk-Interface tun0 erzeugt (Listing 3). Clientseitig unterscheidet sich die Konfiguration in "/etc/openvpn/server.conf" kaum von der des Servers:

remote 192.168.56.201 
dev tun 
ifconfig 10.8.0.2 10.8.0.1 
secret static.key 

 Listing 3: OpenVPN starten

 vpn1:/etc/openvpn$ sudo systemctl start openvpn@server  
 vpn1:/etc/openvpn$ sudo systemctl status openvpn@server 
 openvpn@server.service - OpenVPN connection to server    
 […] 
 vpn1:/etc/openvpn$ ip addr show dev tun0 
 6: tun0:  mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 
              link/none 
              inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 
              valid_lft forever preferred_lft forever 

Wie die letzte Zeile zeigt, muss der statische Schlüssel auch am Client vorhanden sein. Am besten kopieren Sie die Datei "static.key" wieder per scp. In der Zeile "remote 192.168.56.201" taucht die Floating IP von Keepalived auf. Der Client kann sich darauf verlassen, dass einer der beiden VPN-Server aktiv auf diese IP-Adresse reagiert. Wurde auf Server- und Client-Seite der OpenVPN-Service gestartet, erreichen sie sich über ihre virtuellen Tun-Interfaces (Listing 4).

 Listing 4: Verbindung über Tunnel

 client1:~$ ip addr show dev tun0 
 4: tun0:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100 
          link/none 
          inet 10.8.0.2 peer 10.8.0.1/32 scope global tun0 
 client1:~$ ping -c 2 10.8.0.1 
 PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data. 
 64 bytes from 10.8.0.1: icmp_req=1 ttl=64 time=1.05 ms 
64 bytes from 10.8.0.1: icmp_req=2 ttl=64 time=0.924 ms 
 
 --- 10.8.0.1 ping statistics ---  
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms 
 rtt min/avg/max/mdev = 0.924/0.989/1.055/0.072 ms 

Fazit

OpenVPN stellt VPN-Verbindungen her, die Daten beim Transport über unsichere Netzwerke schützen. Zwei Einsatzszenarien machen es für den Unternehmenseinsatz attraktiv – die Vernetzung von Standorten und das Anbinden von mobilen Clients an das Firmennetzwerk. Dabei ist es wichtig, auf die stetige Verfügbarkeit des Dienstes zu achten.

Hier klinkt sich Keepalived ein, verwaltet eine Floating IP über zwei Server hinweg und startet beziehungsweise stoppt den VPN-Prozess bei State-Transfers. Fällt ein Server aus, übernimmt der zweite die IP-Adresse und zieht OpenVPN hoch. Im Optimalfall merkt der VPN-Client aufgrund der kurzen Umschaltzeit davon nichts. OpenVPN und Keep-alived punkten mit ihrer einfachen Konfiguration, sodass kein Anwender davor Scheu haben muss, sich diesem Thema zu widmen.

 (of)

Link-Codes

 

comments powered by Disqus
Mehr zum Thema

OpenVPN mobil


OpenVPN bietet gerade für Mobilgeräte reizvolle Möglichkeiten der Fernkonfiguration, die nicht nur für mehr Bequemlichkeit, sondern zugleich für mehr Sicherheit sorgen.
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 /2023