Добавить маршрут в windows 10 для vpn

В современных версиях Windows есть интересная возможность автоматического добавления статических маршрутов при активации определённого VPN подключения. Когда VPN подключение разрывается, данный маршрут автоматически удаляется из таблицы маршрутизации Windows. Для добавления IPv4 или IPv6 маршрута для VPN подключения используется PowerShell командлет Add-VpnConnectionRoute.

Вы конечно, можете вручную в командной строке добавлять нужные маршруты для VPN подключения, но главная проблема в том, что такие маршруты очищаются после отключения от VPN. Поэтому при следующем подключении, вам придется опять руками прописывать маршруты.

Допустим, вы хотите, чтобы через ваше VPN подключение маршрутизировались только пакеты для двух подсетей (192.168.111.24/ и 10.1.0.0/16), а весь основной трафик должен идти через вашего провайдера.

Откройте консоль PowerShell и выведите список всех настроенных VPN подключений в Windows:

Get-VpnConnection

Get-VpnConnection вывести список vpn подключений

В первую очередь нужно отключить опцию “Use default gateway in remote network” (Использовать основной шлюз в удаленной сети). Это можно сделать в свойствах VPN подключения в панели управления или командой:

Set-VpnConnection –Name workVPN -SplitTunneling $True

Подробнее про SplitTunneling здесь.

отключить опцию "Использовать основной шлюз в удаленной сети" для VPN подключений

Добавим два статических маршрута для нашего VPN-соединения:

Add-VpnConnectionRoute -ConnectionName "workVPN" -DestinationPrefix 192.168.111.0/24 –PassThru
Add-VpnConnectionRoute -ConnectionName "workVPN" -DestinationPrefix 10.1.0.0/16 –PassThru

В параметре DestinationPrefix нужно указать подсеть, или конкретный IP адрес хоста, трафик к которому нужно маршрутизировать через VPN. Для добавления одного IP адреса используйте формат 10.1.1.26/32.

Add-VpnConnectionRoute добавить статический маршрут для vpn подключения

DestinationPrefix : 192.168.111.0/24
InterfaceIndex :
InterfaceAlias : workVPN
AddressFamily : IPv4
NextHop : 0.0.0.0
Publish : 0
RouteMetric : 1

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

таблица маршрутизации при активном vpn в windows 10

Новые маршруты привязаны к VPN подключению и добавляются при его запуске. Когда вы отключаетесь от VPN сервера, маршруты автоматически удаляются.

Отключитесь от VPN и проверьте таблицу маршрутизации. Маршрут к вашей удаленной сети удалился автоматически, а Get-NetRoute вернет, что маршрут не найден:

Get-NetRoute : No MSFT_NetRoute objects found with property 'DestinationPrefix' equal to '192.168.111.0/24'. Verify the value of the property and retry. CmdletizationQuery_NotFound_DestinationPrefix,Get-NetRoute

маршут автоматически удаляется после отключения от vpn сервера в windows 10

Вывести список статических маршрутов для подключения:
(Get-VpnConnection -ConnectionName workVPN).Routes

Чтобы полностью удалить статических маршрут для VPN подключения, используйте команду:
Remove-VpnConnectionRoute -ConnectionName workVPN -DestinationPrefix 192.168.111.0/24 -PassThru

Если вам нужно изменить порядок разрешения DNS имен при активном VPN, познакомьтесь со статьей.

В предыдущих версиях Windows (Windows 7/ Server 2008R2) для динамического добавления маршрутов после установления VPN подключений приходилось использовать CMAK и различные скрипты с командами
add route
.

Например, можно создать командный файл vpn_route.netsh для добавления маршрутов.

interface ipv4
add route prefix=192.168.111.24 interface="workVPN" store=active
add route prefix=10.1.0.0/16 interface="workVPN" store=active
exit

Данный файл нужно запускать через задание планировщика, которое срабатывает на событие установки VPN подключения в Event Viewer (RasMan 20225)

schtasks /create /F /TN "Add VPN routes" /TR "netsh -f C:\PS\vpn_route.netsh" /SC ONEVENT /EC Application /RL HIGHEST /MO "*[System[(Level=4 or Level=0) and (EventID=20225)]] and *[EventData[Data='My VPN']]"

Add-VPNConnectionRoute-000.pngВ последнее время значительно вырос интерес к технологиям удаленного доступа для обеспечения работы сотрудников из любого места. Ключевую роль здесь играет VPN, как универсальное и безопасное средство для получения доступа во внутреннюю сеть предприятия. Наиболее привлекательно использовать для этого те протоколы, которые штатно поддерживаются в Windows, что позволяет организовать соединение на любом ПК без установки на него стороннего ПО. Но у данного способа есть одна проблема — добавление маршрутной информации, сегодня мы рассмотрим один из штатных способов, позволяющих легко управлять маршрутами для VPN-соединений.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Стандартные сетевые возможности Windows многим хороши, кроме одного — управление маршрутами для VPN-соединений. Именно это заставляло многих системных администраторов выбирать альтернативные технологии, например, OpenVPN, но это не совсем удобно если речь идет о личных устройствах сотрудников, так как требует установки дополнительного ПО, что, к тому же, не всегда возможно. Кроме того, мы неоднократно сталкивались с ситуациями, когда пользователи удаляли данное ПО, устанавливали конфликтующие приложения, теряли ярлыки для подключения, блокировали его антивирусным ПО и т.д. и т.п.

Подключение средствами ОС в этом плане более привлекательно, так как позволяет снять большую часть указанных выше проблем и подразумевает единообразие пользовательского интерфейса, что позволяет сделать простые и понятные инструкции.

Но вернемся к нашему вопросу. Для добавления маршрутов в удаленную сеть традиционно использовали несколько методов:

  • Статическая маршрутизация — на первый взгляд все просто, что прописали руками — то и работает. Но добавление маршрутов требует привилегий администратора, не всегда возможно заранее прописать маршрут из-за отсутствия интерфейса, при переподключении маршруты могут стать недействительными.
  • Маршрутизация на основе классов — требует тщательного планирования адресного пространства, нет возможности прокинуть дополнительные маршруты, сложно работать с сетями 192.168.х.х.
  • CMAK и различные скрипты — требуют административных привилегий, сложны в настройке, непрозрачны.

В тоже время начиная с Windows 8 существует штатное решение в виде командлета PowerShell, которое позволяет привязать маршруты к VPN-подключению и добавлять их при его запуске, при отключении соединения маршруты будут автоматически удалены.

Запустим консоль PowerShell и прежде всего узнаем имена имеющихся в системе VPN-подключений:

Get-VpnConnection

Результатом работы команды будет информация обо всех коммутируемых подключениях, нас интересует поле Name:

Add-VPNConnectionRoute-001.pngТеперь добавим маршрут к удаленной сети для подключения с именем L2TP MT:

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

где в параметр ConnectionName содержит имя подключения, взятое в кавычки, а DestinationPrefix — необходимую сеть назначения или узел.

Add-VPNConnectionRoute-002.pngТеперь проверим как это все работает. Проверим таблицу маршрутизации при отключенном VPN-подключении и убедимся, что маршруты в удаленную сеть отсутствуют:

Add-VPNConnectionRoute-003.pngТеперь подключимся к VPN-серверу и снова проверим таблицу маршрутизации — в ней появится указанный нами маршрут к удаленной сети:

Add-VPNConnectionRoute-004.pngЕсли нужно добавить несколько маршрутов — выполняем команду несколько раз. При этом можно добавлять маршруты не только к удаленной сети, но и к определенному узлу, что в ряде случаев более предпочтительно по соображениям безопасности, например:

Add-VpnConnectionRoute -ConnectionName "L2TP MT" -DestinationPrefix 192.168.111.101/32 -PassThru

Данная команда добавит маршрут к узлу 192.168.111.101, к другим узлам удаленной сети доступа у VPN-пользователя не будет.

Чтобы удалить маршрут следует воспользоваться командой Remove-VPNConnectionRoute, синтаксис которой полностью повторяет команду добавления маршрута:

Remove-VpnConnectionRoute -ConnectionName "L2TP MT" -DestinationPrefix 192.168.111.0/24 -PassThru

Как видим, современные версии Windows дают нам в руки достаточно простой и удобный инструмент управления маршрутами для VPN-подключений.

Важно! Данные возможности не поддерживаются в Windows 7.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Когда мы подключаемся к некой сети по VPN и при этом
нам выдается IP из отдельного пула, который в целевую сеть не входит, то мы
должны вручную прописать маршрут до нужной нам сети. Что-то вроде:

route add -p 192.168.2.0 mask 255.255.255.0 172.16.0.1

И так делать необходимо каждый раз при подключении к этому VPN, что хоть и не сложно, но
необходимость каких-то дополнительных телодвижений жутко бесит. А если у нас
нет прав администратора – выполнить эту команду вообще невозможно. Прописать
один раз статический маршрут тоже не выйдет, т.к. при отключении происходит
уничтожение соответствующего интерфейса, и маршрут хоть и почему-то остается в
списке route print,
но при последующем подключении не работает, пока не прописать его заново.

Справедливости ради, выполнить нижеследующую инструкцию без
прав админа тоже не выйдет, но это хотя бы нужно сделать лишь один раз.

Таким образом, мы хотим, чтобы при подключении к VPN нужный
нам маршрут прописывался автоматически
. Microsoft не перестает удивлять, и такую
казалось бы очевидную-элементарную функцию в свою винду не удосужилась впилить
даже к версии 20H2.

Исполняется наше желание с помощью виндового же планировщика задач, который будет триггериться на события из журнала – собственно, подключения и отключения нужного нам VPN.

Допустим, что мы подключаемся к VPN-серверу, который находится в сети 192.168.2.0/24, а VPN-клиентам выдает адреса из пула 172.16.0.0/16, сам же имея при этом адрес 172.16.0.1. Таким образом, мы видим шлюз 172.16.0.1, но не знаем, что путь до 192.168.2.0/24 лежит через него.

Нужный нам журнал находится тут:

Просмотр событий – Журналы приложений и служб – Microsoft – Windows – NetworkProfile – Выполняется.

В этот журнал попадают подключения и отключения к различным сетям,
что нам и требуется.

Успешное подключение к VPN посредством стандартного rasdial генерирует событие с кодом 10000:

А отключение генерирует событие с кодом 10001:

Это мы и будем ловить. Далее нужно создать два задания в
планировщике – на подключение и отключение, которые будут отличаться всего в двух
местах.

Создаем задачу:

Создаем действие «Запуск программы» и ставим запуск C:\Windows\System32\ROUTE.EXE с параметрами add -p 192.168.2.0 mask 255.255.255.0 172.16.0.1 – получается та же самая команда на создание маршрута.

Обязательно ставим галку «Выполнить с наивысшими правами»,
т.е. от админа.

Триггером же нужно поставить событие из журнала. Создаем:

Выбираем «При событии», «Настраиваемое», «Создать фильтр событий», далее «XML», галка «Изменить запрос вручную» и копипастим туда следующее:

<QueryList>
  <Query Id="0" Path="System">
    <Select Path="Microsoft-Windows-NetworkProfile/Operational">
      *[System[(EventID=10000)]] and *[EventData[(Data[@Name="Name"]="MY-VPN")]]
    </Select>
  </Query>
</QueryList>

Где вместо MY-VPN ставим имя нашего подключения.

В «Условиях» снимаем галки про питание и батарею, а также ставим галку «Запускать только при подключении к следующей сети» и выбираем «Любое подключение». Если выбрать в этом списке что-то другое, то задача выполняться вообще не будет, а при попытке запустить ее вручную выдаст непонятную сраку:

Этот баг
известен микрософту, но делать с ним что-либо они не торопятся, по этой же
причине мы городили вышенаписанный XML, вместо того чтобы сделать простой триггер
по эвенту – в этом случае вытащить имя сети из содержимого эвента нельзя, а из-за
бага выбрать нужную сеть мы тоже не можем.

Задание на создание маршрута готово, теперь создаем задание на его удаление. Оно будет такое же, кроме пары отличий – в параметре команды ROUTE задаем delete 192.168.2.0, а в XML-копипасте ставим EventID=10001.

Теперь
подключаемся к нашему VPN
и делаем route print. Как видим, маршрут появился сам по
себе. Магия!

А теперь
отключаемся и видим, что маршрут пропал.

Спасибо за
внимание.


This entry was posted
on Пятница, 27 ноября, 2020 at 02:04 and is filed under technical.
You can follow any responses to this entry through the RSS 2.0 feed.

You can leave a response, or trackback from your own site.

Добрый день, уважаемые читатели. Недавно столкнулся с одной проблемой, один из моих клиентов попросил настроить VPN тоннель на роутере для связи с одним из его серверов, я это настроил, но заметил, что после добавления VPN соединения на ПК с которого я подключаюсь к VPN серверу, доступ в интернет начинает по умолчанию идти через VPN подключение (что напрочь убивает скорость интернета на ПК). Я долго искал в интернете способы решения данного вопроса, но ничего толкового я не нашел.  Однако я понимал что дело в маршруте через который идет доступ в Интернет. Я долго копался в метриках и маршрутах и решил данную проблему следующим образом:

1. Заходим в центр управления сетями и общим доступом и переходим во вкладку изменение параметров адаптера:

centr upravleniya setiami i obshim dostupom

2. Кликаем правой клавишей по ранее созданному VPN подключению, заходим в свойства, в свойствах находим раздел Сеть и заходим в настройки протокола Интернет версии 4.

О том как создать VPN подключение на ПК под управлением ОС семейства Windows я писал в своей статье.

svoistva vpn

3. Далее переходим во вкладку дополнительно:

svoistva vpn-2

4. Чтобы не использовать VPN сервер основным маршрутом выхода в Интернет ставим галочку на пункте «Отключить добавление маршрута основанное на классе» и сохраняем изменения.

svoistva vpn-3

Для доступа к серверу через VPN подключение добавляем маршрут в командной строке, открытой от имени Администратора.

route add 192.168.9.0 mask 255.255.255.0 192.168.2.1, где 192.168.9.0 — сетевой адрес, 255.255.255.0 — сетевая маска, 192.168.9.0 — сетевой шлюз (IP адреса настроенные на VPN сервере)

route-add

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

Прописать маршрут до корпоративной сети (в Windows 7, 8, 8.1, 10 автоматически будут создан маршрут основанный на классе, в зависимости от адреса, который подключение получит по VPN. Например, маршрут будет добавлен для сети 10.0.0.0/8, если по VPN сервер получит адрес из сети 10.128.0.0/16). Для IPsec-IKEv2 можно настроить автоматическое получение маршрута.

Пример маршрута, если корпоративная сеть 172.16.0.0/16, а сеть для VPN-подключений настроенная на Ideco UTM 10.128.0.0/16 (и из этой же сети выдается IP-адрес VPN-подключению), то маршрут будет таким: route -p add 172.16.0.0 mask 255.255.0.0 10.128.0.1

  • Добавить задачу в автозапуск windows 10
  • Добавить корзину в проводнике windows 10
  • Добавить диспетчер устройств в контекстное меню моего компьютера windows 10
  • Добавить магазин в windows 10 enterprise ltsc
  • Добавить загрузку windows 10 с другого диска