Android VPN po aplikaciji: izuzimanje aplikacije nije njezino blokiranje
Popis po aplikaciji na zaslonu pripada jednom vlasniku tunela, a izuzimanje aplikacije usmjerava je oko tog tunela, a ne izvan mreže. Počnite ondje.
Dvije osobe postavljaju isto pitanje i dobivaju nespojive odgovore jer stoje na različitim mjestima. Jedna ima otvoren zaslon sistemskih postavki VPN-a i uređuje popis aplikacija. Druga piše VpnService.Builder.addDisallowedApplication() u editoru. Obje to nazivaju VPN filtrom po aplikaciji. Samo jedna od njih posjeduje kontrolu koju opisuje, i nijedna ništa ne blokira.
Počnite na zaslonu koji korisnik vidi
Otvorite Postavke, pronađite stavku VPN i pogledajte vezu koja je stvarno aktivna. Ako klijent nudi popis po aplikaciji, taj popis pripada klijentovu vlastitom tunelu. Platforma ne objavljuje opći API preko kojeg bi nepovezana aplikacija mogla čitati ili mijenjati odabir aplikacija drugog VPN-a, pa drugi program ne može popraviti taj popis za korisnika.
Ovo je prvo račvanje u obilasku. Ako instalirani VPN nema tu postavku, nema se što zaobići kodom: značajka nedostaje u proizvodu koji posjeduje tunel. Ako je ima, ispravak je na tom zaslonu i čini ga osoba koja ga može otvoriti.
Slijedite paket u tunel
Kada vaša aplikacija gradi tunel, stvara TUN sučelje i izjavljuje čiji promet u njega ulazi. Pozivi članstva događaju se prije uspostave sučelja, 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 hereTi se pozivi odnose na tunel koji je vaša aplikacija upravo stvorila i ni na što drugo. Nisu politika na razini uređaja, ne traju za druge klijente i ne mogu seći u tuđi VPN. Kada poziv graditelja baci iznimku jer se paket ne može razriješiti, sučelje se nikad ne uspostavi, što je čist, a ne tih neuspjeh.
Zašto je izuzimanje izgledalo kao blokada
Izuzeta aplikacija usmjerava se oko vašeg tunela na temeljnu mrežu. To je suprotno od blokiranja: promet i dalje napušta uređaj, samo izvan sučelja koje kontrolirate. Aplikacija u stilu vatrozida čini obrnuto. Propušta promet aplikacije u svoj tunel i zatim odbacuje pakete ili ih odbija proslijediti, pa je sučelje isto, a smjer politike obrnut.
Rad iza tog obrtanja nije konfiguracijska zastavica. Čitate IP pakete iz deskriptora tunela, odlučujete po toku i zatim ih prosljeđujete kroz zaštićeni socket ili ih odbacujete. Sve što ne obradite jednostavno stane, i zato poludovršen tunel izgleda kao pokvarena mreža, a ne kao filtar koji radi. Ako je cilj blokada, predvidite obradu paketa, uslugu u prvom planu i pisanu politiku za promet koji ne možete razvrstati.
Što puca kada to gradite sami
Android u pravilu dopušta samo jedan aktivni VPN istovremeno, pa se vaš tunel za filtriranje i tunel za privatnost natječu za isto mjesto, osim ako proizvodi podržavaju ulančavanje. VPN koji je uvijek uključen uz blokiranje veza mijenja način neuspjeha na način koji je ovdje važan: promet koji ne može ući u tunel odbacuje se umjesto da se pošalje izravno, što dizajn za sprječavanje curenja želi, a sesija otklanjanja pogrešaka rijetko očekuje.
Vidljivost paketa druga je zamka. Razrješavanje naziva paketa aplikacije može pasti s NameNotFoundException, a na novijim verzijama Androida skup paketa koje vidite ovisi o upitima koje ste deklarirali. Obradite iznimku umjesto da pretpostavite da se svaki naziv razrješava, i ponovno pročitajte popis kada se aplikacije instaliraju ili uklanjaju, umjesto da ga zauvijek držite u predmemoriji.
Upravljani uređaji dodaju trećeg vlasnika. Politika poslovne mobilnosti može postaviti VPN po aplikaciji ili profil koji je uvijek uključen, a obična aplikacija to ne može zaobići. Provjerite je li uređaj pod upravljanjem prije nego počnete otklanjati pogreške u vlastitom kodu, jer u tom slučaju popis koji pokušavate promijeniti možda ne može urediti nitko tko drži telefon.
Testirajte s aplikacijom koju kontrolirate
Ne testirajte s aplikacijom koju pokušavate filtrirati. Upotrijebite drugu aplikaciju čije mrežno ponašanje možete promatrati i provjerite izlazi li njezin promet kroz vaš tunel dok promet cilja ne izlazi. Ako obje ostanu unutra, politika radi i cilj je izuzet, a ako nijedna ne izađe, sam tunel nije u redu i popis aplikacija nije problem.
Zatim odlučite koju od tri stvari stvarno gradite. Tunel po aplikaciji je API graditelja, s popisom kao dijelom vašeg profila. Vatrozid uređaja je obrada paketa plus životni ciklus koji možete braniti. Mijenjanje tuđeg VPN-a uopće nije podržan put, a iskren odgovor ondje je da postavka pripada tom proizvodu.