Управление VPN подключениями с помощью PowerShell

В Windows 10/11 используется максимально упрощенные графический интерфейс настройки VPN подключений. Чтобы задать специфические настройки для VPN подключения приходится использовать как классический интерфейс настройки VPN подключения в панели управления, так и современное приложение настройки сети в панели Параметры (команда ms-settings:network-vpn для быстрого доступа к настройкам ). В этой статье мы посмотрим на особенности управления VPN-подключениями в Windows с помощью PowerShell: рассмотрим, как создать создать/изменить/удалить VPN подключение и подключится/отключиться к VPN серверу.

Управление VPN подключениями с помощью PowerShell

Для создания нового VPN подключения в Windows используется командлет Add-VpnConnection . В самом простом случае для создания нового VPN подключения нужно указать его имя и адрес VPN сервера.

Add-VpnConnection -Name "WorkVPN" -ServerAddress "vpn.remontka.com” -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.remontka.com" -TunnelType L2TP -L2tpPsk "str0ngSharedKey2" -Force -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -UseWinlogonCredential -RememberCredential -AllUserConnection –PassThru
  • PPTP: Add-VpnConnection -Name "WorkVPN_PPTP" -ServerAddress "vpn.remontka.com" 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.remontka.com" -TunnelType "SSTP" -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -RememberCredential -SplitTunneling -PassThru

    При использовании само подписанных сертификатов, вы можете добавить в сертификат несколько имен с помощью PowerShell .

  • 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.remontka.com" -TunnelType Ikev2 -EncryptionLevel "Maximum" -AuthenticationMethod MachineCertificate -SplitTunneling $True -PassThru

Add-VpnConnection - создать VPN подключение с помощью PowerShell

Подключения, доступные для всех пользователей (созданные с параметром AllUserConnection ), отображаются в панели управления сетями, а в качестве Owner указана System . У подключения пользователя здесь будет указано domainusername .

список VPN подключений в панели управления сетями и общим доступом

Общие VPN подключения сохраняются в текстовый файл %ProgramData%MicrosoftNetworkconnectionsPbkrasphone.pbk .

файл rasphone.pbk содержит список общих VPN подключений в Windows 11

Чтобы изменить параметры существующего 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"

rasdial подключиться к VPN серверу из командной строки Windows

Вывести статусы всех VPN подключений:

Get-Vpnconnection | Select Name, Connectionstatus

Get-Vpnconnection список активных VPN подключений

EnglishRussianUkrainian