it-swarm.dev

¿Cómo puedo hacer que el tráfico selectivo de la ruta VPN de Windows (por red de destino)?

Quiero usar una VPN de Windows pero solo para una red particular, para que no se haga cargo de toda mi conexión de red.

por ejemplo, en lugar de que la VPN se convierta en la ruta predeterminada, conviértala solo en 192.168.123.0/24

(Puedo ver que hay una solución para esto para Ubuntu en esta pregunta , pero a veces tengo que hacerlo también en Windows)

¿Se puede automatizar esto para que cada vez que me conecte a la VPN haga esto?

135
Legooolas

Puede desactivar el control de su conexión completa yendo a las propiedades de la VPN, Networking tab, Internet Protocol (TCP/IP) properties, Advanced, desmarque Use default gateway on remote network. Esto puede o no dejar una ruta a 192.168.123.0/24 dependiendo de la configuración del servidor VPN. Si no lo hace, tendrá que agregar la ruta manualmente cada vez, aunque podría ponerla en un archivo por lotes.

Para agregar manualmente la ruta, ejecute (como administrador):

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254

Este ejemplo hará una ruta persistente (no es necesario ejecutar el comando después de un reinicio) a la IP 192.168.0.12 a través de la puerta de enlace VPN 10.100.100.254.

Más información sobre esto en http://technet.Microsoft.com/en-us/library/bb878117.aspx

135
TRS-80

Usé exitosamente la técnica de @ TRS-80 para lograr esto.

Trabajo desde casa y tengo que hacer VPN en la red corporativa para mi correo electrónico (¡¡odio el correo web !!).

Al mismo tiempo, necesito estar constantemente navegando para obtener información y también necesito youtube para mi música de fondo ... ¡Ahora definitivamente no quieres transmitir youtube desde una VPN ya que eso hace que suene como un canto de robots! :)

Todo lo que hice fue seguir a @ TRS-80:

propiedades de la VPN, pestaña Redes, "Protocolo de Internet (TCP/IP)" propiedades, Avanzado, desmarque "Usar la puerta de enlace predeterminada en la red remota"

y luego hice mi propia

en la pestaña DNS, marque "registrar estas direcciones de conexiones en DNS"

¡Todo funciona a la perfección!

19
bPratik

Concedido que esta respuesta no refleja su solicitud, pero uso un VM específicamente para este propósito. De esa forma, solo las redes restringen la red dentro de VM.

Puede encontrar algunas respuestas mejores por parte de otras personas, pero al menos esto puede darle algo que considerar, ya que es una solución fácil después de que se haya creado el VM.

8
Wayne

Encontré que necesitaba apuntar directamente a la interfaz en el comando de ruta. Sin él, Windows utilizará la interfaz de la tarjeta de red principal, en lugar de VPN. En mi 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

tenga en cuenta el 'IF 26'.

7
Dmitry Petrov

si tiene IPV4 e IPV6, debe desactivar la opción "Usar la puerta de enlace predeterminada en la red remota" en ambos lugares, incluso si solo usa IPV4

4
Dave

Si usa el CMAK y configura un archivo de enrutamiento que el cliente puede descargar ... windows descargará el archivo de enrutamiento y ajustará las rutas según corresponda. Hay opciones para eliminar la ruta predeterminada ... y agregar varias rutas estáticas y similares. Esto se conoce como un túnel dividido por cierto.

Hay un buen manual de instrucciones aquí: http://blogs.technet.com/b/rrasblog/archive/2007/06/11/split-tunnelling-using-cmak.aspx

3
TheCompWiz

Quiero añadir mi solución a la mezcla. Se ejecuta en un shell UNIX con tecnología Cygwin en Windows 7 o posterior, pero también debería funcionar con MSYS2, Bash-on-Windows [WSL] después de la compilación 14986 o Busybox para Windows). Necesita ser ejecutado con privilegios de administrador.

Tiene algunas configuraciones e intenta detectar algunas de las cosas que no estableciste explícitamente. También establece el número de interfaz (IF) explícitamente para contrarrestar algunos problemas que algunos usuarios (como yo) tuvieron con las otras soluciones aquí.

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

También vale la pena señalar que podría ser necesario establecer manualmente una métrica baja o, de lo contrario, la ruta predeterminada coincidirá antes del tráfico destinado a la VPN. Para ello, vaya a la configuración del adaptador donde abre el elemento de menú "... Propiedades" para el adaptador VPN → "Redes" tab → "Protocolo de Internet versión 4 (TCP/IP)" Propiedades → "Avanzado" → y ahí desmarca la casilla de verificación "Métrica automática" (además de la "" Usar la puerta de enlace predeterminada ... "por supuesto) y establece el valor en el "Métrica de la interfaz:" campo a un valor inferior a la ruta predeterminada (consulte la salida ROUTE.EXE -4 print).

2
phk

Use Add-VpnConnectionRoute cmdlet en Windows 8+.

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

Puede usar algo como netcatcher - simplemente agregue todas las rutas que necesita una vez y olvídese. Automáticamente agregará y eliminará rutas cuando conecte o desconecte su sesión VPN. Si su dirección IP de VPN se obtiene de forma dinámica (DHCP), NetCatcher la detectará y actualizará las rutas de manera correcta.

1
Andy

del foro ruso: http://forum.ixbt.com/topic.cgi?id=14:43549

guardar como archivo (ej: vpn_route.vbs) y después de vpn connected ejecutar el 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
1
shibormot

Un poco viejo pero encontré una manera de hacerlo usando otra máquina. Tengo una computadora portátil donde configuro la conexión VPN y allí tengo FreeProxy configurado con Socks5 ..

Luego configuré Firefox en la máquina de mi cliente para usar el servidor proxy de la computadora portátil ... el resultado es que si uso FireFox o cualquier cosa que esté configurada para usar ese proxy Socks5, usará la VPN, de lo contrario, usa el enrutamiento estándar.

1
Lonnie

Esto no se puede hacer en Windows sin usar programas adicionales, archivos por lotes o la línea de comandos. Una alternativa es obtener una máquina virtual (o física) en la que puede ejecutar la VPN.

Parece extraño que algo tan fácilmente explicable como esto sea tan difícil de lograr. ¿Qué tan difícil podría ser simplemente enrutar el tráfico de un programa a la interfaz VPN y todos los otros programas a la interfaz predeterminada NIC? ¿Por qué necesitaríamos configurar una máquina virtual completa para eso? Y con Linux es posible pero su solución tampoco es muy elegante.

También es muy buscado: me encontré con docenas de hilos sobre el mismo tema. Así que solo espero que alguien se dé cuenta de lo absurdo de esto y haga algo al respecto. (En Windows 8!)

Esta solución es de un archivo por lotes no atribuido . Ha sido ligeramente adaptado.

Instrucciones para Windows 7

El script se conectará y enrutará el tráfico a través de su VPN hasta que se reinicie, puede reemplazar route add con route -p add para que el cambio persista, pero si no tiene una IP persistente con su VPN, finalmente dejará de funcionar cuando su VPN IP cambios.

  1. Abre el Centro de redes y recursos compartidos.
  2. Abra las propiedades para su conexión VPN
  3. Haga clic en la pestaña Networking
  4. Para IPv4 y 6:
    1. Haga clic en Properties
    2. Haga clic en Advanced
    3. Desmarque Use default gateway[...]
  5. Cierra todo lo abierto desde los pasos anteriores.
  6. Edite y guarde el script por lotes que se encuentra a continuación
  7. Ejecutarlo como administrador

Debe reemplazar lo siguiente en el script:

  • <VPN> con el nombre de la conexión VPN que creó
  • <USER> con el nombre de usuario VPN
  • <PASS> con la contraseña VPN
  • <TARGET> con la dirección IP que desea enrutar a través de la VPN (si desea enrutar más direcciones, simplemente duplique las tres líneas donde se usa el objetivo)

Nota: Si no desea guardar la contraseña en el archivo, reemplace <PASS> con %password% y agregue lo siguiente después de la primera línea del 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

Una guía 'breve' para novatos como yo, que no saben mucho sobre redes. No hay muchas novedades aquí, pero un resumen de todas las buenas opciones descritas en respuestas anteriores y en otros hilos relacionados. Todo el procedimiento consta de 3 pasos básicos:

1) Realiza todo el tráfico NO pasa por VPN. Para esto debes desmarcar la casilla de verificación Use default gateway on remote network en la configuración de VPN. Asegúrese de desmarcar esta casilla de verificación para IPv4 e IPv6. Por lo general, simplemente deshabilito el protocolo IPv6 por completo para la conexión VPN.

(!) Es (a veces) posible que desmarcar esa casilla de verificación sea suficiente para el trabajo normal; en mi experiencia, las rutas necesarias (que dirigirán el tráfico necesario a través de VPN) se pueden agregar automáticamente después de establecer la conexión VPN. No sé exactamente dónde y cómo se configuran estas reglas, pero existe tal escenario, probablemente es algo mágico hecho por los administradores de redes VPN.

2) Realice solo el tráfico necesario que va a través de VPN. Para esto necesita definir rutas. Aquí tienes 3 opciones:

2.1) Agregar ruta permanente a través de la puerta de enlace 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

where 'VPN gateway' = 'su IP en la red VPN' = w.x.y.z y dirección/red de destino = a.b.c.d. Puede encontrar w.x.y.z ejecutando ipconfig y buscando su nombre de conexión VPN o, si usa PowerShell, puede obtener una salida compacta ejecutando ipconfig | grep -A5 PPP (que generará 5 líneas después de encontrar cada PPP conexión).

Contras: tendrá que volver a crear rutas si su IP VPN cambiará.

2.2) Agregar ruta permanente a través de la interfaz de red VPN:

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

donde a.b.c.d es la dirección/red de destino y interface number es el identificador de su conexión VPN. Este ID se puede encontrar ejecutando netstat -rn o, para una salida más compacta, netstat -rn | grep -A10 'Interface List'.

Pros: no es necesario cambiar nada si cambia su dirección VPN (w.x.y.z).

Contras: necesita volver a crear rutas con una nueva ID si elimina su conexión VPN.

2.3) Usar el cmdlet de PowerShell:

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

Pros: las rutas necesarias se agregan cada vez que se establece una conexión VPN y se eliminan cada vez que se desconecta.

Contras: no hay un cmdlet Get-VpnConnectionRoutes, por lo que puede ser difícil administrar estas reglas.

) ¡Verifique y asegúrese de que el enrutamiento funcione como se espera!

Si agregó rutas persistentes, puede verificarlas ejecutando netstat -rn | grep -A10 'Persistent Routes'.

Y, finalmente, ejecute algunos comandos tracert contra ambas direcciones IP a las que se debe acceder a través de VPN y contra aquellas que deberían funcionar sin VPN.

0
o.v