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


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

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

(Eu posso ver que há uma solução para isso para o Ubuntu nesta pergunta, 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?


126


origem


Existe uma questão relacionada para filtrar um monte de sites através de VPN? Parece que as respostas aqui funcionarão apenas para o caso em que há um único site por trás da VPN. Eu estou na China e cerca de metade dos sites que eu gostaria de usar estão bloqueados, então deve passar por VPN, mas outros sites são mais rápidos / suaves sem VPN. - hippietrail
Fui em frente e fiz uma nova pergunta: superuser.com/questions/925947 - hippietrail


Respostas:


Você pode desativar a conexão inteira acessando as propriedades da VPN, Networking aba, Internet Protocol (TCP/IP) propriedades, Advanced, desmarque 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 fará 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 em http://technet.microsoft.com/pt-br/library/bb878117.aspx


125



"Você terá que adicionar manualmente a rota" ... como? Como alguém força, digamos, "192.168.10.123" a passar pela vpn, mas nada mais? - Timothy Khouri
Pessoalmente, eu encontrei apenas desligar a caixa de seleção foi o suficiente. Não precisei adicionar rotas. Eu verifiquei que tudo está indo onde eu esperaria através de vários tracerts. - eidylon
O mesmo, essa caixa de seleção era tudo que era necessário. - Luk
Por favor, esclareça. Qual tráfego é roteado pela VPN? É apenas o tráfego segmentado para o IP do servidor VPN? Por exemplo, se a conexão VPN for para "meu.domínio.com", isso significa que todo o tráfego no cliente para "meu.dominio.com" passa pela VPN e tudo o mais vai para o gateway padrão? - Triynko
Eu usei o comando "route print" e verifiquei que as rotas geradas pelo Windows 7 estavam completamente erradas. Ele não estava enviando tráfego endereçado para o IP da minha VPN para a VPN ... em vez disso, estava enviando para o meu gateway local. Havia também algumas entradas circulares na tabela. Excluí a rota criada pelo Windows, depois adicionei manualmente a rota correta para que a entrada do endereço IP do servidor VPN usasse o gateway da VPN e o IP local do cliente para a interface. O tráfego para o meu servidor VPN foi roteado com sucesso através do túnel VPN, e todo o tráfego restante não foi afetado como esperado. Funciona bem. - Triynko


Eu usei com sucesso @ TRS-80é a técnica 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 que fiz foi seguir @ TRS-80:

propriedades da VPN, guia Rede, "Protocolo da Internet (TCP / IP)"   propriedades, Avançado, desmarque "Usar gateway padrão na rede remota"

e depois fiz o meu próprio:

na guia DNS, marque "registrar os endereços das conexões no DNS"

Tudo funciona perfeitamente!


18





Concedido esta 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 depois que a VM foi criada.


8



Essa é uma boa solução, desde que seu hardware possa lidar com isso bem. - Enigma


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

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

anote o 'IF 26'.


7



Isso funcionou para mim também. Para descobrir qual interface você precisa, basta executar o comando "route print" e verificar as primeiras linhas exibindo a lista de interfaces disponíveis (encontre a sua VPN lá e verifique o seu IF - estará na primeira coluna). - Funbit
Há um artigo brilhante sobre isso: ligação. Usando o 0.0.0.0 como o IP do gateway padrão parece funcionar muito bem, então não precisa ser ajustado após a mudança. Seria ótimo incorporar nesta resposta, já que imo é muito mais útil do que o de cima. - lpd


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


4





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 e ajustará as rotas conforme apropriado. Existem opções para remover a rota padrão ... e adicionar várias rotas estáticas e tal. Isso é conhecido como um túnel dividido btw.

Há um bom como fazer aqui: http://blogs.technet.com/b/rrasblog/archive/2007/06/11/split-tunnelling-using-cmak.aspx


3





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 conter 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 vale a pena 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 "… Propriedades" item de menu para o adaptador VPN → "Networking" aba → "Protocolo da Internet versão 4 (TCP / IP)" Propriedades → "Avançado" → e aí você desmarca a "Métrica automática" caixa de seleção (além do "Usar gateway padrão ..." claro) e definir o valor no "Métrica de interface:" campo para um valor menor que a rota padrão (consulte ROUTE.EXE -4 print saída).


2





Usar Add-VpnConnectionRoute cmdlet no Windows 8+.

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

2



Isso funcionou perfeitamente para mim no Windows 10. - x-ray