Excluír un host da ruta predeterminada dunha VPN de Windows
Un perfil de túnel completo posúe a ruta predeterminada. Un host necesita un prefixo máis estreito na interface física, que se volve engadir despois de cada conexión.
O portátil conéctase á VPN da oficina e todo o segue, incluída a páxina web dunha impresora e unha intranet que só responde na rede local. Unha ruta feita a man arranxa iso durante unha hora, despois a conexión cae, volve, e a excepción desapareceu. Non hai nada mal co túnel: Windows mantén unha única táboa de encamiñamento, e o adaptador de VPN reescribe a súa parte desa táboa en cada conexión. O que sobrevive é todo o que vive fóra das entradas propias do adaptador.
Que entrada queda o túnel
Rexistra a táboa dúas veces, unha co túnel baixado e outra con el subido, e compara as liñas predeterminadas. Cando o perfil reclama o prefixo predeterminado, a entrada do adaptador é a fila máis ancha da táboa, así que calquera excepción ten que ser máis estreita ca ela. É aritmética sobre a lonxitude do prefixo e non unha declaración sobre confianza ou política. Tamén fixa que interface debe nomear a excepción.
Anota o índice de interface e a pasarela local antes de seguir, porque ambos cambian cando a máquina se une a outra rede. Os comandos de abaixo lenos da máquina, non da memoria.
route print -4
Find-NetRoute -RemoteIPAddress 198.51.100.30
O segundo comando informa da interface e o seguinte salto que esa única dirección usaría agora mesmo, o que é mellor que ler corenta filas e adiviñar. Execútao antes e despois de conectar e terás o par que paga a pena xuntar a un rexistro de cambio. Ambas saídas achegan os números usados no resto desta páxina.
Unha ruta de host gaña por especificidade
A coincidencia do prefixo máis longo decide o gañador, así que un /32 pola pasarela física supera a predeterminada polo túnel sen tocar o túnel. O tráfico cara a esa dirección sae pola interface local mentres todo o demais conserva o seu camiño actual. O túnel segue levando a predeterminada e simplemente deixa de ser o único candidato para ese destino. A lonxitude do prefixo é a única panca que expón a táboa, e para esta tarefa abonda.
A especificidade tamén descarta o atallo obvio de excluír un nome de dominio, porque a táboa compara enderezos e un nome pode resolverse en varios. Resolve primeiro o host e logo decide cal dos seus enderezos merece a excepción.
Para todo o que segue, supón unha conexión chamada Office, unha pasarela local 10.0.0.1 na interface 7, e un destino en 198.51.100.30. Son marcadores de posición e non valores predeterminados, e os comandos de arriba producen os valores que a túa máquina usa realmente. Garda esa nota de substitución co cambio para que o seguinte lector non copie os números.
Fai que a ruta sobreviva á próxima reconexión
Windows non ofrece ningunha instrución de exclusión nunha conexión VPN, así que a excepción ten que vivir na interface física, onde o adaptador non a reescribirá. O cmdlet que parece a resposta fai o contrario: Add-VpnConnectionRoute move un prefixo dentro do túnel, que é o caso espello no que un perfil dividido debería levar un destino e deixar o resto en local. Recorrer a el aquí garante que o tráfico que querías deixar fóra entre.
A forma manual é un só comando. A súa febleza é o cambio de rede e non a reconexión.
route -p add 198.51.100.30 mask 255.255.255.255 10.0.0.1 metric 1 if 7
Iso sobrevive a un reinicio grazas a -p e envía un enderezo pola interface 7 mentres o túnel leva todo o demais. Move o portátil a outra rede e tanto a pasarela como o índice quedan obsoletos, así que a entrada falla en silencio. Anota quen é o seu dono e cando se debe eliminar.
Un script de conexión é a versión máis robusta, porque volve engadir a excepción despois de cada conexión en lugar de esperar que a entrada sobrevivise. As dúas liñas de abaixo pertencen ao que arranca o túnel, non 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
O que levante o túnel é o sitio correcto para a segunda liña, e rasdial só volve unha vez establecida a conexión, así que a ruta aterra detrás das entradas propias do adaptador. Execútao outra vez tras unha reanudación, porque unha suspensión pode tirar a ruta e deixar o túnel levantado. Se a tarefa é a inversa, empurrar un só prefixo dentro do túnel mentres o resto queda en local, entón Add-VpnConnectionRoute é a ferramenta correcta.
O encamiñamento non pode escoller un proceso
Ás veces o requisito é máis estreito ca un destino: un programa debería tomar o camiño local mentres todo o demais permanece dentro do túnel. O encamiñamento non pode expresar iso, porque compara enderezos e non procesos. O patrón viable empurra o problema ao lanzador.
Mantén o perfil fóra da ruta predeterminada e arranca ese único programa ligado ao enderezo da interface local, así a excepción pasa a ser o comando de arranque e o túnel conserva o que xa xestionaba. Nada cambia na táboa de encamiñamento, e por iso isto sobrevive ás reconexións. Tamén significa que o túnel non debe posuír a ruta predeterminada de entrada, así que é un deseño distinto e non un parche sobre o anterior.
A súa febleza é operativa e non técnica. O programa debe arrancar sempre a través do envoltorio, e se falta a ligazón tras unha reanudación, toma en silencio calquera camiño que ofreza a táboa. Iso é tolerábel para un navegador que abres a propósito e inaceptábel para calquera cousa que non deba saír nunca do túnel.
As conexións por usuario tampouco o resolven. Windows pode limitar unha conexión a unha conta mentres a táboa de encamiñamento segue a ser de toda a máquina, así que unha conexión limitada a unha conta que teña unha ruta predeterminada segue redirixindo todos os procesos da máquina, incluídas outras sesións. O ámbito só se volve real cando o ámbito da ruta coincide coa conta. Dúas persoas que comparten un portátil comparten por tanto unha táboa, e a segunda herda o túnel que arrancase a primeira.
Confirma que a excepción sobreviviu a unha reconexión
Proba o cambio tal como fallará: desconecta, reconecta, abre unha aplicación nova, e despois pide un enderezo que deba quedar local e outro que deba usar o túnel. Compara ambos con Find-NetRoute no estado conectado.
Se o prefixo falta da táboa tras unha reconexión, vive no obxecto equivocado e non no formato equivocado. Móveo á interface física e repite a proba. Garda ambas saídas de comandos co rexistro de cambio, porque unha instantánea do estado que funciona responde máis adiante a máis preguntas ca un parágrafo de explicación. A seguinte persoa quererá saber que produciu a conexión, non que pretendías que producise.