Dvě windowsová nastavení vypadají v Nastavení stejně a chovají se úplně jinak. Jedno je zkopírovaný profil VPN se spouštěčem aplikace, takže spuštění jednoho spustitelného souboru zvedne tunel. Druhé je profil s rozděleným tunelem, jehož seznam tras náhodou pokrývá to, s čím ona aplikace komunikuje. První odpovídá na to, kdy tunel existuje. Druhé odpovídá na to, které pakety do něj vstoupí, a jen druhé nechává zbytek stroje na fyzickém spoji, zatímco aplikace zůstává připojená.

Spouštěč je pravidlo životního cyklu, ne pravidlo směrování

Add-VpnConnectionTriggerApplication sváže cestu ke spustitelnému souboru s názvem profilu. Když se tento proces spustí, Správce připojení vzdáleného přístupu vytočí profil a když podmínka spouštěče skončí, spojení může spadnout. Nic v této výměně nezkoumá sockety. Rutina vyžaduje zvýšený shell, úplnou cestu k binárce a -Force když nahrazujete existující položku. Ověřte, že asociace přežila, pomocí Get-VpnConnectionTrigger místo spoléhání na výzvu; Microsoftova reference k Add-VpnConnectionTriggerApplication uvádí parametry a příklady.

Dvě omezení vysvětlují většinu hlášení, že “spouštěč nic nedělá”. Spouštěče jsou postavené kolem profilů pro všechny uživatele, takže rozsah profilu je první věc, kterou je třeba vyřešit, a cesta k aplikaci musí odpovídat binárce, která skutečně běží, ne zástupci nebo spouštěči, který vytváří druhý proces. Druhé omezení je záměrné: v síti, kterou Windows klasifikuje jako důvěryhodnou, spouštěč zůstává nečinný, protože profil má fungovat mimo kancelář.

Add-VpnConnectionTriggerApplication -Name "APP_VPN" -ApplicationID "C:\Program Files\Vendor\app.exe" -Force
Get-VpnConnectionTrigger -Name "APP_VPN" | Format-List *
Get-VpnConnection -Name "APP_VPN" | Format-List Name,ConnectionStatus,SplitTunneling,AllUserConnection

Rozdělený tunel rozhoduje, co tunelem projde

Při vypnutém rozděleném tunelu nainstaluje Windows na rozhraní VPN výchozí trasu založenou na třídě s nízkou metrikou. Následuje ji každý socket, včetně prohlížeče a aktualizační služby, takže spouštěč v této konfiguraci přesune celý stroj na dobu, po kterou je profil připojen. Spouštěč je pořád jen pravidlo životního cyklu; rozsah dopadu přišel z trasy.

Při zapnutém rozděleném tunelu nese profil jen prefixy, které vynutí brána nebo které přidáte na rozhraní VPN. Vše ostatní dál používá fyzickou výchozí trasu. To je uspořádání, které lidé obvykle míní slovy “jedna aplikace přes samostatný výstup”, a je to rozhodnutí o směrování od začátku do konce.

Set-VpnConnection -Name "APP_VPN" -SplitTunneling $true
Get-VpnConnection -Name "APP_VPN" | Select-Object SplitTunneling
Get-NetRoute -InterfaceAlias "APP_VPN" | Sort-Object DestinationPrefix

Kde rozdělení s trasami přestává izolovat vaši aplikaci

Běžná chyba je cíl, který se na seznamu tras tunelu nikdy neobjeví. Aplikace, která se přihlásí k jedné adrese a pak streamuje z CDN, nebo překládá tucet rotujících koncových bodů, pošle část spojení na rozhraní VPN a zbytek na Wi-Fi. IPv6 je samostatná tabulka, takže profil, který vynucuje jen IPv4 prefixy, může vypadat správně, zatímco provoz aplikace přes IPv6 zůstává lokální.

Dva menší efekty jsou stejně důležité. Vyhrává nejdelší shoda prefixu, takže konkrétnější on-link trasa, /32 vynucená pro správcovský hostitel nebo podsíť druhého adaptéru mohou porazit tunel právě pro adresu, na které vám záleží. Překlad probíhá také před směrováním: pokud název nepokrývají DNS servery profilu nebo pravidlo NRPT, aplikace může přeložit přes fyzický adaptér a pak vytáčet adresu, která nikdy nebyla uvnitř tunelovaných prefixů.

Tři tvary a co každý přináší

Tabulka je část, kterou bych přilepil na zeď, protože rozhodnutí je o rozsahu dopadu, ne o funkcích. Pokud jsou cíle aplikace stabilní prefixy, které umíte vypsat, rozdělení s trasami dává izolaci s nejmenší stopou. Pokud nejsou, profil s výchozí trasou za virtuálkou nebo druhým zařízením udrží oddělení poctivé za cenu přesunu více než jednoho procesu.

ShapeWhat starts the tunnelWhat enters itPick it when
Trigger plus routed splitProcess startOnly pushed or added prefixesThe app's endpoints are stable prefixes and the host should stay direct
Trigger plus default routeProcess startEverything, machine-wideYou need one exit for all traffic and accept the wider scope
Separate VM or deviceGuest boot or loginEverything inside that guestThe app's destinations rotate, or the host must keep its own public address

Co žádná z těchto možností neposkytuje, je vazba na úrovni socketu na hostiteli. Klasický klient Windows VPN nemá pravidlo, které by říkalo, že tento proces musí použít tento adaptér; spouštěče a filtry tras žijí v různých vrstvách a vrstva, která vybírá rozhraní, je směrovací tabulka. Pokud průvodce slibuje vynucení po aplikacích jen ze zkopírovaného profilu, ptejte se, která trasa nebo který filtr tu práci dělá.

Ověřte dvojici v jednom průchodu

Testujte životní cyklus a směrování odděleně, v tomto pořadí. Zavřete aplikaci, ověřte, že profil hlásí Disconnected, pak aplikaci spusťte a zkontrolujte, že se stav změnil. Teprve když je tunel zvednutý, má smysl ptát se, kam jde konkrétní cíl, a měli byste použít adresu, kterou aplikace skutečně vytáčí, ne odhad.

$app = Get-Process app | Select-Object -First 1
Get-VpnConnection -Name "APP_VPN" | Select-Object ConnectionStatus
Get-NetTCPConnection -OwningProcess $app.Id -State Established | Select-Object RemoteAddress,RemotePort
Find-NetRoute -RemoteIPAddress 203.0.113.10

Find-NetRoute pojmenovává rozhraní a další skok, který by ten cíl přenesl. Fyzický alias tam znamená, že tunel je zvednutý a pro tento tok nepodstatný: zkontrolujte vynucené prefixy, pak konkrétnější trasy, pak IPv6. Pokud se stav vůbec nemění, spouštěč se nespustil, a cesta ke spustitelnému souboru, rozsah profilu a operační log klienta VPN jsou tři místa, kam se podívat.

Ukliďte pořádně, aby byl další test poctivý

Odstraňujte v opačném pořadí, než jste stavěli: nejdřív spouštěč aplikace, pak profil. Smazání profilu, zatímco spouštěč zůstává, nechá viset asociaci, která další pokus mate, a Remove-VpnConnection -Force ne vždy smaže položku telefonního seznamu vytvořenou mimo rutiny.

Položky pro jednotlivé uživatele žijí v rasphone.pbk uživatele pod profilem Roaming; položky pro všechny uživatele žijí pod ProgramData. Zkontrolujte úložiště odpovídající rozsahu profilu, znovu připojte profil, který jste si nechali, a ověřte, že jeho trasy a DNS stále fungují, aby pozdější test měřil změnu, kterou jste provedli, a ne zbytkový stav.

  • Tunel se zvedá při spuštění procesu, ne při přihlášení.
  • Na rozhraní VPN se objeví jen zamýšlené prefixy.
  • Skutečná vzdálená adresa aplikace se přeloží na alias VPN.
  • Po odstranění profilu nezůstane žádný visící spouštěč.

Související články