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:
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