Undanta en värd från en Windows VPN-standardrutt
En fulltunnelprofil äger standardrutten. En värd behöver ett snävare prefix på det fysiska gränssnittet, som läggs till igen efter varje anslutning.
Laptopen ansluter till kontorets VPN och allt följer med, inklusive en skrivares webbsida och ett intranät som bara svarar på det lokala nätverket. En handgjord rutt fixar det i en timme, sedan bryts anslutningen, kommer tillbaka och undantaget är borta. Det är inget fel på tunneln: Windows har en enda routingtabell, och VPN-adaptern skriver om sin del av den tabellen vid varje anslutning. Det som överlever är det som ligger utanför adapterns egna poster.
Vilken post tunneln tar över
Registrera tabellen två gånger, en gång med tunneln nere och en gång med den uppe, och jämför standardraderna. När profilen gör anspråk på standardprefixet är adapterns post den bredaste raden i tabellen, så varje undantag måste vara snävare än den. Det är aritmetik om prefixlängd, inte ett påstående om förtroende eller policy. Det avgör också vilket gränssnitt undantaget måste namnge.
Skriv ner gränssnittsindexet och den lokala gatewayen innan du går vidare, eftersom båda ändras när maskinen ansluter till ett annat nätverk. Kommandona nedan läser dem från maskinen i stället för från minnet.
route print -4
Find-NetRoute -RemoteIPAddress 198.51.100.30
Det andra kommandot rapporterar gränssnittet och nästa hopp som en adress skulle använda just nu, vilket är bättre än att läsa fyrtio rader och gissa. Kör det före och efter anslutning och du har paret som är värt att bifoga en ändringsnotering. Båda utdatana ger de siffror som används i resten av den här sidan.
En värdrutt vinner på specificitet
Längsta prefixmatchning avgör vinnaren, så en /32 via den fysiska gatewayen slår standardrutten via tunneln utan att tunneln rörs. Trafik till den adressen lämnar det lokala gränssnittet medan allt annat behåller sin befintliga väg. Tunneln bär fortfarande standardrutten och slutar helt enkelt vara den enda kandidaten för den destinationen. Prefixlängden är den enda spaken tabellen erbjuder, och för det här jobbet räcker den.
Specificiteten utesluter också den uppenbara genvägen att undanta ett domännamn, eftersom tabellen matchar adresser och ett namn kan lösas till flera av dem. Lös värden först och bestäm sedan vilken av dess adresser som förtjänar undantaget.
För allt nedan, anta en anslutning som heter Office, en lokal gateway på 10.0.0.1 på gränssnitt 7 och en destination på 198.51.100.30. Det är platshållare och inte standardvärden, och kommandona ovan ger de värden som din maskin faktiskt använder. Behåll den här utbytesnoten med ändringen så att nästa läsare inte kopierar siffrorna.
Låt rutten överleva nästa återanslutning
Windows erbjuder ingen undantagsinstruktion för en VPN-anslutning, så undantaget måste ligga på det fysiska gränssnittet där adaptern inte skriver om det. Cmdleten som ser ut som svaret gör det motsatta: Add-VpnConnectionRoute flyttar ett prefix in i tunneln, vilket är spegelfallet där en delad profil ska bära en destination och lämna resten lokalt. Att gripa efter den här garanterar att trafiken du ville hålla utanför går in.
Den manuella formen är ett enda kommando. Dess svaghet är nätverksbytet, inte återanslutningen.
route -p add 198.51.100.30 mask 255.255.255.255 10.0.0.1 metric 1 if 7
Det överlever en omstart tack vare -p och skickar en adress ut ur gränssnitt 7 medan tunneln bär allt annat. Flytta laptopen till ett annat nätverk och både gatewayen och indexet blir inaktuella, så posten misslyckas tyst. Anteckna vem som äger den och när den ska tas bort.
Ett anslutningsskript är den robustare varianten, eftersom det lägger till undantaget igen efter varje anslutning i stället för att hoppas att posten överlevde. De två raderna nedan hör hemma i det som startar tunneln, inte i ett inloggningsskript.
rasdial Office
route add 198.51.100.30 mask 255.255.255.255 10.0.0.1 metric 1 if 7
Det som får tunneln att gå upp är rätt plats för den andra raden, och rasdial återvänder först när anslutningen är upprättad, så rutten hamnar bakom adapterns egna poster. Kör det igen efter en återupptagning, eftersom en viloläge kan tappa rutten och lämna tunneln uppe. Om uppgiften är den omvända, att trycka in ett enda prefix i tunneln medan resten stannar lokalt, då är Add-VpnConnectionRoute rätt verktyg.
Routing kan inte välja en process
Ibland är kravet snävare än en destination: ett program ska ta den lokala vägen medan allt annat stannar i tunneln. Routing kan inte uttrycka det, eftersom den matchar adresser och inte processer. Det fungerande mönstret skjuter problemet till startaren.
Håll profilen borta från standardrutten och starta det enda programmet bundet till det lokala gränssnittets adress, så blir undantaget startkommandot och tunneln behåller det den redan hanterade. Inget i routingtabellen ändras, vilket är varför detta överlever återanslutningar. Det innebär också att tunneln inte får äga standardrutten från början, så detta är en annan design och inte en lapp på den förra.
Dess svaghet är operativ snarare än teknisk. Programmet måste alltid startas via omslaget, och om bindningen saknas efter en återupptagning tar det tyst vilken väg tabellen erbjuder. Det är tolererbart för en webbläsare du medvetet öppnar och oacceptabelt för allt som aldrig får lämna tunneln.
Anslutningar per användare löser inte heller detta. Windows kan begränsa en anslutning till ett konto medan routingtabellen förblir maskinvidd, så en kontobegränsad anslutning med en standardrutt omdirigerar fortfarande varje process på maskinen, inklusive andra sessioner. Omfattningen blir verklig först när ruttens omfattning matchar kontot. Två personer som delar en laptop delar därför en tabell, och den andra ärver vilken tunnel den första än startade.
Bekräfta att undantaget överlevde en återanslutning
Testa ändringen så som den kommer att misslyckas: koppla ner, anslut igen, öppna ett nytt program och begär sedan en adress som måste stanna lokalt och en som måste använda tunneln. Jämför båda mot Find-NetRoute i anslutet läge.
Om prefixet saknas i tabellen efter en återanslutning ligger det i fel objekt och inte i fel format. Flytta det till det fysiska gränssnittet och upprepa testet. Spara båda kommandoutdatana med ändringsnoteringen, eftersom en ögonblicksbild av det fungerande läget svarar på fler frågor senare än en förklarande paragraf. Nästa person vill veta vad anslutningen producerade, inte vad du avsåg att den skulle producera.