Как известно, в 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-соединения в Windows

17 мыслей о “Автоматический дозвон VPN-соединения в Windows

  • 29.05.2018 в 14:14
    Постоянная ссылка

    Спасибо. Очень много перерыл, но более простого и рабочего как в этой заметке не нашел.

    Ответ
  • 21.08.2018 в 13:46
    Постоянная ссылка

    Использую VPN немного для другой цели — для доступа к домашней и дачной сети извне.
    У меня нет «белого IP» и приобрести его невозможно у текущего оператора.
    DDNS работает, но и это бесполезно, потому что соединения извне тупо закрыты провайдером.
    Поэтому использую вот такой VPN сервис — (реклама) Они не предоставляют выход в интернет, но объединяют мои туннели — один с дачи, другой с смартфона.
    Вдруг кому-то это поможет.

    Ответ
    • 03.05.2020 в 14:09
      Постоянная ссылка

      Его нужно запускать не в командной строке, а пакетным файлом или в планировщике.

      Ответ
  • 04.02.2019 в 18:56
    Постоянная ссылка

    Когда у меня ещё небыло роутера и провод с интернетом был воткнут в комп, я убрал галочки в параметрах соединения:
    Отображать ход подключения
    Запрашивать имя, пароль, сертификат и т. д.

    и оставил:
    Включать домен входа в Windows
    Перезвонить при разрыве связи

    А ярлык соединения перетащил в пуск — автозапуск и и при входе в систему сразу шел дозвон. Такой вот ламер вэй)
    Описанный в статье способ гороздо грамотней — админ вэй.

    Ответ
  • 15.02.2019 в 17:46
    Постоянная ссылка

    «Запуск от имени системы позволяет скрыть консольные окна и дозвон можно будет увидеть разве что в процессах и по запущенной задаче в планировщике.» — я импортировал ваш xml при создании задачи планировщика (изменил только своё название и логин с пассом) и все равно при загрузке юзера на рабочий стол вылетает консольное окно и отображает каждые 5 секунд скрипт. Поставил в настройках задания галочку Hidden — все равно видно консольное окно..

    Ответ
    • 15.02.2019 в 18:28
      Постоянная ссылка

      да, забыл сразу сказать — Win7 64-bit Ultimate, все обновления (включая сегодняшний вам UpdatePack7R2, огромное вам за него спасибо, каждый месяц жду его выпуска)

      Ответ
      • 15.02.2019 в 18:47
        Постоянная ссылка

        Убедитесь, что задача выполняется от имени системы, иначе это может означать, что под системной записью работаете вы — такое может быть, например, при повреждённом профиле.

        Ответ
  • 26.12.2019 в 23:24
    Постоянная ссылка

    Спасибо большое, работает, но пару раз в день соединение остается в состоянии «подключено», но трафик через него не идет, приходилось отключать вручную, после чего скрипт восстанавливал связь.
    Немного модифицировал, получил такое:

    cmd /c start cmd /c "for /l %x in (0,0,0) do (rasdial VPNName UserName Password & ping -n 1 192.168.0.1 |>nul find /i "TTL=" && (timeout 5) || (rasdial VPNName /disconnect))"

    В начале цикла устанавливается соединение (или проверяется его состояние), затем отправляем пинг в удаленную сеть, если не проходит, значит надо разорвать соединение, если проходит, то ждем 5 секунд.

    Ответ
    • 03.05.2020 в 14:15
      Постоянная ссылка

      Можно и так, но я бы вместо поиска TTL проверял ErrorLevel пинга.
      И три запроса (ping -n 3) будет гораздо надёжнее.

      Ответ
    • 07.02.2024 в 16:49
      Постоянная ссылка

      По ходу мастера настройки обязательно нужно отметить «Разрешить использовать это подключение другим пользователям», так как дозваниваться мы будем от имени системы.

      Вероятно вы пропустили этот пункт.

      Ответ
  • 27.04.2024 в 13:35
    Постоянная ссылка

    Не могу понять в чем причина. Ваш скрип прекрасно работает но только от имени администраторов и ествественно с консолью, которую приходится сворачивать. Проверял на рабочем сервере 2016, который работает с доменной учеткой — но у него права администратора домена. Пробовал на windows 7 домашнем — с тем же результатом.
    Т.е. от системы даже если поставить галку — выполнять с наивысшими правами. он вроде как запускается, но ничего н делает.
    Что я делаю не так?
    Могу дасть доступ по энидеску к домашнему компу, чтоб Вы мне тыкнули пальцем, где я не прав. Просто я помоему уже все перепробовал. Все хорошо работает, кроме консольного окна, которое висит.

    Ответ

Добавить комментарий для simplix Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *