Dwie konfiguracje Windows wyglądają w Ustawieniach tak samo i zachowują się zupełnie inaczej. Jedna to skopiowany profil VPN z wyzwalaczem aplikacji, więc uruchomienie jednego pliku wykonywalnego podnosi tunel. Druga to profil z tunelowaniem dzielonym, którego lista tras przypadkiem obejmuje to, z czym rozmawia ta aplikacja. Pierwsza odpowiada, kiedy tunel istnieje. Druga odpowiada, które pakiety do niego wchodzą, i tylko druga zostawia resztę maszyny na łączu fizycznym, gdy aplikacja pozostaje połączona.

Wyzwalacz to reguła cyklu życia, nie reguła routingu

Add-VpnConnectionTriggerApplication wiąże ścieżkę pliku wykonywalnego z nazwą profilu. Gdy ten proces się rozpocznie, Menedżer połączeń dostępu zdalnego wybiera profil, a gdy warunek wyzwalacza się skończy, połączenie może się zerwać. Nic w tej wymianie nie sprawdza gniazd. Polecenie wymaga podniesionej powłoki, pełnej ścieżki do pliku binarnego i -Force gdy zastępujesz istniejący wpis. Potwierdź, że skojarzenie przetrwało, za pomocą Get-VpnConnectionTrigger zamiast ufać monitowi; dokumentacja Add-VpnConnectionTriggerApplication wymienia parametry i przykłady.

Dwie granice wyjaśniają większość zgłoszeń, że „wyzwalacz nic nie robi”. Wyzwalacze są zbudowane wokół profili dla wszystkich użytkowników, więc zakres profilu to pierwsza rzecz do ustalenia, a ścieżka aplikacji musi odpowiadać plikowi binarnemu, który naprawdę działa, a nie skrótowi ani launcherowi tworzącemu drugi proces. Druga granica jest zamierzona: w sieci, którą Windows klasyfikuje jako zaufaną, wyzwalacz pozostaje bezczynny, bo profil jest przeznaczony do pracy poza biurem.

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

Tunelowanie dzielone decyduje, co przekracza tunel

Przy wyłączonym tunelowaniu dzielonym Windows instaluje trasę domyślną opartą na klasie z niską metryką na interfejsie VPN. Każde gniazdo za nią podąża, łącznie z przeglądarką i usługą aktualizacji, więc wyzwalacz w tej konfiguracji przenosi całą maszynę, dopóki profil jest połączony. Wyzwalacz nadal jest tylko regułą cyklu życia; promień rażenia pochodził z trasy.

Przy włączonym tunelowaniu dzielonym profil niesie tylko prefiksy, które wypycha brama lub które dodasz do interfejsu VPN. Wszystko inne nadal korzysta z fizycznej trasy domyślnej. To układ, który ludzie zwykle mają na myśli, mówiąc „jedna aplikacja przez osobne wyjście”, i jest to decyzja routingu od początku do końca.

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

Gdzie rutowany podział przestaje izolować Twoją aplikację

Częsta awaria to cel, który nigdy nie pojawia się na liście tras tunelu. Aplikacja, która loguje się pod jeden adres, a potem streamuje z CDN, albo rozwiązuje tuzin rotujących punktów końcowych, umieści część połączeń na interfejsie VPN, a resztę w Wi-Fi. IPv6 to osobna tabela, więc profil wypychający tylko prefiksy IPv4 może wyglądać poprawnie, podczas gdy ruch IPv6 aplikacji pozostaje lokalny.

Dwa mniejsze efekty znaczą tyle samo. Wygrywa najdłuższe dopasowanie prefiksu, więc bardziej szczegółowa trasa on-link, /32 wypchnięty dla hosta zarządzającego albo podsieć drugiego adaptera mogą pobić tunel dokładnie dla adresu, na którym Ci zależy. Rozwiązywanie nazw odbywa się też przed routingiem: jeśli serwery DNS profilu lub reguła NRPT nie obejmują nazwy, aplikacja może rozwiązać ją przez adapter fizyczny, a potem wybrać adres, który nigdy nie był w tunelowanych prefiksach.

Trzy kształty i co każdy daje

Tabela to część, którą przykleiłbym do ściany, bo decyzja dotyczy promienia rażenia, a nie funkcji. Jeśli cele aplikacji to stabilne prefiksy, które możesz wypisać, rutowany podział daje izolację przy najmniejszym śladzie. Jeśli nie, profil z trasą domyślną za VM lub drugim urządzeniem utrzymuje rozdział uczciwie kosztem przenoszenia więcej niż jednego 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

Czego żadna z tych opcji nie daje, to powiązanie na poziomie gniazda na hoście. Klasyczny klient VPN Windows nie ma reguły, że ten proces musi używać tego adaptera; wyzwalacze i filtry tras żyją w różnych warstwach, a warstwą wybierającą interfejs jest tabela routingu. Jeśli poradnik obiecuje wymuszanie dla poszczególnych aplikacji wyłącznie ze skopiowanego profilu, zapytaj, która trasa lub który filtr wykonuje pracę.

Sprawdź parę w jednym przebiegu

Testuj cykl życia i routing osobno, w tej kolejności. Zamknij aplikację, potwierdź, że profil pokazuje Disconnected, potem uruchom aplikację i sprawdź, czy stan się zmienił. Dopiero gdy tunel jest podniesiony, pytaj, dokąd idzie konkretny cel, i używaj adresu, który aplikacja naprawdę wybiera, a nie domysłu.

$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 nazywa interfejs i następny skok, który przeniósłby ten cel. Fizyczny alias w tym miejscu oznacza, że tunel jest podniesiony i nieistotny dla tego przepływu: sprawdź wypchnięte prefiksy, potem bardziej szczegółowe trasy, potem IPv6. Jeśli stan w ogóle się nie zmienia, wyzwalacz nie zadziałał, a ścieżka pliku wykonywalnego, zakres profilu i dziennik operacyjny klienta VPN to trzy miejsca do sprawdzenia.

Posprzątaj porządnie, żeby następny test był uczciwy

Usuwaj w odwrotnej kolejności do budowy: najpierw wyzwalacz aplikacji, potem profil. Usunięcie profilu przy pozostawionym wyzwalaczu zostawia wiszące skojarzenie, które myli następną próbę, a Remove-VpnConnection -Force nie zawsze czyści wpisu książki telefonicznej utworzonego poza poleceniami cmdlet.

Wpisy dla poszczególnych użytkowników są w rasphone.pbk użytkownika w profilu Roaming; wpisy dla wszystkich użytkowników są w ProgramData. Sprawdź magazyn odpowiedni do zakresu profilu, połącz ponownie profil, który zachowałeś, i potwierdź, że jego trasy i DNS nadal działają, aby późniejszy test mierzył wprowadzoną zmianę, a nie pozostały stan.

  • Tunel startuje przy starcie procesu, nie przy logowaniu.
  • Na interfejsie VPN pojawiają się tylko zamierzone prefiksy.
  • Rzeczywisty adres zdalny aplikacji rozwiązuje się na alias VPN.
  • Po usunięciu profilu nie zostaje żaden wiszący wyzwalacz.

Powiązane artykuły