Prijungiau VPN klientą prie „Windows 11“ nešiojamojo kompiuterio, plytelė tapo Connected, atsidarė vidinis failų bendrinimas, o vieša svetainė vis dar įsikėlė tiesiai iš biuro „Wi-Fi“. Šis mišinys atrodo kaip sugedęs tunelis. Tačiau tai normalus profilio, kuris dalį srauto siunčia per VPN, o likusią dalį palieka fiziniame adapteryje, rezultatas. Priverstinis tuneliavimas pakeičia, kurį numatytąjį maršrutą „Windows“ teikia pirmenybę; jis netrina konkretesnių maršrutų ir nežada, kad srautas sustos nutrūkus ryšiui. Toliau pateikiama tvarka, kurios laikausi, kai klientas teigia turįs aprėptį: kliento būsena, išsaugotas profilis, pritaikyti maršrutai, sprendėjas, tada tikrieji srautai.

Pradėkite nuo kliento, o tada nustokite juo pasitikėti

Klientas yra tinkama vieta pradėti tik todėl, kad jis nurodo, kuris profilis aktyvus. Atidarykite ryšio ypatybes ir užsirašykite tikslų profilio pavadinimą, ar jis sukurtas dabartiniam naudotojui, ar visiems kompiuteryje, ir kuris adapteris po prisijungimo atsiranda ncpa.cpl. Mano bandomajame nešiojamajame adapteris turėjo profilio pavadinimą, todėl maršrutų išvestį buvo lengva skaityti. Kituose kompiuteriuose jis rodomas kaip WAN Miniport įrašas, o pavadinimas nieko nesako.

Ko klientas negali pasakyti, tai aprėptis. Prisijungta plytelė apibūdina tunelio būseną, o ne paskirties vietų sąrašą. Trečiųjų šalių klientai taip pat laiko savo konfigūraciją, todėl gimtasis „Windows“ profilis ir kiekviena ypatybė, kurią iš jo perskaitysite, gali neturėti nieko bendra su tuo, ką įdiegė tas klientas. Jei VPN atėjo per AnyConnect, OpenVPN GUI, WireGuard ar tiekėjo agentą, toliau pateikti „PowerShell“ patikrinimai dažniausiai netaikomi, ir vietoj jų turėtumėte skaityti to kliento savo split-tunnel ir maršrutizavimo nustatymus.

Skaitykite išsaugotą profilį, o ne plytelę

Gimtajam „Windows“ profiliui (IKEv2, L2TP, SSTP arba MDM stumiamam) išsaugotas split-tunnel sprendimas yra viena ypatybė:

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

Pridėkite -AllUserConnection, kai profilis sukurtas visiems įrenginyje. Be jo skaitote dabartinio naudotojo sąrašą, kuris gali būti tuščias arba turėti kitą panašaus pavadinimo įrašą. Reikšmė False lauke SplitTunneling reiškia, kad profilis išsaugotas kaip visas tunelis: „Windows“ įdiegia numatytąjį maršrutą per VPN adapterį. True reiškia split tunnel, o aprėptis tada visiškai priklauso nuo maršrutų ir vardų sprendimo taisyklių, kurias stumia tas profilis.

Traktuokite šią reikšmę kaip konfigūraciją, o ne stebėjimą. Ji užrašo, ko profilis prašė prisijungimo metu. „Windows“ gali likti su kitais pritaikytais maršrutais dėl kito sąsajos konkretesnio maršruto, politikos nustatymo ar ankstesnio ryšio likučio, todėl loginė reikšmė niekada neišsprendžia klausimo viena.

Palyginkite išsaugotą reikšmę su pritaikyta maršrutų lentele

Po prisijungimo išvardykite tunelio adapterio maršrutus, o ne slinkite visą lentelę:

$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 yra naudingoji pusė. Ji atsako į klausimą, į kurį klientas niekada neatsako: šiai paskirties vietai kurią sąsają ir kurį šaltinio adresą „Windows“ iš tikrųjų naudos? Paleiskite ją vidiniam serveriui, viešam serveriui ir viskam, ką laikote tyčine išimtimi. Viso tunelio profilis turėtų rodyti tunelio sąsają viešajam adresui. Split tunnel profilis paprastai ten rodo fizinį adapterį, o vidiniai priešdėliai vis dar sprendžiami per VPN.

Du spąstai paaiškina daugumą pranešimų „jis maršrutizuoja ne ta linkme“. Konkrečiausias priešdėlis visada laimi, todėl /24 fiziniame adapteryje nugali numatytąjį maršrutą VPN, kad ir kokia žema būtų tunelio metrika. Metrika tik išsprendžia lygiąsias tarp to paties priešdėlio maršrutų. O IPv4 ir IPv6 sprendžiami atskirai: profilis, apimantis 0.0.0.0/0, gali palikti IPv6 vietinėje jungtyje, todėl dvigubo kamino svetainė atrodo pusiau tuneliuota. Prieš darydami išvadą, kad tunelis tvarkingas, patikrinkite Get-NetRoute -AddressFamily IPv6.

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

Vardų sprendimą patikrinkite atskirai su NRPT

Vidiniai vardai, kurie nepavyksta, nors vidiniai IP adresai veikia, rodo į sprendėjo politiką, o ne į maršrutizavimą. „Windows“ DNS kiekvienai vardų erdvei sprendžia pagal vardų sprendimo politikos lentelę, kuri nepriklauso nuo maršrutų lentelės:

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

Kai taisyklė atitinka *.corp.example, tos vardų erdvės užklausos eina į tunelio DNS serverius, net jei duomenų kelias iki tų serverių split tunnel režimu lieka fiziniame adapteryje. Toks dizainas, ir todėl naršyklės testas, atidarantis viešą svetainę, nieko nepasako apie vidinius vardus. Jei adapteris išvardija laukiamus serverius, bet paieškos vis tiek eina kitur, palyginkite NRPT taisyklių eilę ir patikrinkite, ar konkretesnė vardų erdvė nesutampa pirma.

Patikrinkite srautus, o tada nuspręskite, ko iš tikrųjų prašėte

Pereikite paskirties vietas fiksuota tvarka, kad rezultatus būtų galima palyginti tarp kompiuterių: viešas adresas, vidinis adresas, vidinis vardas ir viena tyčinė išimtis, pavyzdžiui, vietinis spausdintuvas ar vaizdo skambutis. Užsirašykite sąsają ir šaltinio adresą, kuriuos Find-NetRoute grąžina kiekvienam. Po bet kokio politikos pakeitimo prisijunkite iš naujo ir pakartokite tuos pačius keturis patikrinimus; maršrutų lentelė po prisijungimo iš naujo yra vienintelis įrodymas, kad naujas profilis įsigaliojo.

Tada atskirkite maršrutizavimą nuo vykdymo. Priverstinis tuneliavimas teikia pirmenybę tuneliui apimtam srautui, kol jis veikia. Tai ne kill switch. Jei reikalavimas yra, kad tuneliui nukritus niekas neišeitų iš kompiuterio, tai turi kilti iš blokuojančio dizaino: su tunelio būsena susieto ugniasienės profilio, visada įjungto profilio su srauto filtrais arba tiekėjo kliento savo užsidarymo gedimo atveju parinkties. Priverstinis tuneliavimas taip pat turi palikti paties VPN serverio adresą pasiekiamą už tunelio, o jo blokavimas „viską priversti“ vardu yra patikimas būdas užsirakinti nuo ryšio, kurį bandote įgyvendinti.

Prieš ką nors keisdami, peržiūrėkite šį sąrašą. Kiekvienas nepavykęs punktas susiaurina, kur yra tikroji problema.

  • Profilio pavadinimas ir apimtis patvirtinti, -AllUserConnection naudotas viso kompiuterio profiliams.
  • SplitTunneling perskaitytas ir traktuotas kaip konfigūracija, o ne aprėpties įrodymas.
  • Tunelio adapterio maršrutai išvardyti atskirai IPv4 ir IPv6.
  • Find-NetRoute paleistas vienai viešai, vienai vidinei ir vienai išimties paskirties vietai.
  • NRPT taisyklės patikrintos prieš kaltinant maršrutus dėl vardo nepavykimo.
  • Blokavimo reikalavimas perskaitytas iš naujo: pageidaujamas maršrutizavimas nėra tas pats kaip įgyvendintas blokavimas.

Sprendimas dėl viso ar split tunelio priklauso profilio savininkui, o „Microsoft“ maršrutizavimo pastabos aprašo elgesį, kurį „Windows“ įgyvendina, kai profilis jį nustato. Microsoft: priverstinis ir split tuneliavimas yra nuoroda, kurią laikau atidarytą skaitydamas išvestį.

Susiję straipsniai