Как я могу сделать Windows VPN Route селективным трафиком (сетью назначения)?

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

например, вместо того, чтобы VPN становится маршрутом по умолчанию, сделайте его только маршрутом для 192.168.123.0 / 24

(Я вижу, что есть решение для этого для Ubuntu в этом вопросе, но иногда мне приходится делать это и на Windows)

можно ли это автоматизировать, чтобы всякий раз, когда я подключаюсь к VPN, он это делает это?

129
задан Community 2009-07-24 13:33:51
источник

12 ответов

вы можете отключить захват всего соединения, перейдя в свойства VPN,Networking tab,Internet Protocol (TCP/IP) свойства Advanced снимите Use default gateway on remote network. Это может или не может оставить маршрут к 192.168.123.0/24 в зависимости от настройки VPN-сервера. Если это не так, вам придется вручную добавлять маршрут каждый раз, хотя вы можете поместить его в пакетный файл.

чтобы вручную добавить маршрут, запустите (от имени администратора):

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254

этот пример будет сделать постоянным (это не нужно запускать команду после перезагрузки) route to the IP 192.168.0.12 через VPN-шлюз 10.100.100.254.

подробнее об этом читайте в http://technet.microsoft.com/en-us/library/bb878117.aspx

129
отвечен TRS-80 2016-03-14 17:57:46
источник

Я успешно использовал @TRS-80 метод S для того чтобы достигнуть этого.

Я работаю из дома и VPN на корпоративной сети для моей электронной почты (я ненавижу веб-почты!!).

в то же время, мне нужно быть постоянно серфинг для информации, а также нужен youtube для моей фоновой музыки... Теперь вы определенно не хотите транслировать youtube с VPN, так как это звучит как пение робота!!! :)

все, что я сделал, это следовать @TRS-80:

свойства VPN, вкладка "сеть", " Интернет-протокол (TCP / IP)" свойства, дополнительно, снимите флажок "Использовать шлюз по умолчанию в удаленной сети"

а потом сделал свое:

на вкладке DNS отметьте "зарегистрировать адреса соединений в DNS"

все плавно работает!

18
отвечен bPratik 2011-02-28 19:05:03
источник

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

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

8
отвечен Wayne 2009-07-24 14:09:15
источник

Я обнаружил, что он должен непосредственно указать интерфейс в команде маршрута. Без него Windows будет использовать интерфейс основной сетевой карты вместо VPN. В моем случае это выглядит так:

route -p add 192.168.10.187 mask 255.255.255.255 0.0.0.0 IF 26
::           ^destination        ^mask           ^gateway   ^interface

Примечание-Если 26'.

7
отвечен Dmitry Petrov 2017-04-21 16:11:15
источник

Если у вас есть IPV4 и IPV6, вы должны снять флажок "Использовать шлюз по умолчанию в удаленной сети" в обоих местах, даже если вы используете только IPV4

4
отвечен Dave 2011-07-29 13:03:55
источник

при использовании CMAK и настройке файла маршрутизации, который может загрузить клиент... windows загрузит файл маршрутизации и скорректирует маршруты соответствующим образом. Существуют опции для удаления маршрута по умолчанию... и добавить различные статические маршруты и такие. Это известно как разделение туннеля btw.

там хорошо, как здесь: http://blogs.technet.com/b/rrasblog/archive/2007/06/11/split-tunnelling-using-cmak.aspx

3
отвечен TheCompWiz 2011-03-28 22:32:39
источник

Я хочу добавить свое решение в микс. Он работает на Cygwin питанием Unix оболочки на Windows 7 или более поздней версии, но также должен работать с MSYS2, Bash-on-Windows [WSL] после сборки 14986 или Busybox для Windows). Нужно запустить с правами администратора.

Он имеет некоторые настройки и пытается обнаружить некоторые вещи, которые вы не указали. Он также устанавливает номер интерфейса (IF) явно, чтобы противостоять некоторым проблемам, которые некоторые пользователи (например, я) имели с другими решениями здесь.

#!/bin/sh

# these three settings are required
adapter_name='VPN Connection'
username=
password=

# This setting here might be important because it's about the target network
# and in some cases it can't be properly determined automatically so this might
# be then worth setting.
# Format is in CIDR notation with the network address and a forward slash and
# the amount of network bits
target_network=192.168.0.0/24

# the IP you will get on the target network, also the VPN gateway on your
# local machine, you normally don't need to set this as the script tries to
# detect it
ip=

# optional setting for metric which normally shouldn't be necessary,
# except in te very rare cases where it should be set to a value lower than all
# other routes that might match the target network
metric=

# experimental setting to delete routes to the target network prior and after
# should normally not be needed unless this script fails and you get error
# messages like 'The route addition failed: The object already exists.'
route_cleanup=F

prog_name=${0##*/}

msg() {
  printf '%s: %s\n' "$prog_name" "$*"
}

die() {
  msg "$*" >&2
  exit 1
}

[ "$adapter_name" ] || die "Adapter name not set!"
[ "$username" ]     || die "Username not set!"
[ "$password" ]     || die "Password not set!"

if [ "$(uname -o)" != 'MS/Windows' ]; then
  id -G | grep -qE '\<0|544\>' || die 'Not running with admin rights.'
fi

msg "Disconnecting any existing connection that might exist."
rasdial.exe "$adapter_name" /d

msg "Connecting"
rasdial.exe "$adapter_name" "$username" "$password"

if [ ! "$ip" ]; then
  msg "Getting IP address on target network."
  ip=$(netsh.exe interface ip show config name="$adapter_name" |
    grep -a 'IP Address' | awk -F'[: ]+' '{print }')

  [ "$ip" ] || die 'Could not get IP! Exiting.'

  msg "Detected IP address as '$ip'."
fi

if [ ! "$target_network" ]; then
  msg "Getting target network."
  target_network=$(netsh.exe interface ip show config name="$adapter_name" |
    grep -a 'Subnet Prefix' | awk -F'[: ]+' '{print }')

  [ "$target_network" ] || die 'Could not get target network! Exiting.'

  msg "Detected target network as '$target_network'."
fi

msg "Getting VPN interface number."
if=$(ROUTE.EXE print -4 | grep -a "$adapter_name" |
  awk -F. '{gsub(" ", "");print }')

[ "$if" ] || die 'Could not get interface number! Exiting.'

msg "Detected VPN interface number as '$if'."

if [ "$route_cleanup" = T ]; then
  msg "Deleting any potentially already existing routes for the target network."
  ROUTE.EXE delete "$target_network"
fi

msg "Adding route for target network."
if [ "$metric" ]; then
  ROUTE.EXE add "$target_network" "$ip" IF "$if" Metric "$metric"
else
  ROUTE.EXE add "$target_network" "$ip" IF "$if"
fi

msg "VPN should be up now."
msg "Press enter to make it stop."
read -r _

if [ "$route_cleanup" = T ]; then
  msg "Deleting route."
  ROUTE.EXE delete "$target_network"
fi

msg "Disconnecting."
rasdial.exe "$adapter_name" /d

# msg "Press enter to exit."
# read -r _

exit 0

также стоит отметить, что может потребоваться вручную установить низкую метрику или иначе маршрут по умолчанию будет соответствовать перед трафиком, предназначенным для VPN. Вы можете сделать это, перейдя в настройки адаптера, где вы открываете "... Properties" пункт меню адаптера VPN → "сети" tab → "Internet Protocol Version 4 (TCP / IP)" → свойства "Advanced" → и вы снимите "автоматическое назначение метрики" флажок (в дополнение к " использовать шлюз по умолчанию..." конечно) и установите значение в "интерфейс метрика:" поле со значением ниже, чем маршрут по умолчанию (см. ROUTE.EXE -4 print output).

2
отвечен phk 2016-12-18 16:01:47
источник

использовать Add-VpnConnectionRoute командлет в Windows 8+.

Add-VpnConnectionRoute -ConnectionName 'My VPN Connection' -DestinationPrefix 192.168.123.0/24
2
отвечен Der_Meister 2018-01-26 10:11:32
источник

немного старый, но я нашел способ сделать это с помощью другой машины. У меня есть ноутбук, где я установил VPN-соединение, и там у меня есть FreeProxy, настроенный с Socks5..

затем я настроил firefox на моем клиентском компьютере, чтобы использовать прокси-сервер ноутбука.. в результате, если я использую FireFox или что-то, что настроено на использование этого прокси-сервера Socks5, он будет использовать VPN, иначе он использует стандартную маршрутизацию..

1
отвечен Lonnie 2010-04-20 23:46:26
источник

вы можете использовать что-то вроде netcatcher - просто добавьте все маршруты, которые вам нужно один раз, и забудьте об этом. Он будет автоматически добавлять и удалять маршруты при подключении или отключении сеанса VPN. Если ваш IP-адрес VPN динамически получен (DHCP), netcatcher поймает его и обновит маршруты правильно.

1
отвечен Andy 2013-02-07 19:30:20
источник

из российского форума: http://forum.ixbt.com/topic.cgi?id=14:43549

сохранить как файл (например: vpn_route.vbs) и после подключения vpn выполните команду

cscript vpn_route.vbs

vpn_route.vbs:

strComputer = "."
strMACAddress = "MAC of VPN interface here (example 00:45:55:00:00:00)"
strTarget = "route target here (example 192.168.123.0)"
strMask = "mask here (example 255.255.255.0)"
Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")

Set colItems = objWMIService.ExecQuery _
    ("Select * From Win32_NetworkAdapterConfiguration Where MACAddress = '" & strMACAddress & "'")
For Each objItem in colItems
strIP = objItem.IPAddress(0)
Next
Set objShell = CreateObject("WScript.Shell")
objShell.Run "route add " & strTarget & " mask " & strMask & " " & strIP
1
отвечен shibormot 2013-02-18 20:37:51
источник

это невозможно сделать в Windows без использования дополнительных программ, пакетных файлов или командной строки. Альтернативой является получение виртуальной (или физической) машины, на которой можно запустить VPN.

кажется странным, что столь же легко объяснимо, как это так трудно достичь. Насколько трудно было бы просто направить трафик от одной программы к интерфейсу VPN и всем другим программам к интерфейсу NIC по умолчанию? Почему нам нужно создать целый виртуальный машина для этого? И с Linux это возможно, но его решение тоже не очень элегантное.

это тоже очень востребовано: я наткнулся на десятки тем по одной теме. Поэтому я только надеюсь, что кто-то поймет нелепость этого и сделает что-то с этим. (В Windows 8!)

это решение из неописанный пакетный файл. Он был слегка адаптирован.

инструкции для Windows 7

скрипт будет подключаться и маршрутизировать трафик через VPN до перезагрузки-можно заменить route add С route -p add для сохранения изменений, но если у вас нет постоянного IP-адреса с VPN, он в конечном итоге перестанет работать при изменении вашего IP-адреса VPN.

  1. открыть Центр управления сетями и общим доступом
  2. откройте свойства VPN-подключения
  3. выберите Networking tab
  4. IPv4 и Шесть:
    1. клик Properties
    2. клик Advanced
    3. убрать Use default gateway[...]
  5. закрыть все открытые с предыдущих шагов
  6. редактировать и сохранять пакетный скрипт, найденный ниже
  7. Запуск от имени администратора

в скрипте необходимо заменить:

  • <VPN> на имя VPN-подключения вы создали
  • <USER> С VPN имя пользователя
  • <PASS> с паролем VPN
  • <TARGET> С IP-адресом, который вы хотите маршрутизировать через VPN (Если вы хотите маршрутизировать больше адресов, просто дублируйте три строки, где используется цель)

Примечание: если вы не хотите сохранять пароль в файле, замените <PASS> С %password% и добавьте следующее после первой строки скрипта: set password= Input password:.

Script

@echo off
@echo make sure to be disconnected!
rasdial <VPN> /d
@echo start to connect to vpn
rasdial <VPN> <USER> <PASS>
netsh interface ip show config name="<VPN>" | findstr "IP" > ip.dat
set /p ip= < ip.dat
del ip.dat
set ip=%ip:~-12%
@echo VPN IP is %ip%

set target=<TARGET>
@echo Add route for %target%
route add %target% mask 255.255.255.255 %ip%

timeout /T 3 > nul
1
отвечен Xantippe 2014-02-05 06:30:18
источник

Другие вопрос networking windows vpn routing