Excluir un host de la ruta predeterminada de una VPN de Windows
Un perfil de túnel completo posee la ruta predeterminada. Un host necesita un prefijo más estrecho en la interfaz física, que se vuelve a añadir después de cada conexión.
El portátil se conecta a la VPN de la oficina y todo lo sigue, incluida la página web de una impresora y una intranet que solo responde en la red local. Una ruta hecha a mano lo arregla durante una hora, luego la conexión se cae, vuelve, y la excepción desapareció. Nada va mal con el túnel: Windows mantiene una única tabla de enrutamiento, y el adaptador de VPN reescribe su parte de esa tabla en cada conexión. Lo que sobrevive es todo lo que vive fuera de las entradas propias del adaptador.
Qué entrada se queda el túnel
Registre la tabla dos veces, una con el túnel bajado y otra con él subido, y compare las líneas predeterminadas. Cuando el perfil reclama el prefijo predeterminado, la entrada del adaptador es la fila más ancha de la tabla, así que cualquier excepción tiene que ser más estrecha que ella. Es aritmética sobre la longitud del prefijo y no una declaración sobre confianza o política. También fija qué interfaz debe nombrar la excepción.
Anote el índice de interfaz y la puerta de enlace local antes de seguir, porque ambos cambian cuando la máquina se une a otra red. Los comandos de abajo los leen de la máquina, no de la memoria.
route print -4
Find-NetRoute -RemoteIPAddress 198.51.100.30
El segundo comando informa de la interfaz y el siguiente salto que esa única dirección usaría ahora mismo, lo que es mejor que leer cuarenta filas y adivinar. Ejecútelo antes y después de conectar y tendrá el par que merece la pena adjuntar a un registro de cambio. Ambas salidas aportan los números usados en el resto de esta página.
Una ruta de host gana por especificidad
La coincidencia del prefijo más largo decide el ganador, así que un /32 por la puerta de enlace física supera a la predeterminada por el túnel sin tocar el túnel. El tráfico hacia esa dirección sale por la interfaz local mientras todo lo demás conserva su camino actual. El túnel sigue llevando la predeterminada y simplemente deja de ser el único candidato para ese destino. La longitud del prefijo es la única palanca que expone la tabla, y para esta tarea basta.
La especificidad también descarta el atajo obvio de excluir un nombre de dominio, porque la tabla compara direcciones y un nombre puede resolverse en varias. Resuelva primero el host y luego decida cuál de sus direcciones merece la excepción.
Para todo lo que sigue, suponga una conexión llamada Office, una puerta de enlace local 10.0.0.1 en la interfaz 7, y un destino en 198.51.100.30. Son marcadores de posición y no valores predeterminados, y los comandos de arriba producen los valores que su máquina usa realmente. Guarde esa nota de sustitución con el cambio para que el siguiente lector no copie los números.
Haga que la ruta sobreviva a la próxima reconexión
Windows no ofrece ninguna instrucción de exclusión en una conexión VPN, así que la excepción tiene que vivir en la interfaz física, donde el adaptador no la reescribirá. El cmdlet que parece la respuesta hace lo contrario: Add-VpnConnectionRoute mueve un prefijo dentro del túnel, que es el caso espejo en el que un perfil dividido debería llevar un destino y dejar el resto en local. Recurrir a él aquí garantiza que el tráfico que quería dejar fuera entre.
La forma manual es un solo comando. Su debilidad es el cambio de red y no la reconexión.
route -p add 198.51.100.30 mask 255.255.255.255 10.0.0.1 metric 1 if 7
Eso sobrevive a un reinicio gracias a -p y envía una dirección por la interfaz 7 mientras el túnel lleva todo lo demás. Mueva el portátil a otra red y tanto la puerta de enlace como el índice quedan obsoletos, así que la entrada falla en silencio. Anote quién es su dueño y cuándo debe eliminarse.
Un script de conexión es la versión más robusta, porque vuelve a añadir la excepción después de cada conexión en lugar de esperar que la entrada haya sobrevivido. Las dos líneas de abajo pertenecen a lo que arranca el túnel, no a un script de inicio de sesión.
rasdial Office
route add 198.51.100.30 mask 255.255.255.255 10.0.0.1 metric 1 if 7
Lo que levante el túnel es el sitio correcto para la segunda línea, y rasdial solo vuelve una vez establecida la conexión, así que la ruta aterriza detrás de las entradas propias del adaptador. Ejecútelo otra vez tras una reanudación, porque una suspensión puede tirar la ruta y dejar el túnel levantado. Si la tarea es la inversa, empujar un solo prefijo dentro del túnel mientras el resto queda en local, entonces Add-VpnConnectionRoute es la herramienta correcta.
El enrutamiento no puede elegir un proceso
A veces el requisito es más estrecho que un destino: un programa debería tomar el camino local mientras todo lo demás permanece dentro del túnel. El enrutamiento no puede expresar eso, porque compara direcciones y no procesos. El patrón viable empuja el problema al lanzador.
Mantenga el perfil fuera de la ruta predeterminada y arranque ese único programa ligado a la dirección de la interfaz local, así la excepción pasa a ser el comando de arranque y el túnel conserva lo que ya gestionaba. Nada cambia en la tabla de enrutamiento, y por eso esto sobrevive a las reconexiones. También significa que el túnel no debe poseer la ruta predeterminada de entrada, así que es un diseño distinto y no un parche sobre el anterior.
Su debilidad es operativa y no técnica. El programa debe arrancar siempre a través del envoltorio, y si falta la ligadura tras una reanudación, toma en silencio cualquier camino que ofrezca la tabla. Eso es tolerable para un navegador que abre a propósito e inaceptable para cualquier cosa que no deba salir nunca del túnel.
Las conexiones por usuario tampoco lo resuelven. Windows puede limitar una conexión a una cuenta mientras la tabla de enrutamiento sigue siendo de toda la máquina, así que una conexión limitada a una cuenta que tenga una ruta predeterminada sigue redirigiendo todos los procesos de la máquina, incluidas otras sesiones. El ámbito solo se vuelve real cuando el ámbito de la ruta coincide con la cuenta. Dos personas que comparten un portátil comparten por tanto una tabla, y la segunda hereda el túnel que haya arrancado la primera.
Confirme que la excepción sobrevivió a una reconexión
Pruebe el cambio tal como fallará: desconecte, reconecte, abra una aplicación nueva, y luego pida una dirección que deba quedarse local y otra que deba usar el túnel. Compare ambas con Find-NetRoute en el estado conectado.
Si el prefijo falta de la tabla tras una reconexión, vive en el objeto equivocado y no en el formato equivocado. Muévalo a la interfaz física y repita la prueba. Guarde ambas salidas de comandos con el registro de cambio, porque una instantánea del estado que funciona responde más adelante a más preguntas que un párrafo de explicación. La siguiente persona querrá saber qué produjo la conexión, no qué pretendía usted que produjera.