Dve osebi postavita isto vprašanje in dobita nezdružljiva odgovora, ker stojita na različnih mestih. Eden ima odprt zaslon sistemskih nastavitev VPN in ureja seznam aplikacij. Drugi piše VpnService.Builder.addDisallowedApplication() v urejevalniku. Oba temu rečeta VPN filter po aplikaciji. Samo eden od njiju ima nadzor, ki ga opisuje, in nobeden ničesar ne blokira.

Začnite na zaslonu, ki ga vidi uporabnik

Odprite Nastavitve, poiščite vnos VPN in poglejte povezavo, ki je resnično aktivna. Če odjemalec ponuja seznam po aplikacijah, ta seznam pripada lastnemu tunelu odjemalca. Platforma ne objavlja splošnega API-ja, prek katerega bi nepovezana aplikacija lahko brala ali spreminjala izbiro aplikacij drugega VPN, zato druga aplikacija tega seznama ne more popraviti namesto uporabnika.

To je prvo razcepišče v vodiču. Če nameščeni VPN nima te nastavitve, ni česa obiti s kodo: funkcije v izdelku, ki ima tunel, ni. Če jo ima, je pravi popravek na tem zaslonu in ga opravi tisti, ki ga lahko odpre.

Sledite paketu v tunel

Ko vaša aplikacija zgradi tunel, ustvari vmesnik TUN in razglasi, čigav promet vstopa vanj. Klici članstva se zgodijo pred vzpostavitvijo vmesnika, po tem pa je nabor pravil za to sejo določen:

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 klici veljajo samo za tunel, ki ga je vaša aplikacija pravkar ustvarila, in za nič drugega. Niso politika celotne naprave, ne vztrajajo za druge odjemalce in ne morejo seči v tuj VPN. Ko klic graditelja vrže izjemo, ker paketa ni mogoče razrešiti, se vmesnik nikoli ne vzpostavi, kar je čista in ne tiha napaka.

Zakaj je izključitev izgledala kot blokada

Izključena aplikacija je usmerjena okoli vašega tunela v spodnje omrežje. To je nasprotje blokiranja: promet še vedno zapusti napravo, le zunaj vmesnika, ki ga nadzorujete. Aplikacija v slogu požarnega zidu naredi obratno. Spusti promet aplikacije v svoj tunel in nato pakete zavrže ali zavrne njihovo posredovanje, zato je vmesnik isti, smer politike pa obrnjena.

Delo za to obrnitvijo ni konfiguracijska zastavica. Iz opisnika tunela berete pakete IP, odločate po toku in jih nato posredujete skozi zaščiteno vtičnico ali jih zavržete. Vse, česar ne obdelate, se preprosto ustavi, zato je napol dokončan tunel videti kot pokvarjeno omrežje in ne kot delujoč filter. Če je cilj blokada, načrtujte obdelavo paketov, storitev v ospredju in pisno politiko za promet, ki ga ne znate razvrstiti.

Kaj se zlomi, ko to zgradite sami

Android praviloma dovoli le en aktivni VPN hkrati, zato se vaš filtrirni tunel in tunel za zasebnost potegujeta za isto mesto, razen če izdelki podpirajo veriženje. VPN, ki je vedno vklopljen, z blokado povezav spremeni način napake tako, kot je tu pomembno: promet, ki ne more v tunel, se zavrže namesto pošlje neposredno, kar želi zasnova proti uhajanju in česar seja za odpravljanje napak redko pričakuje.

Vidnost paketov je druga past. Razreševanje imena paketa aplikacije lahko spodleti z NameNotFoundException, v novejših različicah Androida pa je nabor vidnih paketov odvisen od poizvedb, ki ste jih prijavili. Obdelajte izjemo, namesto da predpostavite, da se vsako ime razreši, in seznam znova preberite ob namestitvi ali odstranitvi aplikacij, namesto da ga za vedno hranite v predpomnilniku.

Upravljane naprave dodajo tretjega lastnika. Politika poslovne mobilnosti lahko nastavi VPN po aplikaciji ali profil, ki je vedno vklopljen, in običajna aplikacija tega ne more prepisati. Preverite, ali je naprava upravljana, preden začnete odpravljati napake v lastni kodi, ker v tem primeru seznama, ki ga poskušate spremeniti, morda ne more urejati nihče, ki drži telefon.

Preizkusite z aplikacijo, ki jo nadzorujete

Ne preizkušajte z aplikacijo, ki jo poskušate filtrirati. Uporabite drugo aplikacijo, katere omrežno vedenje lahko opazujete, in preverite, ali njen promet izhaja skozi vaš tunel, medtem ko promet cilja ne. Če oba ostaneta znotraj, politika deluje in cilj je izključen; če ne izide nobeden, je napačen sam tunel in seznam aplikacij ni problem.

Nato se odločite, katero od treh stvari v resnici gradite. Tunel po aplikaciji je API graditelja, seznam pa je del vašega profila. Požarni zid naprave je obdelava paketov plus življenjski cikel, ki ga lahko branite. Spreminjanje tujega VPN sploh ni podprta pot in pošten odgovor tam je, da nastavitev pripada tistemu izdelku.

Sorodni članki