AutoRedial для VPN з'єднань Windows 8/2008/10/2012

C подивом, правда невеликим, виявив, що в Windows, починаючи з версії 8 і в Windows Server, починаючи з 2008, Microsoft злегка "допрацював напилком" діалог налаштувань VPN з'єднання. Точніше, урізав настроюються параметри на вкладці Options. Замість того, що було звично в Windows 7 і виглядало як:

Тепер прибрали практично всі і залишили тільки:

І виникло закономірне питання-а як тепер налаштувати автоматичне перепідключення і кількість спроб повтору з'єднання якщо зв'язок урветься?

Методів кілька. Давайте по порядку. У міру зростання, так би мовити, складності.

Метод 1 - використовуємо Notepad:

Встановити потрібні параметри вручну. Для цього необхідно перейти в папку

C: \ Users \[USER]\ AppData \ Roaming \ Microsoft \ Network \ Connections \ Pbk \

Знайти там (швидше за все єдиний) файлик з ім'ям rasphone.pbk. Це звичайний текстовий файл, содерржащій настройки підключення до VPN

Файл можна відкрити за допомогою notepad.exe (Блокнот)

У загальному випадку, необхідно відшукати секцію, що містить ваш VPN - наприклад, такий [PPTP-VPN]

А в ній відшукати рядки (TADA!) / Якщо нічого не міняли, то виглядати буде приблизно так:

RedialAttempts = 3
RedialSeconds = 60
IdleDisconnectSeconds = 0
RedialOnLinkFailure = 1

Тобто знову "Microsoft за вас подумали і все вирішив".

Але тепер ви знаєте, де шукати і міняти необхідні параметри.

  • RedialAttempts= 3 - кількість спроб пере-підключитися (максимум 99)
  • RedialSeconds= 60 - кількість секунд між спробами пере-підключитися
  • IdleDisconnectSeconds= 0 - скільки вичікувати, щоб зрозуміти що лінія обірвалася (0 - не чекати зовсім)
  • RedialOnLinkFailure= 1 - перенабрати, якщо зв'язок обірвався? 1 - так, 0 - немає

Щоб параметри застосувались, необхідно, як і раніше, перепідключити VPN.

А потім вірити, що Microsoft Windows все зробить за вас 🙂

Примітка: Помічено, що Windows Server 2012 може, за власною ініціативою, використовувати папку C: \ Users \ [USER] \ AppData \ Roaming \ Microsoft \ Network \ Connections \ Pbk \ _hiddenPbk і покласти файл rasphone.pbk в цю папку.

Метод 2 - налаштовуємо найпростішу задачу:

Створити в Task Scheduler завдання, яка буде запускати bat-файл з рядком підключення до необхідного VPN і налаштувати цю задачу, на запуск, скажімо, кожні 5 хвилин.

Нагадаю, командний рядок для підключення VPN з'єднання виглядає так

C: \ windows \ system32 \ rasdial.EXE entryname [username [password | *]] [/ DOMAIN: domain]

Там ще параметри є, але їх, якщо цікаво, подивіться самі.

У задачі не забуваємо вказати, що "запускати завжди"

Вказати виконуваний файл, наприклад, такий

Або сказати, щоб запускався rasdial.exe (VPN User Password - це назва вашого VPN-з'єднання имя_пользователя і ваш_пароль)

Примітка. Як користуватися утилітою rasdial ми вже показували в статті Автозапуск VPN підключення

Запускати, з інтервалом 5 хвилин, кожен день.

Метод 3. Налаштовуємо завдання "з вивертами":)

  1. Створюємо завдання в Task Scheduler
  2. Визначаємо в завданні два тригера. Один з використанням XML запиту (по аналогії із статтею Запуск завдання планувальника після завершення певного завдання)
  * [System [Provider [@ Name = 'RasClient'] and (EventID = 20226)]] and * [EventData [Data [4] = '829' or '629']]   
Примітка. коди: 829 - Remote Disconnect, 629 -Client Disconnect

Другий на базі відстеження події в Event Log'e:

  • Назва балки: Microsoft-Windows-NetworkProfile / Operational
  • Джерело: NetworkProfile
  • Event ID: 10000
  • Як запускається програми, вибираємо rasdial.exe з параметрами vpn-name username password
  • Додатково, на вкладці Conditions, можна доопределить наступні параметри

Примітка: Щоб переконатися запрацює таке завдання чи ні, створіть ще один тригер з Event ID = 10001. Етoт Event з'являється при ручному відключенні (disconnet) VPN. Після цього спробуйте вручну відключити VPN. З'єднання відразу ж буде відновлено.

Ну ось, власне і все.

Примітка Все описане працює і в Windows 7

Далі під спойлером привожу, без перекладу, довге, докладне і нудно описувалося Методу 1 і 3 на англійській мові, взяте з форуму Technet.

Had this problem for a few weeks but finally got a chance to spend some time on it last night. Came across this thread ... .My guess is that with Microsoft making the VPN connection RT-Like, they missed part of the dialog or put it that way for RT Tablets with the thought that you would not want the VPN reconnecting and using up data / battery. Of course they missed the point of keeping it for desktops ...

Anyways I was hoping that the dialogs info was missed by the actual code was not as is the case sometimes. Looked promising when I checked the VPN config and found the settings generated in a Windows 8 connection. Unfortunately while the settings are enabled for redial, the redial function does not work. I tried establishing a VPN connection with rasdial though dos but still no luck. Just occurred to me as I'm typing this email that I may try renaming the rasdial.pbk and loading it with the Rasdial comment to establish a VPN connection, maybe it will use the settings. Will give it a try later.

The C: \ Users \ Joe \ AppData \ Roaming \ Microsoft \ Network \ Connections \ Pbk \ rasphone.pbk actually has the redial settings enabled in it ...

RedialAttempts = 3
RedialSeconds = 60
IdleDisconnectSeconds = 0
RedialOnLinkFailure = 1 (This is set to one in Windows 7 when you enable the Redial checkbox)

In case anyone is interested, came up with a fairly good workaround last night until MS releases an update to put the settings back. I like this solution better than running a 3rd party solution to try to keep the VPN up. You can setup a Task Schedule job to trigger on a disconnect. I gave it a try last night and the VPN immediately reconnected. I'm checking for client / remote disconnect error codes excluding the «user disconnect» code to avoid it reconnecting when you actually want to disconnect. These are just two error codes I noted in the event log, MS lists a lot more error codes but I have not experienced them on disconnects though they could be added. If anyone uses this and thinks more codes should be added please update the xml query or let me know and I'll update it. Forgive the XML query, not something I usually do so if it can be formatted better, let me know ... for learning 😉

Here is a list of some error codes (this is not complete for Win8 but I did not spend much time searching)

How to setup a Scheduled Task to Trigger on a VPN Disconnect

  1. Click Windows8 Start and type Schedule Task (open it under Settings)
  2. Click Create Task
  3. Apply the following settings in the specified Tabs (italics describes each setting)

General Tab

Name: VPN Redial
For descriptive use, you can use any name you want like My Company VPN Redial ... .whatever ...

Select: Run whether user is logged on or not
Provided you have a password associated to your login account, this option will prevent the dos window from opening everytime the job runs. If you do not have a password, leave it and see the notes below these steps.
Triggers Tab

Click New button
To create a new trigger we will use to activate the job when the VPN connect disconnects

Begin the task: On an Event
The job will be triggered by an Application event log entry

Select: Custom
Custom gives us the flexibility of creating a more detailed query

Click New Event Filter ... button
Here is where we build the query for the trigger

Click the XML tab
This tab allows us to write our own query (even more flexible)

Check Edit query manually
To start a manual edit

Copy the following query
This query will trigger on an Application Event for RasClient with an EventID of 20226 and error codes 829 (Remote Disconnect), 629 (Client Disconnect). Copy from and including to



* [System [Provider [@ Name = 'RasClient'] and (EventID = 20226)]] and * [EventData [Data [4] = '829' or '629']]

Click OK

Ensure Enabled is checked
Check it if it's not checked to make sure the job will be enabled

Click Ok

Actions Tab

Click New
To create an action to be performed when the job is triggered

Action: Start a program
Selection this option will allow us to start rasdial to reestablish the VPN connection

Program / script: rasdial
Should already be in path so just enter rasdial command

Add arguments (optional): «VPN Name» username password
VPN name is the name you defined for your dialup connection. Example, when you click the network icon in the system tray, the name that's listed for your VPN, make sure you enter it in exactly as displayed. Following the connect would be your username and password. Example, «MY VPN Connection» username password

Click Ok

Conditions Tab (not required unless you are using a laptop)

Settings TAB

Enable: If the task fails, restart every: 1 minute
In case there is a temporary issue re-establishing the VPN connection. You can specify whatever value you want instead of 1 minute

Attempt to restart up to: 7 times
Again in case there is a temporary issue re-establishing the VPN connection. You can specify whatever value you want instead of 7 times

Click Ok
Notes

  1. Have not really tested this much but I had configured it last night, woke up this morning to find the Event log showing 4 disconnects, and the job redialed all 4 times, VPN connection was still active.
  2. In the General Tab we enabled «Run whether user is logged on or not. This is a non issue since there will not be a VPN connection when you're not logged in. What this option does since we are running a dos (rasdial) command, it prevent a dos window from opening every time the job runs so you will not be distracted if you're in the middle of something. This option only works if you have a password (which you should) associated with your account. If you do not and just allow your computer to boot to desktop, the option will not work. What I've done for people in these situations is created a little VBScript wrapper to launch the dos command to avoid the dos prompt. Not really an issue unless you're anal about it like me, you could simply deal with the Dos window opening up.
  3. Again the query checks the event log for a new Entry for RasClient with an event id of 20226 containing error codes 820 or 620. you can add additional error codes by repeating the pattern. Example to also trigger on 222 and 333 you would modify the relevant part of the line as such * [EventData [Data [4] = '829' or '629' or '222' or '333']]

    .