Wenn durch einen VPN-Tunnel per Remotedesktopverbindung auf einen Server zugegriffen werden soll.
Voraussetzung:
Das Ausführen von VisualBasic-Script muss auf dem Client-PC erlaubt sein (Voreinstellung wenn nicht ein Virenscanner dazwischen funkt).
* Lancom-Router auf Empfänger/Serverseite
* Eine funtionsfähige VPN-Verbindung via Lancom Advanced VPN-Client sollte bestehen.
* Eine RDP-Sitzung sollte darüber laufen.
Das Script verwendet denLancom Advanced VPN-Clien
Damit nicht ein schwarzen Fenster während der Laufzeit der RDP-Sitzung bestehen bleibt wird ein Hilfsscript verwendet.
vpn_rdp.bat Batch-Datei um das Hilfsscript zu starten
cscript -nologo hidden_VBS.vbs
hidden_VBS.vbs Hilfsscript
Option Explicit '***************************************** ' Script oder Programm augeblendet starten '***************************************** Dim oApp, oWSH, sApp, sPara, sScriptPath Const cScriptName = "runRDPviaVPN.vbs" Set oApp = CreateObject("Shell.Application") Set oWSH = CreateObject("Wscript.shell") 'Das Programm bzw. Scriptinterpreter sApp = "cscript.exe" sScriptPath = Replace(WScript.ScriptFullName, WScript.ScriptName, vbNullString) ' Startparameter für die Anwendung oder Script-Datei sPara = sScriptPath & cScriptName ' Programm / Script Ausführen mit Parametern, 0 => Ausführung versteckt (hidden) ohne auf das Beenden zu warten. oApp.ShellExecute sApp, sPara, "", "", 0 Set oApp = Nothing Set oWSH = Nothing
runRDPviaLancomAdvancedVPNClient.vbs Script um erst den VPN-Client dann die Remotedesktopverbindung starten
Option Explicit ' ************************************************************ ' Das Script etabliert eine VPN-Verbindung zu einem LANCOM-Router via LANCOM Advanced VPN Client. ' Sobald die VPN-Verbindung zwischen dem lokalen PC und dem Router besteht wird im Anschluss eine ' RDP-Verbindung zu einem Server/PC innerhalb des Netzwerkes des LANCOM-Routers aufgebaut. ' Funktionsweise des Scripts: ' 1. Prüfen ob der VPN-Client schon gestartet ist ' Verwendete Software ' Remote Desktop Protokoll (RDP) ' LANCOM Advanced VPN Client -> https://www.lancom-systems.de/produkte/router-vpn-gateways/lancom-advanced-vpn-client-windows/ ' ************************************************************ ' ************************************************************ ' Persönliche Einstellungen ' ************************************************************ ' Datei-Name der RDP-Verbindungseinstellungen: Remotedesktopverbindung starten -> Optionen einblenden -> Verbindungseinstellungen speichern unter... aufrufen ' In diesem Bsp. liegt die Datei auf dem Desktop des Benutzers und wurde remotedesktop genannt. Const cRDP = "%HOMEDRIVE%%HOMEPATH%\desktop\remotedesktop.rdp" ' Für den Verbindungsaufbau wird dieser Client-Monitor nicht benötigt. Kann also auch leer gelassen werden wenn die VPN-Verbindung korret funktioniert. Const cAppAVPNC = "ncpmon.exe" 'VPN Client 'ncpmon.exe ' Verbindungs-Profil-Name das gestartet werden soll. ' Wird hier nichts eingetragen muss ein Profil als Standard im VPN Client markiert sein. Konfiguration -> Profile Const cVPN = "" ' Ist der Verbindungsaufbau des Profils auf "immer" im VPN Client eingestellt, muss eine Wartezeit für die Zeit des Verbindungsaufbaus eingetragen werden (~2-3 Sek.). Sonst 0 Const cWartezeit = 0 'In Sekunden ' ************************************************************ Dim oWsh, oApp, oFS, appAVPNC, appAVPNCCMD, appRDPP, argRDP Dim sScriptPath, sTerminalServer, fAppAVPNC, sCMD, i, sTmp, sTmpfile Const cAppAVPNCCMD = "ncpclientcmd.exe" 'VPN Client Commandline. Const cAppAVPNCPath = "\LANCOM\Advanced VPN Client\" 'VPN Client SubPath Const cAppRDP = "mstsc.exe" 'RemoteDesktop-Client ' ************************************************************ ' Funktionen ' ************************************************************ 'Funktion prüft ob eine Anwendung gestartet ist. Function appInTask(sApp) ' Dim oSel, oObj, fappRunning Set oSel = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select Name from Win32_Process Where Name = '" & sApp & "'", , 48) fappRunning = False For Each oObj In oSel fappRunning = True Next Set oSel = Nothing appInTask = fappRunning End Function ' Nachdem die VPN-Verbindung aufgebaut ist wird den RDP-Server (Terminalserver) angepingt ob dieser ereichbar ist Function ping(j) Dim i, sTmp, sPing 'Zeigt die Anzahl der Zeilen an welche die Zeichenfolge " TTL=" enthalten sPing = "ping -n 1 " & sTerminalServer & " | find /c "" TTL=""" On Error Resume Next i = 0 Do oWsh.run sCMD & sPing & " > " & sTmpfile, 0, True i = CInt(Trim(oFS.OpenTextFile(sTmpfile).ReadLine())) WScript.Sleep 1000 j = j - 1 Loop Until i > 0 or j <= 0 ping = (i > 0) End Function Function wrap(s) If InStr(1, s, " ", vbTextCompare) Then s = """" & s & """" wrap = s End Function Function GetInfoFromFile(sFile, sFind) Dim sTmp, oFile Set oFile = oFS.OpenTextFile(sFile, 1, True, -2) With oFile Do sTmp = .ReadLine If InStr(1, sTmp, sFind) Then GetInfoFromFile= Trim(Replace(sTmp, sFind, vbNullString)) sTmp = .ReadAll End If Loop Until .AtEndOfStream .Close End With End Function ' ************************************************************ ' Script ' ************************************************************ ' sollen die CMD-Fenster angezeigt werden? 0 = versteckt [default], 1 = anzeigen Set oWSH = CreateObject("Wscript.shell") Set oApp = CreateObject("Shell.Application") Set oFS = CreateObject("Scripting.FileSystemObject") sCMD = oWsh.ExpandEnvironmentStrings("%COMSPEC%") & " /C " ' Pfad des Scripts. sScriptPath = Replace(WScript.ScriptFullName, WScript.ScriptName, vbNullString) sTmpfile = oWsh.ExpandEnvironmentStrings("%tmp%") & "\~info.txt" ' kompletter Dateipfad des VPN Clients appAVPNC = oWsh.ExpandEnvironmentStrings("%ProgramFiles%") & + cAppAVPNCPath + cAppAVPNC appAVPNCCMD = oWsh.ExpandEnvironmentStrings("%ProgramFiles%") & + cAppAVPNCPath + cAppAVPNCCMD If Not oFS.FileExists(appAVPNCCMD) Then appAVPNC = oWsh.ExpandEnvironmentStrings("%ProgramFiles(x86)%") & + cAppAVPNCPath + cAppAVPNC appAVPNCCMD = oWsh.ExpandEnvironmentStrings("%ProgramFiles(x86)%") & + cAppAVPNCPath + cAppAVPNCCMD If Not oFS.FileExists(appAVPNCCMD) Then oWsh.popup "Lancom Advanced VPN Client wurde nicht gefunden" , 15, "Fehler in der Installation", vbOKOnly WScript.Quit End If End If appAVPNC = wrap(appAVPNC) appAVPNCCMD = wrap(appAVPNCCMD) ' RDP - Remotedesktopverbindung appRDPP = oWsh.ExpandEnvironmentStrings("%windir%") + "\system32\" + cAppRDP ' Wenn der komplette Pfad in der Konstante eingetragen wurde, wird nichts angefügt. ' Sonst wird der Scriptordner vorangestellt. If InStr(1, cRDP, "\") = 0 Then argRDP = sScriptPath & cRDP Else argRDP = cRDP End If If Right(LCase(cRDP), 4) <> ".rdp" Then argRDP = argRDP & ".rdp" If InStr(1, cRDP, "%") > 0 Then argRDP = Replace(argRDP, "%HOMEDRIVE%", oWsh.ExpandEnvironmentStrings("%HOMEDRIVE%")) argRDP = Replace(argRDP, "%HOMEPATH%", oWsh.ExpandEnvironmentStrings("%HOMEPATH%")) End If If Not oFS.FileExists(argRDP) Then oWsh.popup "Die RemoteDesktop Verbindungsdatei wurde nicht gefunden." & vbCrLf & vbCrLf & argRDP, 15, "Fehler in Konfiguration", vbOKOnly + vbExclamation WScript.Quit End If sTerminalServer = GetInfoFromFile(argRDP, "full address:s:") If cAppAVPNC <> "" Then ' Soll der Client gestartet werden fAppAVPNC = appInTask(cAppAVPNC) If Not fAppAVPNC Then oWsh.Exec appAVPNC End If Else fAppAVPNC = False End If sTmp = appAVPNCCMD & " /writeClientInfoCenterData " & sTmpfile oWsh.Run sTmp, 0, True sTmp = GetInfoFromFile(sTmpfile, "State") If sTmp = "= disconnected" Then sTmp = appAVPNCCMD & " " & Trim("/connect " & cVPN) oWsh.Run sTmp, 0, True End If 'Prüfen ob der Zielhost erreichbar ist If ping(10) Then oWsh.run appRDPP & " " & wrap(argRDP), 3, True 'RDP maximiert starten und aktivieren. Warten bis Anwendung geschlossen wird. Else oWsh.popup "Ping-Anforderung konnte den Host '" & sTerminalServer & "' nicht finden" , 15, "Fehler da Server nicht erreichbar ist", vbOKOnly End If 'Wenn kein RDP mehr läuft VPN schließen if Not appInTask(cAppRDP) Then oWsh.run appAVPNCCMD & " /disconnect", 0, True If Not fAppAVPNC Then oWsh.Run appAVPNCCMD & " /stop", 0, True End If On Error Resume Next oFS.DeleteFile sTmpfile Set oWSH = Nothing Set oApp = Nothing Set oFS = Nothing
pLancom bietet eine eigene Software den LANCOM Advanced VPN Client an. Dieser kostet mit Stand 12/2019 etwa 90 €.
Wer keine öffentliche IP4-Adresse von seinem Internet-Provider bekommt, Stichwort DS-Lite mit IPv6 das passiert bei den Kabel-Anbietern, muss den LANCOM Advance VPN Client nehmen. Dieser funktioniert hier ohne Probleme.
Steht einem aber noch eine IPv4 Adresse zu Verfügung kann ohne Probleme den Shrew Soft VPN Client einsetzen.
Bei der Installation des VPN-Clients sollte aber darauf geachtet werden dass nur die Standard Edition installiert wird. Sonst wird jedes mal nach einer Aktivierung gefragt.
Vorbereitungen:
Eine neu Textdatei öffen in der relevanten Daten kurz zwischengespeicher werden können.
A) Lancom-Router Konfiguration erstellen.
1) Lanconfig starten.
2) Rechte Maustaste auf den Router in der Liste und Setup-Assistenten starten.
3) Einwahl Zugang bereitstellen (RAS, VPN) auswählen > weiter
4) Austauch-Modus IKEv1 auswählen > weiter
5) VPN-Client auswählen > VPN-Client mit benutzerdefinierten Parametern auswählen > witeer
6) Name (VPN festlegen) z.B. SHREWVPN_001. Kann aber auch aussagekräftiger sein.
Tip Namen in den o.G Editor kopieren
7) Den Preshared Key erstellen. Am einfachsten das Häckchen Anzeigen anklicken und dann auf Passwort erzeugen klicken.
TiP: Diesen PSK in den o.G. Editor kopieren
8) Standard-IKE_Parameter sollte nicht ankgepasst werden da dies Auswirkung auf schon erstellen Verbindungen hat.
9) Jetzt werden die Identitäten erstellt. Der Ty ist für beide Einträge auf Fully Qualified Username gestellt Hier enfiehlt sich eine fantasie Email-Adresse einzutragen. Lokale und entfernte Identität am besten aber gleich!10) Das PFS-Verfahren deaktivieren.
11) verwendete Verschlüsselungsverfahren auswählen
12) Authentifizierungsverfahren auswählen Kein AH
13) IP-Adresse welche der Client im lokalen Netzwerkes des Lancom-Router erhält. sollte nicht im Berich der lokalen PC's liegen.
(13b) Sollte die IP-Adresse schon vergeben sein gibt es ein Warnhinweis auf der nächsten Seite
14) Wenn der Client alle IP-Adressen erreichen soll Alle IP-Adressen für den VPN-client erlauben auwählen.
15) Mit Fertig stellen wird die Konfiguration auf dem Lancom-Router geschrieben und ist somit aktiv.
Nachtrag: Sollte es vergessen worden sein die Identitäten zu kopiern / mitzuschreiben können sie recht einfach in der Konfiguration den Lancom-Routern ausgelesen werden.
Rechte Maustaste auf den Router Konfiguration starten > VPN > IKE/IPSec >IKE-Schlüssel & Identitäten
B) Shrew Soft VPN Konfiguration erstellen.
1) VPN Access Manager starten
2) Durch den Add-Button eine neue Konfiguration erstellen
3.) Register General
* DynDNS-Name oder öffentlcihe IP-Adresse des Lancom-Router eintragen. Wenn es keine feste IP-Aressse vom Internetprovider zur verfügung gestellt wird muss auf einen DynDNS-dienst zurückgegriffen werden. (Muss natürlcih vorab eingerichtet werden.)
4) Register Client
* NAT Traversal und IKE Fagment auf disable stellen
5) Register Name Resolution
* DNS & WINS bleiben unverändert (alel aktiv)
6) Register Authentication
* Authentication Method auf Mutual PSK stellen
A&B) Unterregister Local Identity & Remote Identity
* Identification Type auf User Fully Qualified Domain Name
* UFQDN die fantasie Email-Adresse eintragen
C) Unterregister Credentials
* Pre Shared Key des Router-Eintrags verwenden
7) Register Phase & Phase2
* Bleigen unverändert
8) Register Policy
* Bleibt unverändert
Anmerkung: Wenn eine Remotedesktopverbidnung durch den VPN-Tunnel geschleust werden soll hilft ein kleines Script um dies zu automatisieren.