visucius
Goto Top

Wireguard und RDP-Skript

Hallo in die Runde,

einige werden jetzt lachen - aber ich gstell mich mal wieder a wegn, (auch) was Skripte und dergleichen angeht. Ich bin dafür ganz offenbar etwas "zu schludrig" face-wink

Vielleicht wollt Ihr mir ja trotzdem helfen:

Situation:
Windows 10 Laptop als
Wireguard-Client mit
RDP-Zugriff
Nutzer ist kein Admin(!)

Ziel:
"Butten" auf dem Desktop, welcher "gleichzeitig" VPN und die RDP-Verbindung nach einem Doppelklick aufbaut.


Bisher hatte ich das mit einer L2TP-Verbindung und dem folgenden Script recht userfreundlich hinbekommen:

@echo off

:: Connecting to VPN...
rasdial "Strato_xyz" user pass  

echo Running RDP...
"C:\Users\xxx\Documents\Remote\Strato.rdp"  

echo Finished - disconnecting from VPN...
rasdial "Strato_xyz" /disconnect  

Allerdings ist ja Wireguard nicht im Windows-VPN-Setup hinterlegt und außerdem scheint es Zugriffsprobleme zu geben, weil sich die Wireguard-Verbindung nur als Admin herstellen lässt?!

Könnte man das Skript für diese Umstände modifizieren? Und wenn ja, wie ;)

Vielen DANK im Voraus!

Content-Key: 603185

Url: https://administrator.de/contentid/603185

Ausgedruckt am: 29.03.2024 um 09:03 Uhr

Mitglied: 145916
Lösung 145916 10.09.2020 aktualisiert um 12:22:38 Uhr
Goto Top
Installiere den Wireguard-Tunnel mit der gewünschten CONF Datei als Dienst (s. Kommandozeilenoptionen), in einer administrativen CMD
wireguard /installtunnelservice "D:\Pfad\mytunnel.conf"  
Stelle die Startart des Dienstes dann auf "manuell". Dann vergibst du dem User Rechte zum Starten und Stoppen des Dienstes, und schon kannst du mit einem niedrig privilegierten User den Dienst via net start WireguardTunnel$mytunnel starten und auch stoppen net stop WireguardTunnel$mytunnel.
Wie man Rechte granular an User für Dienste vergibt kannst du hier nachlesen
Windows 2019 Server Berechtigungen für das starten und stoppen von Diensten vergeben
Mitglied: colinardo
Lösung colinardo 10.09.2020, aktualisiert am 22.04.2023 um 08:03:47 Uhr
Goto Top
Servus,
so wie @145916 es erwähnt hat habe ich das auch schon ein paar mal durchgeführt. Habe dir mal schnell eine Batch-Datei zum Einrichten des Tunnel-Dienstes geschrieben die du einmalig als Admin ausführst. Der Pfad für eine *.conf Datei deines Tunnels fragt dich die Batch ab. Die Config-Datei darf dabei nicht die verschlüsselte Variante aus dem Programm-Verzeichnis sein sondern eine Klartext-Config die man in irgendeinem einem Verzeichnis seiner Wahl platziert. Diese darf anschließend auch nicht gelöscht werden da der Dienst auf diesen Pfad verweist und darauf angewiesen ist.
@echo off
:: restart elevated if needed
net session >nul 2>&1 || (powershell -EP Bypass -NoP -C start "%~0" -verb runas &exit /b)  
:: read config path from user
set /p "tunnelconfig=Please enter the absolute path to the wireguard *.conf file: "  
:: check path existance
if not exist "%tunnelconfig%" (  
    echo ERROR Invalid path to config file!
    timeout /t 3
    exit /b 1
)
:: get tunnel name from config file name, filename without extension
for /f "delims=" %%a in ("%tunnelconfig%") do set "tunnelname=%%~na"  
echo Creating tunnel service with name "WireguardTunnel$%tunnelname%"  
"C:\Program Files\wireguard\wireguard.exe" /installtunnelservice "%tunnelconfig%"  
echo Setting service permissions for local "Users" group to allow service start/stop  
sc sdset "WireguardTunnel$%tunnelname%" "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CRRPRCWPDT;;;BU)"  
echo Setting service start mode to manual
sc config "WireguardTunnel$%tunnelname%" start= demand  
echo.
timeout /t 3
Danach kannst du als normaler User auf dem Rechner mit (Tunnelname ist per Default der Basename der Configdatei, bei einer Datei namens "MeinTunnel.conf" also "MeinTunnel")

net start WireguardTunnel$tunnelname

den Tunnel starten und mit

net stop WireguardTunnel$tunnelname

den Tunnel wieder stoppen und diese Befehle in deine Batchdatei oben einbauen.

Um den Tunneldienst wieder zu löschen einfach folgenden Befehl in einer elevated CMD absetzen (Tunnelname wieder anpassen):
"C:\Program Files\wireguard\wireguard.exe" /uninstalltunnelservice <TUNNELNAME>  

Grüße Uwe
Mitglied: Visucius
Visucius 11.09.2020 um 19:06:11 Uhr
Goto Top
Vielen Dank @145916 und @colinardo! Auch und besonders für die Arbeit mit dem Skript.

Ich werde das probieren und gebe Feedback wenns klappt.
Mitglied: ZappBrannigen
ZappBrannigen 11.04.2022 um 10:04:20 Uhr
Goto Top
Ich krame das mal raus: leider funktioniert das Skript so nicht (mehr), weder auf Windows 10 prof. noch 11 prof.
Hat sich hier etwas geändert?
Mitglied: colinardo
colinardo 11.04.2022 aktualisiert um 10:53:58 Uhr
Goto Top
Servus @ZappBrannigen!
Zitat von @ZappBrannigen:

Ich krame das mal raus: leider funktioniert das Skript so nicht (mehr), weder auf Windows 10 prof. noch 11 prof.
Hat sich hier etwas geändert?
Gerade nochmal verifiziert, läuft unter Windows 10 und 11 einwandfrei mit der aktuellen Wireguard Version v0.5.3!

Nur zur Info: Nach dem Einrichten ist der Tunnel nicht in der GUI sichtbar! Dieser ist dann nur als Dienst verwendbar/start-/stopbar und läuft unsichtbar im Hintergrund. Automatische Start und Stop kann dann über die Dienste-Verwaltung eingestellt werden.

Btw. eine generelle Aussage wie "funktioniert nicht" ohne irgendwelche handfesten Fehlermeldungen oder eigene Vorgehensweise wie übergebene Parameter etc. zu nennen ist ehrlich gesagt eine Schande wenn man sowas in einem Admin-Forum postet face-sad.

Grüße Uwe
Mitglied: ZappBrannigen
ZappBrannigen 11.04.2022 um 11:12:09 Uhr
Goto Top
Okay, Schande über mich. Ich hatte damit gerechnet: "Ja, das funktioniert nicht mehr aus dem und dem Grund seit Windows-Update XXXX".

Ich habe es auf verschiedenen Rechnern probiert.
Mal lief das Skript erfolgreich durch, mal mit dieser Meldung:

C:\temp\ file:WG-Startup.conf
Creating tunnel service with name "WireguardTunnel$WG-Startup"
Setting service permissions for local "Users" group to allow service start/stop
[SC] SetServiceObjectSecurity ERFOLG
Setting service start mode to manual
[SC] OpenService FEHLER 1060:

Der angegebene Dienst ist kein installierter Dienst.


Drücken Sie eine beliebige Taste . . .


Wenn ich den Dienst starten will, bekomme ich diesen Fehler:

C:\Users\Administrator\Documents>net start WireguardTunnel$WG-Startup
WireGuard Tunnel: WG-Startup wird gestartet.
WireGuard Tunnel: WG-Startup konnte nicht gestartet werden.

Ein dienstspezifischer Fehler ist aufgetreten: 2.

Sie erhalten weitere Hilfe, wenn Sie NET HELPMSG 3547 eingeben.


C:\Users\Administrator\Documents>Pause
Drücken Sie eine beliebige Taste . . .
Mitglied: colinardo
colinardo 11.04.2022 aktualisiert um 11:18:03 Uhr
Goto Top
C:\temp\ file:WG-Startup.conf
Das ist kein vollständiger absoluter Pfad, das ist aber zwingend Voraussetzung.
Genauso darf das File nicht nur temporär abgelegt werden sondern in einem Pfad der für den Dienst immer erreichbar sein muss! Denn fehlt die CONF-Datei an dem angegebenen Pfad startet der Dienst nicht mehr!
Mitglied: ZappBrannigen
ZappBrannigen 11.04.2022 um 11:30:39 Uhr
Goto Top
Die conf liegt nachwievor im Ordner, aber stimmt, optimal ist der nicht.

Jetzt muss ich aber mal blöd fragen, wie genau ich den Pfad dort eingeben muss.
Ich hatte es mit Pfad+Dateiname mit Endung zuerst probiert, da ging gar nichts. Da dachte ich wenn "file:" erscheint muss ich den Filenamen eintippen und bestätigen.

Heißt das, ich gebe den Pfad mit Datei an und muss den Dateiname danach nochmal eintippen?
Mitglied: colinardo
colinardo 11.04.2022 aktualisiert um 11:38:04 Uhr
Goto Top
Zitat von @ZappBrannigen:
Jetzt muss ich aber mal blöd fragen, wie genau ich den Pfad dort eingeben muss.
Ich hatte es mit Pfad+Dateiname mit Endung zuerst probiert, da ging gar nichts. Da dachte ich wenn "file:" erscheint muss ich den Filenamen eintippen und bestätigen.
Dem kompletten absoluten Pfad zur Config-Datei, also bspw.
C:\configs\myTunnel.conf

Heißt das, ich gebe den Pfad mit Datei an und muss den Dateiname danach nochmal eintippen?
Nein, es muss einfach nur einmal der komplette absolute Pfad inklusive Dateiname und Endung bei der Abfrage angegeben werden, mehr ist nicht nötig.

Willst du keine manuelle Abfrage vom Skript kannst du die Abfrage auch einfach durch eine feste Definition des Pfades ersetzen in dem du Zeile 5 des Skriptes hiermit ersetzt
set "tunnelconfig=C:\configs\myTunnel.conf"