Aplicație exclusă încă online? Regulile pentru aplicații și rute diferă
Excluderea unei aplicații Android dintr-un VPN nu o blochează. Listele de permisiuni, regulile UID și rutele trimise decid fiecare o altă parte a drumului.
Excluderea unui pachet este o instrucțiune de rutare, nu o blocare, așa că paginile care se încarcă după conectarea VPN sunt de așteptat și nu o dovadă a unei defecțiuni. Excluderea scoate aplicația din tunel în loc să o blocheze, iar rețeaua obișnuită îi transportă traficul. Aici se întâlnesc două politici separate: una alege procese, cealaltă alege destinații. Citirea lor în această ordine explică de ce o pictogramă conectată și o aplicație care funcționează nu sunt o contradicție.
De ce o excludere lasă rețeaua deschisă
VpnService.Builder acceptă fie o listă de permisiuni, fie o listă de interdicții, niciodată pe amândouă. Doar pachetele dintr-o listă de permisiuni sunt rutate prin tunel. O listă de interdicții inversează acest lucru: fiecare pachet, în afară de cele listate, folosește tunelul, iar cele listate păstrează calea fizică. Un pachet nelistat sub o listă de permisiuni este și el în afara tunelului, așa că excluderea este starea normală pentru majoritatea aplicațiilor în acel mod.
Asta face dintr-o intrare locală de interdicție o decizie de rutare, nu o regulă de firewall. Dacă cerința este să împiedici o aplicație să ajungă la un host, tunelul trebuie să o acopere, iar serverul sau o politică locală trebuie să refuze traficul. Scoaterea unei aplicații din tunel schimbă doar ce interfață îi transportă pachetele.
Cazul Play Store este exemplul deliberat obișnuit. Excluderea pachetului magazinului permite descărcărilor să folosească conexiunea de bază atunci când ieșirea VPN interferează cu transferurile, și arată că excluderea înseamnă ocolire, nu blocare.
Un profil, o listă
Constructorul aruncă o excepție dacă sunt folosite ambele apeluri, așa că profilul din fața ta este fie o listă de permisiuni, fie una de interdicții. Acest singur fapt determină cum să citești fiecare observație ulterioară. Verifică codul sau configurația administrată înaintea tabelului de rutare, pentru că lista decide ce înseamnă restul ieșirii. Un profil hibrid nu este o stare la care poți să te uiți.
Diferența prezice și ce va face o aplicație nou instalată. Sub o listă de permisiuni rămâne afară până când cineva o adaugă, în timp ce sub o listă de interdicții se alătură tunelului implicit.
Configurațiile administrate expun aceeași alegere sub nume de chei diferite, iar unele console o descriu ca mod VPN pentru fiecare aplicație și nu ca listă. Comportamentul se reduce totuși la acele două apeluri, așa că urmărește setarea înapoi până la lista de pachete în loc să te bazezi pe etichetă. Dacă eticheta și lista nu sunt de acord, câștigă lista.
Urmează regula UID până la tabelul tunelului
Android oferă fiecărei aplicații propriul ID de utilizator Linux, iar serviciul VPN instalează reguli de politică ce corespund intervalelor UID. Traficul corespunzător este trimis către un tabel de rutare a cărui rută implicită indică dispozitivul tun. Numărul tabelului este alocat pentru fiecare instanță VPN, așa că se schimbă după o reconectare sau după crearea unui al doilea profil VPN.
Ieșirea regulilor este harta. Fiecare linie numește un tabel de căutare, iar acel tabel deține ruta implicită care decide dacă pachetele corespunzătoare intră în tunel.
adb shell ip rule show
adb shell ip route show table all
adb shell cmd package list packages -U | grep <package>
Rulează mai întâi a treia comandă pentru a obține UID-ul, apoi găsește regula al cărei interval îl conține. Acea regulă indică un număr de tabel, și ip route show table <n> cu acel număr arată dacă există o rută implicită prin dispozitivul tun. Dacă tabelul nu are o rută implicită, aplicația este selectată dar nu are drum, ceea ce este o altă defecțiune.
Aceste comenzi necesită o compilare depanabilă sau un dispozitiv pe care adb shell poate citi starea rețelei. Pe un telefon de producție managerul de pachete încă răspunde, dar inspecția rutării poate fi refuzată, așa că notează ce poți și tratează restul ca neverificat.
O rută revendică un prefix, nu o aplicație
Builder.addRoute revendică prefixe de destinație pentru tunel. Un profil care adaugă doar 10.0.0.0/8 trimite acel prefix prin tunel și lasă fiecare altă destinație pe calea fizică. Aceasta este tunelarea divizată obișnuită și este independentă de aplicațiile pe care regulile le-au selectat.
Configurația trimisă de server oglindește același model. Impingerile individuale de rute adaugă prefixe, în timp ce o directivă redirect-gateway înlocuiește ruta implicită și captează totul pentru aplicațiile pe care tunelul le acoperă. Eliminarea acelei directive poate micșora un tunel funcțional la o singură subrețea fără nicio modificare pe dispozitiv.
O rută trimisă cu o poartă sau un calificator metric neobișnuit poate de asemenea să nu se instaleze. Preferă forma simplă de prefix și lasă serverul să se ocupe de redirecționare și NAT.
Citește intersecția înainte de a schimba o setare
Tunelul transportă intersecția proceselor acoperite și a destinațiilor revendicate. O aplicație acoperită care cere o adresă în afara prefixelor publicate iese prin rețeaua fizică. Un pachet interzis rămâne afară chiar și când cere o adresă în interiorul acelor prefixe. Niciunul dintre cazuri nu este o eroare; ambele sunt cele două politici făcându-și treaba.
Un VPN pentru fiecare aplicație poate lăsa o aplicație asociată fără conectivitate. Când on-demand este oprit și tunelul este jos, aplicația rămâne legată de VPN-ul pentru fiecare aplicație și nu are alternativă, ceea ce arată ca o aplicație stricată și nu ca o stare de politică. Activarea on-demand sau eliminarea asocierii prin administrare schimbă asta.
| 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 |
Diagnostichează o singură axă o dată. Confirmă mai întâi permisiunea sau interdicția, citește apoi regulile UID și tabelele instalate, și testează la final o a doua aplicație către aceeași destinație. A doua aplicație separă selecția procesului de selecția destinației într-o singură cerere.
Notează rezultatul ca aplicație, destinație și număr de tabel. Exact acest triplu trebuie păstrat de următoarea modificare.