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

Come posso rendere selettivo il traffico del percorso VPN di Windows (per rete di destinazione)?

Voglio utilizzare una VPN di Windows ma solo per una rete particolare, in modo che non si occupi di tutta la mia connessione di rete.

ad es, Invece di far diventare la VPN il percorso predefinito, farla diventare solo il percorso per 192.168.123.0/24

(vedo che c'è una soluzione per questo per Ubuntu in questa domanda , ma a volte devo farlo anche su Windows)

Può essere automatizzato in modo che ogni volta che mi connetto alla VPN faccia questo?

Risposte (13)

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

È possibile disattivare il rilevamento dell'intera connessione andando alle proprietà della scheda VPN, Networking, Internet Protocol (TCP/IP), Advanced, Use default gateway on remote network, deselezionare 192.168.123.0/24. Questo può lasciare o meno un percorso a 192.168.0.12 a seconda della configurazione del server VPN. Se non lo fa, si dovrà aggiungere manualmente il percorso ogni volta, anche se si potrebbe metterlo in un file batch.

Per aggiungere manualmente il percorso, eseguire (come amministratore):

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254

Questo esempio farà un percorso persistente (non è necessario eseguire il comando dopo un riavvio) verso l'IP 10.100.100.254 attraverso il gateway VPN &007.

Maggiori informazioni su questo argomento su http://technet.microsoft.com/en-us/library/bb878117.aspx

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

Ho usato con successo la tecnica di @TRS-80 per raggiungere questo obiettivo.

Lavoro da casa e devo VPN sulla rete aziendale per la mia e-mail (odio la webmail!!).

Allo stesso tempo, ho bisogno di navigare costantemente per le informazioni e ho anche bisogno di youtube per la mia musica di sottofondo… Ora non si vuole sicuramente lo streaming di youtube da una VPN in quanto questo lo fa suonare come un canto robot! :)

Tutto quello che ho fatto è stato seguire @TRS-80:

proprietà della VPN, scheda Networking, proprietà “Internet Protocol (TCP/IP)”, Advanced, deselezionare “Use default gateway on remote network”

e poi ho fatto il mio:

sotto la scheda DNS, spuntare “register this connections addresses in DNS”

Tutto funziona perfettamente!

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

Concessa questa risposta non riflette la vostra richiesta, ma io uso una macchina virtuale appositamente per questo scopo. In questo modo solo la rete all'interno della VM è limitata dai percorsi.

Potreste trovare alcune risposte migliori da parte di altre persone ma almeno questo potrebbe darvi qualcosa da considerare come una soluzione facile dopo che la VM è stata creata.

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

Ho trovato che aveva bisogno di puntare direttamente l'interfaccia nel comando di rotta. Senza di esso, Windows utilizzerà l'interfaccia della scheda di rete principale, invece di VPN. Nel mio caso, sembra che

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


si noti il 'IF 26'.
6
6
6
2018-01-26 07:11:32 +0000

Utilizzare Add-VpnConnectionRoute cmdlet in Windows 8+.

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

se avete sia IPV4 che IPV6 dovete deselezionare il “Use default gateway on remote network” in entrambi i posti, anche se usate solo IPV4

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

Se si utilizza il CMAK e si imposta un file di routing che il cliente può scaricare… windows scaricherà il file di routing e regolerà i percorsi come appropriato. Ci sono opzioni per rimuovere il percorso predefinito… e aggiungere vari percorsi statici e così via. Questo è noto come split-tunnel btw.

C'è un buon modo per farlo: 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

Voglio aggiungere la mia soluzione al mix. Funziona su una shell UNIX alimentata da Cygwin su Windows 7 o più recente, ma dovrebbe funzionare anche con MSYS2, Bash-on-Windows [WSL] dopo la build 14986, o Busybox per Windows). Deve essere eseguito con privilegi di amministrazione.

Ha alcune impostazioni e cerca di rilevare alcune cose che non sono state esplicitamente impostate. Imposta anche il numero di interfaccia (IF) esplicitamente per contrastare alcuni problemi che alcuni utenti (come me) hanno avuto con le altre soluzioni qui.

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

Vale anche la pena notare che potrebbe essere necessario impostare manualmente una metrica bassa o altrimenti il percorso predefinito corrisponderà prima del traffico destinato alla VPN. Lo si fa andando all'impostazione della scheda dove si apre la voce di menu “… Proprietà” per la scheda VPN → “Networking” tab → “Internet Protocol Version 4 (TCP/IP)” Proprietà → “Advanced” → e lì si deseleziona la casella di controllo “Automatic metric” (oltre al “Use default gateway …” naturalmente) e si imposta il valore nel campo “Interface metric:” su un valore inferiore al percorso predefinito (vedere l'output di ROUTE.EXE -4 print).

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

Un po’ vecchio, ma ho trovato un modo per farlo usando un'altra macchina. Ho un portatile dove ho impostato la connessione VPN e lì ho FreeProxy impostato con Socks5…

Poi ho impostato firefox sulla mia macchina client per utilizzare il server proxy del portatile… il risultato è che se uso FireFox o qualsiasi cosa che è impostato per utilizzare il proxy di Socks5, utilizzerà la VPN, altrimenti utilizza il routing standard…

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

Potete usare qualcosa come netcatcher - basta aggiungere tutti i percorsi di cui avete bisogno una volta sola e dimenticarlo. Aggiungerà e cancellerà automaticamente i percorsi quando vi connetterete o scollegherete dalla sessione VPN. Se il vostro indirizzo IP VPN è ottenuto dinamicamente (DHCP) il netcatcher lo catturerà e aggiornerà le rotte nel modo giusto.

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

dal forum russo: http://forum.ixbt.com/topic.cgi?id=14:43549 &003

save as file (ex: vpn_route.vbs) e dopo vpn connected execute command

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

Una guida “breve” per i noobs come me, che non sanno molto delle reti. Non c'è molto di nuovo qui, ma una sintesi di tutte le buone opzioni descritte nelle risposte precedenti e in altri thread correlati. L'intera procedura consiste di 3 passi fondamentali:

1) Fare tutto il traffico NON va via VPN. Per questo è necessario deselezionare la casella di controllo Use default gateway on remote network nelle impostazioni VPN. Assicurarsi di deselezionare questa casella di controllo sia per IPv4 e IPv6. Di solito mi limito a disabilitare completamente il protocollo IPv6 per la connessione VPN.

(!) E ‘(a volte) possibile che deselezionare questa casella di controllo sarà sufficiente per il lavoro normale - nella mia esperienza, i percorsi necessari (che dirigerà il traffico necessario via VPN) possono essere aggiunti automaticamente dopo la connessione VPN è stabilito. Non so esattamente dove e come queste regole sono configurate, ma tale scenario esiste - probabilmente è una magia fatta dagli amministratori di rete VPN.

2) Fare solo il traffico necessario che va via VPN. Per questo è necessario definire le rotte. Qui avete 3 opzioni:

2.1) Aggiungere un percorso permanente tramite gateway VPN:

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

dove 'gateway VPN’ = ‘il vostro IP sulla rete VPN’ = w.x.y.z e indirizzo di destinazione / rete = a.b.c.d. Potete trovare w.x.y.z eseguendo ipconfig e cercando il nome della vostra connessione VPN o, se usate PowerShell, potete ottenere un output compatto eseguendo ipconfig | grep -A5 PPP (che emetterà 5 linee dopo aver trovato ogni connessione PPP).

Contro: dovrete ricreare i percorsi se il vostro IP VPN cambierà.

2.2) Aggiungete un percorso permanente tramite l'interfaccia di rete VPN:

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

dove interface number è l'indirizzo/rete di destinazione e netstat -rn è l'identificativo della vostra connessione VPN. Questo ID può essere trovato eseguendo netstat -rn | grep -A10 'Interface List', o, per un'uscita più compatta, w.x.y.z.

Pro: non è necessario modificare nulla se l'indirizzo VPN (Add-VpnConnectionRoute -ConnectionName '<VPN connection name>' -DestinationPrefix a.b.c.d/<CIDR>) cambierà.

Contro: è necessario ricreare i percorsi con un nuovo ID se si elimina la connessione VPN.

2.2. Aggiungere un percorso permanente tramite l'interfaccia di rete VPN:

. 3) Utilizzare PowerShell cmdlet:

Get-VpnConnectionRoutes netstat -rn | grep -A10 'Persistent Routes'

Pro: i percorsi necessari vengono aggiunti ogni volta che viene stabilita la connessione VPN e cancellati ogni volta che viene scollegata.

Contro: non c'è tracert cmdlet quindi può essere difficile gestire queste regole.

*3) Controllate e assicuratevi che il routing funzioni come previsto! *

Se avete aggiunto delle rotte persistenti, potete controllarle eseguendo &007.

E, infine, eseguite alcuni comandi &007 sia contro gli indirizzi IP che si suppone siano accessibili tramite VPN che contro quelli che dovrebbero funzionare senza VPN.

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

Questo non può essere fatto in Windows senza utilizzare programmi aggiuntivi, file batch o la riga di comando. Un'alternativa è quella di ottenere una macchina virtuale (o fisica) su cui sia possibile eseguire la VPN.

Sembra strano che una cosa così facilmente spiegabile come questa sia così difficile da realizzare. Quanto può essere difficile indirizzare il traffico da un programma all'interfaccia VPN e tutti gli altri programmi verso l'interfaccia NIC di default? Perché avremmo bisogno di impostare un'intera macchina virtuale per questo? E con Linux è possibile, ma anche la sua soluzione non è molto elegante.

È anche molto ricercata: Mi sono imbattuto in decine di thread sullo stesso argomento. Quindi spero solo che qualcuno si renda conto della sua ridicolaggine e faccia qualcosa. (In Windows 8!)

Questa soluzione è tratta da un file batch non attribuito . È stato leggermente adattato.

Istruzioni per Windows 7

Lo script si connetterà e instraderà il traffico attraverso la vostra VPN fino ad un riavvio - potete sostituire route add con route -p add perché la modifica persista, ma se non avete un IP persistente con la vostra VPN, alla fine smetterà di funzionare quando l'IP della VPN cambia.

  1. 1. Aprire il Centro di rete e condivisione
  2. 2. Aprite le proprietà per la vostra connessione VPN
  3. 3. Fare clic sulla scheda Networking
  4. Per entrambi gli IPv4 e 6:
  5. 1. Fare clic su Properties
  6. 2. Fare clic su Advanced
  7. 4. Deselezionare Use default gateway[...]
  8. Chiudere tutto ciò che è stato aperto dai passaggi precedenti
  9. Modificare e salvare lo script batch che si trova sotto
  10. Eseguirlo come amministratore

È necessario sostituire nello script:

  • <VPN> con il Nome della connessione VPN creata
  • <USER> con il nome utente VPN
  • <PASS> con la password VPN
  • <TARGET> con la password VPN
  • <PASS> con l'indirizzo IP che si desidera instradare attraverso la VPN (se si desidera instradare più indirizzi, è sufficiente duplicare le tre righe in cui viene utilizzato il target)

_Nota: Se non si vuole salvare la password nel file, sostituire %password% con set password= Input password: e aggiungere quanto segue dopo la prima riga dello script: &007.

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