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

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

Quiero usar una VPN de Windows pero sólo para una red en particular, para que no se apodere de toda mi conexión de red.

por ejemplo, En lugar de que la VPN se convierta en la ruta por defecto, que sea sólo la ruta para 192.168.123.0/24

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

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

Respuestas (13)

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

Puedes desactivar la toma de control de toda tu conexión yendo a las propiedades de la VPN, pestaña Networking, propiedades Internet Protocol (TCP/IP), Advanced, desmarca 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ás que añadir manualmente la ruta cada vez, aunque podrías ponerla en un archivo por lotes.

Para añadir manualmente la ruta, ejecuta (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 pasarela VPN 10.100.100.254.

Más sobre esto en http://technet.microsoft.com/en-us/library/bb878117.aspx

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

Utilicé con éxito la técnica de @TRS-80 para conseguirlo.

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

Al mismo tiempo, necesito estar constantemente navegando por la 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 robot cantando!!! :)

Todo lo que hice fue seguir @TRS-80:

propiedades de la VPN, pestaña de redes, propiedades del “Protocolo de Internet (TCP/IP)”, Avanzado, desmarcar “Usar la puerta de enlace por defecto en la red remota”

y luego hice lo mío:

en la pestaña de DNS, marcar “registrar estas direcciones de conexión en DNS”

¡Todo funciona a la perfección!

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

Concedo que esta respuesta no refleja su petición pero uso un VM específicamente para este propósito. De esa manera sólo la red dentro de la VM está restringida por las rutas.

Usted puede encontrar algunas respuestas mejores por otras personas pero al menos esto puede darle algo para considerar como una solución fácil después de que la VM ha sido creada.

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

Descubrí que necesitaba apuntar directamente a la interfaz en el comando de ruta. Sin ello, Windows va a usar la interfaz de la tarjeta de red principal, en lugar de la 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

anotar el ‘IF 26’.

6
6
6
2018-01-26 07:11:32 +0000

Use Add-VpnConnectionRoute cmdlet en Windows 8+.

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

si tienes tanto IPV4 como IPV6 tienes que desmarcar la opción “Usar la puerta de enlace por defecto en la red remota” en ambos lugares, incluso si sólo usas IPV4

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

Si usas el CMAK y configuras un archivo de enrutamiento que el cliente pueda descargar… …Windows descargará el archivo de enrutamiento y ajustará las rutas como sea apropiado. Hay opciones para eliminar la ruta predeterminada… y añadir varias rutas estáticas y demás. Esto se conoce como un túnel dividido btw.

Hay un buen cómo hacerlo aquí: 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

Quiero añadir mi solución a la mezcla. Se ejecuta en un shell UNIX alimentado por Cygwin en Windows 7 o más reciente, pero también debería funcionar con MSYS2, Bash-on-Windows [WSL] después de la construcció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 se establecieron 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 por defecto coincidirá antes del tráfico destinado a la VPN. Para ello, vaya a la configuración del adaptador donde abre la opción de menú “… Propiedades” para el adaptador de la VPN → “Networking” ficha → “Protocolo de Internet versión 4 (TCP/IP)” Propiedades → “Avanzadas” → y allí desmarca la casilla de verificación “Métrica automática” (además de la “Utilizar la pasarela por defecto …” por supuesto) y establece el valor en el campo “Métrica de la interfaz:” a un valor inferior a la ruta por defecto (véase la salida ROUTE.EXE -4 print).

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

Un poco viejo, pero encontré una manera de hacer esto usando otra máquina. Tengo un ordenador portátil en el que configuro la conexión VPN y allí tengo instalado FreeProxy con Socks5…

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

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

Puedes usar algo como netcatcher - sólo tienes que añadir todas las rutas que necesites una vez y olvídalo. Añadirá y eliminará automáticamente las rutas cuando te conectes o desconectes de tu sesión de VPN. Si tu dirección IP de VPN es obtenida dinámicamente (DHCP) netcatcher la atrapará y actualizará las rutas de la manera correcta.

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

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

guardar como archivo (ex: vpn_route.vbs) y después de que vpn se conecte 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
1
1
2019-08-07 13:42:20 +0000

Una guía “corta” para novatos como yo, que no saben mucho de redes. No es muy nuevo aquí, pero es un resumen de todas las buenas opciones descritas en las respuestas anteriores y en otros hilos relacionados. Todo el procedimiento consiste en 3 pasos básicos:

1) Haz que todo el tráfico NO vaya a través de VPN. Para ello debes desmarcar la casilla Use default gateway on remote network en la configuración de VPN. Asegúrate de desmarcar esta casilla tanto para IPv4 como para IPv6. Por lo general, simplemente desactivo el protocolo IPv6 completamente para la conexión VPN.

(!) Es (a veces) posible que desmarcando esa casilla sea suficiente para el trabajo normal - en mi experiencia, las rutas necesarias (que dirigirán el tráfico necesario a través de la VPN) pueden ser añadidas automáticamente después de que se establezca la conexión VPN. No sé exactamente dónde y cómo se configuran estas reglas, pero tal escenario existe - probablemente es alguna magia hecha por los administradores de la red VPN.

**2) Hacer sólo el tráfico necesario que va a través de VPN. Para esto es necesario definir las rutas. Aquí tienes 3 opciones:

2.1) Añadir ruta permanente a través de la pasarela 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

donde ‘pasarela VPN’ = ‘tu 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 el nombre de su conexión VPN o, si utiliza PowerShell, puede obtener una salida compacta ejecutando ipconfig | grep -A5 PPP (que dará 5 líneas después de encontrar cada conexión PPP).

Desventajas: tendrá que volver a crear las rutas si su IP de la VPN cambia.

2.2) Agregar una ruta permanente a través de la interfaz de la 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 su dirección VPN (w.x.y.z) va a cambiar.

Contras: es necesario volver a crear rutas con un nuevo ID si elimina su conexión VPN.

  1. 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 manejar estas reglas.

3) Comprueba y asegúrate de que el enrutamiento funciona como se espera!

Si has añadido rutas persistentes, puedes comprobarlas ejecutando netstat -rn | grep -A10 'Persistent Routes'.

Y, por último, ejecuta unos cuantos comandos tracert contra ambas direcciones IP que se supone que deben ser accedidas a través de VPN y contra las que deberían funcionar sin VPN.

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

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

Parece extraño que algo tan fácilmente explicable como esto sea tan difícil de conseguir. ¿Qué tan difícil puede ser enrutar el tráfico de un programa a la interfaz de la VPN y el resto de los programas a la interfaz NIC por defecto? ¿Por qué tendríamos que configurar toda una máquina virtual para eso? Y con Linux es posible, pero su solución tampoco es muy elegante.

También es muy buscado: Me he encontrado con docenas de hilos sobre el mismo tema. Así que sólo 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 tu VPN hasta que se reinicie - puedes reemplazar route add con route -p add para que el cambio persista, pero si no tienes una IP persistente con tu VPN, eventualmente dejará de funcionar cuando la IP de tu VPN cambie.

  1. Abrir el Centro de Redes y Compartición
  2. Abre las propiedades de tu conexión VPN
  3. Haga clic en la pestaña Networking
  4. Tanto para IPv4 como para 6:
  5. Abra el Centro de Redes y Compartición. Haga clic en Properties
  6. Haga clic en Advanced
  7. Desmarque Use default gateway[...]
  8. Cierre todo lo que se haya abierto en los pasos anteriores
  9. Edite y guarde el script de lotes que se encuentra debajo
  10. Haga clic en <VPN>
  11. Haga clic en <USER> 9. Haga clic en
  12. Haga clic en
  13. Haga clic en
  14. Haga clic en <PASS> 13. Haga clic en
  15. Haga clic en
  16. Haga clic en
  17. Haga clic en
  18. Haga clic en
  19. Haga clic en
  20. Haga clic en
  21. Haga clic en
  22. Haga clic en
  23. Haga clic en
  24. Haga clic en
  25. Haga clic en
  26. Haga clic en
  27. Haga clic en
  28. Haga clic en
  29. Haga clic en
  30. Haga clic en
  31. Ejecútelo como administrador

Necesita reemplazar lo siguiente en el script:

  • <TARGET> con el nombre de la conexión VPN que ha creado
  • <PASS> con el nombre de usuario de la VPN
  • %password% con la contraseña de la VPN
  • set password= Input password: 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 utiliza el objetivo)

_Nota: Si no quieres guardar la contraseña en el archivo, reemplaza &007 por &007 y añade lo siguiente después de la primera línea del guión: &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