Select Page

VPN-Einrichtung leicht gemacht

by | Dec 18, 2020 | NETWAYS

Ziel des IT Service Managements ist es, Nutzer*innen durch automatisierte Prozesse möglichst viel Arbeit abzunehmen. NETWAYS hat bereits vor geraumer Zeit auf die aktuelle Corona-Situation reagiert und alle Mitarbeitenden ins Home Office geschickt.

Um auch Zuhause weiterhin auf firmeninterne Adressen zugreifen zu können, ist ein VPN (Virtuelles Privates Netzwerk) nötig und die Mehrheit nutzt eine “openVPN”-Lösung, welche aufgrund unserer Netzgegebenheiten aber weniger leistungsstark, als ein “L2TP” abschneiden kann. Um den Kolleg*innen den Umstieg von openVPN auf L2TP zu erleichtern, haben wir es uns zum Ziel gesetzt, einen automatisierten Ablauf zu schaffen, welcher dem*r User*in im Grunde genommen ermöglicht, den VPN-Zugang lediglich per “Knopfdruck” auf dem eigenen Windows-Gerät zu installieren.

 

Die Umsetzung

Da wir uns auf einer Windows-Plattform bewegen, stand außer Frage, dass ein Powershell-Script benötigt wird, um unsere VPN-Verbindung in das System einzubinden. Microsoft bietet unter “docs.microsoft.com” eine wundervolle Dokumentation zum Thema Powershell an. Unter anderem kann man dort nach einzelnen “tags” suchen und sich die dazu passenden Funktionen samt Syntax anzeigen lassen. Und so habe ich nach kurzer Suche die Funktion “Add-VpnConnection” gefunden!

Schnell wurde mir klar, dass ich fast mein gesamtes Konzept in einer Zeile Powershell umsetzen konnte. Es ist möglich, die Funktion mit verschiedensten Parametern zu beeinflussen. Man kann zum Beispiel den Namen, Typ des VPNs, einen Pre-Shared-Key (PSK) und noch vieles mehr einbinden. Eine besondere Erwähnung meinerseits erhält an dieser Stelle der Parameter “-SplitTunneling”, welcher erlaubt, das VPN nur dann zu nutzen, wenn die Netzwerkressourcen auch wirklich benötigt werden. Beim Verbinden zu nicht-internen Internetdiensten werden die Standardrouten des Clients und Providers genutzt. Dieses Feature war für mich bei der herkömmlichen Einrichtung eines VPNs, unter der grafischen Oberfläche von Windows, nicht ersichtlich. Nachdem man die einzelnen Routen in das Script mit aufgenommen hat, funktioniert das Ganze auch problemlos.

 

Die Herausforderung

Nachdem ich das VPN Script getestet hatte und die Einrichtung ohne Hindernisse funktionierte, stellten sich mir zwei Fragen: Wie meldet sich der*die Endbenutzer*in mit seinem AD-Account in dem VPN an und wie lässt sich ein Powershellscript ausführen ohne Powershell nutzen zu müssen?

Das Problem mit dem User-Login löste sich beim Probieren von selbst: Sobald das VPN installiert ist und der*die Nutzer*in auf “Verbinden” drückt, startet Windows eine Benutzer/Passwortabfrage. Wenn man in der Funktion noch den Parameter “-RememberCredential” implementiert hat, werden die eingegebenen Daten automatisch gespeichert und aus dem Cache entnommen.

Bei dem Ausführen der .ps1 Powershell-Datei gab es für mich nun zwei Möglichkeiten: Es gibt eine Vielzahl an Konvertern, die eine .ps1-Datei in ein .exe Format umwandeln. Dabei könnte die Datei aber durch eventuelle Fremdsysteme laufen. Da ich einen PSK zur Authentifizierung in das Script eingebunden habe, entschied ich mich gegen diese Lösung. Dafür fiel meine Wahl auf die zweite Option, nämlich eine Batch-Datei (.bat) anzulegen, mit der man die .ps1 in Powershell ausführt.

 

In der .bat-Datei selbst befinden sich drei Komponenten

Der Pfad zu Powershell, in dem unsere Datei ausgeführt werden soll:

  • C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Ein Kommando zum Ausführen:

  • executionpolicy bypass

Und dieser kryptische Name:

  • %~dp0%~n0.ps1

 

Diese Bezeichnung macht das Batch-Script zu einem dynamischen Script, welches, unabhängig von Location, ausgeführt werden kann ohne im eigentlichen Script etwas ändern zu müssen.

Wir haben zwei Batch-Variablen, die wir uns dafür zu Nutze machen. Mit “%~dp0 “ sucht man im aktuellen Pfad, in welchem die Batch ausgeführt wurde, nach dem Namen, den die Batch-Datei trägt (“%~n0”) . Da ich aber nicht die Batch-Datei selber öffnen möchte, nutze ich das “.ps1 “ Anhängsel unserer Powershell-Datei.

# Batch-Script zum Ausführen
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass %~dp0%~n0.ps1

Und damit kommen wir zu den Voraussetzungen, die erfüllt sein müssen, damit die Batch- und Powershell-Datei funktionieren: Beide müssen denselben Namen tragen und sich im selben Verzeichnis befinden!

Fast geschafft! Am Ende lässt sich das Script einfach ausführen und kann – ohne weitere Eingaben in die Powershell/CMD – den VPN-Zugang anlegen. Die beiden Dateien müssten sich – wie oben beschrieben – nur im selben Pfad befinden und die Batch-Datei ausgeführt werden.

 

Das Script

#Add VPN

Add-VpnConnection -Name "L2TP-VPN" -Server_Address "Server_adresse" -TunnelType "L2tp" -EncryptionLevel "Required" -L2tpPsk "Generic_Key" -Force -RememberCredential -PassThru

#Setting Name
$MyVPNName = "L2TP-VPN"

#Call VPN via Name + SplitTunneling
Set-VpnConnection -Name $MyVPNName -SplitTunneling $TRUE;

#Routes
Add-VpnConnectionRoute -ConnectionName $MyVPNName -PassThru -DestinationPrefix IP.IP.IP.IP/Netzanteil #Beispiel-Route
André Paskowski
André Paskowski
Junior Systems Engineer

André startete im Herbst 2020 seine Ausbildung zum Fachinformatiker für Systemintegration im Bereich des NETWAYS IT Service Managements. Dort ist er zuständig für interne Angelegenheiten sowie Problembehebungen und Verbesserungen. Vor seiner IT-Ausbildung bei NETWAYS war André im sozialen Bereich der Erziehung tätig und hat zudem auch eine Ganztagsbetreuung geleitet. Wenn er nicht gerade Games am PC oder Retro-Konsolen spielt, bemalt und baut er Modellfiguren. Zudem ist er stolzer Besitzer einiger Reptilien, denen er ein liebevolles...
More posts on the topicNETWAYS

Monthly Snap April 2021

April was the month of easter eggs, and was, as always, the month where spring, summer and winter shook hands. Despite that several colleagues took a few days off around easter, we have a good and varied selection of blogs for you:   Stackconf   Katja made...

Let’s meet again – OSMC 2021

Good news! We’re happy to announce that the Open Source Monitoring Conference will take place this year again. Based on a survey with a resulting majority of two thirds of former OSMC attendees we are excited to organize our event again and can't wait to welcome you...

May the force be with you

Der erste Star Wars Film (Star Wars: Episode IV – Eine neue Hoffnung) kam bereits 1977 in den Kinos. Aber seit wann ist der 04.05. der sogenannte „Star Wars Tag“? Seit dem 04.05.1979 wird der 04. Mai jährlich als „Star Wars Tag“ gefeiert. Aber warum ist das so? Der...

Veranstaltungen

Tue 18

Icinga 2 Fundamentals Training | Online

May 18 @ 09:00 - May 21 @ 17:00
Jun 15

stackconf online

June 15 - June 17
Jun 22

Ansible Fundamentals Training | Online

June 22 @ 09:00 - June 24 @ 17:00
Jun 22

Kubernetes Quick Start | Online

June 22 @ 09:00 - 17:00
Jun 25

Ansible AWX (Tower) Training | Online

June 25 @ 09:00 - 17:00