Kaip patikrinti, ką „Windows“ VPN iš tikrųjų maršrutizuoja „PowerShell“
Prisijungta VPN plytelė neįrodo aprėpties. Perskaitykite išsaugotą profilio vėliavėlę, dabartinę maršrutų lentelę ir NRPT taisykles šia tvarka.
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 see | Most likely cause | Check next |
|---|---|---|
| Public traffic leaves the physical adapter while SplitTunneling reads False | A more specific route on that adapter wins over the tunnel default | Find-NetRoute for the exact destination, then look for a /24 or host route on the physical interface |
| Internal name fails, internal IP works | No NRPT rule for that namespace, or a broader rule matches first | Get-DnsClientNrptPolicy and the namespace order |
| A dual-stack site opens directly while IPv4 uses the tunnel | The profile covers only the IPv4 default route | The IPv6 route table on both interfaces |
| Routes look right but one app still goes direct | The app uses its own proxy, or the client keeps a per-app list | The 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,
-AllUserConnectionnaudotas viso kompiuterio profiliams. SplitTunnelingperskaitytas ir traktuotas kaip konfigūracija, o ne aprėpties įrodymas.- Tunelio adapterio maršrutai išvardyti atskirai IPv4 ir IPv6.
Find-NetRoutepaleistas 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į.