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.
Posted 2014-11-25