VPN через CMD: настройка и управление подключениями в Windows

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

Зачем управлять VPN через командную строку

Графический интерфейс Windows для настройки VPN часто разрознен: часть параметров находится в «Параметрах», часть — в «Панели управления», а некоторые опции вообще скрыты. Командная строка и PowerShell предлагают единый и более гибкий способ управления VPN-подключениями. Это особенно полезно для системных администраторов, которым нужно настроить десятки компьютеров, или для продвинутых пользователей, желающих автоматизировать рутинные задачи.

Использование команд позволяет:

  • создавать подключения с точными параметрами без риска ошибиться в графическом интерфейсе;
  • быстро изменять настройки существующих подключений;
  • автоматизировать подключение и отключение через скрипты;
  • управлять маршрутами и другими сетевыми параметрами.

В этой статье мы рассмотрим основные команды для работы с VPN в Windows, включая rasdial, netsh, а также более мощные командлеты PowerShell. Вы узнаете, как создавать, изменять, удалять подключения, добавлять маршруты и автоматизировать весь процесс.

Основные команды для работы с VPN в Windows

В Windows есть несколько встроенных инструментов для управления VPN из командной строки. Самые распространённые — rasdial и netsh. rasdial используется для подключения и отключения существующих VPN-профилей, а netsh позволяет просматривать сетевые интерфейсы и управлять ими.

Команда rasdial

rasdial — это классическая команда для работы с удалёнными подключениями. Она позволяет подключиться к VPN, указав имя профиля, логин и пароль:

rasdial "Имя подключения" логин пароль

Например:

rasdial "Work VPN" user123 pass456

Если учётные данные сохранены в профиле, можно опустить логин и пароль:

rasdial "Work VPN"

Для отключения используется ключ /disconnect:

rasdial "Work VPN" /disconnect

Если выполнить rasdial без параметров, она покажет список активных подключений и возможные ошибки.

Команда netsh

netsh — более мощный инструмент для настройки сети. Чтобы просмотреть все сетевые интерфейсы, включая VPN, выполните:

netsh interface show interface

Эта команда выведет список интерфейсов с их состоянием. Однако для создания и настройки VPN-подключений netsh имеет ограниченные возможности, поэтому чаще используют PowerShell.

Создание VPN-подключения через PowerShell

PowerShell предоставляет командлеты для полного управления VPN-подключениями. Основной командлет для создания — Add-VpnConnection. Он доступен начиная с Windows 8 и Windows Server 2012.

Минимальный синтаксис:

Add-VpnConnection -Name "Моё подключение" -ServerAddress "vpn.example.com"

Однако для надёжного и безопасного подключения стоит указать дополнительные параметры:

  • -TunnelType — тип туннеля: Pptp, L2tp, Sstp, Ikev2 или Automatic.
  • -EncryptionLevel — уровень шифрования: NoEncryption, Optional, Required, Maximum.
  • -AuthenticationMethod — метод аутентификации: Pap, Chap, MSChapv2, Eap, MachineCertificate.
  • -L2tpPsk — предварительный общий ключ для L2TP.
  • -SplitTunneling — включает раздельное туннелирование (не весь трафик идёт через VPN).
  • -RememberCredential — запоминать учётные данные.
  • -UseWinlogonCredential — использовать учётные данные входа в Windows.
  • -AllUserConnection — создать подключение для всех пользователей.

Пример создания PPTP-подключения:

Add-VpnConnection -Name "PPTP VPN" -ServerAddress "192.168.1.100" -TunnelType Pptp -EncryptionLevel Required -AuthenticationMethod MSChapv2 -RememberCredential -SplitTunneling -PassThru

Параметр -PassThru выводит информацию о созданном подключении, а -Force подавляет запросы подтверждения.

Настройка различных типов VPN-туннелей

В зависимости от протокола VPN, настройки могут отличаться. Рассмотрим создание подключений для основных типов.

PPTP

PPTP — устаревший, но быстрый протокол. Для повышения безопасности используйте MS-CHAP v2 и шифрование Required:

Add-VpnConnection -Name "PPTP VPN" -ServerAddress "vpn.example.com" -TunnelType Pptp -EncryptionLevel Required -AuthenticationMethod MSChapv2 -RememberCredential -SplitTunneling -PassThru

L2TP/IPsec

Для L2TP часто используется общий ключ (PSK). Укажите его через параметр -L2tpPsk:

Add-VpnConnection -Name "L2TP VPN" -ServerAddress "vpn.example.com" -TunnelType L2tp -L2tpPsk "MySecretKey" -Force -EncryptionLevel Required -AuthenticationMethod MSChapv2 -SplitTunneling -RememberCredential -PassThru

Ключ -Force предотвращает запрос о передаче ключа в открытом виде.

SSTP

SSTP требует, чтобы сертификат сервера был доверенным. Импортируйте корневой сертификат CA в хранилище компьютера и используйте FQDN-имя сервера:

Add-VpnConnection -Name "SSTP VPN" -ServerAddress "sstp.example.com" -TunnelType Sstp -EncryptionLevel Required -AuthenticationMethod MSChapv2 -RememberCredential -SplitTunneling -PassThru

IKEv2

IKEv2 часто использует сертификаты для аутентификации. Импортируйте сертификаты CA и пользователя, затем создайте подключение:

Add-VpnConnection -Name "IKEv2 VPN" -ServerAddress "vpn.example.com" -TunnelType Ikev2 -EncryptionLevel Required -AuthenticationMethod MachineCertificate -SplitTunneling -PassThru

Обратите внимание, что при использовании MachineCertificate параметр -RememberCredential не нужен, так как аутентификация происходит по сертификату.

Изменение и удаление VPN-подключений

Для изменения параметров существующего подключения используется командлет Set-VpnConnection. Он принимает те же параметры, что и Add-VpnConnection, но требует указать имя подключения через -Name.

Например, чтобы изменить адрес сервера:

Set-VpnConnection -Name "PPTP VPN" -ServerAddress "new.vpn.example.com"

С булевыми параметрами, такими как -RememberCredential, нужно явно указывать значение $True или $False:

Set-VpnConnection -Name "PPTP VPN" -RememberCredential $True

Для удаления подключения используйте Remove-VpnConnection:

Remove-VpnConnection -Name "PPTP VPN"

Параметр -Force позволяет удалить без запроса подтверждения, но будьте осторожны: вы можете случайно удалить не то подключение.

Чтобы просмотреть все VPN-подключения, выполните:

Get-VpnConnection

Для получения информации о конкретном подключении:

Get-VpnConnection -Name "PPTP VPN"

Автоматизация подключения и отключения VPN

Командная строка позволяет автоматизировать подключение и отключение VPN с помощью пакетных файлов (.bat) или скриптов PowerShell. Это удобно для быстрого переключения между сетями или для настройки автоматического запуска.

Пакетный файл для подключения

Создайте файл vpn-connect.bat со следующим содержимым:

@echo off
rasdial "Work VPN" user123 pass456

Для отключения создайте vpn-disconnect.bat:

@echo off
rasdial "Work VPN" /disconnect

Скрипт PowerShell

Более гибкий подход — использовать PowerShell. Например, скрипт для подключения:

$connectionName = "Work VPN"
$username = "user123"
$password = "pass456"
rasdial $connectionName $username $password

Можно также использовать командлет rasdial прямо из PowerShell.

Запуск по расписанию

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

  1. Откройте Планировщик задач (taskschd.msc).
  2. Создайте новую задачу, укажите триггер «При входе в систему» или «При запуске».
  3. В действии укажите путь к вашему скрипту.

Убедитесь, что скрипт запускается с правами администратора, если это требуется.

Добавление маршрутов для VPN-подключения

Иногда необходимо, чтобы при подключении к VPN автоматически добавлялись маршруты для определённых сетей. В Windows это можно сделать с помощью командлета Add-VpnConnectionRoute.

Синтаксис:

Add-VpnConnectionRoute -ConnectionName "L2TP VPN" -DestinationPrefix 192.168.111.0/24 -PassThru

Эта команда добавит маршрут к сети 192.168.111.0/24 через VPN-подключение. Если нужно несколько маршрутов, выполните команду несколько раз.

Для удаления маршрута используйте Remove-VpnConnectionRoute:

Remove-VpnConnectionRoute -ConnectionName "L2TP VPN" -DestinationPrefix 192.168.111.0/24

Это особенно полезно, когда VPN используется только для доступа к определённым ресурсам, а остальной трафик идёт через обычное подключение (split tunneling).

Использование сторонних утилит: SetVPN

Помимо встроенных средств, существуют сторонние утилиты для управления VPN из командной строки. Одна из них — SetVPN.exe, которая позволяет создавать и настраивать VPN-подключения в Windows, включая старые версии (Windows 7, XP).

SetVPN поддерживает множество параметров, аналогичных PowerShell, но работает через обычную командную строку. Основные ключи:

  • /add — создать новое подключение.
  • /delete — удалить подключение.
  • /name="Имя" — задать имя подключения.
  • /servername="адрес" — адрес VPN-сервера.
  • /username="логин" и /password="пароль" — учётные данные.
  • /vs_PptpOnly, /vs_L2tpOnly, /vs_SstpOnly, /vs_Ikev2Only — выбор типа туннеля.
  • /UsePSK="ключ" — задать PSK для L2TP.
  • /encryption_required — обязательное шифрование.

Пример создания L2TP-подключения с PSK:

setvpn /name="L2TP VPN" /add /servername="vpn.example.com" /username="user" /password="pass" /vs_L2tpOnly /UsePSK="MyPSK" /encryption_required

Утилита также позволяет просматривать список подключений (/list), сохранять логин (/viewlogin) и работать с PBK-файлами. Однако для современных версий Windows (8/10/11) рекомендуется использовать PowerShell, так как SetVPN имеет ограничения в настройке через GUI.

Диагностика и устранение неполадок

При работе с VPN через командную строку могут возникать ошибки. Рассмотрим основные способы диагностики.

Проверка статуса подключения

Используйте rasdial без параметров, чтобы увидеть активные подключения и ошибки. Также можно выполнить ipconfig /all, чтобы проверить, назначен ли VPN-адаптеру IP-адрес.

Проверка доступности сервера

Выполните ping адрес_сервера, чтобы убедиться, что сервер доступен. Если пакеты не проходят, проверьте сетевые настройки и брандмауэр.

Автоматическая проверка и переподключение

Можно создать скрипт, который проверяет доступность сервера и при необходимости переподключает VPN. Пример на PowerShell:

if (!(Test-Connection -ComputerName "vpn.example.com" -Count 1 -Quiet)) {
    rasdial "Work VPN" /disconnect
    Start-Sleep -Seconds 5
    rasdial "Work VPN" user pass
}

Этот скрипт можно запускать по расписанию или в цикле.

Типичные ошибки

  • Ошибка 691: неверное имя пользователя или пароль.
  • Ошибка 720: проблемы с протоколом TCP/IP.
  • Ошибка 800: не удалось установить соединение, возможно, из-за блокировки порта.

Для получения подробной информации об ошибке используйте rasdial без параметров или просмотрите журнал событий Windows.

Безопасность и рекомендации

При использовании VPN через командную строку важно соблюдать меры безопасности.

  • Избегайте хранения паролей в открытом виде в скриптах. Используйте переменные окружения или безопасное хранение, например, Windows Credential Manager.
  • Используйте современные протоколы (IKEv2, SSTP) вместо устаревших PPTP, если это возможно.
  • Включайте шифрование на уровне Required или Maximum.
  • Ограничьте split tunneling — если VPN нужен только для доступа к определённым ресурсам, настройте маршруты, чтобы не весь трафик шёл через VPN.
  • Регулярно обновляйте Windows и используйте антивирусное ПО.

Также помните, что командная строка не защищает от всех угроз. VPN — это лишь часть общей стратегии безопасности.

Вопросы и ответы

Как подключиться к VPN через командную строку Windows?

Для подключения к уже созданному VPN-профилю используйте команду rasdial "Имя подключения" логин пароль. Если учётные данные сохранены, можно просто rasdial "Имя подключения". Для отключения — rasdial "Имя подключения" /disconnect.

Как создать VPN-подключение через CMD?

В чистом CMD нет встроенной команды для создания VPN-подключения, но можно использовать PowerShell, вызвав его из CMD: powershell -Command "Add-VpnConnection -Name 'MyVPN' -ServerAddress 'vpn.example.com'". Также можно использовать сторонние утилиты, например SetVPN.

Как посмотреть список VPN-подключений в Windows?

Выполните в PowerShell команду Get-VpnConnection. Она покажет все VPN-подключения, доступные текущему пользователю. Для просмотра подключений всех пользователей используйте Get-VpnConnection -AllUserConnection.

Как автоматически подключаться к VPN при запуске Windows?

Создайте пакетный файл с командой rasdial "Имя" логин пароль и поместите его в папку автозагрузки (Win+R, shell:startup). Либо используйте Планировщик задач, чтобы запускать скрипт при входе в систему.

Как добавить маршрут для VPN-подключения через командную строку?

Используйте PowerShell командлет Add-VpnConnectionRoute -ConnectionName "Имя" -DestinationPrefix 192.168.1.0/24. Это добавит маршрут к указанной сети через VPN. Для удаления маршрута используйте Remove-VpnConnectionRoute.

Что делать, если rasdial выдаёт ошибку 691?

Ошибка 691 означает неверное имя пользователя или пароль. Проверьте правильность учётных данных, а также убедитесь, что они не содержат лишних пробелов. Если пароль был изменён, обновите его в профиле VPN.

Можно ли использовать CMD для настройки OpenVPN?

Да, OpenVPN можно запускать из командной строки с помощью команды openvpn --config путь\к\файлу.ovpn. Для автоматизации можно создать .bat-файл или использовать планировщик задач.