it-swarm-eu.dev

Vieni a fare in modo che Windows VPN instradi il traffico selettivo (per rete di destinazione)?

Voglio utilizzare una VPN di Windows ma solo per una rete particolare, in modo che non prenda il controllo dell'intera connessione di rete.

ad es., invece che la VPN diventa la route predefinita, rendi solo la route per 192.168.123.0/24

(Posso vedere 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 collego alla VPN lo faccia?

135
Legooolas

È possibile disattivare il rilevamento dell'intera connessione andando alle proprietà della VPN, alla scheda Networkingname__, alle proprietà Internet Protocol (TCP/IP), Advancedname__, deselezionando Use default gateway on remote network. Questo può o no lasciare una rotta a 192.168.123.0/24 a seconda dell'impostazione del server VPN. In caso contrario, dovrai aggiungere manualmente il percorso ogni volta, sebbene tu possa inserirlo in un file batch.

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

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254

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

Ulteriori informazioni su questo all'indirizzo http://technet.Microsoft.com/en-us/library/bb878117.aspx

135
TRS-80

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

Lavoro da casa e devo collegarmi alla rete aziendale per la mia email (odio la webmail !!).

Allo stesso tempo, ho bisogno di navigare costantemente per informazioni e ho bisogno anche di YouTube per la mia musica di sottofondo ... Ora non si vuole assolutamente eseguire lo streaming di YouTube da una VPN poiché ciò lo fa sembrare un Robot Singing !!! :)

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

proprietà della VPN, scheda Rete, proprietà "Protocollo Internet (TCP/IP)", Avanzate, deselezionare "Usa gateway predefinito su rete remota"

e poi ha fatto il mio:

sotto la scheda DNS, seleziona "registra questi indirizzi di connessione in DNS"

Tutto funziona perfettamente!

19
bPratik

Concessa questa risposta non riflette la tua richiesta, ma io uso un VM specificamente per questo scopo. In questo modo solo la rete all'interno di VM è limitata dai percorsi.

Potresti trovare delle risposte migliori da altre persone, ma almeno questo potrebbe darti qualcosa da considerare poiché è una soluzione facile dopo che VM è stato creato.

8
Wayne

Ho scoperto che era necessario puntare direttamente l'interfaccia nel comando di instradamento. Senza di esso, Windows utilizzerà l'interfaccia della scheda di rete principale, invece di VPN. Nel mio caso, sembra

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

si noti l '"IF 26".

7
Dmitry Petrov

se hai IPV4 e IPV6 devi deselezionare "Usa gateway predefinito su rete remota" in entrambe le posizioni, anche se utilizzi solo IPV4

4
Dave

Se si utilizza il CMAK e si configura un file di routing che può essere scaricato dal client, Windows scaricherà il file di routing e regolerà i percorsi in modo appropriato. Ci sono opzioni per rimuovere il percorso predefinito ... e aggiungere varie route statiche e simili. Questo è noto come split-tunnel btw.

C'è un buon how-to qui: http://blogs.technet.com/b/rrasblog/archive/2007/06/11/split-tunnelling-using-cmak.aspx

3
TheCompWiz

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

Ha alcune impostazioni e tenta di rilevare alcune delle cose che non hai impostato in modo esplicito. Imposta anche il numero di interfaccia (IF) esplicitamente per contrastare alcuni problemi che alcuni utenti (come me) avevano 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 la rotta predefinita corrisponderà prima del traffico destinato alla VPN. Lo fai andando all'impostazione dell'adattatore dove apri "... Proprietà" voce di menu per l'adattatore VPN → "Networking" tab → "Protocollo Internet versione 4 ( TCP/IP) "Proprietà →" Avanzate "→ e lì si deseleziona il" Metrica automatica "checkbox (oltre al" Usa gateway predefinito ... " ovviamente) e imposta il valore nel "Metrica interfaccia:" campo su un valore inferiore alla route predefinita (vedi output ROUTE.EXE -4 print).

2
phk

Usa Aggiungi-VpnConnectionRoute cmdlet in Windows 8+.

Add-VpnConnectionRoute -ConnectionName 'My VPN Connection' -DestinationPrefix 192.168.123.0/24
2
Der_Meister

Puoi usare qualcosa come netcatcher - basta aggiungere tutti i percorsi di cui hai bisogno una volta e dimenticarlo. Aggiungerà e cancellerà automaticamente le rotte quando connetti o disconnetti la tua sessione VPN. Se il tuo indirizzo IP VPN viene ottenuto dinamicamente (DHCP), il netcatcher lo prenderà e aggiornerà le rotte in modo corretto.

1
Andy

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

salva come file (es: vpn_route.vbs) e dopo il comando esegui vpn connesso

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

Un po 'vecchio ma ho trovato un modo per farlo usando un'altra macchina. Ho un laptop dove ho configurato la connessione VPN e lì ho FreeProxy installato con Socks5 ..

Poi ho installato firefox sulla mia macchina client per usare il server proxy del portatile .. il risultato è che se uso FireFox o qualsiasi cosa che viene configurata per usare quel proxy Socks5, userà la VPN, altrimenti usa il routing standard ..

1
Lonnie

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

Sembra strano che qualcosa come facilmente spiegabile come questo è così difficile da raggiungere. Quanto potrebbe essere difficile instradare il traffico da un programma all'interfaccia VPN e tutti gli altri programmi all'interfaccia predefinita NIC? Perché dovremmo creare una macchina virtuale completa per questo? E con Linux è possibile ma anche la sua soluzione non è molto elegante.

È anche molto ricercato: mi sono imbattuto in dozzine di thread sullo stesso argomento. Quindi spero solo che qualcuno si renda conto della ridicola di questo e faccia qualcosa al riguardo. (In Windows 8!)

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

Istruzioni per Windows 7

Lo script si connetterà e instraderà il traffico attraverso la VPN fino al riavvio - puoi sostituire route add con route -p add perché la modifica permanga, ma se non hai un IP persistente con la VPN, alla fine smetterà di funzionare quando l'IP VPN i cambiamenti.

  1. Apri il Centro connessioni di rete e condivisione
  2. Apri le proprietà per la tua connessione VPN
  3. Fare clic sulla scheda Networking
  4. Per entrambi IPv4 e 6:
    1. Fai clic su Properties
    2. Fai clic su Advanced
    3. Deseleziona Use default gateway[...]
  5. Chiudi tutto aperto dai passaggi precedenti
  6. Modifica e salva lo script batch trovato di seguito
  7. Eseguilo come amministratore

È necessario sostituire quanto segue nello script:

  • <VPN> con il nome della connessione VPN che hai creato
  • <USER> con il nome utente VPN
  • <PASS> con la password VPN
  • <TARGET> con l'indirizzo IP che desideri instradare attraverso la VPN (se vuoi instradare più indirizzi, duplica semplicemente le tre linee in cui viene utilizzato il target)

Nota: Se non si desidera salvare la password nel file, sostituire <PASS> con %password% e aggiungere quanto segue dopo la prima riga dello script: 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