PPTP VPN script pro vytvoření PPTP rozhraní a připojení k PPTP serveru

By | 04/10/2021

PPTP VPN script pro vytvoření PPTP rozhraní a připojení k PPTP serveru

Motivace:

Článek nejdříve popisuje jednotlivé příkazy použité pro PPTP VPN script a následně jsou tvořeny jednotlivé verze PPTP VPN scriptu, které jsou postupně vylepšovány.

OS:

Implementace byla prakticky vyzkoušena na WIN10.

Add-VpnConnection – Vytvoří VPN rozhraní

Obecná syntaxe:
Add-VpnConnection [-Name] <string> [-ServerAddress] <string> [-TunnelType <string> {Pptp | L2tp | Sstp | Ikev2 | Automatic}] [-EncryptionLevel <string> {NoEncryption | Optional | Required | Maximum}] [-AuthenticationMethod <string[]> {Pap | Chap | MSChapv2 | Eap}] [-SplitTunneling] [-AllUserConnection] [-L2tpPsk <string>] [-RememberCredential] [-UseWinlogonCredential] [-EapConfigXmlStream <xml>] [-Force] [-PassThru] [-WhatIf] [-Confirm]
Příklad vytvořeni PPTP VPN rozhraní s profilem PPTPpripojeni, IP adresou 1.2.3.4, úrovní zabezpečení Required a metodou autentizace MSCHAPv2:
Add-VpnConnection -Name "PPTPpripojeni" -ServerAddress "1.2.3.4" -TunnelType "PPTP" -EncryptionLevel "Required" -AuthenticationMethod "MSCHAPv2"

Set-VpnConnection – Edituje VPN rozhraní

Obecná syntaxe pro upraveni již vytvořeného VPN rozhraní:
Set-VpnConnection [-Name] <string> [[-ServerAddress] <string>] [-TunnelType <string> {Pptp | L2tp | Sstp | Ikev2 | Automatic}] [-EncryptionLevel <string> {NoEncryption | Optional | Required | Maximum}] [-AuthenticationMethod <string[]> {Pap | Chap | MSChapv2 | Eap}] [-SplitTunneling <bool>] [-AllUserConnection] [-L2tpPsk <string>] [-RememberCredential <bool>] [-UseWinlogonCredential <bool>] [-EapConfigXmlStream <xml>] [-PassThru] [-Force] [-WhatIf] [-Confirm]
Příklad upravení již vytvořeného PPTP VPN rozhraní profilu PPTPpripojeni, kde bude přidaná volba Split Tunnelingu:
Set-VPNconnection -name "PPTPpripojeni" -SplitTunneling

Get-VpnConnection – Náhled všech VPN rozhraní

Obecná syntaxe pro náhled vytvořeného VPN rozhraní:
Get-VpnConnection [[-Name] <string[]>] [-AllUserConnection]
Náhled již vytvořeného PPTP VPN rozhraní s profilu PPTPpripojeni:
Get-VpnConnection | ? -Property Name -eq -Value "PPTPpripojeni"

Rasdial – Pro VPN připojení

Obecná syntaxe pro připojení k PPTP serveru:
rasdial connectionname [username [password | \]] [/domain:domain*] [/phone:phonenumber] [/callback:callbacknumber] [/phonebook:phonebookpath] [/prefixsuffix**]
Příklad připojení k PPTP serveru přes profil PPTPpripojeni:
rasdial "PPTPpripojeni" vas_login vase_heslo

Script pro vytvoření PPTP rozhraní a připojení k PPTP serveru:

Script slouží pro automatické vytvoření VPN rozhraní (příkaz Add-VpnConnection) a automaticky připojuje k PPTP serveru (příkaz rasdial)

Níže jsou přiloženy scripty s verzemi, které budou step-by-step vylepšovány. Script stačí spustit v souboru .bat.

Script_v1

  • Vytvoří PPTP rozhraní a připojí uživatele k PPTP serveru.
@echo off

:: maze obrazovku
cls

:: vypise na obrazovku hlasku nize
echo Wait a moment while the VPN is being configured...

:: vytvori PPTP VPN rozhrani s profilem PPTPpripojeni pres powershell
PowerShell.exe -Command "Add-VpnConnection -Name PPTPpripojeni -ServerAddress 1.2.3.4 -TunnelType Pptp"

:: ceka 1sec 
timeout 1 

:: pripojení k PPTP serveru pres profil PPTPpripojeni 
rasdial "PPTPpripojeni" vas_login vase_heslo 

:: ceka na stisknuti klavesy
pause

Script_v2

  • Stejná funkce jako přechozí script_v1, zde navíc čeká na vstupní parametry uživatele – IP adresy PPTP VPN serveru, loginu a hesla.
@echo off

::maze obrazovku
cls

:: ceka na vstupni parametry uzivatele
set /p IP=Enter IP or domain name for PPTP: 
set /p USERNAME=Enter username/login for PPTP: 
set /p PASSWORD=Enter username/login for PPTP: 

:: vytvori PPTP VPN rozhrani s profilem PPTPpripojeni pres powershell
PowerShell.exe -Command "Add-VpnConnection -Name PPTPpripojeni -ServerAddress %IP% -TunnelType Pptp"

:: ceka 1sec 
timeout 1 

:: pripojení k PPTP serveru pres profil PPTPpripojeni 
rasdial "PPTPpripojeni" %USERNAME% %PASSWORD%

:: ceka na stisknuti klavesy
pause

Script_v3

  • Stejná funkce jako přechozí script_v2, zde navíc skryje heslo pomocí hvězdiček
@echo off

:: maze obrazovku
cls

:: ceka na vstupni parametry uzivatele
set /p IP=Enter IP or domain name for PPTP: 
set /p USERNAME=Enter username/login for PPTP: 

:: pro skryti hesla do hvezdicek
set "pscmd=powershell.exe -Command " ^
$inputPass = read-host 'Enter password for PPTP' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($inputPass); ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "tokens=*" %%a in ('%pscmd%') do set PASSWORD=%%a

:: vytvori PPTP VPN rozhrani s profilem PPTPpripojeni pres powershell
PowerShell.exe -Command "Add-VpnConnection -Name PPTPpripojeni -ServerAddress %IP% -TunnelType Pptp

:: ceka 1sec 
timeout 1 

:: pripojení k PPTP serveru pres profil PPTPpripojeni 
rasdial "PPTPpripojeni" %USERNAME% %PASSWORD%

:: ceka na stisknuti klavesy
pause

Script_v4

  • Stejná funkce jako přechozí script_v3, navíc přidává split tunneling (parametr -SplitTunneling) a statickou routu 192.168.0.0/24 (příkaz Add-VpnConnectionRoute) s ověřením (příkaz route print), že je vytvořena a ICMP testem na 192.168.0.5 (příkaz ping), zda zařízení odpovídá po připojení k PPTP serveru:
@echo off

:: maze obrazovku
cls

:: ceka na vstupni parametry uzivatele
set /p IP=Enter IP or domain name for PPTP: 
set /p USERNAME=Enter username/login for PPTP: 

:: pro skryti hesla do hvezdicek
set "pscmd=powershell.exe -Command " ^
$inputPass = read-host 'Enter password for PPTP' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($inputPass); ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "tokens=*" %%a in ('%pscmd%') do set PASSWORD=%%a

:: vytvori PPTP VPN rozhrani s profilem PPTPpripojeni pres powershell
PowerShell.exe -Command "Add-VpnConnection -Name PPTPpripojeni -ServerAddress %IP% -TunnelType Pptp -SplitTunneling" 

:: po vytvoreni PPTP rozhrani vytvori statickou routu 192.168.0.0/24 do tunelu
PowerShell.exe -Command "Add-VpnConnectionRoute -ConnectionName PPTPpripojeni -DestinationPrefix 192.168.0.0/24"

:: ceka 1sec 
timeout 1

:: pripojení k PPTP serveru pres profil PPTPpripojeni 
rasdial "PPTPpripojeni" %USERNAME% %PASSWORD%

:: overeni ze staticka routa existuje 
route print | findstr 192.168.0.0

echo Testing connectivity:
ping 192.168.0.5

:: ceka na stisknuti klavesy
pause

Ukázka scriptu_v4:

PPTP VPN script

Pozn. Proč není nastaven split tunneling přímo na PPTP serveru? V mém případě používám Mikrotik jako PPTP server, který sice dovoluje nastavení a pushnutí statických route (DHCP Option 249), kterým říká PPTP klientovi co má routovat do tunelu. Problém je, že tuto DHCP option 249 minimálně WIN 10 PPTP klient ignoruje.

Script pro odpojení z PPTP serveru a odstranění PPTP rozhraní:

Script slouží pro automatické odpojení z PPTP serveru (příkaz rasdial), vymazání statické routy 192.168.0.0/24 (příkaz Remove-VpnConnectionRoute) a odstranění PPTP VPN rozhraní (příkaz Remove-VpnConnection).

Opět stačí vložit a vytvořit soubor .bat.

@echo off
cls

:: odpojeni z PPTP serveru
rasdial /disconnect

:: odstrani statickou routu 192.168.0.0/24 pres powershell
PowerShell.exe -Command "Remove-VpnConnectionRoute -ConnectionName PPTPpripojeni -DestinationPrefix 192.168.0.0/24"

:: odstrani PPTP VPN rozhrani s profilem PPTPpripojeni pres powershell
PowerShell.exe -Command "Remove-VpnConnection -Name PPTPpripojeni"

:: ceka 1sec 
timeout 1

:: overeni ze staticka routa neexistuje
route print | findstr 192.168.0.0

pause

Zdroj:

[1] https://stackoverflow.com/questions/14614465/establish-a-vpn-connection-in-cmd

Leave a Reply

Your email address will not be published. Required fields are marked *