Hoe om te kontroleer wat 'n VPN op Windows werklik in PowerShell routeer
'n Verbinde VPN-teël bewys nie dekking nie. Lees die gestoorde profielvlag, die lewendige roetetabel en die NRPT-reëls in hierdie volgorde.
Ek het die VPN-kliënt op 'n Windows 11-skootrekenaar gekoppel, die teël het na Connected gegaan, 'n interne lêerdeling het oopgemaak, en 'n openbare werf het steeds reguit vanaf die kantoor se Wi-Fi gelaai. Daardie mengsel lyk soos 'n gebreekte tonnel. Dit is die normale uitset van 'n profiel wat sommige verkeer deur die VPN stuur en die res op die fisiese adapter laat. Dwingtonneling verander watter verstekroete Windows verkies; dit verwyder nie meer spesifieke roetes nie, en dit belowe nie dat verkeer stop wanneer die verbinding val nie. Wat volg, is die volgorde waarmee ek werk wanneer 'n kliënt dekking eis: kliënttoestand, gestoorde profiel, toegepaste roetes, resolver, dan werklike vloei.
Begin by die kliënt, en stop dan om dit te vertrou
Die kliënt is net die regte plek om te begin omdat dit vir jou sê watter profiel aktief is. Maak die verbindingseienskappe oop en let op die presiese profielnaam, of dit vir die huidige gebruiker of vir almal op die masjien geskep is, en watter adapter in ncpa.cpl verskyn nadat jy gekoppel het. Op my toetskortrekenaar het die adapter die profielnaam gedra, wat die roete-uitset maklik leesbaar gemaak het. Op ander masjiene verskyn dit as 'n WAN Miniport-inskrywing en die naam sê vir jou niks.
Wat die kliënt nie vir jou kan sê nie, is dekking. 'n Gekoppelde teël beskryf die toestand van die tonnel, nie 'n inventaris van bestemmings nie. Derdeparty-kliënte hou ook hul eie konfigurasie, so die inheemse Windows-profiel, en elke eienskap wat jy daaruit gaan lees, het moontlik niks te doen met wat daardie kliënt geïnstalleer het nie. As die VPN via AnyConnect, OpenVPN GUI, WireGuard of 'n verskaffer-agent gekom het, geld die PowerShell-kontrole hieronder meestal nie, en jy moet eerder daardie kliënt se eie split-tonnel- en roete-instellings lees.
Lees die gestoorde profiel, nie die teël nie
Vir 'n inheemse Windows-profiel (IKEv2, L2TP, SSTP, of een wat deur MDM gestoot is) is die gestoorde split-tonnel-besluit 'n enkele eienskap:
Get-VpnConnection -Name 'Office' | Select-Object Name, ServerAddress, SplitTunneling, DnsSuffix
Voeg -AllUserConnection toe wanneer die profiel vir almal op die toestel geskep is. Sonder dit lees jy die huidige gebruiker se lys, wat leeg kan wees of 'n ander inskrywing met 'n soortgelyke naam kan bevat. 'n Waarde van False in SplitTunneling beteken die profiel is as 'n volle tonnel gestoor: Windows installeer 'n verstekroete deur die VPN-adapter. True beteken split-tonnel, en dekking hang dan heeltemal af van die roetes en naamoplossingsreëls wat daardie profiel stoot.
Behandel daardie waarde as konfigurasie, nie as waarneming nie. Dit teken op wat die profiel by koppeltyd gevra het. Windows kan toegepaste roetes kry wat verskil, weens 'n ander koppelvlak se meer spesifieke roete, 'n beleidinstelling, of 'n oorblywende inskrywing van 'n vorige verbinding, so die Boole-waarde los die vraag nooit op sy eie op nie.
Vergelyk die gestoorde waarde met die toegepaste roetetabel
Na die koppeling, lys die roetes op die tonnel-adapter eerder as om die hele tabel deur te blaai:
$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 is die nuttige helfte. Dit beantwoord die vraag wat die kliënt nooit beantwoord nie: vir hierdie bestemming, watter koppelvlak en watter bronadres sal Windows werklik gebruik? Voer dit uit vir 'n interne gasheer, 'n openbare gasheer, en enigiets wat jy as 'n doelbewuste uitsondering beskou. 'n Volle-tonnel-profiel moet die tonnel-koppelvlak vir die openbare adres wys. 'n Split-tonnel-profiel wys gewoonlik die fisiese adapter daar, terwyl interne voorvoegsels steeds na die VPN oplos.
Twee strikke verduidelik meeste “dit routeer verkeerd”-rapporte. Die mees spesifieke voorvoegsel wen altyd, so 'n /24 op die fisiese adapter verslaan 'n verstekroete op die VPN, ongeag hoe laag die tonnel se metrieke waarde is. Metriek breek net gelykop tussen roetes vir dieselfde voorvoegsel. En IPv4 en IPv6 word apart besluit: 'n profiel wat 0.0.0.0/0 dek, kan IPv6 op die plaaslike skakel laat, wat 'n dubbelstapel-werf half-getonnel laat lyk. Kontroleer Get-NetRoute -AddressFamily IPv6 voordat jy aflei die tonnel is reg.
| 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 |
Kontroleer naamoplossing apart met die NRPT
Interne name wat misluk terwyl interne IP-adresse werk, wys na resolver-beleid, nie na roetering nie. Windows besluit DNS per naamruimte deur die Naamoplossingsbeleidtabel, wat onafhanklik van die roetetabel is:
Get-DnsClientNrptPolicy -Effective | Select-Object Namespace, NameServers
Get-DnsClientServerAddress -InterfaceIndex $vpn.ifIndex
Wanneer 'n reël met *.corp.example ooreenstem, gaan navrae vir daardie naamruimte na die tonnel se DNS-bedieners, selfs as die datapad na daardie bedieners op die fisiese adapter bly in split-tonnel-modus. Dit is die ontwerp, en dis hoekom 'n blaaier-toets wat 'n openbare werf oopmaak vir jou niks oor interne name sê nie. As die adapter die verwagte bedieners lys maar opsoeke steeds elders gaan, vergelyk die NRPT-reëlvolgorde en kyk of 'n meer spesifieke naamruimte eerste ooreenstem.
Verifieer die vloei, en besluit dan wat jy eintlik gevra het
Werk deur bestemmings in 'n vaste volgorde sodat resultate oor masjiene vergelykbaar is: 'n openbare adres, 'n interne adres, 'n interne naam, en een doelbewuste uitsondering soos 'n plaaslike drukker of 'n videoproep. Teken die koppelvlak en bronadres op wat Find-NetRoute vir elkeen teruggee. Na enige beleidswysiging, koppel weer en herhaal dieselfde vier kontroles; die roetetabel na herkoppeling is die enigste bewys dat die nuwe profiel in werking getree het.
Skei dan roetering van handhawing. Dwingtonneling verkies die tonnel vir gedekte verkeer terwyl dit op is. Dit is nie 'n doodskakelaar nie. As die vereiste is dat niks die masjien verlaat wanneer die tonnel val nie, moet dit uit 'n blokkeringsontwerp kom: 'n vuurmuurprofiel wat aan die tonneltoestand gekoppel is, 'n altyd-aan-profiel met verkeersfilters, of die verskafferkliënt se eie outomatiese blokkeeropsie. Dwingtonneling moet ook die VPN-bediener se eie adres buite die tonnel bereikbaar laat, en dit blokkeer in die naam van “alles forseer” is 'n betroubare manier om jouself uit die verbinding te sluit wat jy probeer afdwing.
Voordat jy enigiets verander, gaan deur hierdie lys. Elke item wat misluk, vernou waar die werklike probleem sit.
- Profielnaam en omvang bevestig, met
-AllUserConnectiongebruik vir masjienwye profiele. SplitTunnelinggelees en as konfigurasie behandel eerder as bewys van dekking.- Tonnel-adapterroetes apart gelys vir IPv4 en IPv6.
Find-NetRouteuitgevoer vir een openbare, een interne en een uitsonderingsbestemming.- NRPT-reëls gekontroleer voordat roetes vir 'n naamfout blameer word.
- Blokkeringsvereiste weer gelees: voorkeurroetering is nie dieselfde as afgedwonge blokkering nie.
Die volle-tonnel- en split-tonnel-besluit self behoort aan wie die profiel besit, en Microsoft se roete-notas beskryf die gedrag wat Windows implementeer wanneer 'n profiel dit stel. Microsoft: dwing- en split-tonneling is die verwysing wat ek oop hou terwyl ek die uitset lees.