Powershell: Add L2TP over IPsec VPN

In het artikel Configureer L2TP/IPsec in Windows Server 2012 R2 wordt het configureren van een L2TP over IPsec VPN beschreven in Windows Server 2012 R2, met vervolgens, een beschrijving hoe deze VPN-verbinding kan worden geconfigureerd op een Windows 10 machine. In dit artikel wordt beschreven hoe middels Windows Powershell een L2TP over IPsec VPN kan worden ingesteld in Windows 10.

L2TP over IPsec Powershell

In dit script wordt de cmdlet: Add-VpnConnection gebruikt. Deze cmdlet is beschikbaar vanaf Windows 8.1 en is alleen te gebruiken op de besturingssystemen Windows 8, Windows Server 2012 en nieuwe. Helaas, werkt deze cmdlet niet in Windows 7.

Het configureren van het script gaat in vier fases:

  1. Verbindingsparameters bepalen;
  2. VPN-verbinding configureren;
  3. Registerwijziging t.b.v. L2TP over IPsec;
  4. Afsluiting van het script.

1. Verbindingsparameters bepalen

In deze fase wordt de naam van het script bepaalt en waar de verbinding naar toe moet gaan verbinden. Dit is op meerdere manieren te bepalen. Het script kan generiek worden toegepast, of specifiek voor een omgeving worden geconfigureerd. Beide opties worden per regel gespecificeerd.

1
$VpnName = read-host -Prompt "Wat is de naam van de VPN?"

Op het scherm wordt de vraag getoond, welke naam de verbinding mag krijgen. Hier kan de gebruiker zelf de naam ingeven, en deze wordt een variabel gestopt met de naam $VpnNameAls de variabel statische inhoud moet krijgen, er wordt dan geen vraag getoond, wijzig de inhoud naar de naam van de VPN. Bijvoorbeeld:

1
$VpnName = VPN WindowsTechBlog

Bij regel 2 wordt de vraag voorgeschoteld waar de VPN-verbinding naartoe moet worden gemaakt. Dit kan een hostname of IP-adres bevatten. Wanneer er geen vraag moet worden gesteld vervang het naar een eigen waarde.

2
$server = read-host -Prompt "Voer vostname/IP-adres van de VPN server in"

Bij regel 3 wordt de input bij de eerste twee regels weergegeven, ter controle. Deze regel is overbodig en kan verwijdert worden indien nodig.

3
write-host "$vpnname is de naam van de verbinding en $server het adres"

Bij de meeste L2TP over IPsec tunnels wordt er gebruik gemaakt van een preshared key om de tunnel te beveiligen. Bij regel 4 kan de preshared key worden ingegeven die gebruikt wordt voor de verbinding.

4
$psk = Read-Host -Prompt "Voer PSK in."

Om een L2TP over IPsec verbinding vanaf Windows werkend te krijgen is er een register wijziging nodig. De locatie van het register waar deze wijziging wordt doorgevoerd wordt bij $regp.

Totaal beslaat fase 1 de eerste vijf regels van het script en legt daarmee het fundament.

1
2
3
4
5
$VpnName = read-host -Prompt "Wat is de naam van de VPN?"
$server = read-host -Prompt "Voer vostname/IP-adres van de VPN server in."
write-host "$vpnname is de naam van de verbinding en $server het adres"
$psk = Read-Host -Prompt "Voer PSK in."
$regp = "HKLM:\SYSTEM\CurrentControlSet\Services\PolicyAgent"

2. VPN-verbinding configureren

Voor het configureren van de VPN wordt de ‘Add-VpnConnection’ cmdlet gebruikt, met de volgende parameters:

  • -Name, dit wordt naam van de VPN-verbinding. Deze wordt vertolk door $VpnName.
  • -ServerAddress, het adres waar de verbinding naar toe gaat. De waarde is bij fase 1 al geconfigureerd in $server.
  • -TunnelType, parameter specificeert type tunnel van de VPN, in dit geval: L2tp.
  • -AuthenticationMethod, specificeert het authenticatieprotocol.
  • -EncryptionLevel, specificeert de mate van encryptie.
  • -L2tpPsk, de preshared key voor de verbinding kan hier worden gespecificeerd. De -Force parameter erachter bevestigd dat deze waarde over een onbeveiligd kanaal wordt verzonden.
  • -AllUserConnection, de tunnel wordt voor alle gebruikers op het systeem bruikbaar. Geen waarde is altijd $True.
  • -UseWinLogonCredential, de credentials waar de betreffende gebruiker mee is ingelogd zal worden gebruikt bij het verbinding maken.
  • -SpliTunneling, hiermee wordt het netwerkverkeer gescheiden in een stroom naar de tunnel en een netwerkstroom buiten de tunnel. Zo gaat verkeer wat niet bedoeld is voor de tunnel direct naar de gateway van het systeem gerouteerd en niet door de tunnel heen.

De configuratie van de tunnel wordt totaal de onderstaande regel.

22
Add-VpnConnection -Name $vpnname -ServerAddress $server -TunnelType L2tp -AuthenticationMethod MSChapv2 -EncryptionLevel Optional -L2tpPsk $psk -Force -AllUserConnection -UseWinLogonCredential -SplitTunneling

Fase 1 inclusief fase 2:

1
2
3
4
5
6
7
8
$VpnName = read-host -Prompt "Wat is de naam van de VPN?"
$server = read-host -Prompt "Voer vostname/IP-adres van de VPN server in"
write-host "$vpnname is de naam van de verbinding en $server het adres"
$psk = Read-Host -Prompt "Voer PSK in"
$regp = "HKLM:\SYSTEM\CurrentControlSet\Services\PolicyAgent"
 
#add l2tp vpn
Add-VpnConnection -Name $vpnname -ServerAddress $server -TunnelType L2tp -AuthenticationMethod MSChapv2 -EncryptionLevel Optional -L2tpPsk $psk -Force -AllUserConnection -UseWinLogonCredential -SplitTunneling

3. Registerwijziging t.b.v. L2TP over IPsec

Als de VPN-server achter NAT-T bevindt is het nodig dat er in het register van Windows een wijziging wordt doorgevoerd. Voor deze registerwijziging wordt de New-ItemProperty cmdlet gebruikt met de volgende parameters:

  • -Path, specificeert het pad waar het item moet worden aangemaakt, dit pad is eerder in het variabel $regp gestopt.
  • -Name, de naam van het item die moet worden aangemaakt.
  • -Value, specificeert de waarde van het item die moet worden aangemaakt.
  • -PropertyType, specificeert het type item welke wordt aangemaakt. In dit geval een registeritem “DWORD” equivalent van “REG_DWORD”.
  • -Force, deze parameter drukt de wijziging door, wanneer de waarde al bestaat in het register wordt deze overschreven.

De derde fase:

25
New-ItemProperty -Path $regp -Name AssumeUDPEncapsulationContextOnSendRule -Value 2 -PropertyType "DWORD" -Force

Fase 1, Fase 2 en Fase 3:

$VpnName = read-host -Prompt "Wat is de naam van de VPN?"
$server = read-host -Prompt "Voer vostname/IP-adres van de VPN server in"
write-host "$vpnname is de naam van de verbinding en $server het adres"
$psk = Read-Host -Prompt "Voer PSK in"
$regp = "HKLM:\SYSTEM\CurrentControlSet\Services\PolicyAgent"
 
#add l2tp vpn
Add-VpnConnection -Name $vpnname -ServerAddress $server -TunnelType L2tp -AuthenticationMethod MSChapv2 -EncryptionLevel Optional -L2tpPsk $psk -Force -AllUserConnection -UseWinLogonCredential -SplitTunneling
 
#add registry value
New-ItemProperty -Path $regp -Name AssumeUDPEncapsulationContextOnSendRule -Value 2 -PropertyType "DWORD" -Force

4. Afsluiting van het script

Fase 1-3 is het script waarmee de verbinding wordt aangemaakt. Fase 4 sluit het script netjes af door de gebruiker van het script mede te delen dat de verbinding is aangemaakt en dat vervolgens wordt gevraagd om Powershell af te sluiten. Uiteindelijk wordt het scherm ‘Netwerkverbindingen’ geopend waar de zojuist aangemaakte verbinding in zichtbaar is.

Het script totaal:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$VpnName = read-host -Prompt "Wat is de naam van de VPN?"
$server = read-host -Prompt "Voer vostname/IP-adres van de VPN server in"
write-host "$vpnname is de naam van de verbinding en $server het adres"
$psk = Read-Host -Prompt "Voer PSK in"
$regp = "HKLM:\SYSTEM\CurrentControlSet\Services\PolicyAgent"
 
#add l2tp vpn
Add-VpnConnection -Name $vpnname -ServerAddress $server -TunnelType L2tp -AuthenticationMethod MSChapv2 -EncryptionLevel Optional -L2tpPsk $psk -Force -AllUserConnection -UseWinLogonCredential -SplitTunneling
 
#add registry value
New-ItemProperty -Path $regp -Name AssumeUDPEncapsulationContextOnSendRule -Value 2 -PropertyType "DWORD" -Force
 
    $confirm = Read-Host -Prompt "... L2Tp over IPsec vpn is aangemaakt. Systeem dient een herstart te krijgen voordat de VPN-verbinding kan functioneren. Systeem herstarten? J/N ..."
    If (($confirm -eq "J"))
    {
    Restart-Computer
    }
    else
    {
    $cp = Read-Host -Prompt "Ok. Powershell sluiten? J/N"
    if (($cp -eq "J"))
    {
    ncpa.cpl
    Get-Process powershell | Stop-Process
    }
    else
    {
    ncpa.cpl
    }}

Bezoek Powershell repository van WindowsTechBlog.nl op de Microsoft Script Center

Download:
Add L2TP.ps1

Heb je wat aan dit artikel gehad of heb je nog vragen? Laat gerust een reactie achter.

https://i1.wp.com/windowstechblog.nl/wp-content/uploads/2017/06/L2TP-over-IPsec-script-Windows-Powershell.png?fit=300%2C200&ssl=1https://i1.wp.com/windowstechblog.nl/wp-content/uploads/2017/06/L2TP-over-IPsec-script-Windows-Powershell.png?resize=150%2C150&ssl=1Martien van DijkWindows PowershellVPN,Windows 10,Windows 8.1,Windows PowershellPowershell: Add L2TP over IPsec VPN In het artikel Configureer L2TP/IPsec in Windows Server 2012 R2 wordt het configureren van een L2TP over IPsec VPN beschreven in Windows Server 2012 R2, met vervolgens, een beschrijving hoe deze VPN-verbinding kan worden geconfigureerd op een Windows 10 machine. In dit artikel wordt beschreven hoe...it's all about Microsoft