Notebook se připojí k firemní VPN a všechno ho následuje, včetně webové stránky tiskárny a jedné intranetové sítě, která odpovídá jen v místní síti. Ručně vytvořená trasa to spraví na hodinu, pak spojení spadne, vrátí se a výjimka je pryč. S tunelem není nic špatně: Windows drží jedinou směrovací tabulku a adaptér VPN při každém připojení přepisuje svůj podíl v této tabulce. Přežije jen to, co žije mimo vlastní záznamy adaptéru.

Který záznam tunel převezme

Zaznamenejte tabulku dvakrát, jednou s tunelem vypnutým a jednou zapnutým, a porovnejte výchozí řádky. Když profil nárokuje výchozí prefix, je záznam adaptéru nejširší řádek v tabulce, takže každá výjimka musí být užší než on. To je aritmetika o délce prefixu, ne tvrzení o důvěře nebo politice. Také určuje, které rozhraní musí výjimka uvést.

Zapište index rozhraní a místní bránu, než budete pokračovat, protože obojí se změní, když se stroj připojí k jiné síti. Příkazy níže je čtou ze stroje, ne z paměti.

route print -4
Find-NetRoute -RemoteIPAddress 198.51.100.30

Druhý příkaz hlásí rozhraní a další skok, které by tato jedna adresa právě teď použila, což je lepší než číst čtyřicet řádků a hádat. Spusťte ho před připojením a po něm a máte dvojici, kterou stojí za to přiložit k záznamu o změně. Oba výstupy dodávají čísla použitá ve zbytku této stránky.

Trasa k hostiteli vyhrává specificitou

Shoda nejdelšího prefixu rozhoduje o vítězi, takže /32 přes fyzickou bránu poráží výchozí trasu tunelem, aniž by se tunel dotkl. Provoz na tuto adresu vychází přes místní rozhraní, zatímco všechno ostatní si drží svou cestu. Tunel nadále nese výchozí trasu a prostě přestane být jediným kandidátem pro tento cíl. Délka prefixu je jediná páka, kterou tabulka nabízí, a pro tento úkol stačí.

Specificita také vylučuje zjevnou zkratku vyloučení názvu domény, protože tabulka páruje adresy a jeden název se může přeložit na několik z nich. Nejprve přeložte hostitele, pak rozhodněte, která z jeho adres si výjimku zaslouží.

Pro vše níže předpokládejme připojení jménem Office, místní bránu 10.0.0.1 na rozhraní 7 a cíl 198.51.100.30. To jsou zástupné, ne výchozí hodnoty, a příkazy výše dávají hodnoty, které váš stroj skutečně používá. Uchovejte tuto poznámku o nahrazení u změny, aby další čtenář neopsal čísla.

Zařiďte, aby trasa přežila další opětovné připojení

Windows nenabízí na připojení VPN žádnou instrukci pro vyloučení, takže výjimka musí žít na fyzickém rozhraní, kde ji adaptér nepřepíše. Rutina, která vypadá jako odpověď, dělá opak: Add-VpnConnectionRoute přesouvá prefix do tunelu, což je zrcadlový případ, kdy rozdělený profil má nést jeden cíl a zbytek nechat místně. Sáhnout po něm zde zaručí, že provoz, který jste chtěli držet venku, půjde dovnitř.

Ruční podoba je jediný příkaz. Její slabinou je změna sítě, ne opětovné připojení.

route -p add 198.51.100.30 mask 255.255.255.255 10.0.0.1 metric 1 if 7

To přežije restart díky -p a posílá jednu adresu přes rozhraní 7, zatímco tunel nese všechno ostatní. Přesuňte notebook do jiné sítě a brána i index zastarají, takže záznam tiše selže. Zapište, kdo ho vlastní a kdy se má odstranit.

Skript připojení je pevnější verze, protože přidává výjimku znovu po každém připojení místo doufání, že záznam přežil. Dva řádky níže patří do toho, co spouští tunel, ne do přihlašovacího skriptu.

rasdial Office
route add 198.51.100.30 mask 255.255.255.255 10.0.0.1 metric 1 if 7

Co tunel zvedá, je správné místo pro druhý řádek, a rasdial se vrací až po navázání spojení, takže trasa přistane za vlastními záznamy adaptéru. Spusťte ho znovu po probuzení, protože suspend může trasu shodit a tunel nechat nahoře. Pokud je úkol opačný, protlačit jeden prefix do tunelu a zbytek nechat místně, pak Add-VpnConnectionRoute je správný nástroj.

Směrování nedokáže vybrat proces

Někdy je požadavek užší než cíl: jeden program má jít místní cestou, zatímco všechno ostatní zůstává v tunelu. Směrování to vyjádřit nedokáže, protože páruje adresy, ne procesy. Fungující vzor tlačí problém do spouštěče.

Držte profil mimo výchozí trasu a spusťte ten jediný program svázaný s adresou místního rozhraní, takže výjimkou se stane příkaz spuštění a tunel si ponechá, co už zpracovával. Ve směrovací tabulce se nic nemění, a proto to přežívá opětovná připojení. Znamená to také, že tunel nesmí výchozí trasu vlastnit už od začátku, takže je to jiný návrh, ne záplata na předchozí.

Jeho slabina je provozní, ne technická. Program musí vždy startovat přes obal, a pokud po probuzení vazba chybí, tiše si vezme jakoukoli cestu, kterou tabulka nabídne. To je snesitelné u prohlížeče, který otevíráte záměrně, a nepřijatelné u čehokoli, co nesmí tunel nikdy opustit.

Připojení pro jednotlivé uživatele to také neřeší. Windows umí omezit připojení na účet, zatímco směrovací tabulka zůstává strojová, takže připojení vázané na účet, které drží výchozí trasu, stále přesměrovává každý proces na stroji, včetně jiných relací. Rozsah se stane skutečným, jen když rozsah trasy odpovídá účtu. Dva lidé sdílející jeden notebook proto sdílejí jednu tabulku a druhý zdědí tunel, který spustil první.

Ověřte, že výjimka přežila opětovné připojení

Otestujte změnu tak, jak selže: odpojte se, připojte se znovu, otevřete novou aplikaci a pak požádejte o jednu adresu, která musí zůstat místní, a jednu, která musí jít tunelem. Obě porovnejte s Find-NetRoute v připojeném stavu.

Pokud prefix po opětovném připojení v tabulce chybí, žije ve špatném objektu, ne ve špatném formátu. Přesuňte ho na fyzické rozhraní a test zopakujte. Uchovejte oba výstupy příkazů u záznamu o změně, protože snímek funkčního stavu později odpoví na víc otázek než odstavec vysvětlení. Další člověk bude chtít vědět, co připojení vytvořilo, ne co jste zamýšleli, aby vytvořilo.

Související články