Pull to refresh

Скрипт для настройки VPN на Power Shell

Level of difficultyEasy
Reading time3 min
Views12K

Дистанционная работа в компаниях все больше становится распространённой в последнее время. Системным администраторам нужно организовывать на домашних компьютерах пользователей подключение по 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

Tags:
Hubs:
Total votes 9: ↑8 and ↓1+7
Comments32

Articles