Připojil jsem klienta VPN na notebooku s Windows 11, dlaždice přešla do stavu Připojeno, otevřela se interní sdílená složka a veřejný web se stále načítal přímo z kancelářské Wi-Fi. Tahle směs vypadá jako rozbitý tunel. Je to normální výstup profilu, který část provozu posílá přes VPN a zbytek nechává na fyzickém adaptéru. Vynucené tunelování mění, kterou výchozí trasu Windows preferuje; nemaže konkrétnější trasy a neslibuje, že provoz po přerušení spojení ustane. Následuje pořadí, podle kterého postupuji, když klient tvrdí pokrytí: stav klienta, uložený profil, aplikované trasy, resolver a pak skutečné toky.

Začněte u klienta a pak mu přestaňte věřit

Klient je správné místo pro začátek jen proto, že vám řekne, který profil je aktivní. Otevřete vlastnosti připojení a poznamenejte si přesný název profilu, zda byl vytvořen pro aktuálního uživatele nebo pro všechny na počítači, a který adaptér se po připojení objeví v ncpa.cpl. Na mém testovacím notebooku adaptér nesl název profilu, což usnadnilo čtení výstupu tras. Na jiných počítačích se objeví jako položka WAN Miniport a název vám nic neřekne.

Co vám klient nemůže říct, je pokrytí. Připojená dlaždice popisuje stav tunelu, ne soupis cílů. Klienti třetích stran si také drží vlastní konfiguraci, takže nativní profil Windows a každá vlastnost, kterou z něj přečtete, nemusí mít nic společného s tím, co ten klient nainstaloval. Pokud VPN přišla přes AnyConnect, OpenVPN GUI, WireGuard nebo agenta dodavatele, níže uvedené kontroly PowerShellu většinou neplatí a měli byste místo nich číst vlastní nastavení rozděleného tunelu a směrování onoho klienta.

Čtěte uložený profil, ne dlaždici

Pro nativní profil Windows (IKEv2, L2TP, SSTP nebo profil protlačený MDM) je uložené rozhodnutí o rozděleném tunelu jediná vlastnost:

Get-VpnConnection -Name 'Office' | Select-Object Name, ServerAddress, SplitTunneling, DnsSuffix

Přidejte -AllUserConnection, když byl profil vytvořen pro všechny na zařízení. Bez něj čtete seznam aktuálního uživatele, který může být prázdný nebo obsahovat jinou položku s podobným názvem. Hodnota False v SplitTunneling znamená, že profil byl uložen jako plný tunel: Windows nainstaluje výchozí trasu přes adaptér VPN. True znamená rozdělený tunel a pokrytí pak zcela závisí na trasách a pravidlech překladu názvů, které profil protlačuje.

Berte tuto hodnotu jako konfiguraci, ne pozorování. Zaznamenává, co profil žádal v okamžiku připojení. Windows může skončit s odlišnými aplikovanými trasami kvůli konkrétnější trase jiného rozhraní, nastavení zásad nebo zbytkové položce z předchozího připojení, takže boolean otázku sám nikdy nerozhodne.

Porovnejte uloženou hodnotu s aplikovanou směrovací tabulkou

Po připojení vypište trasy na adaptéru tunelu místo procházení celé tabulky:

$vpn = Get-NetAdapter | Where-Object InterfaceDescription -match 'VPN|WAN Miniport'
Get-NetRoute -InterfaceIndex $vpn.ifIndex | Sort-Object DestinationPrefix
Find-NetRoute -RemoteIPAddress 10.20.4.15 | Select-Object -First 1

Find-NetRoute je užitečná polovina. Odpovídá na otázku, kterou klient nikdy nezodpoví: pro tento cíl, které rozhraní a která zdrojová adresa Windows skutečně použije? Spusťte ho pro interní hostitel, veřejný hostitel a cokoli, co považujete za záměrnou výjimku. Profil plného tunelu by měl pro veřejnou adresu ukázat rozhraní tunelu. Profil rozděleného tunelu tam obvykle ukazuje fyzický adaptér, zatímco interní prefixy se stále překládají přes VPN.

Dvě pasti vysvětlují většinu hlášení „směruje to špatně“. Nejspecifičtější prefix vždy vyhrává, takže /24 na fyzickém adaptéru porazí výchozí trasu na VPN, ať je metrika tunelu jakkoli nízká. Metrika jen rozhoduje remízy mezi trasami se stejným prefixem. A IPv4 a IPv6 se rozhodují odděleně: profil, který pokrývá 0.0.0.0/0, může nechat IPv6 na lokálním spoji, což dělá z dual-stack webu napůl tunelovaný web. Ověřte Get-NetRoute -AddressFamily IPv6, než usoudíte, že je tunel v pořádku.

What you seeMost likely causeCheck next
Public traffic leaves the physical adapter while SplitTunneling reads FalseA more specific route on that adapter wins over the tunnel defaultFind-NetRoute for the exact destination, then look for a /24 or host route on the physical interface
Internal name fails, internal IP worksNo NRPT rule for that namespace, or a broader rule matches firstGet-DnsClientNrptPolicy and the namespace order
A dual-stack site opens directly while IPv4 uses the tunnelThe profile covers only the IPv4 default routeThe IPv6 route table on both interfaces
Routes look right but one app still goes directThe app uses its own proxy, or the client keeps a per-app listThe app's proxy settings and the client's application list

Ověřte překlad názvů zvlášť pomocí NRPT

Interní názvy, které selhávají, zatímco interní IP adresy fungují, ukazují na zásady resolveru, ne na směrování. Windows rozhoduje DNS pro každý jmenný prostor pomocí tabulky zásad překladu názvů, která je nezávislá na směrovací tabulce:

Get-DnsClientNrptPolicy -Effective | Select-Object Namespace, NameServers
Get-DnsClientServerAddress -InterfaceIndex $vpn.ifIndex

Když pravidlo odpovídá *.corp.example, dotazy pro tento jmenný prostor jdou na DNS servery tunelu, i když datová cesta k těmto serverům zůstává v režimu rozděleného tunelu na fyzickém adaptéru. To je záměr a proto test v prohlížeči, který otevře veřejný web, neříká o interních názvech nic. Pokud adaptér vypisuje očekávané servery, ale vyhledávání přesto jde jinam, porovnejte pořadí pravidel NRPT a zkontrolujte, zda jako první neodpovídá konkrétnější jmenný prostor.

Ověřte toky a pak rozhodněte, co jste vlastně žádali

Projděte cíle v pevném pořadí, aby byly výsledky srovnatelné mezi počítači: veřejná adresa, interní adresa, interní název a jedna záměrná výjimka, například místní tiskárna nebo videohovor. Poznamenejte rozhraní a zdrojovou adresu, které Find-NetRoute pro každý vrátí. Po každé změně zásad se znovu připojte a zopakujte stejné čtyři kontroly; směrovací tabulka po opětovném připojení je jediný důkaz, že nový profil vstoupil v platnost.

Pak oddělte směrování od vynucení. Vynucené tunelování preferuje tunel pro pokrytý provoz, dokud je nahoru. Není to kill switch. Pokud je požadavek, aby při pádu tunelu nic neopustilo počítač, musí to přijít z blokujícího návrhu: profil brány firewall vázaný na stav tunelu, profil stále zapnutý s filtry provozu nebo vlastní volba zavření při selhání v klientském programu dodavatele. Vynucené tunelování také musí nechat vlastní adresu serveru VPN dostupnou mimo tunel, a blokovat ji ve jménu „vynucení všeho“ je spolehlivý způsob, jak se zamknout z připojení, které se snažíte vynutit.

Než něco změníte, projděte tento seznam. Každá položka, která selže, zužuje, kde je skutečný problém.

  • Název a rozsah profilu potvrzeny, s -AllUserConnection pro profily pro celý počítač.
  • SplitTunneling přečteno a bráno jako konfigurace, nikoli jako důkaz pokrytí.
  • Trasy adaptéru tunelu vypsány zvlášť pro IPv4 a IPv6.
  • Find-NetRoute spuštěno pro jeden veřejný, jeden interní a jeden výjimečný cíl.
  • Pravidla NRPT zkontrolována před tím, než obviníte trasy ze selhání názvu.
  • Požadavek na blokování znovu přečten: preferované směrování není totéž jako vynucené blokování.

Rozhodnutí o plném nebo rozděleném tunelu patří tomu, kdo profil vlastní, a poznámky Microsoftu ke směrování popisují chování, které Windows uplatní, když je profil nastaví. Microsoft: vynucené a rozdělené tunelování je odkaz, který mám otevřený, když čtu výstup.

Související články