Встроенный VPN клиент Windows в случае разрыва подключения по-умолчанию не пытается переподключиться к VPN серверу. В этом случае пользователю приходится вручную подключаться к VPN. В Windows есть несколько инструментов, которые позволят настроить автоматическое переподключение к VPN после потери соединения.
В графическом интерфейсе VPN клиента Windows отсутствуют настройки переподключения. Однако вы можете настроить их через конфигурационный файл rasphone.pbk, который хранится в профиле пользователя (
%userprofile%\AppData\Roaming\Microsoft\Network\Connections\Pbk
). В этом файле хранятся параметры всех профилей VPN подключений пользователя.
%ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk
.Откройте файл rasphone.pbk с помощью текстового редактора, найдите секцию для нужного VPN профиля (например, [PPTP-VPN]) и промотайте к параметрам:
- RedialAttempts=3 – количество попыток переподключиться (максимум 99)
- RedialSeconds=60 – количество секунд между попытками переподключения
- IdleDisconnectSeconds=0 — сколько выжидать, чтобы понять что линия оборвалась (0 – не ждать вовсе)
- RedialOnLinkFailure=1 — Переподключиться в случае обрыва связи 1 – да, 0 — нет

Однако, настройки из файла rasphone.pbk не всегда корректно отрабатывают для всех возможных случаев. Поэтому рекомендуется автоматизировать переподключение к VPN с помощью задания планировщика, которое будет переподключаться к VPN в случае разрыва соединения или подключения компьютера к сети (Wi-Fi или Ethernet). Нас интересуют следующие события:
| EventID | Источник | Описание |
| 20226 | RasClient (журнал Application) |
The user username dialed a connection named VPNConnectionName which has terminated. The reason code returned on termination is 829.
|
| 10000 | NetworkProfile (журнал Microsoft-Windows-NetworkProfile/Operational) |
Network Connected
|

Откройте Task Sheduler (
taskschd.msc
) и создайте новое задание планировщика (Create Task). Укажите имя задания.
Перейдите на вкладку Trigger и создайте два триггера для событий (Begin the task: On event):
- Log:
Application, Source:RasClient, EventID:20226 - Log:
Microsoft-Windows-NetworkProfile/Operational, Source:NetworkProfile, EventID:10000

Теперь нужно настроить действие, которое будет выполняться при появлении любого их этих событий. Перейдите на вкладку Actions -> нажмите New.
- Выберите действие:
Start a program - Program/script:
%windir%\System32\rasdial.exe - В аргументах укажите:
"ИмяВашегоVPNподключения"

В этом примере для подключения используется VPN профиль с сохраненным паролем. Если вы хотите указать имя и пароль для VPN подключения, задайте их так:
"ИмяВашегоVPNподключения" username password
Get-VpnConnection|select name,ServerAddress,TunnelType

Протестируете задание планировщика: отключите на время сетевой кабель от компьютера или отключитесь VPN. Проверьте, что после подключения сети, Windows автоматически переподключается к вашему VPN серверу.


Ё-моё….
А нет способа вернуть визуальные настройки в окно диалога настроек VPN соединения? Что то уж совсем M$ людей за лохов держит.
Я не нашел такого способа. Рыл сеть долго. Видимо никто не нашел. Расчет M$ на то, что связь не должна рваться, в нормальной ситуации.
Я бы еще «доработочку» ввел. Пока не знаю как. При создании нового VPN соединения снимать галку в Networking -> IPv4 Properties -> Advanced -> Use default gateway on remote network. Очень мешает. Приходится _каждый_ раз ходить и снимать эту «галку».
https://winitpro.ru/index.php/2020/04/09/net-dostupa-v-internet-pri-aktivnom-vpn/
Будь проклят Microsoft! 1й способ не работает!
Будь проклят Microsoft! 1й способ не работает!
IdleDisconnectSeconds=0
это сколько секунд должно работать подклчение. Поставите 60 — будет каждую минуту отключаться
Вы плохо поняли, что написано и не правильно прокомментировали
Этот параметр — «Сколько ждать, прежде чем решить, что VPN отвалился».
The IdleDisconnectSeconds key specifies the number of seconds after which the demand-dial connection is terminated due to inactivity. This key is optional. If the key is present, the value SHOULD be a number in the range 0 to 4294967296.
VPN будет автоматически ОТКЛЮЧАТЬСЯ через заданное в этом параметре время.
Google переводчмк вам в помощь ….. там же все англйским по белому написано просто и четко
0 — не будет отключаться, то есть, не надо его трогать.
Нужно добавить задержку в событие отключения в VPN. А то условно, если VPN сервер перезагружается, вы не сможете сразу переподключиться к нему, а повторно задание не отработает.
+ нужно в свойствах хадание задать перезапуск в случае неуспешного результата.
Простое человеческое спасибо!
спасибо большое вам
А как это будет работать, если мне НУЖНО отключить впн на какое-то время?
Сделал работу, поставил сохранение на корпоративный сервер, пошёл спать. Нужно чтоб соединение не отваливалось. Но в нерабочее время нужно от предприятия отключаться. Можно как-то разделить события обрыва соединения и преднамеренного отключения пользователем?
Ручная работа. Только так.
rem Наименование VPN соединения
set vpnname=VPN_SSTP
rem IP-адрес сервера
set ipserver=X.X.X.X
rem Статические маршруты(‘x.x.x.x/xx’,’x.x.x.x/xx’)
set stroute=’192.168.111.0/24′,’192.168.112.0/24′,’192.168.113.0/24′
rem Наименование файла сертификата, должен лежать рядом
set certname=cert.crt
rem Путь к пользовательскому phonebook
set pbk=%APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk
rem Стартовая директория
set startdir=%~dp0
rem Определение переменных «evtlog»(Журнал) и «evtq»(Событие)
set evtlog=
set evtq=*[System[Provider[@Name=’RasClient’] and (EventID=20227 or EventID=20226)]]
for /f «delims=» %%L in (‘wevtutil.exe el ^| findstr /I /X «Microsoft-Windows-RasClient/Operational»‘) do set evtlog=Microsoft-Windows-RasClient/Operational
if defined evtlog (wevtutil.exe sl «Microsoft-Windows-RasClient/Operational» /e:true >nul 2>&1) else (set evtlog=Application)
rem Копирование модуля «VPNCredentialsHelper» в пользовательскую директорию «…Documents\WindowsPowerShell\Modules\». Папка с модулем должна лежать рядом
if not exist «%userprofile%\Documents\WindowsPowerShell\Modules\VPNCredentialsHelper» xcopy /e /c /q /y «%startdir%VPNCredentialsHelper» «%userprofile%\Documents\WindowsPowerShell\Modules\VPNCredentialsHelper\»
rem Создание VPN
powershell -NoProfile -ExecutionPolicy Bypass -Command «Add-VpnConnection -Name ‘%vpnname%’ -ServerAddress ‘%ipserver%’ -TunnelType SSTP -EncryptionLevel Required -AuthenticationMethod MSChapv2 -SplitTunneling -RememberCredential»
rem Изменение VPN, если уже создано
powershell -NoProfile -ExecutionPolicy Bypass -Command «Set-VpnConnection -Name ‘%vpnname%’ -ServerAddress ‘%ipserver%’ -SplitTunneling $true -AuthenticationMethod MSChapv2 -EncryptionLevel Required -PassThru | Out-Null»
rem Добавить статические маршруты
powershell -NoProfile -Command «foreach($p in %stroute%){ try { Add-VpnConnectionRoute -ConnectionName ‘%vpnname%’ -DestinationPrefix $p -ErrorAction Stop } catch {} }» >Nul 2>&1
rem Не разрывать соединение, в случае простоя
powershell -NoProfile -Command «Set-VpnConnection -Name ‘%vpnname%’ -IdleDisconnectSeconds 0»
rem Изменение значений «PreviewUserPw» и «PreviewDomain» в PhoneBook для созданного VPN
powershell -Command «$f = ‘%pbk%’; $section = ‘[%vpnname%]’; $lines = Get-Content $f; $inSection = $false; $lines2 = $lines | ForEach-Object { if ($_ -eq $section) { $inSection = $true } elseif ($_ -like ‘[*]’) { $inSection = $false } if ($inSection) { $_ = $_ -replace ‘^PreviewUserPw=1$’,’PreviewUserPw=0′ -replace ‘^PreviewDomain=1$’,’PreviewDomain=0′ }; $_ }; $lines2 | Set-Content $f»
rem Загрузить модуль «VPNCredentialsHelper» и потребовать от пользователя ввести логин/пароль
powershell -NoProfile -ExecutionPolicy Bypass -Command «Import-Module VPNCredentialsHelper -ErrorAction Stop; $n=’%vpnname%’; do { $cred=Get-Credential -Message (‘‚ўҐ¤ЁвҐ «®ЈЁ/Ї а®«м ¤«п VPN: ‘+$n); $plain=(New-Object System.Net.NetworkCredential(»,$cred.Password)).Password; $loginEmpty=[string]::IsNullOrWhiteSpace($cred.UserName); $passEmpty=[string]::IsNullOrWhiteSpace($plain); if ($loginEmpty -or $passEmpty) { Write-Host ‘‹®ЈЁ Ё«Ё Ї а®«м Ґ ¬®¦Ґв Ўлвм Їгбвл¬.’ -ForegroundColor Yellow } } while ($loginEmpty -or $passEmpty); Set-VpnConnectionUsernamePassword -ConnectionName $n -Username $cred.UserName -Password $plain»
rem Создание задания в планировщике(подключение при входе в систему, с задержкой 20 сек)
schtasks /Create /F /TN «%vpnname%_AutoConnect_OnLogon» /SC ONLOGON /DELAY 0000:20 /TR «rasphone -d «%vpnname%» -f «%pbk%»» /RL LIMITED /IT
rem Создание задания в планировщике(перезапуск в случае ошибки — код события 20227, 20226, с задержкой 3 сек)
schtasks /Create /F /TN «%vpnname%_AutoRedial_OnDisconnect» /SC ONEVENT /DELAY 0000:03 /EC %evtlog% /MO «%evtq%» /TR «rasphone -d «%vpnname%» -f «%pbk%»» /RL LIMITED /IT
rem Создание задания в планировщике(безусловный перезапуск каждую минуту, если не запущено)
schtasks /Create /F /TN «%vpnname%_KeepAlive» /SC MINUTE /MO 1 /TR «rasphone -d «%vpnname%» -f «%pbk%»» /RL LIMITED
rem Добавление сертификата в хранилище пользователя
certutil -f -user -addstore «Root» «%startdir%%certname%» >Nul 2>&1
certutil -f -user -addstore «CA» «%startdir%%certname%» >Nul 2>&1
certutil -f -user -addstore «TrustedPublisher» «%startdir%%certname%» >Nul 2>&1
rem Подключение к VPN
rasphone -d «%vpnname%» -f «%pbk%»
Работает? Надо будет потестить.
Обижаетес… 🙂
Целый день потратил… Мозг подвскипел :/
Ну отлично! Спасибо.
А тут Вы, вовремя, со скриптами. Мне как раз это очень скоро понадобится.
Опа! — готовое решение.
Единственный нюанс…
Получилось так, что невозможно отключиться от VPN — задание «по событию» его в любом случае переподключит, т.к. событие «20226» — это и отключение вручную и обрыв…
А вот как, имея только журнал «application» сделать более тонкую фильтрацию — я так и не понял — судя, по-всему, никак…
Нужен журнал «RasClient/Operational», а в системе его попросту нет(хотя редакция Pro). И, соответственно, надеяться, что у пользователей(для кого предназначен скрипт) он есть — не приходится…
ЯДиск
Пароль от архива: 12344321
Plug and Pray?
Пнуть и .. верить? )))
)))
Сложность в простате 😉
lolipok — вы правы простАту надо беречь 🙂