Como posso fazer o tráfego seletivo de rota de VPN do Windows (por rede de destino)?

129

Eu quero usar uma VPN do Windows, mas apenas para uma rede específica, para que ela não ocupe toda a minha conexão de rede.

Por exemplo, em vez de a VPN se tornar a rota padrão, torne-a somente a rota para 192.168.123.0/24

(Eu posso ver que há uma solução para isso para o Ubuntu nesta questão , mas às vezes eu tenho que fazer isso no Windows também

Isso pode ser automatizado para que, sempre que eu me conectar à VPN, ele faça isso?

    
por Legooolas 24.07.2009 / 11:33

12 respostas

129

Você pode desativar a conexão inteira acessando as propriedades da VPN, Networking tab, Internet Protocol (TCP/IP) properties, Advanced , untick Use default gateway on remote network . Isso pode ou não deixar uma rota para 192.168.123.0/24 dependendo da configuração do servidor VPN. Se isso não acontecer, você precisará adicionar manualmente a rota a cada vez, embora possa colocá-la em um arquivo de lote.

Para adicionar manualmente a rota, execute (como administrador):

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254

Este exemplo tornará uma rota persistente (não é necessário executar o comando após uma reinicialização) para o IP 192.168.0.12 através do gateway de VPN 10.100.100.254 .

Mais sobre isso no link

    
por 24.07.2009 / 13:11
18

Eu usei com sucesso a técnica do @ TRS-80 para conseguir isso.

Eu trabalho em casa e tenho que VPN na rede corporativa para o meu e-mail (eu odeio webmail !!).

Ao mesmo tempo, eu preciso estar constantemente surfando para informações e também preciso do youtube para minha música de fundo ... Agora você definitivamente não quer transmitir o youtube de uma VPN, já que isso faz parecer um Robot Singing! !! :)

Tudo o que fiz foi seguir @ TRS-80:

properties of the VPN, Networking tab, "Internet Protocol (TCP/IP)" properties, Advanced, untick "Use default gateway on remote network"

e depois fiz o meu:

under DNS tab, tick "register this connections addresses in DNS"

Tudo funciona perfeitamente!

    
por 28.02.2011 / 17:05
8

Concedido que essa resposta não reflete sua solicitação, mas eu uso uma VM especificamente para essa finalidade. Dessa forma, apenas a rede dentro da VM é restrita pelas rotas.

Você pode encontrar algumas respostas melhores de outras pessoas, mas pelo menos isso pode lhe dar algo a considerar como uma solução fácil após a criação da VM.

    
por 24.07.2009 / 12:09
7

Eu achei que precisava apontar diretamente a interface no comando route. Sem isso, o Windows vai usar a interface principal da placa de rede, em vez de VPN. No meu caso, parece que

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

observe o 'IF 26'.

    
por 25.09.2013 / 07:41
4

se você tiver o IPV4 e IPV6, você tem que desmarcar o "Usar gateway padrão na rede remota" em ambos os lugares, mesmo se você usar apenas IPV4

    
por 29.07.2011 / 11:03
3

Se você usar o CMAK e configurar um arquivo de roteamento que o cliente possa baixar ... o Windows fará o download do arquivo de roteamento & ajustar rotas conforme apropriado. Existem opções para remover a rota padrão ... e adicionar várias rotas estáticas & tal. Isso é conhecido como um túnel dividido btw.

Há um bom tutorial sobre isso aqui: link

    
por 28.03.2011 / 20:32
2

Eu quero adicionar minha solução ao mix. Ele é executado em um shell UNIX equipado com Cygwin no Windows 7 ou mais recente, mas também deve funcionar com o MSYS2, o Bash-on-Windows [WSL] após o build 14986 ou o Busybox para Windows). Precisa ser executado com privilégios de administrador.

Ele possui algumas configurações e tenta detectar algumas das coisas que você não definiu explicitamente. Ele também define o número da interface (IF) explicitamente para combater alguns problemas que alguns usuários (como eu) tiveram com as outras soluções aqui.

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

Também é importante notar que pode ser necessário definir manualmente uma métrica baixa ou, caso contrário, a rota padrão corresponderá antes do tráfego destinado à VPN. Você faz isso indo para a configuração do adaptador onde você abre o item de menu "… Properties" para o adaptador VPN → "Networking" > "Internet Protocol Version" 4 (TCP / IP) " Propriedades → " Avançado " → e você desmarca a caixa de seleção " Métrica automática " (além do " Use o gateway padrão ... ", é claro) e defina o valor no campo " Métrica da interface: " para um valor menor que a rota padrão (consulte ROUTE.EXE -4 print output).

    
por 26.10.2015 / 16:29
2

Use o cmdlet Add-VpnConnectionRoute no Windows 8 +.

Add-VpnConnectionRoute -ConnectionName 'My VPN Connection' -DestinationPrefix 192.168.123.0/24
    
por 26.01.2018 / 08:11
1

Um pouco velho, mas eu encontrei uma maneira de fazer isso usando outra máquina. Eu tenho um laptop onde eu configuro a conexão VPN e lá eu tenho o FreeProxy configurado com o Socks5 ..

Então eu configuro o firefox na minha máquina cliente para usar o servidor proxy do laptop. O resultado é que se eu usar o FireFox ou qualquer coisa que esteja configurada para usar esse proxy Socks5, ele usará a VPN, caso contrário ele usa roteamento padrão ..

    
por 20.04.2010 / 21:46
1

Você pode usar algo como netcatcher - basta adicionar todas as rotas de que precisa uma vez e esquecê-las. Ele adicionará e excluirá automaticamente rotas quando você conectar ou desconectar sua sessão VPN. Se o seu endereço IP da VPN for obtido dinamicamente (DHCP), o netcatcher irá detectá-lo e atualizar as rotas corretamente.

    
por 30.08.2011 / 11:23
1

do fórum russo: link

salve como arquivo (ex: vpn_route.vbs) e depois vpn conectado execute o comando

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
    
por 18.02.2013 / 17:37
1

Isso não pode ser feito no Windows sem usar programas adicionais, arquivos em lote ou a linha de comando. Uma alternativa é obter uma máquina virtual (ou física) na qual você possa executar a VPN.

Parece estranho que algo tão facilmente explicável como isso seja tão difícil de alcançar. Quão difícil poderia ser apenas rotear o tráfego de um programa para a interface VPN e todos os outros programas para a interface NIC padrão? Por que precisaríamos configurar uma máquina virtual inteira para isso? E com o Linux é possível, mas sua solução também não é muito elegante.

É muito procurado também: me deparei com dezenas de tópicos sobre o mesmo assunto. Então eu só espero que alguém perceba o absurdo disso e faça algo sobre isso. (No Windows 8!)

Esta solução é de um arquivo em lote não atribuído . Foi ligeiramente adaptado.

Instruções para o Windows 7

O script se conectará e roteará o tráfego por meio de sua VPN até a reinicialização - você poderá substituir route add por route -p add para que a alteração persista, mas se você não tiver um IP persistente com sua VPN, ele será eventualmente pare de funcionar quando o seu IP VPN mudar.

  1. Abra o Centro de Rede e Compartilhamento
  2. Abra as propriedades da sua conexão VPN
  3. Clique na guia Networking
  4. Para IPv4 e 6:
    1. Clique em Properties
    2. Clique em Advanced
    3. Desmarque Use default gateway[...]
  5. Feche tudo o que foi aberto nas etapas anteriores
  6. Edite e salve o script em lote encontrado abaixo
  7. Execute como administrador

Você precisa substituir o seguinte no script:

  • <VPN> com o nome da conexão VPN que você criou
  • <USER> com o nome de usuário da VPN
  • <PASS> com a senha da VPN
  • <TARGET> com o endereço IP que você deseja rotear através da VPN (se você quiser rotear mais endereços, simplesmente duplique as três linhas onde o alvo é usado)

Observação: Se você não quiser salvar a senha no arquivo, substitua <PASS> por %password% e adicione o seguinte após a primeira linha do 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
    
por 11.10.2010 / 23:31