Управление VPN-подключениями в последних версиях Windows трудно назвать понятным и удобным. Часть настроек производится через современное приложение Параметры, другая часть, как и прежде, находится в Панели управления. Какие-то шаги к упорядочению этой ситуации сделаны только в Windows 11, но практического опыта работы с ней еще недостаточно. Но есть гораздо более простой и удобный способ управления VPN-соединениями — это PowerShell, его можно использовать как в интерактивном режиме, так и для написания скриптов автоматизации, которые будут производить настройку подключения в один клик.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Тема VPN является номером один для системных администраторов второй год, сложная эпидемиологическая обстановка диктует свои условия и требует обеспечить простой и безопасный способ удаленной работы для пользователей. И если с созданием VPN-сервера особых проблем нет — на выбор большое количество протоколов и технологий, то с клиентскими устройствами все намного сложнее.
Как мы уже говорили выше, самостоятельно создать VPN-подключение, не совершив при этом ошибок, для обычного пользователя будет достаточно сложной задачей, что потребует от администратора либо длительных консультаций в телефонном режиме, либо самостоятельной настройки через удаленное подключение. Да и в повседневной работе ввести одну команду гораздо быстрее и удобнее, нежели прокликивать несколько форм в разных местах.
Для управления VPN-соединениями мы будем использовать PowerShell, данные возможности поддерживаются начиная с Windows 8 и Windows Server 2012.
Создание VPN-соединения
Для того, чтобы создать новое VPN-подключение используется командлет Add-VpnConnection, использовать который достаточно просто, обязательных параметров всего два: имя подключения и адрес сервера. Но это, конечно же, не наш метод, если возможности позволяют выполнить тонкую настройку, а они позволяют, то ее нужно выполнить. Поэтому давайте изучим доступные параметры, которые могут нам пригодиться:
- Name — имя подключения, произвольная строка
- ServerAddress — адрес VPN сервера, можно указать как IP, так и FQDN
- TunnelType — тип туннеля, доступные значения: Pptp, L2tp, Sstp, Ikev2, Automatic
- EncryptionLevel — уровень шифрования данных, можно использовать: NoEncryption, Optional, Required, Maximum
- AuthenticationMethod — способ проверки подлинности, доступно: Pap, Chap, MSChapv2, Eap, MachineCertificate
- L2tpPsk — только для L2TP — предварительный общий ключ
- SplitTunneling — отключает перенаправление всего трафика в туннель, аналогично снятию флага Использовать основной шлюз в удаленной сети
- RememberCredential — запоминать учетные данные пользователя
- UseWinlogonCredential — использовать для VPN-подключения учетные данные для входа в систему
- AllUserConnection — создать подключение для всех пользователей
Также нам пригодятся два служебных параметра:
- PassThru — выводит на экран результат выполнения команды
- Force — подавляет вывод запросов и некритичных ошибок, в запросах применяется действие по умолчанию
Ниже мы рассмотрим команды для создания подключений всех поддерживаемых типов.
PPTP
Устаревший и небезопасный протокол, то один из самых быстрых типов подключения, все еще продолжает использоваться там, где не предъявляются высокие требования к защите данных, либо для этого используются иные механизмы, например, SSL/TLS. В качестве способа аутентификации следует использовать MS-CHAP v2, а уровень шифрования не ниже Required, что соответствует параметру Обязательное (отключиться если нет шифрования) в графическом интерфейсе.
Add-VpnConnection -Name "PPTP PS" -ServerAddress "192.168.3.107" -TunnelType "Pptp" -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -RememberCredential -SplitTunneling -PassThru
Также мы добавили опции для отключения перенаправления трафика в туннель и разрешили запоминать учетные данные.
Если вы указали параметр PassThru, то на экране появятся свойства созданного подключения, как на рисунке выше, без указания этого параметра вывод у команды отсутствуют.
L2TP/IPsec
В качестве L2TP будем рассматривать подключение с общим ключом, также используем MS-CHAP v2 и уровень шифрования Required и выше.
Add-VpnConnection -Name "L2TP PS" -ServerAddress "192.168.3.107" -TunnelType "L2tp" -L2tpPsk "MySharedKey" -Force -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -SplitTunneling -RememberCredential -PassThru
Обратите внимание, что в данной команде мы использовали ключ Force, чтобы предотвратить появление запроса о том, что подтверждаем ли мы передачу общего ключа в открытой форме. Также, как и с PPTP-подключением мы отключили шлюз в VPN-сети и разрешили запоминать учетные данные.
SSTP
Для использования SSTP вам потребуется импортировать корневой CA-сертификат центра сертификации, выдавшего сертификат серверу в локальное хранилище компьютера, а также использовать в качестве адреса сервера FQDN-имя, указанное в его сертификате. В остальном все несложно, соединение создается уже привычной командой:
Add-VpnConnection -Name "SSTP PS" -ServerAddress "sstp.interface31.lab" -TunnelType "Sstp" -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -RememberCredential -SplitTunneling -PassThru
Комментировать здесь мы ничего не будем, если вы внимательно читали статью, то все параметры будут вам понятны.
IKEv2
А вот здесь уже интереснее, мы будем настраивать соединение с аутентификацией по сертификатам. Здесь вам также потребуется импортировать сертификаты в хранилище компьютера: сертификат CA и сертификат пользователя. А для настройки соединения используем следующую команду:
Add-VpnConnection -Name "IKEv2 PS" -ServerAddress "vpn.interface31.lab" -TunnelType "Ikev2" -EncryptionLevel "Required" -AuthenticationMethod MachineCertificate -SplitTunneling -PassThru
Обращает внимание новый метод аутентификации MachineCertificate и отсутствие параметра RememberCredential, в данном случае пользователю не нужно вводить никаких учетных данных, поэтому и запоминать тут нечего. В качестве имени сервера используем FQDN или IP, в зависимости от того, что указано в Common Name сертификата сервера.
Изменение параметров VPN-соединения
Создавать подключения мы уже научились, но как быть, когда нам требуется что-то в них изменить? На помощь придёт командлет Set-VpnConnection, он использует все те же параметры что и Add-VpnConnection и позволяет изменить любой из них, для указания подключения используется параметр Name. Скажем, мы хотим изменить адрес сервера для PPTP подключения, нет ничего проще, указываем имя подключения, требуемый параметр и его новое значение:
Set-VpnConnection -Name "PPTP PS" -ServerAddress "vpn.interface31.lab"
Немного сложнее с параметрами, использующими булево значение, такими как RememberCredential и аналогичными. Командлет Add-VpnConnection считал, что если параметр указан, то его значение — True или Истина (логическая 1), иначе — False или Ложь (логический 0). С Set-VpnConnection такой фокус не проходит, если мы просто укажем параметр, то он не поймет, чего именно мы от него хотим и выдаст сообщение об ошибке. Значение параметра потребуется указать явно.
Например, включим разрешение запоминать учетные данные:
Set-VpnConnection -Name "PPTP PS" -RememberCredential $True
Для отключения введите:
Set-VpnConnection -Name "PPTP PS" -RememberCredential $False
В тоже время служебные параметры PassThru и Force можно просто указывать без ввода значения, само их наличие воспринимается как Истина.
Получение информации о VPN-соединении
Для получения информации о настроенных VPN-соединениях мы можем использовать командлет Get-VpnConnection, из параметров он поддерживает только Name и AllUserConnection, что позволяет отобразить параметры конкретного соединения и уточнить, что мы хотим видеть соединения всех пользователей, а не только текущего.
Чтобы увидеть все VPN-соединения выполните:
Get-VpnConnection
Для получения данных о конкретном соединении:
Get-VpnConnection -Name "PPTP PS"
Возможностей у командлета немного, но со своей работой он справляется.
Удаление VPN-соединения
Для удаления соединения используется командлет, ему достаточно передать единственный параметр — Name, также можно дополнительно указать Force, если вы не хотите подтверждать запрос об удалении соединения.
Remove-VpnConnection -Name "PPTP PS"
Но будьте осторожны и используйте Force только тогда, когда вы точно знаете какое соединение хотите удалить. Не рекомендуем использовать этот параметр интерактивно, так как есть риск, что вы можете указать не то соединение, все-таки запрос — лишний повод остановиться и подумать.
Добавление маршрута при подключении
Автоматическое добавление маршрутов при установлении VPN-подключения — больная тема для пользователей Windows, но PowerShell позволяет решить и этот вопрос, для этих целей есть отдельный командлет Add-VpnConnectionRoute, он весьма прост в использовании, вам нужно указать имя соединения в параметре ConnectionName и сеть назначения в параметре DestinationPrefix.
Например, добавим маршрут к сети 192.168.111.0/24 через подключение L2TP PS:
Add-VpnConnectionRoute -ConnectionName "L2TP PS2" -DestinationPrefix 192.168.111.0/24 -PassThru
Если маршрутов нужно несколько — выполняем команду несколько раз. Для удаления маршрутов используем командлет Remove-VpnConnectionRoute с точно таким же синтаксисом. Более подробно об управлении маршрутами можете прочитать в нашей статье: Автоматическое добавление маршрутов для VPN-соединения в Windows.
Автоматизация создания VPN-соединения
Для автоматического создания соединения важно чтобы конечный пользователь совершал минимум необходимых действий. В целях безопасности PowerShell скрипты нельзя запустить двойным кликом, поэтому будем использовать старый добрый CMD, в котором уже будем запускать PS и передавать ему нужные команды.
Ниже пример простого командного файла, который создает VPN-соединение и прописывает маршрут для него:
powershell -executionpolicy bypass -command "Add-VpnConnection -Name 'L2TP PS2' -ServerAddress '192.168.3.107' -TunnelType 'L2tp' -L2tpPsk 'MySharedKey' -Force -EncryptionLevel 'Required' -AuthenticationMethod MSChapv2 -SplitTunneling -RememberCredential"
powershell -executionpolicy bypass -command "Add-VpnConnectionRoute -ConnectionName 'L2TP PS2' -DestinationPrefix 192.168.111.101/32"
Обратите внимание, что команда полностью берется в двойные кавычки, а все двойные кавычки внутри команды заменены на одинарные. Данное содержимое вносим в Блокнот и сохраняем с расширением .bat или .cmd, для создания подключения не требуется повышения прав.
Что будет, если пользователь запустит командный файл повторно? Ничего страшного, он выдаст сообщение, что соединение с таким именем уже существует и завершит работу.
Если вам нужно внести какие-либо изменения в параметры подключения, вы точно также можете создать новый командный файл, в котором будете использовать командлет Set-VpnConnection.
В целом PowerShell предоставляет достаточно широкие возможности по простому и удобному управлению VPN-соединениями на компьютере и позволяет решать множество связанных с этим задач в один клик, используя скрипты и командные файлы.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Overview
Get-VpnConnection
retrieves information about VPN connections configured on the local computer. It allows you to manage and monitor VPN connections efficiently, ensuring secure and reliable access to remote networks.
Syntax
Get-VpnConnection [-Name] <string> [[-Status] <string>]
Options/Flags
- -Name: Specifies the name of the VPN connection to retrieve information about. When omitted, it retrieves information for all VPN connections.
- -Status: Filters the VPN connections based on their status. Valid values include:
- Disconnected: VPN connection is not connected.
- Connecting: VPN connection is attempting to establish.
- Disconnecting: VPN connection is terminating.
- Connected: VPN connection is actively connected.
Examples
Example 1: Get all VPN connections
Get-VpnConnection
Example 2: Get a specific VPN connection by name
Get-VpnConnection -Name "MyVPNConnection"
Example 3: Get VPN connections that are currently disconnected
Get-VpnConnection -Status Disconnected
Common Issues
VPN Connection Not Found
If Get-VpnConnection
returns no results or an error, ensure that the VPN connection you’re trying to retrieve exists on the local computer. Verify the connection name or use the -Status
parameter to filter by different connection statuses.
Slow VPN Connection
If the VPN connection is slow, check your network connection, server configuration, and firewall settings. Ensure that the VPN server is accessible and that the necessary ports are open.
Integration
Get-VpnConnection
can be integrated with other PowerShell commands for automation and advanced tasks.
Example: Connect to VPN using GUI
Get-VpnConnection | Connect-VpnConnection
- New-VpnConnection: Creates a new VPN connection.
- Remove-VpnConnection: Deletes an existing VPN connection.
- Connect-VpnConnection: Initiates a VPN connection.
- Disconnect-VpnConnection: Terminates a VPN connection.
Provide feedback
Saved searches
Use saved searches to filter your results more quickly
Sign up
В современных версиях Windows есть интересная возможность автоматического добавления статических маршрутов при активации определённого VPN подключения. Когда VPN подключение разрывается, данный маршрут автоматически удаляется из таблицы маршрутизации Windows. Для добавления IPv4 или IPv6 маршрута для VPN подключения используется PowerShell командлет Add-VpnConnectionRoute.
Вы конечно, можете вручную в командной строке добавлять нужные маршруты для VPN подключения, но главная проблема в том, что такие маршруты очищаются после отключения от VPN. Поэтому при следующем подключении, вам придется опять руками прописывать маршруты.
Допустим, вы хотите, чтобы через ваше VPN подключение маршрутизировались только пакеты для двух подсетей (192.168.111.24/ и 10.1.0.0/16), а весь основной трафик должен идти через вашего провайдера.
Откройте консоль PowerShell и выведите список всех настроенных VPN подключений в Windows:
Get-VpnConnection
В первую очередь нужно отключить опцию “Use default gateway in remote network” (Использовать основной шлюз в удаленной сети). Это можно сделать в свойствах VPN подключения в панели управления или командой:
Set-VpnConnection –Name workVPN -SplitTunneling $True
Подробнее про SplitTunneling здесь.
Добавим два статических маршрута для нашего VPN-соединения:
Add-VpnConnectionRoute -ConnectionName "workVPN" -DestinationPrefix 192.168.111.0/24 –PassThru
Add-VpnConnectionRoute -ConnectionName "workVPN" -DestinationPrefix 10.1.0.0/16 –PassThru
В параметре DestinationPrefix нужно указать подсеть, или конкретный IP адрес хоста, трафик к которому нужно маршрутизировать через VPN. Для добавления одного IP адреса используйте формат 10.1.1.26/32.
DestinationPrefix : 192.168.111.0/24 InterfaceIndex : InterfaceAlias : workVPN AddressFamily : IPv4 NextHop : 0.0.0.0 Publish : 0 RouteMetric : 1
Если у вас активно VPN подключение, вам нужно переподключиться, чтобы новые маршруты добавились в таблицу маршрутизации.
Новые маршруты привязаны к VPN подключению и добавляются при его запуске. Когда вы отключаетесь от VPN сервера, маршруты автоматически удаляются.
Отключитесь от VPN и проверьте таблицу маршрутизации. Маршрут к вашей удаленной сети удалился автоматически, а Get-NetRoute вернет, что маршрут не найден:
Get-NetRoute : No MSFT_NetRoute objects found with property 'DestinationPrefix' equal to '192.168.111.0/24'. Verify the value of the property and retry. CmdletizationQuery_NotFound_DestinationPrefix,Get-NetRoute
Вывести список статических маршрутов для подключения:
(Get-VpnConnection -ConnectionName workVPN).Routes
Чтобы полностью удалить статических маршрут для VPN подключения, используйте команду:
Remove-VpnConnectionRoute -ConnectionName workVPN -DestinationPrefix 192.168.111.0/24 -PassThru
Если вам нужно изменить порядок разрешения DNS имен при активном VPN, познакомьтесь со статьей.
В предыдущих версиях Windows (Windows 7/ Server 2008R2) для динамического добавления маршрутов после установления VPN подключений приходилось использовать CMAK и различные скрипты с командами
add route
.
Например, можно создать командный файл vpn_route.netsh для добавления маршрутов.
interface ipv4
add route prefix=192.168.111.24 interface="workVPN" store=active
add route prefix=10.1.0.0/16 interface="workVPN" store=active
exit
Данный файл нужно запускать через задание планировщика, которое срабатывает на событие установки VPN подключения в Event Viewer (RasMan 20225)
schtasks /create /F /TN "Add VPN routes" /TR "netsh -f C:\PS\vpn_route.netsh" /SC ONEVENT /EC Application /RL HIGHEST /MO "*[System[(Level=4 or Level=0) and (EventID=20225)]] and *[EventData[Data='My VPN']]"
Powershell — создание VPN-подключения
Powershell — создание VPN-подключения
Хотите узнать, как создать VPN-подключение с помощью Powershell? В этом руководстве мы покажем вам, как использовать Powershell для создания VPN-подключения на компьютере под управлением Windows.
• Windows 2012 R2
• Windows 2016
• Windows 2019
• Windows 10
Список оборудования
Здесь вы можете найти список оборудования, используемого для создания этого учебника.
Эта ссылка будет также показать список программного обеспечения, используемого для создания этого учебника.
Похожий учебник — PowerShell
На этой странице мы предлагаем быстрый доступ к списку учебников, связанных с PowerShell.
Учебник Powershell — Создание VPN-подключения
В качестве администратора запустите повышенную командную линию Powershell.
Создайте VPN с помощью Powershell.
Создайте PPTP VPN с дополнительным шифрованием и аутентификацией PAP.
Создайте PPTP VPN с шифрованием и проверкой подлинности MSCHAPV2.
При необходимости используйте свои текущие учетные данные и запомните данные для входа.
Создайте VPN L2TP-IPSEC с общим ключом и проверкой подлинности MSCHAPV2.
Перечислите VPN-подключения.
Запустите VPN-подключение.
Проверьте состояние VPN-подключения.
Удалите VPN-подключение с помощью Powershell.
Поздравляю! Вы можете настроить VPN-подключение с помощью Powershell.
VirtualCoin CISSP, PMP, CCNP, MCSE, LPIC22021-09-03T21:55:10-03:00
Related Posts
Page load link
Ok