VPN po aplikacijama na Androidu: izuzimanje aplikacije nije njeno blokiranje
Lista aplikacija na ekranu pripada jednom vlasniku tunela, a izuzimanje aplikacije je usmjerava oko tog tunela, a ne s mreže. Počnite odatle.
Dvije osobe postavljaju isto pitanje i dobijaju nespojive odgovore, jer stoje na različitim mjestima. Jedna je otvorila ekran sistemskih postavki VPN-a i uređuje listu aplikacija. Druga piše VpnService.Builder.addDisallowedApplication() u editoru. Obje to nazivaju VPN filterom po aplikacijama. Samo jedna od njih posjeduje kontrolu koju opisuje, i nijedna ništa ne blokira.
Počnite od ekrana koji korisnik vidi
Otvorite Postavke, pronađite stavku VPN i pogledajte koja je veza zaista aktivna. Ako klijent nudi listu po aplikacijama, ta lista pripada njegovom vlastitom tunelu. Platforma ne objavljuje opšti API preko kojeg bi nepovezana aplikacija mogla čitati ili mijenjati izbor aplikacija drugog VPN-a, pa druga aplikacija ne može popraviti tu listu za korisnika.
Ovo je prva račva u objašnjenju. Ako instalirani VPN nema takvu postavku, nema šta da se zaobilazi kodom: funkcija nedostaje u proizvodu koji posjeduje tunel. Ako je ima, ispravno rješenje je na tom ekranu i pravi ga osoba koja ga može otvoriti.
Pratite paket u tunel
Kada vaša aplikacija gradi tunel, stvara TUN interfejs i objavljuje čiji promet ulazi u njega. Pozivi za članstvo se dešavaju prije uspostavljanja interfejsa, a nakon 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 here
Ti pozivi se odnose samo na tunel koji je vaša aplikacija upravo stvorila. Nisu politika za cijeli uređaj, ne ostaju za druge klijente i ne mogu dosegnuti tuđi VPN. Kada poziv builder ne uspije jer se paket ne može razriješiti, interfejs se nikada ne uspostavlja, što je čist, a ne tih neuspjeh.
Zašto je izuzimanje izgledalo kao blokada
Izuzeta aplikacija se usmjerava oko vašeg tunela na osnovnu mrežu. To je suprotno od blokiranja: promet ipak napušta uređaj, samo izvan interfejsa koji kontrolišete. Aplikacija u stilu zaštitnog zida radi obrnuto: prima promet aplikacije u svoj tunel i zatim odbacuje pakete ili odbija da ih proslijedi, pa je interfejs isti a smjer politike obrnut.
Rad iza tog obrtanja nije konfiguracijska zastavica. Čitate IP pakete iz deskriptora tunela, odlučujete po toku i ili ih prosljeđujete kroz zaštićeni soket ili ih odbacujete. Sve što ne obradite jednostavno stane, zato polovično dovršen tunel izgleda kao pokvarena mreža, a ne kao filter koji radi. Ako je cilj blokada, planirajte obradu paketa, uslugu u prvom planu i pisanu politiku za promet koji ne možete klasificirati.
Šta se kvari kada ga sami gradite
Android obično dopušta jedan aktivni VPN istovremeno, pa se vaš filtarski tunel i tunel za privatnost takmiče za isto mjesto, osim ako proizvodi podržavaju ulančavanje. Stalni VPN s blokiranjem veza mijenja način neuspjeha na način koji je ovdje važan: promet koji ne može ući u tunel se odbacuje umjesto da se šalje direktno, što dizajn protiv curenja želi, a sesija za otklanjanje grešaka rijetko očekuje.
Vidljivost paketa je druga zamka. Razrješavanje naziva paketa aplikacije može ne uspjeti s NameNotFoundException, a na novijim verzijama Androida skup paketa koje vidite zavisi od upita koje ste objavili. Obradite izuzetak umjesto da pretpostavljate da se svaki naziv razrješava, i ponovo čitajte listu kada se aplikacije instaliraju ili uklone, umjesto da je zauvijek keširate.
Upravljani uređaji dodaju trećeg vlasnika. Politika korporativne mobilnosti može postaviti VPN po aplikacijama ili stalni profil, a obična aplikacija to ne može nadjačati. Provjerite da li je uređaj pod upravljanjem prije nego što otklanjate greške u svom kodu, jer u tom slučaju listu koju pokušavate promijeniti možda ne može urediti niko ko drži telefon.
Testirajte s aplikacijom koju kontrolišete
Ne testirajte s aplikacijom koju pokušavate filtrirati. Koristite drugu aplikaciju čije ponašanje na mreži možete posmatrati i provjerite izlazi li njen promet kroz vaš tunel dok promet cilja ne izlazi. Ako obje ostanu unutra, politika radi i cilj je izuzet; ako nijedna ne izađe, tunel je pogrešan i lista aplikacija nije problem.
Zatim odlučite koju od tri stvari zaista gradite. Tunel po aplikacijama je builder API, a lista je dio vašeg profila. Zaštitni zid uređaja je obrada paketa plus životni ciklus koji možete braniti. Mijenjanje tuđeg VPN-a nije podržan put i iskren odgovor je da postavka pripada tom proizvodu.