Android VPN po aplikaciji: isključivanje aplikacije nije njeno blokiranje
Lista po aplikaciji na ekranu pripada jednom vlasniku tunela, a isključivanje aplikacije je usmerava oko tog tunela, a ne van mreže. Počnite tu.
Dve osobe postavljaju isto pitanje i dobijaju odgovore koji se ne slažu, jer stoje na različitim mestima. Jedna ima otvoren ekran sistemskih podešavanja VPN-a i uređuje listu aplikacija. Druga piše VpnService.Builder.addDisallowedApplication() u editoru. Obe to nazivaju VPN filterom po aplikaciji. Samo jedna od njih poseduje kontrolu koju opisuje, i nijedna ništa ne blokira.
Počnite na ekranu koji korisnik vidi
Otvorite Podešavanja, pronađite stavku VPN i pogledajte vezu koja je zaista aktivna. Ako klijent nudi listu po aplikaciji, ta lista pripada klijentovom sopstvenom tunelu. Platforma ne objavljuje opšti API preko kog nepovezana aplikacija može da čita ili menja izbor aplikacija drugog VPN-a, pa drugi program ne može da popravi tu listu za korisnika.
Ovo je prva račva u obilasku. Ako instalirani VPN nema to podešavanje, nema šta da se zaobiđe kodom: funkcija nedostaje u proizvodu koji poseduje tunel. Ako ga ima, ispravka je na tom ekranu i čini je osoba koja može da ga otvori.
Pratite paket u tunel
Kada vaša aplikacija gradi tunel, stvara TUN interfejs i izjavljuje čiji saobraćaj u njega ulazi. Pozivi članstva se dešavaju pre uspostavljanja interfejsa, a posle toga je skup pravila fiksiran za tu sesiju:
val builder = VpnService.Builder()
builder.addAddress("10.8.0.2", 32)
builder.addRoute("0.0.0.0", 0)
builder.addDisallowedApplication("com.example.bypass")
val tun = builder.establish() // membership decided hereTi pozivi važe samo za tunel koji je vaša aplikacija upravo stvorila i ni za šta drugo. Nisu politika na nivou uređaja, ne traju za druge klijente i ne mogu da zadru u tuđi VPN. Kada poziv graditelja baci izuzetak jer paket ne može da se razreši, interfejs se nikad ne uspostavi, što je čist, a ne tih neuspeh.
Zašto je isključivanje izgledalo kao blokada
Isključena aplikacija se usmerava oko vašeg tunela na mrežu ispod. To je suprotno od blokiranja: saobraćaj i dalje napušta uređaj, samo izvan interfejsa koji kontrolišete. Aplikacija u stilu zaštitnog zida radi obrnuto. Ona propušta saobraćaj aplikacije u svoj tunel i zatim odbacuje pakete ili odbija da ih prosledi, pa je interfejs isti, a smer politike je obrnut.
Rad iza tog obrtanja nije konfiguraciona zastavica. Čitate IP pakete iz deskriptora tunela, odlučujete po toku i zatim ih prosleđujete kroz zaštićeni soket ili ih odbacujete. Sve što ne obradite jednostavno stane, i zato poludovršen tunel izgleda kao pokvarena mreža, a ne kao filter koji radi. Ako je cilj blokada, predvidite obradu paketa, uslugu u prvom planu i pisanu politiku za saobraćaj koji ne možete da razvrstate.
Šta puca kada to gradite sami
Android u pravilu dozvoljava samo jedan aktivni VPN istovremeno, pa se vaš tunel za filtriranje i tunel za privatnost takmiče za isto mesto, osim ako proizvodi podržavaju ulančavanje. VPN koji je uvek uključen uz blokiranje veza menja način neuspeha na način koji je ovde važan: saobraćaj koji ne može da uđe u tunel odbacuje se umesto da se pošalje direktno, što dizajn za sprečavanje curenja želi, a sesija otklanjanja grešaka retko očekuje.
Vidljivost paketa je druga zamka. Razrešavanje naziva paketa aplikacije može da padne sa NameNotFoundException, a na novijim verzijama Androida skup paketa koje vidite zavisi od upita koje ste deklarisali. Obradite izuzetak umesto da pretpostavite da se svaki naziv razrešava, i ponovo pročitajte listu kada se aplikacije instaliraju ili uklanjaju, umesto da je zauvek držite u kešu.
Upravljani uređaji dodaju trećeg vlasnika. Politika poslovne mobilnosti može da postavi VPN po aplikaciji ili profil koji je uvek uključen, a obična aplikacija to ne može da zaobiđe. Proverite da li je uređaj pod upravljanjem pre nego što počnete da otklanjate greške u sopstvenom kodu, jer u tom slučaju listu koju pokušavate da promenite možda ne može da uredi niko ko drži telefon.
Testirajte sa aplikacijom koju kontrolišete
Ne testirajte sa aplikacijom koju pokušavate da filtrirate. Upotrebite drugu aplikaciju čije mrežno ponašanje možete da posmatrate i proverite da li njen saobraćaj izlazi kroz vaš tunel dok saobraćaj cilja ne izlazi. Ako obe ostanu unutra, politika radi i cilj je isključen, a ako nijedna ne izađe, sam tunel nije u redu i lista aplikacija nije problem.
Zatim odlučite koju od tri stvari zaista gradite. Tunel po aplikaciji je API graditelja, sa listom kao delom vašeg profila. Zaštitni zid uređaja je obrada paketa plus životni ciklus koji možete da branite. Menjanje tuđeg VPN-a uopšte nije podržan put, a iskren odgovor tamo je da podešavanje pripada tom proizvodu.