Uitgeslote program steeds aanlyn? Reels per program en vir roetes verskil
Om 'n Android-program van 'n VPN uit te sluit, blokkeer dit nie. Toelatingslyste, UID-beleidsreels en gestuurde roetes bepaal elk 'n ander deel van die pad.
Om 'n pakket uit te sluit is 'n roetebevel, nie 'n blokkade nie, so die bladsye wat ná die VPN-verbinding laai, is verwag en nie 'n bewys van 'n fout nie. Die uitsluiting verwyder die program uit die tonnel eerder as om dit te blokkeer, en die gewone netwerk dra sy verkeer. Twee aparte beleide ontmoet hier: een kies prosesse, die ander kies bestemmings. Om hulle in daardie volgorde te lees, verduidelik waarom 'n verbinde ikoon en 'n werkende program nie 'n teenstrydigheid is nie.
Waarom 'n uitsluiting die netwerk oop hou
VpnService.Builder aanvaar óf 'n toelatingslys óf 'n weierlys, nooit albei nie. Pakkette op 'n toelatingslys is die enigstes wat deur die tonnel gestuur word. 'n Weierlys keer dit om: elke pakket behalwe die gelysde gebruik die tonnel, en die gelysde behou die fisiese pad. 'n Pakket wat nie gelys is nie, is onder 'n toelatingslys ook buite die tonnel, so uitsluiting is die normale toestand vir die meeste programme in daardie modus.
Dit maak 'n plaaslike weier-inskrywing 'n roetebesluit, nie 'n firewall-reël nie. As die vereiste is om 'n program te keer om 'n gasheer te bereik, moet die tonnel dit dek en moet die bediener of 'n plaaslike beleid die verkeer weier. Om 'n program uit die tonnel te verwyder, verander net watter koppelvlak sy pakkette dra.
Die Play Store-geval is die gewone doelbewuste voorbeeld. Om die winkelpakket uit te sluit, laat aflaaie die onderliggende verbinding gebruik wanneer die VPN-uitgang met oordragte inmeng, en dit wys dat uitsluiting omleiding beteken, nie blokkade nie.
Een profiel, een lys
Die bouer gooi 'n fout as albei oproepe gebruik word, so 'n profiel voor jou is óf toelatingslys óf weierlys. Daardie enkele feit bepaal hoe om elke latere waarneming te lees. Kyk na die kode of die bestuurde konfigurasie voor die roetetabel, want die lys bepaal wat die res van die uitset beteken. 'n Hibriede profiel is nie 'n toestand waarna jy kan kyk nie.
Die onderskeid voorspel ook wat 'n nuut geïnstalleerde program sal doen. Onder 'n toelatingslys bly dit buite totdat iemand dit byvoeg, terwyl dit onder 'n weierlys by verstek by die tonnel aansluit.
Bestuurde konfigurasies bied dieselfde keuse onder verskillende sleutelname, en sommige konsoles beskryf dit as VPN-modus per program eerder as as 'n lys. Die gedrag kom steeds neer op daardie twee oproepe, so spoor die instelling terug na die pakketlys in plaas daarvan om die etiket te vertrou. As die etiket en die lys verskil, wen die lys.
Volg die UID-reël na die tonneltabel
Android gee elke program sy eie Linux-gebruikers-ID, en die VPN-diens installeer beleidsreëls wat by UID-reekse pas. Passende verkeer word na 'n roetetabel gestuur waarvan die verstekroete na die tun-toestel wys. Die tabelnommer word per VPN-geval toegeken, so dit verander ná 'n herverbinding of nadat 'n tweede VPN-profiel geskep is.
Die reël-uitset is die kaart. Elke lyn noem 'n opsoektabel, en daardie tabel hou die verstekroete wat besluit of passende pakkette die tonnel binnegaan.
adb shell ip rule show
adb shell ip route show table all
adb shell cmd package list packages -U | grep <package>
Voer die derde opdrag eerste uit om die UID te kry, en vind dan die reël wie se reeks dit bevat. Daardie reël wys na 'n tabelnommer, en ip route show table <n> met daardie nommer wys of 'n verstekroete deur die tun-toestel bestaan. As die tabel geen verstek het nie, is die program gekies maar het geen pad nie, wat 'n ander fout is.
Hierdie opdragte vereis 'n ontfoutbare bou of 'n toestel waar adb shell netwerktoestand kan lees. Op 'n produksie-handset antwoord die pakketbestuurder steeds, maar die roete-inspeksie kan geweier word, so teken op wat jy kan en behandel die res as onbevestig.
Roetes eis 'n voorvoegsel, nie 'n program nie
Builder.addRoute eis bestemmingsvoorvoegsels vir die tonnel. 'n Profiel wat net 10.0.0.0/8 byvoeg, stuur daardie voorvoegsel deur die tonnel en laat elke ander bestemming op die fisiese pad. Dit is gewone gesplete tonneling, en dit is onafhanklik van watter programme die reëls gekies het.
Bediener-gestuurde konfigurasie weerspieël dieselfde model. Individuele roete-stuwings voeg voorvoegsels by, terwyl 'n redirect-gateway-direktief die verstekroete vervang en alles vasvang vir die programme wat die tonnel dek. Om daardie direktief te verwyder, kan 'n werkende tonnel tot een subnet laat krimp sonder enige verandering op die toestel.
'n Gestuurde roete met 'n ongewone gateway of metriek-kwalifiseerder kan ook versuim om te installeer. Verkies die gewone voorvoegselvorm en laat die bediener die aanstuur en NAT hanteer.
Lees die snijpunt voordat jy 'n instelling verander
Die tonnel dra die snijpunt van die gedekte prosesse en die geëiste bestemmings. 'n Gedekte program wat 'n adres buite die gepubliseerde voorvoegsels vra, verlaat via die fisiese netwerk. 'n Geweierde pakket bly buite selfs wanneer dit 'n adres binne daardie voorvoegsels vra. Geen van die twee gevalle is 'n fout nie; albei is die twee beleide wat hul werk doen.
'n VPN per program kan ook 'n geassosieerde program sonder verbinding laat. Wanneer on-demand af is en die tonnel af is, bly die program aan die per-program-VPN gebind en het geen terugval nie, wat soos 'n stukkende program lyk eerder as 'n beleidstoestand. Om on-demand te aktiveer, of die assosiasie deur bestuur te verwyder, verander dit.
| Layer | What it selects | Where to look | Typical mismatch |
|---|---|---|---|
| Package list | Processes | Builder calls or managed configuration | App excluded but expected to be blocked |
| UID policy rule | Which table a UID uses | ip rule show | Tunnel icon on, app still on Wi-Fi |
| Routing table | Destinations for matched traffic | ip route show table <n> | Covered app reaches only one subnet |
| Server push | Prefixes offered to the client | Server route configuration | Tunnel shrinks after a server edit |
Diagnoseer een as op 'n slag. Bevestig eers toelaat of weier, lees tweedens die geïnstalleerde UID-reëls en tabelle, en toets laastens 'n tweede program teen dieselfde bestemming. Die tweede program skei proseskeuse van bestemmingskeuse in een enkele versoek.
Skryf die resultaat neer as program, bestemming en tabelnommer. Daardie tuple is wat die volgende verandering moet bewaar.