Tunnel, die erst erscheinen, nachdem sich jemand angemeldet hat, werden in der Regel von der Sitzung dieser Person gestartet und nicht vom automatischen Dienst. Der übliche Übeltäter ist eine Autostart-Verknüpfung, die openvpn-gui.exe startet, und es ist keine kaputte Installation. Die Verknüpfung startet eine Desktop-Anwendung innerhalb einer Benutzersitzung, mit dem Profil dieses Benutzers, seinen Zertifikatsspeichern und seiner Fähigkeit, eine Eingabeaufforderung zu beantworten. Nichts davon macht die Verbindung unabhängig von einem angemeldeten Menschen, und genau das verlangt ein Tunnel vor der Anmeldung.

Das Symptom hat meist drei Ursachen

Drei Muster sehen von außen gleich aus und haben unterschiedliche Korrekturen. Das erste ist ein Ausführungsbesitzer, der eine Benutzersitzung statt des Dienstes ist, also der Fall der Autostart-Verknüpfung. Das zweite ist ein Profil, das dort liegt, wo der Dienst nicht nachsieht, sodass der Dienst startet, nichts findet und sauber beendet wird. Das dritte ist ein Profil, das der Dienst findet und startet, dessen Anmeldedaten aber eine Interaktion benötigen, die kein Dienst liefern kann.

Welcher Fall zutrifft, lässt sich mit zwei Auslesungen klären: wofür der Dienst konfiguriert ist und welche Dateien er sehen kann. Beides ist ein Befehl, und keiner davon stört eine laufende Verbindung.

Was der automatische Dienst tatsächlich liest

Der automatische Dienst von Community ist ein Wrapper, der sein konfiguriertes Autostart-Verzeichnis durchsucht, normalerweise config-auto unter der Installation, und für jedes passende gefundene Profil einen OpenVPN-Prozess startet. Ein Profil, das im GUI-Menü eines Benutzers sichtbar ist, liegt stattdessen unter dem Roamingprofil dieses Benutzers, in einem Verzeichnis, das das Dienstkonto nicht liest. Die Windows-Dienstanleitung beschreibt diese Erkennung, und sie lohnt sich vor dem Kopieren irgendwelcher Dateien, weil das Zielverzeichnis eine Eigenschaft der Installation und keine feste Konvention ist. Eine Datei in den GUI-Ordner zu kopieren ändert für den Dienst also nichts, und sie in jeden Ordner namens config zu kopieren erzeugt Duplikate statt einer Lösung.

Get-Service OpenVPNService | Select-Object Status, StartType
Get-CimInstance Win32_Service | Where-Object Name -eq 'OpenVPNService' | Select-Object PathName, StartName
gci 'C:\Program Files\OpenVPN\config-auto'

Der letzte Befehl listet, was der Wrapper tatsächlich sehen wird, und das ist der schnellste Weg zu bestätigen, dass ein Profil am falschen Ort liegt. Die zweite Zeile zeigt auch das Konto, unter dem der Dienst läuft, und dieses Konto entscheidet, welche Dateipfade und Zertifikatsspeicher überhaupt erreichbar sind.

Warum eine Desktop-Anmeldung funktioniert und ein Systemstart nicht

Ein Erfolg auf dem Desktop kann eine Eingabeabhängigkeit lange verbergen. Ein GUI kann eine Schlüsselpassphrase, ein Kontopasswort oder einen zweiten Faktor in einem Dialog abfragen, weil es in einer interaktiven Sitzung mit sichtbarem Desktop läuft. Ein Dienst läuft in einer Sitzung ohne Desktop, eine Eingabeanforderung hat also keinen Ort, an dem sie erscheinen könnte, und die Verbindung scheitert nach einem Timeout, der ganz anders aussieht als ein Problem mit den Anmeldedaten.

Dateizugriff folgt derselben Regel. Ein privater Schlüssel, der unter dem Benutzerprofil gespeichert ist, oder ein Zertifikat im persönlichen Speicher des Benutzers ist für einen Dienst, der als der Rechner läuft, nicht verfügbar. Vergleichen Sie absolute Pfade, Berechtigungen und die Zertifikatsauswahl beider Seiten, statt anzunehmen, dass dieselbe Profildatei dieselbe Umgebung bedeutet.

Eine geplante Aufgabe, die unabhängig von der Anmeldung eines Benutzers laufen soll, erbt eine ähnliche Einschränkung. Sie kann die ausführbare Datei des GUI erfolgreich starten und trotzdem einen Prozess erzeugen, der nie Anmeldedaten erhält, sodass ein Prozess im Task-Manager kein Beweis für einen funktionierenden Tunnel ist.

Wählen Sie einen Besitzer und testen Sie den echten Lebenszyklus

Für eine Verbindung, die zu einer angemeldeten Person gehört, nutzen Sie das unterstützte Autostart-Verhalten des GUI und lassen Sie den Dienst außen vor. Für einen Tunnel, der vor jeder Anmeldung existieren muss, konfigurieren Sie den Dienst, legen Sie das Profil dort ab, wo der Wrapper es liest, und nutzen Sie einen unterstützten unbeaufsichtigten Anmeldedatenmechanismus wie einen Schlüssel ohne interaktive Passphrase oder eine dokumentierte Anmeldedatendatei.

Get-Content 'C:\Program Files\OpenVPN\log\openvpn.log' -Tail 40
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -like '*OpenVPN*'

Testen Sie den Lebenszyklus, der zählt: ein Neustart, bei dem sich niemand anmeldet, dann eine Wiederverbindung nach einer Netzwerkänderung. Behalten Sie einen Besitzer für die Verbindung, weil zwei konkurrierende Startmechanismen meist zwei Instanzen erzeugen, die um dieselben Routen und dieselbe Serversitzung kämpfen, was schwerer zu diagnostizieren ist als jeder Mechanismus allein.

Ähnliche Artikel