Уровень сложности
Простой
Время на прочтение
3 мин
Количество просмотров 9.4K
Дистанционная работа в компаниях все больше становится распространённой в последнее время. Системным администраторам нужно организовывать на домашних компьютерах пользователей подключение по VPN к сети компании. Время настройки занимает от 10 минут и это если все пойдет гладко, пользователь сообразит как скачать Any Desk или какой другой клиент для удаленного подключения, потом факт стабильного интернета играет роль, ну и конечно же настройка самого VPN подключения — вбиваем адрес, метод шифрования, логин, пароль, ключ.
А если пользователей 10 и более? Это уже нужно потратить больше времени, а если им всем нужно утром срочно все настроить? Тут немного подумав, я решил написать достаточно простой, но в то же время полезный скрипт на Power Shell а потом упаковал его в файлик .exe.
Прошу строго не судить, надеюсь материал кому-нибудь пригодится.
Процесс создания скрипта с комментариями:
Повышаем привилегии до администратора:
if (!(net session)) {$path = "& '" + $myinvocation.mycommand.definition + "'" ; Start-Process powershell -Verb runAs -ArgumentList $path ; exit}
Разрешаем выполнение локальных скриптов:
Set-ExecutionPolicy RemoteSigned -Force
Установить переменные для VPN-подключения:
# Имя подключения
$VPNconnectionSSTP = "VPN_SSTP"
$VPNconnectionL2TP = "VPN_L2TP"
# тип подключения
$VPNtypeSSTP = "sstp"
$VPNtypeL2TP ="l2tp"
# ip адрес или доменное имя
$SRVaddressSSTP = "ip_addr"
$SRVaddressL2TP = "ip_addr"
# DNS суффикс
$dnssuf = "domain.local"
# ключ l2tp
$l2tp_key = "ключ"
# метод аутентификации
$auth_method = "MSChapv2"
# сертификат .cer открываем через блокнот и копируем от начала до конца
$vpn_cert = "-----BEGIN CERTIFICATE-----
сам сертификат (скопировать содержимое открыв его через текстовый редактор)
-----END CERTIFICATE-----"
Сохраняем сертификат в директории пользователя:
$vpn_cert | Out-File -FilePath "$env:HOMEPATH\vpn_cert.cer" -Encoding utf8
Создаем SSTP-соединения SSTP и L2TP соответственно:
Add-VpnConnection -Name $VPNconnectionSSTP -ServerAddress $SRVaddressSSTP -TunnelType $VPNtypeSSTP -AuthenticationMethod $auth_method -EncryptionLevel "Optional" -DnsSuffix $dnssuf -SplitTunneling -IdleDisconnectSeconds 900 -RememberCredential -AllUserConnection
Add-VpnConnection -Name $VPNconnectionL2TP -ServerAddress $SRVaddressL2TP -TunnelType $VPNtypeL2TP -AuthenticationMethod $auth_method -L2tpPsk $l2tp_key -EncryptionLevel "Optional" -DnsSuffix $dnssuf -SplitTunneling -IdleDisconnectSeconds 900 -RememberCredential -AllUserConnection
Устанавливаем сертификат в доверенные корневые сертификаты пользователя:
certutil -f -addstore root "$env:HOMEPATH\vpn_cert.cer"
Возвращаем политику выполнения скриптов по умолчанию
Set-ExecutionPolicy Default –Force
Все! Скрипт готов. Сохраняем его с расширением .PS1
P.S.Можно запускать так и не менять executionpolicy на машине (дополнение от @Nday001):
powrshell -f "path\to\script.ps1" -executionpolicy bypass
Также можем сделать из него EXE файлик для удобства:
Программа называется PS2EXE есть на гите
Также было предложено пользователем Artem @pr0l проверять наличие созданного vpn соединения на случай смены сертификата, ключа шифрования или какого другого важного параметра.
if (Get-VpnConnection -Name $vpn_name -AllUserConnection -ErrorAction Ignore -Verbose)
{ Remove-VpnConnection -Name $vpn_name -AllUserConnection -ErrorAction Ignore -Verbose -Force
# Удаляем сертификат
Remove-Item -Path HKLM:\SOFTWARE\Microsoft\SystemCertificates\ROOT\Certificates\32323F22E9065D0157DE9B902020DA41A12B4E53 -ErrorAction Ignore -Verbose
}
else {}
# дальше ниже создаем новое соединение
Еще дополнение от @SlavaHU если кому понадобится добавления маршрута в подсеть:
$VPNconnectionL2TPDestPrefix = "192.168.6.0/24"
Add-VpnConnectionRoute -ConnectionName $VPNconnectionL2TP -DestinationPrefix $VPNconnectionL2TPDestPrefix
Управление VPN-подключениями в последних версиях Windows трудно назвать понятным и удобным. Часть настроек производится через современное приложение Параметры, другая часть, как и прежде, находится в Панели управления. Какие-то шаги к упорядочению этой ситуации сделаны только в Windows 11, но практического опыта работы с ней еще недостаточно. Но есть гораздо более простой и удобный способ управления VPN-соединениями — это PowerShell, его можно использовать как в интерактивном режиме, так и для написания скриптов автоматизации, которые будут производить настройку подключения в один клик.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Тема 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-соединениями на компьютере и позволяет решать множество связанных с этим задач в один клик, используя скрипты и командные файлы.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
На просторах интернета имеется большое количество информации на тему виртуальных частных сетей.Однако очень мало статей, как создать VPN соединение автоматичеки (скриптом). Можно найти как это сделать в UNIX. Мы же опишем как это сделать в Windows, на примере Windows 7. Такой вопрос может встать перед системным администратором (например, если нужно сделать одинаковые настройки VPN соединения на нескольких компьютерах). В других версиях ОС Windows всё делается по аналогии и опытному человеку не составит труда разобраться. Рядовой пользователь может озадачиться данным вопросом с малой вероятностью, поэтому мы пока не будем описывать данный процесс для других операционных систем. Однако постараемся расписать каждый шаг:
- Ручное создание соединения через интерфейс.
- Настройка использования шлюза (как компьютер будет ходить в интернет, через VPN или минуя его).
- Автоматизация подключения уже настроенного соединения.
- Автоматизация создания нового подключения.
Cоздание соединения через интерфейс
Предполагаем, что где-то имеется сервер виртуальной частной сети и нам известны параметры для подключения к нему (адрес, логин и пароль). Заходим: Пуск -> Панель управления -> Центр управления сетями и общим доступом. В разделе Изменение сетевых параметров, щелкнем по Настройка нового подключения или сети. Откроется окно Установка подключения или сети, где будет предложено выбрать вариант. Щелкаем по Подключение к рабочему месту Настройка телефонного или VPN-подключения к рабочему месту и жмём Далее.
Если уже имеются другие настройки, на следующем шаге будет предложено выбрать что-то из них или создать новое. Выбираем создать новое. На следующем шаге выбираем Использовать моё подключение к Интернету.
В появившемся окне вводим: Интерент-адрес — адрес VPN сревера (IP или доменное имя), Имя местоназначения — любое, оно будет отображаться в списке ваших сетей (если планируется дальнейшая автоматизация процессов, рекомендуем использовать в названии только латиницу и/или цифры.
На следующем шаге вводим пользователя и пароль, а так же выбираем запомнить пароль или нет.
По завершению произойдет попытка соедениться, и если всё указано верно коеенкт произойдет.
Если вам известен протокол, по которум работет ваш сервер, рекомендуем настроить его принудительно, это ускорит процесс подключения. Необходимо отключить ваш VPN: в правом нижнем углу (в трее) раскрываем список сетей, на нашей правой кнопкой мыши -> отключить.
Заходим: Пуск -> Панель управления -> Центр управления сетями и общим доступом -> Изменения параметров адаптера. На нашей сети правой кнопкой мыши -> Свойства. Закладка Безопасность. И выбираем Тип VPN. Если этого не сделать, каждый раз будут попытки соедениться по каждому из протоколов, пока не будет успешной.
Настройка использования шлюза
После типовой настройки, описанной в предыдущем пункте, весь ваш интрнет трафик пойдет через созданный канал, т.е. через сервер. Если сервер имеет интернет канал с пропускной способностью меньше чем у вас, или он прилично нагружен, возможно ощутить замедление скорости доступа в глобальную сеть. Так же, на сайтах или сервисах на которые вы пойдете будет светиться IP адрес сервера, а не ваш. Иногда такое не подходит и есть необходимость, чтобы светился ваш IP адрес. В таком случае необходимо произвести настройку шлюза.
Вновь отключаемся и заходим в свойства соединения как описано чуть выше (в изменениях параметра адаптера). Выбираем закладку Сеть. Выделяем Протокол Интернета версии 4(TCP/IPv4) и жмеме Свойства -> Дополнительно. На закладке Параметры IP снимаем галку Использовать основной шлюз в удаленной сети. Во всех открытых окнах — ОК. Теперь даже при подключенном VPN соединении интернет трафик пойдет через ваш, а не удаленный шлюз.
Автоматизация подключения уже настроенного соединения
Автоматически установит VPN соединение для уже настроенного подоключения, можно не только из интерфейса, но и из-под коммандной стрки, используя команду rasdial.
Формат команды:
rasdial [Имя подключения] [имя пользователя] [пароль]
где Имя подключения — то, что вы указали при создании VPN подключения в Имени местоназначения.
Пример команды:
rasdial myvpn test_user 12345
Используя эту команду, можно, например, настроить автоматическое подключение по VPN при загрузке компьютера. Для этого в планировщике задач необходимо создать нужное задание, в котором указать данную команду. Можно так же создать bat файл с одной строчкой — этой командой, и указать в задании его.
Остается одна проблема. Пароль при этом храниться в открытом виде. Если это решение не устраивает, можно скомпилировать bat файл в exe и пароль не будет явно видно. Переделка bat файла в exe — тема отдельной статьи, которых много в интернете. Воспользовавшись поиском, не составит труда найти, как это делается.
Создание VPN соединения скриптом
А теперь к самому интересному. Все созданные пользователем VPN соединения и их настройки храняться в одном файле — rasphone.pbk, который храниться в системной папке пользователя:
%APPDATA%\Microsoft\Network\Connections\Pbk
или, при типовой настройке Windows
C:\Users\[Имя пользователя]\AppData\Roaming\Microsoft\Network\Connections\Pbk
В этом файле первая строка — имя VPN соединения в квадратных скобках. Далее идут пареметры (настройки) этого соединения. После них через пустую строку идет имя следующего VPN соединения в квадратных скобках (если у вас их два и более) и так далее.
[myvpn]
...
......
...[myvpn2]
...
......
...
Копируем этот файл в другое место, например на флэшку. Если у вас на этом компьютере было несколько настроенных VPN, а вам нужно настраивать на других компьютерах только один или некоторые, открываем скопированный файл в текстовом редакторе (я предпочитаю Notepad++).У даляем лишние соединения вместе с их настройками. Делать это нужно аккуратно, не удалив случайно некоторые из настроек нужных соединений
Создаем bat файл из двух строк
copy /Y rasphone.pbk C:\Users\user\AppData\Roaming\Microsoft\Network\Connections\Pbk
rasdial myvpn test_user 12345
Я кладу созданный bat файл на флэшку в тот же каталог, где находиться отредактированный файл rasphone.pbk. Поэтому в первой строчке скрипта укзываю его имя без пути.
Предполагая, что на комьютере, на котором буду внедрять решение — типовая установка Windows и пользователь называется user, поэтому в первой строке, в комманде copy, каталог назначения имеет такой вид.
/Y означает, что файл в папке назначения будет перезаписан, если существует, без лишних вопросов.
Важно!!!
В моей реализации предполагается, что на компьютере внедрения отсутствуют существующие настроенные VPN соединения.
Если они присутствуют, то будут утеряны (удалены) при перезаписи файла, а если найдутся подключенные, то скрипт может выдать ошибку.
Если соединения уже есть, и их необходимо сохранить, потребуется не перезаписывать файл rasphone.pbk, а дописывать в него необходимую текстовую информацию.
Вторая строчка скрипта сразу устанавливает соединение для созданного VPN подключения
Запускаем скрипт и получаем результат. Вариаций реализации данного решения множество и у каждого своя ситуация. Охватить одной статьей все ситуации невозможно, цель — описать общий механизм.
Заключение
Если в данной статье оказалось недостаточно информации, сообщите нам на почту info@rapid-brain.ru и мы постараемся внести дополнения.
Если статья оказалась вам интересна и полезна, помогите найти её другим пользователям — сделайте репост в социалных сетях, используя расположенные ниже кнопки.
В 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:\LocalMachine\My\ -Password $password
Import-Certificate -FilePath $ca_cert -CertStoreLocation Cert:\LocalMachine\Root\
Add-VpnConnection -Name "WorkVPN_IKEv2" -ServerAddress "vpn.winitpro.ru" -TunnelType Ikev2 -EncryptionLevel "Maximum" -AuthenticationMethod MachineCertificate -SplitTunneling $True -PassThru
Подключения, доступные для всех пользователей (созданные с параметром
AllUserConnection
), отображаются в панели управления сетями, а в качестве Owner указана
System
. У подключения пользователя здесь будет указано
domain\username
.
Общие VPN подключения сохраняются в текстовый файл
%ProgramData%\Microsoft\Network\connections\Pbk\rasphone.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
Перед настройкой VPN-подключения, в дереве пользователей откройте карточку нужного пользователя и установите флаг Разрешить удаленный доступ через VPN. Для этого перейдите в раздел Пользователи -> Учетные записи.
Не рекомендуем использовать для VPN-подключений кириллические логины.
Важно: L2TP IPsec клиенты, находящиеся за одним NAT’ом, могут испытывать проблемы подключения если их более одного. Решить проблему может помочь
инструкция
. Рекомендуем вместо L2TP IPsec использовать IKEv2 IPsec.
Запустите следующий скрипт PowerShell для автоматического создания подключения на компьютерах пользователей с Windows 8.1 и 10. Для этого скачайте готовые скрипты подключения сервера из раздела Пользователи -> VPN-подключения -> Основное.
Подключение будет создано со следующими параметрами:
-
1.
Протокол L2TP/IPsec с использованием PSK-ключа;
-
2.
Параметр Использовать основной шлюз в удаленной сети выключен.
Доступ к локальным сетям того же класса, что были получены для VPN-подключения по умолчанию в Windows 7 и 10 будет осуществляться через VPN-подключение, поэтому дополнительных маршрутов создавать не нужно (если не используются разные классы сетей в локальной сети офиса).
Создайте файл с именем ideco_utm_l2tp.ps1 (в Блокноте или редакторе Windows PowerShell ISE) и скопируйте в него следующий текст:
### Ideco UTM L2TP/IPsec connection ###
$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
if (!$currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) {
-ArgumentList (‘-noprofile -noexit -file «{0}» -elevated’ -f ( $myinvocation.MyCommand.Definition ))
Enable-NetFirewallRule -Group «@FirewallAPI.dll,-28502»
-Name «Ideco UTM L2TP VPN» `
-ServerAddress my.domain.com `
-L2tpPsk «XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX» `
-EncryptionLevel «Required» `
-AuthenticationMethod MSChapV2 `
-DnsSuffix activedirectory.domain `
Поменяйте в нем необходимые параметры на соответствующие вашим настройкам:
-
Ideco UTM L2TP VPN — имя подключения в системе (может быть произвольным);
-
my.domain.com — домен или IP-адрес основного внешнего интерфейса Ideco UTM;
-
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX — PSK-ключ вашего сервера;
-
activedirectory.domain — ваш домен Active Directory (если есть, если нет нужно удалить эту строчку из скрипта).
Запустить скрипт на компьютере пользователя можно из контекстного меню файла «Выполнить с помощью PowerShell». Нажмите «Ок» в диалоге повышения прав (они требуются для разрешения доступа к общим файлам и принтерам).
После этого подключение в системе будет создано, а также включен общий доступ к файлам и принтерам для всех сетей (иначе доступ к файловым ресурсам в локальной сети может быть невозможен).
Пользователю при первой авторизации необходимо ввести свой логин/пароль.
Возможные ошибки при выполнении скрипта
-
При появлении ошибки «Выполнение сценариев отключено в этой системе», нужно включить выполнение сценарием, выполнив команду в PowerShell:
Set-ExecutionPolicy Unrestricted
.
Запустите следующий скрипт PowerShell для автоматического создания подключения на компьютерах пользователей с Windows 8.1 и 10. Для этого скачайте готовый скрипт из раздела Пользователи -> VPN-подключения -> Основное.
Подключение будет создано со следующими параметрами:
-
1.
Протокол SSTP с использованием PSK-ключа;
-
2.
Параметр Использовать основной шлюз в удаленной сети выключен.
Доступ к локальным сетям того же класса, что были получены для VPN-подключения по умолчанию в Windows 7 и 10 будет осуществляться через VPN-подключение, поэтому дополнительных маршрутов создавать не нужно (если не используются разные классы сетей в локальной сети офиса).
Создайте текстовый файл с именем ideco_utm_sstp.ps1 (в Блокноте или редакторе Windows PowerShell ISE) и скопируйте туда следующий текст:
### Ideco UTM SSTP connection ###
$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
if (!$currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) {
-ArgumentList (‘-noprofile -noexit -file «{0}» -elevated’ -f ( $myinvocation.MyCommand.Definition ))
Enable-NetFirewallRule -Group «@FirewallAPI.dll,-28502»
-Name «Ideco UTM SSTP VPN» `
-ServerAddress my.domain.com:4443 `
-EncryptionLevel «Required» `
-AuthenticationMethod MSChapV2 `
-DnsSuffix activedirectory.domain `
Поменяйте в нем необходимые параметры на соответствующие вашим настройкам:
-
1.
Ideco UTM SSTP VPN — имя подключения в системе (может быть произвольным);
-
2.
my.domain. com:4443 — домен внешнего интерфейса Ideco UTM и порт, на котором включили SSTP;
-
3.
activedirectory.domain — ваш домен Active Directory (если домена нет, нужно удалить эту строчку из скрипта).
Запустить скрипт на компьютере пользователя можно из контекстного меню файла «Выполнить с помощью PowerShell». Нажмите «Ок» в диалоге повышения прав (они требуются для разрешения доступа к общим файлам и принтерам).
После этого подключение в системе будет создано, а также включен общий доступ к файлам и принтерам для всех сетей (иначе доступ к файловым ресурсам в локальной сети может быть невозможен).
Пользователю при первой авторизации необходимо ввести свой логин/пароль.
Возможные ошибки при выполнении скрипта
При ошибке «Выполнение сценариев отключено в этой системе», нужно включить выполнение сценарием, выполнив команду в PowerShell: Set-ExecutionPolicy Unrestricted
.
Запустить скрипт PowerShell для автоматического создания подключения на компьютерах пользователей с Windows 8.1 и 10, скачав готовый скрипт из раздела Пользователи -> VPN-подключение -> Основное.
Перед настройкой подключения по протоколу IKEv2 установите корневой сертификат UTM на устройство пользователя. Скачать сертификат можно одним из способов:
-
В личном кабинете, введя логин/пароль пользователя:
-
В разделе Сервисы -> Сертификаты:
Корневой сертификат потребуется для настройки подключения рабочей станции пользователя, если не был получен корневой сертификат через Let`s Encrypt.
Если для VPN-подключения используется сертификат выданный Let`s Encrypt, то установка корневого сертификата на устройство не требуется.
Подключение с помощью скрипта будет создано со следующими параметрами:
-
2.
Параметр Использовать основной шлюз в удаленной сети выключен. Доступ к локальным сетям того же класса, что были получены для VPN-подключения по умолчанию в Windows 7 и 10, будет осуществляться через VPN-подключение, поэтому дополнительных маршрутов создавать не нужно (если не используются разные классы сетей в локальной сети офиса).
Создайте текстовый файл с именем ideco_utm_ikev2.ps1 (в Блокноте или редакторе Windows PowerShell ISE) и скопируйте туда следующий текст:
### Ideco UTM IKEv2 connection ###
$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
if (!$currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) {
-ArgumentList (‘-noprofile -noexit -file «{0}» -elevated’ -f ( $myinvocation.MyCommand.Definition ))
Enable-NetFirewallRule -Group «@FirewallAPI.dll,-28502»
-Name «Ideco UTM IKEv2 VPN» `
-ServerAddress my.domain.com `
-EncryptionLevel «Required» `
-AuthenticationMethod EAP `
-DnsSuffix activedirectory.domain `
Поменяйте в нем необходимые параметры на соответствующие вашим настройкам:
-
1.
Ideco UTM IKEv2 VPN
— название подключения в системе (может быть произвольным); -
2.
my.domain.com
— домен внешнего интерфейса Ideco UTM (А-запись для домена должна ссылаться на IP-адрес внешнего интерфейса Ideco UTM); -
3.
activedirectory.domain
— ваш домен Active Directory (если его, то нужно удалить эту строчку из скрипта).
Запустить скрипт на компьютере пользователя можно из контекстного меню файла «Выполнить с помощью PowerShell». Нажмите «Ок» в диалоге повышения прав (они требуются для разрешения доступа к общим файлам и принтерам).
После этого подключение в системе будет создано, а также включен общий доступ к файлам и принтерам для всех сетей (иначе доступ к общим папкам в локальной сети будет невозможен).
При первой авторизации необходимо ввести логин/пароль пользователя.
Возможные ошибки при выполнении скрипта
При появлении ошибки «Выполнение сценариев отключено в этой системе», нужно включить выполнение сценариев, выполнив команду в PowerShell: Set-ExecutionPolicy Unrestricted
Ошибки работы VPN-подключений
Ошибки работы VPN-подключений
Если VPN-подключение по протоколам IPSeс в Windows автоматически разрывается через 7 часов 45 минут и при подключении по IKEv2 возникает ошибка «Ошибка сопоставления групповой политики» или ошибка с кодом «13868»
Для восстановления связи подойдут следующие действия:
1. Переподключите соединение. В данном случае соединение восстановится, но через 7 часов 45 минут вновь будет автоматически разорвано. Если требуется, чтобы подключение не разрывалось автоматически, то выполните действия из следующего пункта.
2. Внесите изменения в реестр:
-
Откройте Редактор реестра;
-
Перейдите по пути
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters
; -
Нажмите правой кнопкой мыши по параметру именем NegotiateDH2048_AES256 и нажмите Изменить;
-
В строке Значение укажите значение
1
:
-
Если параметра именем NegotiateDH2048_AES256 нет, то создайте его. Для этого:
-
Нажмите правой кнопкой мыши по свободному месту реестра в Parameters и выберите Создать -> DWORD:
-
Задайте имя NegotiateDH2048_AES256;
-
Нажмите правой кнопкой мыши по созданному файлу и выберите Изменить:
-
В строке Значение укажите значение
1
:
3. Перезагрузите Windows.