Open VPN Dienst ohne Benutzeranmeldung auf Windows Server starten

Da mietet man sich einen Windows-V-Server beim gewünschten Hoster (Strato, Amazon, Microsoft, etc.) und dann stellt sich einem die Frage: „Wie bringe ich das Teil denn nun dazu, sofort nach dem Hochfahren in meinem privaten, lokalen Netzwerk zu erscheinen?“. Klar, mit einer VPN-Verbindung. Doch das ist bei der Benutzung des OpenVPN-Clients schwieriger als gedacht, denn standardmäßig baut OpenVPN die Verbindung erst bei einer aktiven User-Session auf. Damit sich Nutzer des Servers aber bereits im privaten Netz auf den Server aufschalten können, muss gewährleistet sein, dass der Server bereits vor der ersten aktiven Anmeldung eine lokale IP-Adresse zieht. Diese Anleitung setzt eine erfolgreich konfigurierte OpenVPN-Verbindung voraus und beschreibt, wie mit Hilfe der Aufgabenplanung und einiger Batch-Scripts die OpenVPN-Dienste automatisch ohne User-Kontext starten. Eine Anleitung, die auch beim benutzerunabhängigen Start anderer Dienste auf einem Windows-Server von Interesse seien dürfte.

 

 

In dieser Anleitung geht es darum, dass ein Windows-Server, gehostet in der Cloud, zu einem oder mehreren festen Zeitpunkten die Verbindung mit einem privaten Netzwerk mittels VPN-Client von alleine beendet und wiederaufbaut, damit sich Nutzer über die private IP-Adresse innerhalb des LANs zum Server verbinden können. Diese Verbindungstrennung und Wiederverbindung ist oftmals sinnvoll, weil sich der OpenVPN Client auf dem Server im Standard nur dann neu verbindet, wenn ein Nutzer aktiv in einer Sitzung die Verbindung startet. Für den Einsatz eines Server ist dies allerdings sehr unpraktikabel, da man diesen ständig im privaten Netzwerk zugriffsbereit haben möchte. Auch im Falle von Verbindungsabbrüchen, zum Beispiel nach Zwangstrennungen auf der VPN-Serverseite, stellt ein zeitgesteuerter Reconnect die Verbindung wieder sicher.

Wie in der Einleitung beschrieben, setze ich in dieser Anleitung die erfolgreiche Installation und Konfiguration eines Open-VPN Zugangs bestehend aus Server- und Clientseite voraus. Der Nutzer sollte bereits in der Lage sein, den OpenVPN-Tunnel manuell erfolgreich aufbauen und eine IP-Adresse aus dem privaten Netz beziehen zu können.

Wir setzen diese Funktion mit Hilfe der Windows Aufgabenplanung und einiger Batch-Skripte um.

 

1. OpenVPN-Dienst aktivieren

 In der Verwaltung unseres Systems suchen wir den OpenVPN-Dienst. Diesen setzen wir auf den Starttyp „Automatisch“ (NICHT verzögerter Start) und starten den Dienst.

2. Batch-Skripte bereitstellen

Nun brauchen wir zwei Batch-Scripte. Einen zum Trennen einer ggf. bestehenden VPN-Verbindung und einen zum Herstellen der VPN-Verbindung.

Der ein oder andere wird nun sagen: „Wozu zwei Scripte?“. Ganz einfach: Damit evtl. Fehler granularer untersucht werden können. Aus diesem Grund werden wir die Trennung und die Herstellung der Verbindung in jeweils einer Aufgabe und einer damit in Verbindung stehenden Batch-Datei angehen. Schöner Nebeneffekt: Durch die Unterteilung unserer Kommandos in zwei Scripte und Aufgaben können wir sicherstellen, dass zwischen Trennung und Wiederherstellung der Verbindung genug Zeit vergeht.

Wir erstellen uns zwei Batchdateien, die über ein net-Kommando den OpenVPN-Dienst ansprechen und ihn stoppen, sowie starten. Denn bei jedem Start des Dienstes, wird die Verbindung mit dem OpenVPN-Server auf der Gegenseite erneut aufgebaut. 

batch

Die Batchdateien legen wir an einem für das System zugänglichen Speicherort ab, in meinem Falle im Ordner „Netlogon“ direkt auf dem Laufwerk „C:/“.

Der Start des Dienstes geschieht über den Batch Befehl net start „OpenVPNService“, abgelegt in einem separaten Batch-Script.

Das Beenden des Dienstes geschieht über den Batch Befehl net stop „OpenVPNService“, ebenfalls abgelegt in einem separaten Batch-Script.

 

3. Aufgabe planen

 

Nun müssen die zuvor erstellten Batch-Dateien mit Ihren Kommandos gestartet werden. Am besten geschieht dies zeitabhängig.
Bei uns zum Beispiel wird ab morgends 08:00 Uhr bis Abends 22:00 Uhr mit dem Server gearbeitet, sprich in dieser Zeit muss das Gerät im lokalen Netzwerk erreichbar sein. Damit dies der Fall ist, muss natürlich die Internetverbindung zum Cloud-Server in dieser Zeit stabil sein. In unserem Beispiel gibt es eine Zwangstrennung der Internetleitung zwischen 23:00 Uhr und 02:00 Uhr nachts. Und dabei wird die Verbindung des OpenVPN-Clients getrennt und ohne diese Anleitung einfach nicht wieder aufgebaut. 

Die Einstellungen für diese Aufgabe nehmen wir in der Windows Aufgabenplanung vor, welche Teil der Computerverwaltung ist. Hier erstellen wir zwei neue Aufgaben. Eine zum Stoppen einer eventuell vorhandenen VPN-Verbindung und die andere zum Start. Die nun nachfolgen Schritte müssen wir daher jeweils für die Stop- und die Start-Aufgabe wiederholen.

aufgaben1

Damit das System ab 08:00 Uhr morgens, ggf. etwas früher, startklar ist, lege ich die Verbindungstrennung auf täglich 06:30 Uhr. In der zweiten Aufgabe zum Start der Verbindung hinterlege ich als Zeitpunkt täglich 06:31. 1 Minute sollte zum Beenden der ggf. vorher existenten VPN-Verbindung ausreichen.

 

aufgaben3

 

Als auszuführende Aktion hinterlege wir den Aufruf der zuvor abgelegten Batch-Skripte.

aufgaben4

Wichtig hierbei ist, als welcher Benutzer wir diese ausführen lassen. Damit die Ausführung der Aufgaben ohne Nutzerkontext, sondern auf Systemebene auch ohne angemeldete Benutzer funktioniert, führen wir die Aufgabe als Nutzer „SYSTEM“ aus. Wir stellen die korrekte Kompatibilität ein und wählen „Mit höchsten Privilegien ausführen“, damit der Task auch auf die Batchdateien zugreifen darf.

 

aufgaben2

 

Das warschon alles. Der Dienst wird nun jeden Morgen um 06:31 Uhr neugestartet und der Server ist ab 06:31 im lokalen, privaten Netz registriert und erreichbar.

 

Weiterführendes / Produktiveinsatz

 

Das oben im Beispiel genannte Zeitmodell ist natürlich sehr starr. Man kann die ganze Aufgabe noch intelligenter machen. Hier Anregungen für den Produktiveinsatz.

Man kann die ganze Sache erheblich intelligenter und robuster machen, indem man versucht, den Reconnect, also den Dienstneustart nur dann auszuführen wenn dieser auch erforderlich ist sprich wenn keine VPN-Verbindung mehr besteht.

Dazu kann man im aufgerufenen Batch-Script zunächst prüfen, ob eine Verbindung zu einem im Zielnetzwerk (lokales Netz) befindlichen Rechner exisitert. Erst wenn diese Verbindung nicht zu Stande kommt, wird der Reconnect ausgelöst. Das hat den Vorteil, dass man nurnoch das Script zum Neustart des Dienstes aufrufen muss und erlaubt zudem die Ausführung der Aufgabe in kürzeren Intervallen, da nicht jedesmal ein Reconnect erzwungen wird, was sonst die Erreichbarkeit des Servers und somit die Arbeit stören würde. Denkbar wäre dann ein Intervall von 10 Minuten. 

Die so abgebildete Logik wäre:

„Prüfe im 10 Minuten Rhythmus, ob der Server 192.168.1.1 erreichbar ist, wenn nein, starte den Dienst neu und verbinde mit dem LAN.“