Как известно, в Windows из коробки напрочь отсутствует способ автоматического дозвона, в частности установления надёжного соединения по VPN, чтобы оно не разрывалось никогда, и всегда восстанавливалось в случаях временного исчезновения интернета. Такая возможность давно есть в роутерах, например Mikrotik, но что делать, если в сети такого роутера нет и соединение необходимо поднять на Windows, причём исключительно средствами системы? Для этого нам на помощь приходит планировщик заданий и команда бесконечного дозвона из командной строки.
Первое, что нужно сделать — создать само VPN-соединение с нужными нам настройками, назовём его SmartVPN. По ходу мастера настройки обязательно нужно отметить «Разрешить использовать это подключение другим пользователям», так как дозваниваться мы будем от имени системы.
В параметрах соединения убираем галочки:
- Отображать ход подключения
- Запрашивать имя, пароль, сертификат и т. д.
- Включать домен входа в Windows
- Перезвонить при разрыве связи
При необходимости убираем использование основного шлюза в удалённой сети и корректируем другие настройки.
Второй этап состоит из создания задачи по запуску бесконечного цикла, который будет проверять и восстанавливать соединение, если оно не подключено. Для этого в планировщике создаём задачу, которая будет запускаться при включении компьютера и запускаться от имени системы, а действием указываем запуск программы:
cmd /c "for /l %x in (0,0,0) do (rasdial SmartVPN Login Pass & timeout 5)"
Где cmd — программа командной строки, а остальное — её параметры, при этом SmartVPN — название соединения, Login и Pass — логин и пароль для дозвона соответственно.
Команда timeout делает паузу в 5 секунд перед следующей попыткой дозвона, при этом если соединение уже установлено, то ничего не произойдёт. Также timeout не существует на WinXP/2003, так что если вы где-то её используете, нужно будет городить замену через ping. Запуск от имени системы позволяет скрыть консольные окна и дозвон можно будет увидеть разве что в процессах и по запущенной задаче в планировщике. Существует не консольная программа дозвона rasphone, где пароль указывать не нужно (будет использован сохранённый в системе для этого соединения), но пользоваться ей никак нельзя — при ошибках она будет выводить графические сообщения и дозвон прекратится.
P. S. Если вы хотите сделать так, чтобы задача не висела в планировщике в статусе работы, замените «cmd /c» в начале команды на «cmd /c start cmd /c», таким образом процесс дозвона дальше не будет зависеть от планировщика.
Готовый xml-файл задачи для импорта: SmartVPN.xml [3 KB]
Спасибо!
Спасибо. Очень много перерыл, но более простого и рабочего как в этой заметке не нашел.
Использую VPN немного для другой цели — для доступа к домашней и дачной сети извне.
У меня нет «белого IP» и приобрести его невозможно у текущего оператора.
DDNS работает, но и это бесполезно, потому что соединения извне тупо закрыты провайдером.
Поэтому использую вот такой VPN сервис — (реклама) Они не предоставляют выход в интернет, но объединяют мои туннели — один с дачи, другой с смартфона.
Вдруг кому-то это поможет.
M:\>cmd /c «for /l x in (0,0,0) do (rasdial fregat krg-2229630 m79h2k & timeout 20)»
Непредвиденное появление: x.
Его нужно запускать не в командной строке, а пакетным файлом или в планировщике.
Когда у меня ещё небыло роутера и провод с интернетом был воткнут в комп, я убрал галочки в параметрах соединения:
Отображать ход подключения
Запрашивать имя, пароль, сертификат и т. д.
и оставил:
Включать домен входа в Windows
Перезвонить при разрыве связи
А ярлык соединения перетащил в пуск — автозапуск и и при входе в систему сразу шел дозвон. Такой вот ламер вэй)
Описанный в статье способ гороздо грамотней — админ вэй.
«Запуск от имени системы позволяет скрыть консольные окна и дозвон можно будет увидеть разве что в процессах и по запущенной задаче в планировщике.» — я импортировал ваш xml при создании задачи планировщика (изменил только своё название и логин с пассом) и все равно при загрузке юзера на рабочий стол вылетает консольное окно и отображает каждые 5 секунд скрипт. Поставил в настройках задания галочку Hidden — все равно видно консольное окно..
да, забыл сразу сказать — Win7 64-bit Ultimate, все обновления (включая сегодняшний вам UpdatePack7R2, огромное вам за него спасибо, каждый месяц жду его выпуска)
Убедитесь, что задача выполняется от имени системы, иначе это может означать, что под системной записью работаете вы — такое может быть, например, при повреждённом профиле.
Спасибо большое, работает, но пару раз в день соединение остается в состоянии «подключено», но трафик через него не идет, приходилось отключать вручную, после чего скрипт восстанавливал связь.
Немного модифицировал, получил такое:
В начале цикла устанавливается соединение (или проверяется его состояние), затем отправляем пинг в удаленную сеть, если не проходит, значит надо разорвать соединение, если проходит, то ждем 5 секунд.
Можно и так, но я бы вместо поиска TTL проверял ErrorLevel пинга.
И три запроса (ping -n 3) будет гораздо надёжнее.
к сожалению в 10тке почему-то не работает запуск от лица системы…
Вероятно вы пропустили этот пункт.
На 7-мерке это работает? а то никак заставить не могу
С утра работало.
Не могу понять в чем причина. Ваш скрип прекрасно работает но только от имени администраторов и ествественно с консолью, которую приходится сворачивать. Проверял на рабочем сервере 2016, который работает с доменной учеткой — но у него права администратора домена. Пробовал на windows 7 домашнем — с тем же результатом.
Т.е. от системы даже если поставить галку — выполнять с наивысшими правами. он вроде как запускается, но ничего н делает.
Что я делаю не так?
Могу дасть доступ по энидеску к домашнему компу, чтоб Вы мне тыкнули пальцем, где я не прав. Просто я помоему уже все перепробовал. Все хорошо работает, кроме консольного окна, которое висит.
Скорее всего это. Добавлять нужно через старую «Панель управления\Сеть и Интернет\Центр управления сетями и общим доступом».
Что добавлять, непонятно. В соединение что-то?
VPN-соединение добавлять, о чём ещё может идти речь в статье про дозвон VPN-соединения? Внимательно прочитайте мой ответ и статью в целом.