Izuzeta aplikacija ipak na mreži? Pravila za aplikacije i rute se razlikuju
Izuzeće Android aplikacije iz VPN-a ne blokira je. Dozvoljene liste, UID pravila politike i gurnute rute određuju različite dijelove puta.
Izuzeće paketa je instrukcija za rutiranje, a ne blokada, pa su stranice koje se učitaju nakon spajanja VPN-a očekivane, a ne dokaz kvara. Izuzeće uklanja aplikaciju iz tunela umjesto da je blokira, a obična mreža nosi njen saobraćaj. Ovdje se susreću dvije odvojene politike: jedna bira procese, druga bira odredišta. Čitanje u tom redu objašnjava zašto povezana ikona i aplikacija koja radi nisu protivrječnost.
Zašto izuzeće drži mrežu otvorenom
VpnService.Builder prihvata ili dozvoljenu ili zabranjenu listu, nikada obje. Paketi na dozvoljenoj listi jedini idu kroz tunel. Zabranjena lista to obrće: svaki paket osim navedenih koristi tunel, a navedeni zadržavaju fizički put. Paket koji nije naveden na dozvoljenoj listi takođe je izvan tunela, pa je izuzeće normalno stanje za većinu aplikacija u tom režimu.
To čini lokalni unos zabrane odlukom o rutiranju, a ne pravilom firewall-a. Ako je cilj spriječiti aplikaciju da dosegne host, tunel je mora pokriti, a server ili lokalna politika moraju odbiti saobraćaj. Uklanjanje aplikacije iz tunela mijenja samo to koji interfejs nosi njene pakete.
Slučaj Play Store je uobičajen namjerni primjer. Izuzeće paketa prodavnice pušta preuzimanja kroz osnovnu vezu kada VPN izlaz ometa prijenos, i pokazuje da izuzeće znači zaobilaženje, a ne blokadu.
Jedan profil, jedna lista
Graditelj baca grešku ako se koriste oba poziva, pa je profil pred vama ili dozvoljena ili zabranjena lista. Ta jedna činjenica određuje kako čitati svako kasnije opažanje. Provjerite kod ili upravljanu konfiguraciju prije tabele rutiranja, jer lista odlučuje šta znači ostatak izlaza. Hibridni profil nije stanje koje možete gledati.
Razlika takođe predviđa šta će novoinštalirana aplikacija raditi. Na dozvoljenoj listi ostaje vani dok je neko ne doda, a na zabranjenoj se pridružuje tunelu po defaultu.
Upravljane konfiguracije izlažu isti izbor pod različitim imenima ključeva, a neke konzole ga opisuju kao per-app VPN režim, a ne kao listu. Ponašanje se ipak svodi na ta dva poziva, pa pratite postavku natrag do liste paketa umjesto da vjerujete oznaci. Ako se oznaka i lista razilaze, lista pobjeđuje.
Slijedite UID pravilo do tabele tunela
Android svakoj aplikaciji daje vlastiti Linux korisnički ID, a VPN servis instalira pravila politike koja odgovaraju UID rasponima. Odgovarajući saobraćaj šalje se u tabelu rutiranja čija default ruta pokazuje na tun uređaj. Broj tabele se dodjeljuje po VPN instanci, pa se mijenja nakon ponovnog spajanja ili nakon stvaranja drugog VPN profila.
Izlaz pravila je mapa. Svaki red imenuje tabelu pretrage, a ta tabela drži default rutu koja odlučuje ulaze li odgovarajući paketi u tunel.
adb shell ip rule show
adb shell ip route show table all
adb shell cmd package list packages -U | grep <package>
Prvo pokrenite treću komandu da dobijete UID, zatim nađite pravilo čiji raspon ga sadrži. To pravilo pokazuje na broj tabele, a ip route show table <n> s tim brojem pokazuje postoji li default ruta kroz tun uređaj. Ako tabela nema default, aplikacija je odabrana ali nema put, što je druga vrsta kvara.
Ove komande traže build koji se može debuggirati ili uređaj na kojem adb shell može čitati stanje mreže. Na proizvodnom telefonu upravitelj paketa ipak odgovara, ali pregled rutiranja može biti odbijen, pa zabilježite šta možete i ostatak tretirajte kao nepotvrđen.
Ruta traži prefiks, a ne aplikaciju
Builder.addRoute traži prefikse odredišta za tunel. Profil koji dodaje samo 10.0.0.0/8 šalje taj prefiks kroz tunel i ostavlja svako drugo odredište na fizičkom putu. To je obično razdvojeno tuneliranje i neovisno je o tome koje su aplikacije pravila odabrala.
Konfiguracija koju gura server preslikava isti model. Pojedinačna guranja ruta dodaju prefikse, dok redirect-gateway direktiva zamjenjuje default rutu i hvata sve za aplikacije koje tunel pokriva. Uklanjanje te direktive može smanjiti radni tunel na jednu podmrežu bez ikakve promjene na uređaju.
Gurnuta ruta s neuobičajenim gatewayom ili metričkim kvalifikatorom takođe se možda neće instalirati. Preferirajte običan oblik prefiksa i pustite serveru da se bavi prosljeđivanjem i NAT-om.
Pročitajte presjek prije nego promijenite postavku
Tunel nosi presjek pokrivenih procesa i traženih odredišta. Pokrivena aplikacija koja traži adresu izvan objavljenih prefiksa izlazi fizičkom mrežom. Zabranjeni paket ostaje vani čak i kada traži adresu unutar tih prefiksa. Nijedan slučaj nije greška; oba su dvije politike koje rade svoj posao.
Per-app VPN može i povezanu aplikaciju ostaviti bez konekcije. Kada je on-demand isključen i tunel ne radi, aplikacija ostaje vezana za per-app VPN i nema rezervni put, što izgleda kao pokvarena aplikacija, a ne kao stanje politike. Uključivanje on-demand-a ili uklanjanje veze kroz upravljanje to mijenja.
| 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 |
Dijagnostikujte jednu osu odjednom. Prvo potvrdite dozvolu ili zabranu, drugo pročitajte instalirana UID pravila i tabele, a na kraju testirajte drugu aplikaciju prema istom odredištu. Druga aplikacija razdvaja odabir procesa od odabira odredišta u jednom zahtjevu.
Zapišite rezultat kao aplikacija, odredište i broj tabele. Taj torke je ono što sljedeća promjena mora sačuvati.