Tue, 25 Nov 2014 00:00:00 +0100
computernetz, fedora, linux, openvpn, qubes-os, sysadmin, systemd, vpn

OpenVPN mit systemd

In letzter Zeit habe ich mich mehr mit Fedora Linux beschäftigt, weil ich auf meinem Laptop Qubes OS installiert habe und dieses mit Fedora als Betriebssystem daher kommt.

Das Schöne an Qubes OS ist, dass ich für verschiedene Bereiche meiner digitalen Aktivitäten unterschiedliche VMs auf demselben Rechner bequem nutzen kann und doch eine strikte Trennung dazwischen habe. Ich weise einfach einer virtuellen Maschine, genannt AppVM, verschiedene Anwendungen, wie Mailclient, Webbrowser und Terminal, zu und habe alles Nötige an einem Platz.

Auf dem Laptop nutze ich verschiedene VPNs, meist auf Basis von OpenVPN. Diese einzurichten ist kein Problem und auch nicht Thema dieses Textes. Im Wiki des Fedora Projektes findet sich eine gute Anleitung.

Damit ich die VPN-Verbindung bereits beim Start der ersten Anwendung nutzen kann, muss sie beim Start der AppVM automatisch aufgebaut werden. Das ist eine Aufgabe für das Init-System, für das bei Fedora Systemd verantwortlich zeichnet.

Generell - und das ist unabhängig von Systemd - finde ich die Konfiguration für OpenVPN unter /etc/openvpn/. Da die Konfiguration für eine Verbindung mehrere Dateien umfasst, lege ich ein Unterverzeichnis (zum Beispiel MyConf) darunter an, in dem ich alle zu einer Verbindung gehörigen Dateien ablege.

Für die Konfigurationsdatei selbst gibt es einen Link in /etc/openpvpn/, damit das Init-System die Konfiguration finden kann.

# cd /etc/openvpn
# ln -s MyConf/MyConf.ovpn MyConf.conf

Die Endung .conf ist wichtig, da unter Linux alle Skripts nach Dateien mit dieser Endung suchen. Das gilt sowohl für Systemd, als auch für Upstart und SysV-Init. In der Konfigurationsdatei selbst muss ich allen Dateinamen, auf die die Konfiguration Bezug nimmt, den Pfad MyConf/ voranstellen, denn openvpn wird im Verzeichnis /etc/openvpn/ gestartet.

Nun kann ich den Verbindungsaufbau testen:

# cd /etc/openvpn
# openvpn --config MyConf.conf

Bekomme ich die VPN-Verbindung, kann ich zur Konfiguration des automatischen Starts übergehen.

Bei Fedora gibt es im Verzeichnis /lib/systemd/system/ ein Template, das ich für verschiedene Verbindungen nutzen kann. Um es zu verwenden, lege ich einen Link darauf an, der den Namen meiner Konfiguration enthält:

# cd /lib/systemd/system
# ln openvpn@.service openvpn@MyConf.service

Nun kann ich testen, ob Systemd mit der Konfiguration zurechtkommt:

# systemctl start openvpn@MyConf.service
# systemctl status openvpn@MyConf.service
# systemctl stop openvpn@MyConf.service

Wenn alles funktioniert, gebe ich die Verbindung für den automatischen Aufbau beim Systemstart frei:

# systemctl enable openvpn@MyConf.service

Damit baut systemd die VPN-Verbindung automatisch beim Start der AppVM auf und ich brauche mich nicht mehr darum zu kümmern.

In den Firewall-Regeln bei Qubes OS kann ich nun für diese AppVM allen Verkehr außer dem von OpenVPN sperren.