OpenVPN-Dienst scheitert an einem Profil, das die GUI öffnet: fünf Prüfungen
Dasselbe Profil, ein anderer Starter. Prüfen Sie das Arbeitsverzeichnis, das Dienstkonto, das Attribut der verschlüsselten Datei, den Besitzer und dann den Wrapper.
Zwei Starter öffnen dasselbe Profil auf einem Rechner, und nur die GUI verbindet. Die Datei ist intakt und der Installer wahrscheinlich in Ordnung; unterschiedlich ist der Kontext, den jeder Starter openvpn.exe gibt. Arbeitsverzeichnis, Kontenidentität und Dateiattribute reisen alle mit diesem Kontext. Prüfen Sie sie in dieser Reihenfolge und halten Sie bei der ersten an, die den Fehler erklärt.
Bestätigen Sie, welcher Starter scheitert
Beweisen Sie zuerst die Trennung. Wenn die GUI verbindet und der Dienst nicht, bei gleichem Profilpfad, ist die Datei für jemanden lesbar, und die Frage wird, wer sie liest und von wo. Wenn beide scheitern, ist das Profil beschädigt, und nichts davon gilt. Notieren Sie den Dienstnamen und das genaue Profil, das geladen werden sollte.
Ein Dienst, der auf sein eigenes Autostart-Verzeichnis zeigt, lädt möglicherweise nicht die Datei, die Sie im Editor geöffnet haben. Vergleichen Sie den Pfad in der Dienstkonfiguration mit dem Pfad in der GUI, Zeichen für Zeichen, denn ein angehängter Ordnername oder ein anderer Laufwerksbuchstabe genügt, um Sie in den falschen Zweig zu schicken.
Wo relative Pfade aufgelöst werden
Ein Profil, das ca.crt oder ein Hilfsskript nur mit Namen referenziert, verlangt eine Suche relativ zu dem Ort, an dem der Prozess gerade läuft. Die GUI startet im Konfigurationsordner, also werden diese Namen aufgelöst. Ein vom Dienstmanager gestarteter Dienst hat keinen solchen Ausgangspunkt, und die Suche scheitert, bevor ein Zertifikat gelesen wird. Deshalb funktioniert dasselbe Profil in einem Starter und im anderen nicht.
Geben Sie dem Wrapper ein Verzeichnis zum Starten, oder machen Sie jede Referenz absolut. Den Kontext der GUI auf einer Befehlszeile nachzubilden sieht so aus:
openvpn --cd "C:\VPN\profiles\office" --config "C:\VPN\profiles\office\office.ovpn"
Mehr Ausführlichkeit bei diesem Befehl zeigt den genauen Pfad, der versucht wurde. Tun Sie das, bevor Sie Berechtigungen ändern, denn eine fehlende Datei und ein verweigertes Lesen brauchen unterschiedliche Korrekturen. Das Standardprotokoll unterscheidet sie nicht. Ein zusätzliches Flag spart eine Stunde Raten.
Wenn die Dienstidentität nicht lesen kann
Ein Dienst läuft als Systemidentität, nicht als Sie. Eine ACL, die Ihrem Benutzer die volle Kontrolle gibt und niemandem sonst, scheitert dort, während sie in Ihrer Sitzung einwandfrei funktioniert. Ein Profil auf einem zugeordneten Laufwerk oder einer authentifizierten Freigabe scheitert aus demselben Grund. Bestätigen Sie die Berechtigungen der Datei, bevor Sie etwas anderes ansehen.
Die Prüfung ist ein Lesen der effektiven Berechtigungen plus ein Lesen, das als Dienstidentität versucht wird. Führen Sie den ersten Teil in einer erhöhten Eingabeaufforderung aus:
icacls "C:\VPN\profiles\office\office.ovpn"
Versuchen Sie dann dasselbe Lesen als Dienstidentität, zum Beispiel mit psexec -s -i von Sysinternals, und beobachten Sie, ob sich die Datei öffnet. Wenn nicht, hilft keine Pfadkorrektur. Korrigieren Sie die ACL oder verschieben Sie das Profil an einen Ort, den die Dienstidentität lesen kann.
Dateiverschlüsselung ist der zweite, seltenere Fall. Ein Profil mit dem Attribut des Encrypting File System wird für den Benutzer, der es verschlüsselt hat, transparent entschlüsselt und bleibt für ein Dienstkonto unlesbar. Deshalb öffnet sich dieselbe Datei in Ihrem Editor und nicht unter dem Dienst.
Das Attribut ist in einer erhöhten Eingabeaufforderung sichtbar, und es zu prüfen öffnet das Profil nicht. Führen Sie beide Befehle aus und lesen Sie die Ausgabe:
cipher /s:"C:\VPN\profiles\office"
attrib "C:\VPN\profiles\office\office.ovpn"
Das Entfernen des Attributs macht die Datei lesbar, und es entfernt auch den Schutz, den sie trug. Wenn das Profil geschützt bleiben muss, legen Sie das geheime Material dort ab, wo die Dienstidentität eine ausdrückliche Berechtigung hat, statt sich auf Verschlüsselung pro Benutzer zu verlassen. Eine solche Anordnung übersteht einen Passwortwechsel, und sie macht den Zugriff für jemanden anderen prüfbar als die Person, die die Datei verschlüsselt hat.
Entscheiden, wem der Tunnel gehört
Die GUI kann ein Passwort abfragen und ein Zertifikat aus Ihrem Benutzerspeicher lesen. Der Dienst kann beides nicht, also wird ein Profil, das von einem interaktiven Geheimnis abhängt, nie unbeaufsichtigt starten, egal wie die Pfade korrigiert werden. Diese Grenze ist eine Designentscheidung, kein Mangel, der umgangen werden muss. Wählen Sie einen Besitzer, bevor Sie etwas anderes ändern.
Wenn der Tunnel vor der Anmeldung stehen muss, geben Sie dem Dienst eine unbeaufsichtigte Quelle für Anmeldeinformationen und eine eigene Kopie des Profils. Wenn er nur existieren muss, während Sie am Schreibtisch sitzen, behalten Sie ihn in der GUI und entfernen Sie die Dienstkopie. Beides gleichzeitig ist die Konfiguration, die Adapterkonflikte und doppelte Routen erzeugt.
Dieser Konflikt wird meist als Konfigurationsfehler diagnostiziert statt als zwei Besitzer, die um einen Adapter kämpfen. Das Ereignisprotokoll zeigt einen Prozess, der das TAP-Gerät nicht öffnen kann, was wie ein Berechtigungsproblem aussieht und keines ist. Zählen Sie zuerst die Besitzer.
Was der Dienst-Wrapper tatsächlich startet
Der Einstiegspunkt des Dienstes ist ein kleiner Wrapper, der seine eigenen gespeicherten Parameter liest und dann openvpn.exe startet. Wenn die Befehlszeile im Ereignisprotokoll nicht Ihrer Erwartung entspricht, sind diese Werte das, was zu untersuchen ist. Eine Neuinstallation setzt sie auf Standardwerte zurück und zerstört die Beweise. Lesen Sie sie zuerst.
Die Werte liegen in der Registrierung unter dem eigenen Schlüssel des Dienstes, und sc qc zeigt den Binärpfad, den der Dienstmanager starten wird. Vergleichen Sie diesen Pfad mit der gespeicherten Konfiguration des Wrappers, bevor Sie einen der beiden bearbeiten.
Den Wrapper durch ein Skript zu ersetzen, das Sie kontrollieren, ist invasiver, aber es faltet die effektive Befehlszeile in eine lesbare Datei. Schließen Sie mit einem Neustart ab und lesen Sie dann das Protokoll pro Profil, bis die erste erfolgreiche Startzeile erscheint. Ein Dienststatus „läuft“ bedeutet nur, dass der Wrapper nicht beendet wurde, was auch stimmt, wenn sein Kind sofort gestorben ist.