VPN-Anmeldung unter Ubuntu automatisieren

Zu meiner großen Verwunderung gibt es für Linux-Desktopsysteme keinen offiziellen OpenVPN-Client mit grafischer Oberfläche. Man muss sich also auf seinem Notebook mit der Terminalvariante vergnügen. Das mag für mich als IT-Administrator kein Problem darstellen, aber der normale Benutzer wird die Shell nicht besonders gerne zur Anmeldung im entfernten Netzwerk aufsuchen.

Aber all das Gejammere hilft uns aber nicht weiter. Entweder nutzen wir hier künftig den integrierten VPN-Manager in Ubuntu-Desktop oder wir automatisieren die VPN-Anmeldung so weit, dass wir uns nur einmal zur Grundeinrichtung durch die Shell kämpfen müssen. Letzteres ist mein Ansatz, wodurch nach etwa einer Stunde Arbeit ein Skript sowie ein kleiner Systemdaemon entstanden sind.

Wie du das Skript an deine Bedürfnisse anpassen kannst, was es dabei zu beachten gibt und noch vieles mehr, erfährst du in diesem Beitrag. Da sich der Artikel an ambitionierte Ubuntu-Anwender richtet, gehe ich hier Schritt für Schritt die Installation und die Konfiguration meines Skriptes durch. Du brauchst also kaum Erfahrungen mit dem Terminal oder den Linux-Innereien zu haben.

Wie man den OpenVPN-Client unter Ubuntu installiert:

Mein Skript sowie Daemon sind zur korrekten Funktionalität auf eine Sache angewiesen. Die Rede ist natürlich vom offiziellen VPN-Client aus dem Hause OpenVPN. Diese Software ist allerdings nicht im Standardumfang von Ubuntu Desktop enthalten. Es gibt zwar einen integrierten VPN-Manager in den Einstellungen, und zwar im Tab Netzwerk, aber den will ich nicht benutzen.

Das liegt aber nicht an irgendwelchen Einschränkungen oder eventuell vorhandenen Bugs. Da ich sehr gerne Shell-Skripte schreibe, hat sich das Thema „VPN-Verbindung automatisieren“ angeboten. Außerdem lässt sich das Skript auf meinen Ubuntu-Webservern einsetzen, die zum Speichern ihrer Backups eine Verbindung zu meiner privaten NAS via VPN aufbauen müssen.

Kommen wir aber nun zum eigentlichen Thema, nämlich der Installation und Grundeinrichtung des OpenVPN-Clients, zurück. Bevor du dich an das Kopieren und Einfügen der unten stehenden Befehle machen kannst, brauchst du aber noch das Konfigurationsfile deiner Verbindung. Dieses erhältst du entweder vom VPN-Anbieter oder deiner zuständigen IT-Abteilung.

Was du mit dem Inhalt machst und was du alles eintippen musst, steht hier:

# Deinen Rechner auf den neuesten Stand bringen:

apt -y update && apt -y upgrade

# Den OpenVPN-Client installieren:

sudo apt install openvpn

#Erstellen und Befüllen der Konfigurationsdatei:

sudo nano /etc/openvpn/client.conf

#Beispiel-Inhalt, der Richtige kommt vom IT-Ansprechpartner:

client
dev tun
proto udp
remote deropenvpnserver.domain.tld 1194
resolv-retry infinite
nobind
persist-key
persist-tun
float
remote-cert-tls server
verb 3
cipher AES-256-CBC
auth SHA512
key-direction 1
mute-replay-warnings
ca "/etc/openvpn/easy-rsa/keys/ca.crt"
cert "/etc/openvpn/easy-rsa/keys/client.crt"
key "/etc/openvpn/easy-rsa/keys/client.key"
tls-auth "/etc/openvpn/easy-rsa/keys/tlsauth.key"

# Testen der gerade eingerichteten Verbindung:

sudo openvpn --config /etc/openvpn/client.conf

# Bei erfolgreichem Verbindungsaufbau sollte Folgendes stehen:

Initialization Sequence Completed
Was verbirgt sich hinter Begriffen wie cipher oder auth?

Manch einer fragt sich bestimmt beim Anblick der gerade abgespeicherten VPN-Konfiguration, was die einzelnen Punkte so bedeuten. Auf ein paar von Ihnen werde ich deshalb an dieser Stelle eingehen. So bekommst du zumindest einen kleinen Einblick, was da so im Verborgenen passiert und wie so ein verschlüsselter Tunnel durchs Internet funktioniert.

  • dev tun: Damit wird angegeben, dass es sich um eine geroutete Verbindung handelt. Bei Bridged-Verbindungen hingegen heißt der Konfigurationspunkt dev tap.
  • proto: Eine VPN-Verbindung kann entweder über den TCP/IP-Stack oder das UDP-Protokoll aufgebaut werden. Letzteres ist deutlich perfomanter, ersteres weist dafür eine erhöhte Zuverlässigkeit zu Kosten der Latenzzeit auf.
  • remote: Hier wird der DNS-Name oder die öffentliche IP-Adresse des entfernten VPN-Servers eingetragen. Nicht vergessen werden, darf dabei der lauschende Port. Standardmäßig ist dies 1194
  • persist-key: Damit wird angegeben, dass der Client die Schlüsselinformationen im Speicher ablegen darf, falls ein erneutes Verbinden mit dem VPN-Server notwendig wird.
  • persist-tun: Dieser Eintrag gibt an, dass das Device für eine Wiederverbindung am Laufen gehalten wird.
  • remote-cert-tls server: Dieser Eintrag wird gesetzt, um zu prüfen, ob die Gegenstelle auch wirklich das Zertifikat eines Servers nutzt.
  • cipher: Hier wird der verwendete Verschlüsselungsalgorithmus angegeben. Er muss mit dem des Servers übereinstimmen.
  • auth: Hier hinter verbirgt sich der HMAC Algorithmus, welcher ebenfalls mit dem Server gleich sein muss.
  • key-direction: Hiermit wird dem TLS Handshake beim Verbindungsaufbau mitgeteilt, wer hier Client und Server ist.
Wie man die VPN-Anmeldung automatisiert:

Nachdem du weiter oben deine OpenVPN-Verbindung eingerichtet hast, kannst du dich nun jederzeit manuell mit dem entfernten Netzwerk verbinden. Dieses Vorgehen mag in vielen Anwendungsfällen, zum Beispiel unterwegs oder im Homeoffice, absolut ausreichend sein. Manch einer von uns, muss aber nach jedem Reboot automatisch wieder mit dem entfernten Netz verbunden sein.

So möchte ich, beispielsweise direkt nach dem Hochfahren meines Rechners, im Hintergrund eine Verbindung zu meinem Rootserver bei Hetzner herstellen. So kann ich direkt und ohne Umschweife mit dem Herumspielen an meinem Proxmox-Server beginnen. Außerdem stehen mir so mein Heimdall-Dashboard und die dort verlinkten Services umgehend zur Verfügung.

Damit der Anmeldeprozess in Zukunft automatisch und gänzlich im Hintergrund abläuft, braucht es das folgende Skript. Dieses kann irgendwo auf deinem PC abgelegt werden. Am besten aber dort, wo du es nicht aus Versehen löschst. Wie der folgende Prozess im Detail funktioniert, habe ich natürlich wieder samt den Befehlen aufgeschrieben:

# VPN-User & Passwort in einem Credentials-File ablegen:

sudo mkdir -p ~/Dokumente/OpenVPN

sudo nano ~/Dokumente/OpenVPN/openvpncredentials.txt

Oben Benutzername reinschreiben
Direkt darunter das Passwort

sudo chmod 440 ~/Dokumente/OpenVPN/openvpncredentials.txt

# Datei für das Skript erstellen:

sudo nano ~/Dokumente/OpenVPN/openvpn-autostart.bash

# Folgende Inhalte in die Datei kopieren:

#!/bin/bash

#Variablen

CONFIG_FILE="/etc/openvpn/client.conf"
CREDENTIALS_FILE="~/Dokumente/OpenVPN/openvpncredentials.txt"

echo deinSudoPasswort | sudo -S openvpn --config "$CONFIG_FILE" --auth-user-pass "$CREDENTIALS_FILE"

# Die Berechtigungen lesen, schreiben und ausführbar setzen:

sudo chmod 700 ~/Dokumente/OpenVPN/openvpn-autostart.bash

Nun hast du es auch schon fast geschafft. Das Skript samt den Anmeldedaten hast du erstellt und jetzt fehlt nur noch eine winzige Datei, die deinem Ubuntu-PC zum Systemstart mitteilt, dass er die gewünschte VPN-Verbindung aufbauen soll. Du musst jetzt also noch deinen eigenen System-Daemon anlegen. Dafür gehst du bitte wie folgt vor:

# System-Daemon erstellen:

sudo nano /lib/systemd/system/openvpnautostart.service

# Den folgenden Inhalt bitte einfügen:

[Unit]
Description=Automatische Verbindung mittels OpenVPN

[Service]
ExecStart=~/Dokumente/OpenVPN/openvpn-autostart.bash

[Install]
WantedBy=multi-user.target

# Lesen & Schreiben für Eigentümer sowie Lesen für Gruppe & Andere:

sudo chmod 644 lib/systemd/system/openvpnautostart.service
Häufige Fehler & Troubleshooting-Tipps:

Wenn man alle Schritte in diesem Beitrag befolgt hat, sollte alles funktionieren. Manchmal ist dem aber nicht so. Die erste Anlaufstelle ist immer die Überprüfung, ob eine VPN-Verbindung aufgebaut werden kann. Führe daher bitte den Befehl „sudo openvpn –config /etc/openvpn/client.conf“ aus. Direkt im Anschluss solltest du nach deinem Benutzernamen und dem Passwort gefragt werden.

Wenn du dich nach der Eingabe erfolgreich mit dem VPN-Server verbinden kannst, hast du vermutlich einen Vertipper im Credentials-File unter ~/Dokumente/OpenVPN/openvpncredentials.txt Funktioniert die Verbindung mithilfe des Skripts noch immer nicht, dann prüfe einmal den Dienst openvpnautostart.service. Boote den Rechner einfach neu und warte nach dem Start 1 bis 2 Minuten.

Dann gibst du das Kommando „systemctl status openvpnautostart.service“ ein. Hier solltest du einen Grünen Punkt sehen. Das bedeutet, dass der Dienst nach dem Start des Rechners erfolgreich ausgeführt wurde. Kannst du trotz dessen keine VPN-Verbindung aufbauen, solltest du den Dienst mithilfe von „systemctl restart openvpnautostart.service“ einmal neu starten. Nun sollte alles funktionieren.

Von Fabian Wüst

Er ist leidenschaftlicher Open-Source-Benutzer und ein begeisterter Technologie-Enthusiast. Als kreativer Kopf hinter Homelabtopia bringt Fabian hier seine umfangreiche Erfahrung als Linux-Admin ein. Um sicherzustellen, dass du aus seinen Beiträgen den größtmöglichen Nutzen ziehen kannst, führt er ausgiebige Tests durch und errichtet dafür immense Setups.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert