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

Jak mogę sprawić, aby trasa Windows VPN była selektywna (według sieci docelowej)?

Chcę używać Windows VPN, ale tylko dla konkretnej sieci, tak aby nie przejmowała całego mojego połączenia sieciowego.

np, Zamiast tego VPN staje się domyślną trasą, zrób to tylko dla 192.168.123.0/24

(widzę, że jest na to rozwiązanie dla Ubuntu w tym pytaniu , ale czasami muszę to zrobić także w Windows)

Czy można to zautomatyzować tak, aby za każdym razem, gdy łączę się z VPN to robiło?

Respuestas (13)

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

Możesz wyłączyć przejęcie całego połączenia przechodząc do właściwości karty VPN, Networking, Internet Protocol (TCP/IP) właściwości, Advanced, untick Use default gateway on remote network. W zależności od konfiguracji serwera VPN, może on pozostawić trasę do 192.168.123.0/24, lub nie. Jeśli tak się nie stanie, trzeba będzie za każdym razem ręcznie dodać trasę, chociaż można ją umieścić w pliku wsadowym.

Aby ręcznie dodać trasę, należy uruchomić (jako administrator):

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254

Przykład ten spowoduje, że po restarcie nie trzeba będzie uruchamiać polecenia na IP 192.168.0.12 przez bramkę VPN 10.100.100.254.

Więcej na ten temat na stronie http://technet.microsoft.com/en-us/library/bb878117.aspx

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

Udało mi się to osiągnąć dzięki technice @TRS-80.

Pracuję w domu i muszę mieć VPN w sieci korporacyjnej dla mojego maila (nienawidzę webmaila!!).

Jednocześnie muszę być stale w Internecie w poszukiwaniu informacji, a także potrzebować youtube dla mojej muzyki w tle… Teraz na pewno nie chcesz oglądać youtube w sieci VPN, ponieważ brzmi to jak śpiew robotów!!!! @TRS-80:

właściwości VPN, zakładka Networking, właściwości “Internet Protocol (TCP/IP)”, Advanced, untick “Use default gateway on remote network”

a następnie zrobił moje własne:

w zakładce DNS, zaznacz “zarejestrować te adresy połączeń w DNS”

Wszystko działa bezproblemowo!

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

Udzielenie tej odpowiedzi nie odzwierciedla Twojej prośby, ale używam VM specjalnie do tego celu. W ten sposób tylko sieć wewnątrz VM jest ograniczona przez trasy.

Możesz znaleźć lepsze odpowiedzi od innych ludzi, ale przynajmniej to może dać Ci coś do rozważenia jako łatwe rozwiązanie po utworzeniu VM.

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

Stwierdziłem, że musi bezpośrednio wskazywać interfejs w poleceniu trasy. Bez niego, Windows będzie używał głównego interfejsu karty sieciowej, zamiast VPN. W moim przypadku wygląda to jak

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

zanotuj “IF 26”.

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

Użyj Add-VpnConnectionRoute cmdlet w Windows 8+.

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

jeśli masz zarówno IPV4 jak i IPV6 musisz odznaczyć opcję “Użyj domyślnej bramy w sieci zdalnej” w obu miejscach, nawet jeśli używasz tylko IPV4

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

Jeśli użyjesz CMAK-a i ustawisz plik routingu, który klient może pobrać… windows pobierze plik routingu i odpowiednio dostosuje trasy. Istnieją opcje, aby usunąć domyślną trasę… i dodać różne trasy statyczne i tym podobne. Jest to znane jako split-tunnel btw.

Jest tu dobry sposób: 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

Chcę dodać moje rozwiązanie do mieszanki. Działa ono na zasilanej Cygwinem powłoce UNIX na Windows 7 lub nowszym, ale powinno również współpracować z MSYS2, Bash-on-Windows [WSL] po zbudowaniu 14986, lub Busyboxem dla Windows). Musi być uruchomiony z uprawnieniami administratora.

Posiada pewne ustawienia i próbuje wykryć niektóre z rzeczy, których nie ustawiłeś wprost. Ustawia również wyraźnie numer interfejsu (IF), aby przeciwdziałać niektórym problemom, które niektórzy użytkownicy (jak ja) mieli z innymi rozwiązaniami.

#!/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

Warto również zauważyć, że może być konieczne ręczne ustawienie niskiej metryki lub w innym przypadku domyślna trasa będzie pasować przed ruchem przeznaczonym dla VPN. Robisz to przechodząc do ustawienia adaptera, gdzie otwierasz pozycję menu “… Właściwości” dla adaptera VPN → karta “Sie攓Protokół internetowy w wersji 4 (TCP/IP)” Właściwości → “Zaawansowane” → i tam odznaczasz pole wyboru “Automatyczna metryka” (oczywiście oprócz “Użyj domyślnej bramy…”) i ustawiasz wartość w polu “Metryka interfejsu:” na wartość niższą niż domyślna trasa (zobacz wyjście ROUTE.EXE -4 print).

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

Trochę stare, ale znalazłem sposób, żeby to zrobić przy użyciu innej maszyny. Mam laptopa, gdzie skonfigurować połączenie VPN i na nim mam FreeProxy ustawić z Socks5…

Następnie ustawić firefox na moim komputerze klienckim do korzystania z laptopa serwera proxy… wynik jest taki, że jeśli używam FireFox lub cokolwiek, co jest ustawione do korzystania z tego Socks5 proxy, będzie używać VPN, w przeciwnym razie używa standardowego routingu…

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

Możesz użyć czegoś w rodzaju netcatcher - po prostu dodaj wszystkie trasy, których potrzebujesz za jednym razem i zapomnij o tym. Automatycznie doda i usunie trasy po połączeniu lub rozłączeniu sesji VPN. Jeśli twój adres IP VPN jest uzyskiwany dynamicznie (DHCP), netcatcher złapie go i zaktualizuje trasy we właściwy sposób.

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

z rosyjskiego forum: http://forum.ixbt.com/topic.cgi?id=14:43549

zapisz jako plik (ex: vpn\_route.vbs) i po połączeniu vpn wykonaj komendę

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

Krótki" przewodnik dla takich noobów jak ja, którzy nie wiedzą zbyt wiele o sieciach. Niewiele tu nowego, ale podsumowanie wszystkich dobrych opcji opisanych w poprzednich odpowiedziach i w innych powiązanych wątkach. Cała procedura składa się z 3 podstawowych kroków:

1) Zrób all traffic NOT going via VPN. W tym celu musisz odznaczyć pole wyboru Use default gateway on remote network w ustawieniach VPN. Upewnij się, że odznaczyłeś to pole wyboru zarówno dla IPv4 jak i IPv6. Zwykle po prostu całkowicie wyłączam protokół IPv6 dla połączenia VPN.

(!) Jest (czasami) możliwe, że odznaczenie tego pola wyboru wystarczy do normalnej pracy - z mojego doświadczenia wynika, że po nawiązaniu połączenia VPN można automatycznie dodać niezbędne trasy (które będą kierować niezbędny ruch przez VPN). Nie wiem dokładnie gdzie i jak te reguły są skonfigurowane, ale taki scenariusz istnieje - prawdopodobnie jest to jakaś magia zrobiona przez administratorów sieci VPN.

2) Zrób tylko niezbędny ruch przechodzący przez VPN. W tym celu musisz zdefiniować trasy. Tutaj masz 3 opcje:

2.1) Dodaj stałą trasę przez bramę VPN:

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

gdzie ‘brama VPN’ = ‘twój IP w sieci VPN’ = w.x.y.z i adres docelowy/sieć = a.b.c.d. Możesz znaleźć w.x.y.z wykonując ipconfig i szukając swojej nazwy połączenia VPN lub, jeśli używasz PowerShell, możesz uzyskać kompaktowe wyjście wykonując ipconfig | grep -A5 PPP (który wyświetli 5 linii po znalezieniu każdego połączenia PPP).

Zużycie: trzeba będzie odtworzyć trasy, jeśli IP VPN się zmieni.

2.2) Dodaj stałą trasę przez interfejs sieciowy VPN:

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

gdzie a.b.c.d jest adresem docelowym/siecią, a interface number jest identyfikatorem połączenia VPN. Identyfikator ten można znaleźć, wykonując netstat -rn lub, w przypadku bardziej kompaktowego wyjścia, netstat -rn | grep -A10 'Interface List'.

Pros: nie trzeba niczego zmieniać, jeśli adres VPN (w.x.y.z) ulegnie zmianie.

Wady: trzeba ponownie utworzyć trasy z nowym identyfikatorem, jeśli usuniesz połączenie VPN.

  1. 3) Użyj PowerShell cmdlet:

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

Pros: konieczne trasy są dodawane za każdym razem, gdy nawiązywane jest połączenie VPN i usuwane za każdym razem, gdy jest ono rozłączane.

Wady: nie ma Get-VpnConnectionRoutes cmdlet, więc zarządzanie tymi zasadami może być trudne.

3) Sprawdź i upewnij się, że routing działa zgodnie z oczekiwaniami!

Jeśli dodałeś stałe trasy, możesz je sprawdzić wykonując netstat -rn | grep -A10 'Persistent Routes'.

I wreszcie, wykonaj kilka komend tracert zarówno dla adresów IP, które mają być dostępne przez VPN jak i dla tych, które powinny działać bez VPN.

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

Nie można tego zrobić w systemie Windows bez użycia dodatkowych programów, plików wsadowych lub wiersza poleceń. Alternatywą jest uzyskanie wirtualnej (lub fizycznej) maszyny, na której można uruchomić VPN.

Wydaje się dziwne, że coś tak łatwo wytłumaczalnego jak to jest tak trudne do osiągnięcia. Jak trudne może być po prostu przekierowanie ruchu z jednego programu do interfejsu VPN i wszystkich innych programów do domyślnego interfejsu NIC? Po co nam do tego cała maszyna wirtualna? I z Linuksem jest to możliwe, ale jego rozwiązanie też nie jest zbyt eleganckie.

To też jest bardzo poszukiwane: Natknąłem się na dziesiątki wątków na ten sam temat. Mam więc tylko nadzieję, że ktoś zdaje sobie sprawę z niedorzeczności tego rozwiązania i zrobi coś z tym. (W Windows 8!)

To rozwiązanie jest z nieudostępnionego pliku wsadowego . Zostało ono nieco przystosowane.

Instrukcje dla Windows 7

Skrypt połączy się z Twoim VPN i będzie przekierowywał ruch przez Twój VPN aż do restartu - możesz zastąpić route add przez route -p add, aby zmiana trwała, ale jeśli nie masz stałego adresu IP z Twoim VPN, to w końcu przestanie działać, gdy Twój VPN IP się zmieni.

  1. Otwórz Network and Sharing Center
  2. Open the properties for your VPN connection
  3. Kliknij zakładkę Networking
  4. Zarówno dla IPv4 jak i 6:
  5. Kliknij zakładkę Properties
  6. Kliknij Advanced
  7. Uncheck Use default gateway[...]
  8. Close everything opened from the previous steps
  9. Edit and save the batch script found below
  10. Uruchom go jako administrator

W skrypcie należy zastąpić:

  • <VPN> nazwą utworzonego połączenia VPN
  • <USER> nazwą użytkownika VPN
  • <PASS> hasłem VPN
  • <TARGET> adresem IP, który ma zostać przekierowany przez VPN (jeśli chcesz przekierować więcej adresów, po prostu zduplikuj trzy linie, w których używany jest cel)

_Uwaga: _ Jeśli nie chcesz zapisywać hasła w pliku, zamień <PASS> na %password% i dodaj następujące po pierwszej linii skryptu: set password= Input password:.

Skrypt

@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