Tags: VPN, Automatisierung
Windows-Clients bauen eine VPN-Verbindung normalerweise manuell nach dem Anmelden des Benutzers auf. Dies wirkt sich in einer AD-Domäne nachteilig auf Drive-Mappings und beim Wechsel von Passwörtern aus. WireGuard bietet als Systemdienst aber die Möglichkeit, die VPN-Verbindung beim Systemstart automatisch herzustellen.
Die Arbeitsschritte in diesem Beitrag müssen mit Administratorrechten vorgenommen werden. Es gibt zwar einige Workarounds, bei denen man mit den Berechtigungen eines Standardbenutzers auskommt, aber diese funktionieren in den meisten Fällen nicht zuverlässig.
WireGuard-Client einrichten
Wenn man für die Installation die MSI-Datei verwendet, dann lässt sich das Setup vollständig automatisieren, zum Beispiel über PowerShell:
Start-Process msiexec.exe -ArgumentList "/q", "/I", `
"wireguard-amd64-0.5.4.msi" -Wait -NoNewWindow -PassThru | Out-Null
Der standardmäßig vorhandene WireGuard Manager Service lässt sich an dieser Stelle ebenfalls gleich deinstallieren:
Start-Process "C:\Program Files\WireGuard\wireguard.exe" `
-ArgumentList "/uninstallmanagerservice" `
-Wait -NoNewWindow -PassThru | Out-Null
Danach erstellt man die Konfigurationsdatei für den Client, die man am Endgerät importiert. Anschließend kann man über die Schaltfläche Aktivieren eine Verbindung herstellen. Gelingt das, ist die Konfiguration korrekt. Das ist eine wichtige Voraussetzung, um den Verbindungsaufbau zu automatisieren.
Parallel dazu erkennt man die erfolgreiche Verbindung am WireGuard-Icon im System-Tray. Hier wird die verwendete Konfigurationsdatei angezeigt.
In den Einstellungen der Netzwerkadapter von Windows 10 / 11 erscheint außerdem eine neue Netzwerkverbindung, die den Namen der WireGuard-Konfigurationsdatei trägt.
Bei der Deaktivierung des Tunnels verschwindet die Verbindung wieder. Diese Aspekte sollte man vor der Automatisierung von VPN-Verbindungen überprüfen.
Die Konfigurationsdatei lässt sich anschließend recht einfach über einen Text-Editor bearbeiten. Sie ist folgendermaßen aufgebaut:
WireGuard per Script steuern: wg.exe und wireguard.exe
Im Installationsverzeichnis von WireGuard befindet sich das Dienstprogramm wg.exe, mit dem sich WireGuard weitgehend automatisieren lässt. Beim Aufruf ohne Parameter zeigt das Tool die aktuelle Konfiguration und den Zeitpunkt der letzten Verbindung an.
Eine ausführliche Hilfe zu allen Optionen des Utilities erhält man mit
wg.exe --help
Es ist aber auch möglich, wireguard.exe selbst zu automatisieren, zum Beispiel über PowerShell. Auch hier kann man alle unterstützten Schalter mit
wireguard.exe --help
anzeigen.
Systemdienst für WireGuard-Verbindungen erstellen
Um eine Konfiguration als Systemdienst zu einzurichten, führt man folgenden PowerShell-Befehl aus:
Start-Process 'C:\Program Files\WireGuard\wireguard.exe' `
-ArgumentList '/installtunnelservice', 'wireguard.conf' `
-Wait -NoNewWindow -PassThru | Out-Null
Start-Process sc.exe -ArgumentList 'config', `
'WireGuardTunnel$wireguard',start= delayed-auto' `
-Wait -NoNewWindow -PassThru | Out-Null
Start-Service -Name WireGuardTunnel$wireguard `
-ErrorAction SilentlyContinue
Dabei erzeugt WireGuard einen Systemdienst mit der Bezeichnung "WireGuard Tunnel:<Name>". Der Name entspricht der Konfigurationsdatei ohne die Endung *.conf. Er kann je nach Umgebung verschieden sein.
Autostart von WireGuard-VPNs über den Aufgabenplaner
Um eine Verbindung vor der Anmeldung eines Benutzers aufzubauen, startet man ein WireGuard-VPN über den Aufgabenplaner. Dort kann man die Anmeldedaten für einen administrativen Nutzer hinterlegen.
Dazu öffnet man taskschd.msc und startet den Assistenten über Einfache Aufgabe erstellen. Als Name für die Aufgabe wählt man zum Beispiel WireGuard-VPN.
Als Auslöser für die Aufgabe nimmt man die Option Beim Start des Computers. Für Aktion wählt man Programm starten aus und als Programm trägt man
"C:\Programme\WireGuard\Wireguard.exe"
ein. Bei Argumente hinzufügen gibt man die folgende Zeile ein:
/installtunnelservice "C:\Programm\Wireguard\vpn2.conf"
Pfad und Name hängen natürlich von der tatsächlich verwendeten Datei ab.
Vor dem Speichern der Aufgabe aktiviert man noch die Option Beim Klicken auf "Fertig stellen", die Eigenschaften für diese Aufgabe öffnen.
Damit die geplante Aufgabe funktioniert, muss in ihren Einstellungen die Option Mit höchsten Privilegien aktiviert sein.
Nach einem Neustart sollte der Systemdienst vorhanden sein und automatisch starten.
Zusammenfassung
Anstatt den VPN-Tunnel manuell durch den Benutzer aufbauen zu lassen, kann man Wireguard als Systemdienst einrichten und die Verbindung über eine geplante Aufgabe automatisch bei Systemstart herstellen.
Dies bietet bei Rechnern, die Mitglied in einer Domäne sind, erhebliche Vorteile bei der zentralen Verwaltung, etwa bei der Zuordnung von Netzlaufwerken oder der Ausführung von Login-Scripts. Außerdem kann man die üblichen VPN-Schwierigkeiten bei abgelaufenen Passwörtern vermeiden.
Täglich Know-how für IT-Pros mit unserem Newsletter
Thomas Joos ist Consultant für mittlere und große Unternehmen im Bereich Security, Active Directory, Cloud und KI.
Er hat über 100 Fachbücher zu IT-Themen für verschiedene Verlage geschrieben und veröffentlicht regelmäßig bei verschiedenen Portalen und Zeitschriften wie IT-Administrator, Computerwoche, Heise und vielen weiteren.
Darüber hinaus ist er als Trainer für LinkedIn Learning tätig.
Verwandte Beiträge
Weitere Links
7 Kommentare
Hallo zusammmen,
sind Sie sicher, dass die Einstellung im vorletzten Screenshot "Nur ausführen, wenn Benutzer angemeldet ist" korrekt ist?
Viele Grüße,
Armin
Hallo Armin,
Du kannst auch die andere Einstellung verwenden, dass die Anmeldung komplett ohne Benutzer stattfinden. Das hängt von der jeweiligen Umgebung ab.
Gruss
Thomas Joos
Wie kann die VPN-Verbindung vor der Anmeldung des Benutzers aufgebaut werden, wenn die Aufgabe im Kontext des Users laufen muss?
Der Fokus dabei ist vor allem, dass der Verbindungsaufbau automatisiert stattfindet, nicht unbedingt, dass kein Benutzer angemeldet ist. Der Benutzer hat dann eine funktionierende Netzwerkverbindung, ohne dass er etwas konfigurieren oder starten muss.
Ich konnte Wireguard so automatisieren. Leider muss ich dies wieder Rückgängig machen. Somit Aufgabe aus der Aufgabenplanung gelöscht. Trotzdem startet Wireguard automatisch weiterhin bei jedem start von windows den VPN Tunnel. Was kann ich tun ?
Hallo ans Team,
mit Freude bin ich auf dieses Thema gestoßen. Ich habe auch gleich meine VPN an mein privates Netzwerk als Dienst nach dem obigen Script installiert.
Doch leider muss ich das wieder rückgängig machen, da ein anderer User am PC eine andere VPN mittels anderer Software aufbauen muss um remote arbeiten zu können.
Daher nun meine Frage: welches Script muss ich in PowerShell eingeben um den Wireguard-Dienst wieder zu löschen / deinstallieren???
Vielen Dank vorab für Eure ausführliche Antwort.
Herzliche Grüße
Jörg
Diese zwei PowerShell-Befehle sollten den Service anhalten und deaktivieren:
Stop-Service -Name 'WireGuardTunnel$wireguard' -Force
Set-Service -StartupType Disabled `
-Name 'WireGuardTunnel$wireguard'
Man muss sie in einer Session mit erhöhten Rechten ausführen.