Išbraukta programėlė vis dar prisijungusi? Programėlių ir maršrutų taisyklės skiriasi
Android programėlės išbraukimas iš VPN jos neužblokuoja. Leidimų sąrašai, UID taisyklės ir nusiųsti maršrutai nulemia skirtingą kelio dalį.
Paketo išbraukimas yra maršrutizavimo nurodymas, o ne blokavimas, todėl puslapiai, kurie įkeliami prisijungus prie VPN, yra tikėtini, o ne gedimo įrodymas. Išbraukimas išima programėlę iš tunelio, o ne ją blokuoja, o įprastas tinklas neša jos srautą. Čia susitinka dvi atskiros politikos: viena renkasi procesus, kita renkasi paskirties vietas. Jų skaitymas tokia tvarka paaiškina, kodėl prisijungusi piktograma ir veikianti programėlė nėra prieštaravimas.
Kodėl išbraukimas palieka tinklą atvirą
VpnService.Builder priima arba leidimų sąrašą, arba draudimų sąrašą, niekada abiejų. Tik leidimų sąraše esantys paketai eina per tunelį. Draudimų sąrašas tai apverčia: kiekvienas paketas, išskyrus išvardytus, naudoja tunelį, o išvardyti išlaiko fizinį kelią. Leidimų sąraše nenurodytas paketas taip pat yra už tunelio ribų, tad šiuo režimu išbraukimas yra įprasta daugumos programėlių būsena.
Tai paverčia vietinį draudimo įrašą maršrutizavimo sprendimu, o ne ugniasienės taisykle. Jei reikalavimas yra neleisti programėlei pasiekti pagrindinio kompiuterio, tunelis turi ją aprėpti, o serveris arba vietinė politika turi atmesti srautą. Programėlės išėmimas iš tunelio keičia tik tai, kuri sąsaja neša jos paketus.
Play Store atvejis yra įprastas sąmoningas pavyzdys. Parduotuvės paketo išbraukimas leidžia atsisiuntimams naudoti pagrindinį ryšį, kai VPN išėjimas trukdo perdavimams, ir parodo, kad išbraukimas reiškia apėjimą, o ne blokavimą.
Vienas profilis, vienas sąrašas
Kūrėjas meta išimtį, jei naudojami abu kvietimai, tad priešais esantis profilis yra arba leidimų, arba draudimų sąrašas. Šis vienas faktas nulemia, kaip skaityti kiekvieną vėlesnį stebėjimą. Patikrinkite kodą arba valdomą konfigūraciją prieš maršrutizavimo lentelę, nes sąrašas nulemia, ką reiškia likusi išvestis. Hibridinis profilis nėra būsena, kurią galima stebėti.
Skirtumas taip pat numato, ką darys naujai įdiegta programėlė. Leidimų sąraše ji lieka lauke, kol kas nors ją pridės, o draudimų sąraše pagal nutylėjimą prisijungia prie tunelio.
Valdomos konfigūracijos pateikia tą patį pasirinkimą skirtingais raktų pavadinimais, o kai kurios konsolės apibūdina jį kaip VPN režimą kiekvienai programėlei, o ne kaip sąrašą. Elgsena vis tiek redukuojasi į tuos du kvietimus, todėl sekite nustatymą atgal iki paketų sąrašo, o ne pasitikėkite etikete. Jei etiketė ir sąrašas nesutampa, laimi sąrašas.
Sekite UID taisyklę iki tunelio lentelės
Android kiekvienai programėlei suteikia savo Linux naudotojo ID, o VPN tarnyba įdiegia politikos taisykles, atitinkančias UID intervalus. Atitinkantis srautas siunčiamas į maršrutizavimo lentelę, kurios numatytasis maršrutas nukreiptas į tun įrenginį. Lentelės numeris priskiriamas kiekvienam VPN egzemplioriui, todėl jis keičiasi po prisijungimo iš naujo arba sukūrus antrą VPN profilį.
Taisyklių išvestis yra žemėlapis. Kiekviena eilutė įvardija paieškos lentelę, o ta lentelė laiko numatytąjį maršrutą, kuris nulemia, ar atitinkantys paketai patenka į tunelį.
adb shell ip rule show
adb shell ip route show table all
adb shell cmd package list packages -U | grep <package>
Pirmiausia paleiskite trečiąją komandą, kad gautumėte UID, tada raskite taisyklę, kurios intervalas jį apima. Ta taisyklė nurodo lentelės numerį, ir ip route show table <n> su tuo numeriu parodoma, ar yra numatytasis maršrutas per tun įrenginį. Jei lentelėje nėra numatytojo maršruto, programėlė atrinkta, bet neturi kelio, o tai jau kitas gedimas.
Šioms komandoms reikia derinamosios versijos arba įrenginio, kuriame adb shell gali nuskaityti tinklo būseną. Gamybiniame telefone paketų tvarkyklė vis dar atsako, bet maršrutizavimo patikra gali būti atmesta, todėl užrašykite, ką galite, o likusią dalį laikykite nepatvirtinta.
Maršrutas reikalauja prefikso, o ne programėlės
Builder.addRoute reikalauja paskirties prefiksų tuneliui. Profilis, kuris prideda tik 10.0.0.0/8 siunčia tą prefiksą per tunelį ir palieka kiekvieną kitą paskirties vietą fiziniame kelyje. Tai įprastas skaidytas tuneliavimas, ir jis nepriklauso nuo to, kurias programėles pasirinko taisyklės.
Serverio siunčiama konfigūracija atspindi tą patį modelį. Atskiri maršrutų siuntimai prideda prefiksus, o redirect-gateway direktyva pakeičia numatytąjį maršrutą ir užgriebia viską toms programėlėms, kurias tunelis apima. Tos direktyvos pašalinimas gali sumažinti veikiantį tunelį iki vieno potinklio be jokių įrenginio pakeitimų.
Siunčiamas maršrutas su neįprastu šliuzu ar metriniu kvalifikatoriumi taip pat gali neįsirašyti. Pirmenybę teikite paprastai prefikso formai ir palikite serveriui persiuntimą bei NAT.
Perskaitykite sankirtą prieš keisdami nustatymą
Tunelis neša aprėptų procesų ir reikalaujamų paskirties vietų sankirtą. Aprėpta programėlė, prašanti adreso už paskelbtų prefiksų ribų, išeina fiziniu tinklu. Draudžiamas paketas lieka lauke net tada, kai prašo adreso tų prefiksų viduje. Nė vienas atvejis nėra klaida; abu yra dvi politikos, atliekančios savo darbą.
VPN kiekvienai programėlei gali palikti susietą programėlę be ryšio. Kai on-demand išjungtas, o tunelis neveikia, programėlė lieka susieta su VPN kiekvienai programėlei ir neturi atsarginio kelio, kas atrodo kaip sugedusi programėlė, o ne kaip politikos būsena. on-demand įjungimas arba susiejimo pašalinimas per valdymą tai pakeičia.
| 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 |
Diagnozuokite vieną ašį vienu metu. Pirmiausia patvirtinkite leidimą ar draudimą, antra perskaitykite įdiegtas UID taisykles ir lenteles, o paskiausiai išbandykite antrą programėlę tai pačiai paskirties vietai. Antroji programėlė vienoje užklausoje atskiria proceso pasirinkimą nuo paskirties vietos pasirinkimo.
Užrašykite rezultatą kaip programėlę, paskirties vietą ir lentelės numerį. Būtent šį trejetą turi išsaugoti kitas pakeitimas.