2009-07-24 09:33:51 +0000 2009-07-24 09:33:51 +0000
143
143

Как я могу сделать маршрутизацию Windows VPN селективной (по сети назначения)?

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

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

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

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

Ответы (13)

143
143
143
2009-07-24 11:11:52 +0000

Вы можете отключить принятие всего соединения, перейдя в свойства вкладки VPN, Networking, 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

Этот пример сделает устойчивым (нет необходимости запускать команду после перезагрузки) маршрут к IP 192.168.0.12 через VPN шлюз 10.100.100.254.

Подробнее об этом на http://technet.microsoft.com/en-us/library/bb878117.aspx .

20
20
20
2011-02-28 16:05:03 +0000

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

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

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

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

свойства VPN, вкладка Networking, свойства “Internet Protocol (TCP/IP)”, Advanced, снимите галочку с “Use default gateway on remote network”

, а затем сделал свое собственное:

во вкладке DNS, поставьте галочку “register this connections addresses in DNS”

Все работает безупречно!

9
9
9
2009-07-24 10:09:15 +0000

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

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

7
7
7
2013-09-25 05:41:53 +0000

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

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

обратите внимание на ‘IF 26’.

6
6
6
2018-01-26 07:11:32 +0000

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

Add-VpnConnectionRoute -ConnectionName 'My VPN Connection' -DestinationPrefix 192.168.123.0/24
```.
4
4
4
2011-07-29 09:03:55 +0000

если у вас есть и IPV4, и IPV6, вы должны снять галочку с опции “Использовать шлюз по умолчанию в удаленной сети” в обоих местах, даже если вы используете только IPV4.

3
3
3
2011-03-28 18:32:39 +0000

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

Существует хороший способ здесь: http://blogs.technet.com/b/rrasblog/archive/2007/06/11/split-tunnelling-using-cmak.aspx

2
2
2
2015-10-26 15:29:33 +0000

Я хочу добавить в смесь свое решение. Оно работает в оболочке UNIX на базе Cygwin на 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 $4}')

  ["$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 $4}')

  ["$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 $1}')

["$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, будет отправлен. Сделайте это, перейдя в настройку адаптера, где откроется пункт меню “… Свойства” для адаптера VPN → вкладка “Сеть”“Интернет-протокол версии 4 (TCP/IP)” Свойства → “Дополнительно” → и там вы снимите флажок “Автоматическая метрика” (в дополнение к “Использовать шлюз по умолчанию …” конечно) и установите значение в поле “Метрика интерфейса:” на значение ниже маршрута по умолчанию (см. выходные данные ROUTE.EXE -4 print).

1
1
1
2010-04-20 19:46:26 +0000

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

Затем я установил Firefox на моей клиентской машине, чтобы использовать прокси-сервер ноутбука… в результате, если я использую FireFox или что-то, что настроено на использование Socks5 прокси, он будет использовать VPN, в противном случае он будет использовать стандартную маршрутизацию…

1
1
1
2011-08-30 09:23:19 +0000

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

1
1
1
2013-02-18 16:37:51 +0000

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

Запишите как файл (ex: 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
1
1
2019-08-07 13:42:20 +0000

“Короткий” путеводитель для таких, как я, которые мало что знают о сетях. Здесь не много нового, но краткое изложение всех хороших вариантов, описанных в предыдущих ответах и в других смежных темах. Вся процедура состоит из 3 основных шагов:

1) Сделайте так, чтобы all traffic НЕ проходил через VPN. Для этого вы должны снять галочку с Use default gateway on remote network в настройках VPN. Убедитесь, что вы сняли этот флажок для IPv4 и IPv6. Обычно я просто полностью отключаю протокол IPv6 для VPN соединения.

(!) Возможно (иногда), что снятия флажка будет достаточно для нормальной работы - по моему опыту, необходимые маршруты (которые будут направлять необходимый трафик через VPN) могут быть добавлены автоматически после установки VPN соединения. Я не знаю точно, где и как настроены эти правила, но такой сценарий существует - возможно, это какое-то волшебство делают администраторы VPN сети.

2) Сделайте только necessary трафик, проходящий через VPN. Для этого вам нужно определить маршруты. Здесь у вас есть 3 варианта:

2.1) Добавить постоянный маршрут через VPN-шлюз:

route -p add a.b.c.d/<CIDR> w.x.y.z или route -p add a.b.c.d mask e.f.g.h w.x.y.z

, где ‘VPN-шлюз’ = ‘ваш IP в VPN сети’ = w.x.y.z и целевой адрес/сеть = a.b.c.d. Вы можете найти w.x.y.z, выполнив ipconfig и найдя имя вашего VPN соединения, или, если вы используете PowerShell, вы можете получить компактный вывод, выполнив ipconfig | grep -A5 PPP (который будет выводить 5 строк после нахождения каждого PPP соединения).

Против: вам придется заново создавать маршруты, если ваш VPN IP изменится.

2.2) Добавление постоянного маршрута через VPN сетевой интерфейс:

route -p add a.b.c.d/<CIDR> 0.0.0.0 IF <interface number>

, где a.b.c.d - целевой адрес/сеть, а interface number - идентификатор вашего VPN соединения. Этот ID можно найти, выполнив netstat -rn, или, для более компактного вывода, netstat -rn | grep -A10 'Interface List'.

Плюсы: не нужно ничего менять, если ваш VPN адрес (w.x.y.z) изменится.

Против: нужно воссоздавать маршруты с новым ID, если вы удаляете VPN соединение.

  1. 3) Используйте команду PowerShell:

Add-VpnConnectionRoute -ConnectionName '<VPN connection name>' -DestinationPrefix a.b.c.d/<CIDR>

Плюсы: необходимые маршруты добавляются каждый раз при создании VPN соединения и удаляются каждый раз при его разрыве.

Против: команды Get-VpnConnectionRoutes нет, поэтому с этими правилами сложно работать.

3) Проверьте и убедитесь, что маршрутизация работает, как ожидается!

Если вы добавили постоянные маршруты, вы можете проверить их, выполнив netstat -rn | grep -A10 'Persistent Routes'.

И, наконец, выполните несколько команд tracert как против IP-адресов, к которым предполагается доступ через VPN, так и против тех, которые должны работать без VPN.

1
1
1
2010-10-11 21:31:43 +0000

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

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

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

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

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

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

  1. Откройте Центр управления сетями и общим доступом
  2. Откройте свойства вашего VPN соединения
  3. Нажмите на вкладку Networking
  4. Для IPv4 и 6:
  5. Нажмите Properties
  6. Нажмите Advanced
  7. Снимите флажок Use default gateway[...]
  8. Закройте все, что было открыто на предыдущих шагах
  9. Редактируйте и сохраните пакетный скрипт, находящийся ниже
  10. Запустите его от имени администратора

Вам нужно заменить в скрипте следующее:

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

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

Сценарий

@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
```.

Похожие вопросы

3
19
3
10
7