Utestengd app framleis på nettet? Reglar per app og for ruter er ulike
Å stengje ein Android-app ute frå ein VPN blokkerer han ikkje. Tillatingslister, UID-policyreglar og pusha ruter avgjer kvar sin del av vegen.
Å stengje ute ein pakke er ein ruteinstruks, ikkje ei blokkering, så sidene som blir lasta etter at VPN-en koplar til, er venta og ikkje prov på ein feil. Utestenginga tek appen ut av tunnelen i staden for å blokkere han, og det vanlege nettet ber trafikken. To skilde policyar møtest her: den eine vel prosessar, den andre vel destinasjonar. Å lese dei i den rekkjefølgja forklarer kvifor eit tilkopla ikon og ein fungerande app ikkje er ei motsetning.
Kvifor ei utestenging held nettet ope
VpnService.Builder godtek anten ei tillatingsliste eller ei blokkeringsliste, aldri båe. Pakkar på ei tillatingsliste er dei einaste som blir ruta gjennom tunnelen. Ei blokkeringsliste snur det: kvar pakke utanom dei oppførte brukar tunnelen, og dei oppførte held på den fysiske vegen. Ein pakke som ikkje er oppført, er under ei tillatingsliste òg utanfor tunnelen, så utestenging er normaltilstanden for dei fleste appane i den modusen.
Det gjer ein lokal blokkeringspost til ei ruteavgjerd, ikkje ein brannmurregel. Viss kravet er å hindre ein app i å nå ein vert, må tunnelen dekkje han, og serveren eller ein lokal policy må avvise trafikken. Å fjerne ein app frå tunnelen endrar berre kva grensesnitt som ber pakkane hans.
Play Store-tilfellet er det vanlege medvitne dømet. Å stengje ute butikkpakken let nedlastingar bruke den underliggjande sambindinga når VPN-utgangen forstyrrar overføringar, og det viser at utestenging tyder omgåing, ikkje blokkering.
Éin profil, éi liste
Byggjaren kastar ein feil viss båe kalla blir brukte, så profilen framfor deg er anten ei tillatings- eller ei blokkeringsliste. Den eine kjensgjerninga avgjer korleis kvar seinare observasjon skal lesast. Sjekk koden eller den administrerte konfigurasjonen før rutetabellen, fordi lista avgjer kva resten av utdataa tyder. Ein hybrid profil er ikkje ein tilstand du kan sjå på.
Skilnaden føreser òg kva ein nyleg installert app vil gjere. Under ei tillatingsliste blir han utanfor til nokon legg han til, medan han under ei blokkeringsliste blir med i tunnelen som standard.
Administrerte konfigurasjonar viser det same valet under ulike nøkkelnavn, og nokre konsollar skildrar det som per-app VPN-modus i staden for som ei liste. Åtferda blir likevel redusert til dei to kalla, så spor innstillinga tilbake til pakkelista i staden for å stole på etiketten. Viss etiketten og lista er usamde, vinn lista.
Følg UID-regelen til tabellen for tunnelen
Android gjev kvar app sin eigen Linux-brukar-ID, og VPN-tenesta installerer policyreglar som svarar til UID-intervall. Samhøyrande trafikk blir send til ein rutetabell der standardruta peikar på tun-eininga. Tabellnummeret blir tildelt per VPN-instans, så det endrar seg etter ei gjentilkopling eller etter at ein andre VPN-profil er oppretta.
Regelutdataa er kartet. Kvar linje namngjev ein oppslagstabell, og den tabellen held standardruta som avgjer om samhøyrande pakkar kjem inn i tunnelen.
adb shell ip rule show
adb shell ip route show table all
adb shell cmd package list packages -U | grep <package>
Køyr den tredje kommandoen først for å få UID-en, og finn deretter regelen som intervallet hans inneheld. Den regelen peikar på eit tabellnummer, og ip route show table <n> med det nummeret viser om det finst ei standardrute gjennom tun-eininga. Viss tabellen ikkje har noko standardrute, er appen vald, men har ingen veg, noko som er ein annan feil.
Desse kommandoane krev eit bygg som kan feilsøkjast, eller eining der adb shell kan lese nettverkstilstanden. På eit produksjonshandsett svarar pakkehandsamaren framleis, men ruteinspeksjonen kan bli avvist, så registrer det du kan, og handsam resten som ubekrefta.
Ei rute krev eit prefiks, ikkje ein app
Builder.addRoute krev destinasjonsprefiks for tunnelen. Ein profil som berre legg til 10.0.0.0/8 sender det prefikset gjennom tunnelen og lèt kvar annan destinasjon bli på den fysiske vegen. Det er vanleg delt tunnellering, og det er uavhengig av kva appar reglane valde.
Server-pusha konfigurasjon speglar den same modellen. Individuelle rutepush legg til prefiks, medan eit redirect-gateway-direktiv erstattar standardruta og fangar alt for appane tunnelen dekkjer. Å fjerne det direktivet kan krympe ein fungerande tunnel til eitt enkelt subnett utan noka endring på eininga.
Ei pusha rute med ein uvanleg gateway eller metrisk kvalifikator kan òg mislukkast i å installerast. Føretrekk den enkle prefiksforma og lat serveren handtere vidaresending og NAT.
Les snittet før du endrar ei innstilling
Tunnelen ber snittet av dei dekte prosessane og dei kravde destinasjonane. Ein dekt app som ber om ei adresse utanfor dei publiserte prefiksa, forlèt via det fysiske nettet. Ein blokkert pakke blir utanfor sjølv når han ber om ei adresse innanfor desse prefiksa. Ingen av tilfella er ein feil; båe er dei to policyane som gjer jobben sin.
Ein per-app VPN kan òg etterlate ein tilknytt app utan tilkopling. Når on-demand er av og tunnelen er nede, blir appen verande bunden til per-app VPN-en og har ingen reserve, noko som ser ut som ein øydelagd app snarare enn ein policytilstand. Å slå på on-demand eller fjerne tilknytinga via administrasjon endrar det.
| 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 |
Diagnostiser éin akse om gongen. Stadfest tillating eller blokkering først, les dei installerte UID-reglane og tabellane som nummer to, og test ein annan app mot den same destinasjonen til slutt. Den andre appen skil prosessval frå destinasjonsval i éin einaste førespurnad.
Skriv ned resultatet som app, destinasjon og tabellnummer. Den tuppelen er det den neste endringa må ta vare på.