Управление VPN подключениями с помощью PowerShell
В Windows 10/11 используется максимально упрощенные графический интерфейс настройки VPN подключений. Чтобы задать специфические настройки для VPN подключения приходится использовать как классический интерфейс настройки VPN подключения в панели управления, так и современное приложение настройки сети в панели Параметры (команда
ms-settings:network-vpn
для быстрого доступа к настройкам). В этой статье мы посмотрим на особенности управления VPN-подключениями в Windows с помощью PowerShell: рассмотрим, как создать создать/изменить/удалить VPN подключение и подключится/отключиться к VPN серверу.
Для создания нового VPN подключения в Windows используется командлет Add-VpnConnection. В самом простом случае для создания нового VPN подключения нужно указать его имя и адрес VPN сервера.
Add-VpnConnection -Name "WorkVPN" -ServerAddress "vpn.winitpro.ru” -PassThru
Чтобы задать кастомные настройки для VPN подключения, используйся следующие опции (наиболее распространённые):
- TunnelType – тип VPN туннеля. Доступны следующие варианты:
-
Automatic
– Windows сама пытается определить тип VPN туннеля -
IKEv2
— Internet Key Exchange -
PPTP
– Point to Point Tunneling Protocol -
L2TP
– Layer 2 Tunneling Protocol /IPsec с сертификатом или общим ключом (Pre-share key) -
SSTP
– Secure Socket Tunneling Protocol
-
- L2TPPsk — предварительный общий ключ для аутентификации (только для L2TP). Если этот параметр не указан, для L2TP аутентификации используется сертификат;
- AuthenticationMethod – тип аутентификации. Возможно использовать:
Pap, Chap, MSChapv2, Eap, MachineCertificate
; - EncryptionLevel – настройки шифрования (
NoEncryption, Optional, Required, Maximum, Custom
); - SplitTunneling – нужно ли заворачивать весь трафик компьютера в VPN туннель (аналогично опции
Use default gateway on remote network
в настройках параметра VPN адаптера); - UseWinlogonCredential – использовать учетные данные текущего пользователя для аутентификации на VPN сервере;
- AllUserConnection – разрешить использовать VPN подключение для всех пользователей компьютера;
- RememberCredential – разрешить сохранять учетные данные для VPN подключения (учетная запись и пароль сохраняются в диспетчер учетных данных Windows после первого успешного подключения);
- PassThru – параметр позволяет вывести на экран результаты команды (рекомендуем использовать во всех командах).
Ниже приведем несколько примеров PowerShell команд для создания разных типов VPN подключений.
- L2TP/IPsec:
Add-VpnConnection -Name "WorkVPN_L2TP" -ServerAddress "vpn.winitpro.ru" -TunnelType L2TP -L2tpPsk "str0ngSharedKey2" -Force -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -UseWinlogonCredential -RememberCredential -AllUserConnection –PassThru
- PPTP:
Add-VpnConnection -Name "WorkVPN_PPTP" -ServerAddress "vpn.winitpro.ru" TunnelType "PPTP" -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -SplitTunneling -PassThru
- SSTP: необходимо сначала импортировать в хранилище сертификатов компьютера корневой CA VPN сервера, и использовать в качестве адреса FQDN VPN сервера, которое указано в сертификате (CN — Common Name, или в Subject Alternative Name)
Add-VpnConnection -Name "WorkVPN_SSTP" -ServerAddress "vpn.winitpro.ru" -TunnelType "SSTP" -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -RememberCredential -SplitTunneling -PassThru
- IKEv2:нужно предварительно импортировать корневой CA в хранилище доверенных корневых сертификатов Windows, а сертификат компьютера в личные сертификаты:
Import-PfxCertificate -FilePath $comp_certificate -CertStoreLocation Cert:LocalMachineMy -Password $password
Import-Certificate -FilePath $ca_cert -CertStoreLocation Cert:LocalMachineRoot
Add-VpnConnection -Name "WorkVPN_IKEv2" -ServerAddress "vpn.winitpro.ru" -TunnelType Ikev2 -EncryptionLevel "Maximum" -AuthenticationMethod MachineCertificate -SplitTunneling $True -PassThru
Подключения, доступные для всех пользователей (созданные с параметром
AllUserConnection
), отображаются в панели управления сетями, а в качестве Owner указана
System
. У подключения пользователя здесь будет указано
domainusername
.
Общие VPN подключения сохраняются в текстовый файл
%ProgramData%MicrosoftNetworkconnectionsPbkrasphone.pbk
.
Чтобы изменить параметры существующего VPN подключения, используется команда Set-VpnConnection:
Set-VpnConnection -Name "WorkVPN_SSTP" –splittunneling $false –PassThru
Если вам нужно изменить параметры IPsec для существующего VPN подключения используется командлет Set-VpnConnectionIpsecConfiguration (только для IKEv2 и L2TP VPN)
Set-VpnConnectionIPsecConfiguration -ConnectionName "WorkVPN_IKEv2" -AuthenticationTransformConstants SHA256128 -CipherTransformConstants AES256 -DHGroup Group14 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -PfsGroup PFS2048 –PassThru
Для принудительного сохранения имени и пароля для VPN подключения можно использовать модуль VPNCredentialsHelper.
Установите модуль на компьютер из PowerShellGallery (также можно установить PowerShell модуль в офлайн режиме):
Install-Module -Name VPNCredentialsHelper
После этого вы можете сохранить в Windows Credential Manager определенное имя и пароль для вашего VPN подключения:
$user = "vpnusername"
$plainpass = "vpn_password"
Set-VpnConnectionUsernamePassword -connectionname "WorkVPN_SSTP" -username $user -password $plainpass
В современных версиях Windows вы можете динамически добавлять в таблицу маршрутизации маршруты при подключении к VPN.
Add-VpnConnectionRoute -ConnectionName "workVPN" -DestinationPrefix 192.168.111.0/24 –PassThru
Такой маршрут будет активирован только после успешного подключения к серверу VPN.
Вывести список всех VPN подключений, доступных пользователю:
Get-VpnConnection
Для удаления VPN подключения, выполните:
Remove-VpnConnection -Name "WorkVPN_SSTP"
Для подключения к VPN серверу с ранее настроеннм профилем VPN, выполните:
rasdial "WorkVPN_SSTP"
Вывести статусы всех VPN подключений:
Get-Vpnconnection | Select Name, Connectionstatus
Windows 10
Управление VPN подключениями с помощью PowerShell