Dvaja ľudia položia rovnakú otázku a dostanú nezlučiteľné odpovede, pretože stoja na rôznych miestach. Jeden má otvorenú obrazovku systémových nastavení VPN a upravuje zoznam aplikácií. Druhý píše VpnService.Builder.addDisallowedApplication() v editore. Obaja to nazývajú VPN filtrom podľa aplikácie. Len jeden z nich vlastní ovládanie, ktoré opisuje, a ani jeden nič neblokuje.

Začnite na obrazovke, ktorú vidí používateľ

Otvorte Nastavenia, nájdite položku VPN a pozrite sa na pripojenie, ktoré je naozaj aktívne. Ak klient ponúka zoznam podľa aplikácie, ten zoznam patrí vlastnému tunelu klienta. Platforma nezverejňuje všeobecné API, cez ktoré by nesúvisiaca aplikácia mohla čítať alebo meniť výber aplikácií iného VPN, takže druhá aplikácia nemôže ten zoznam opraviť za používateľa.

Toto je prvé rozdelenie v postupe. Ak nainštalovaný VPN také nastavenie nemá, niet čo obchádzať kódom: funkcia v produkte, ktorý vlastní tunel, chýba. Ak ho má, správna oprava je na tej obrazovke a robí ju ten, kto ju dokáže otvoriť.

Sledujte paket do tunela

Keď vaša vlastná aplikácia stavia tunel, vytvorí rozhranie TUN a deklaruje, ktorých aplikácií premávka doň vstupuje. Volania členstva sa dejú pred vytvorením rozhrania a potom je sada pravidiel pre túto reláciu pevná:

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

Tieto volania platia len pre tunel, ktorý vaša aplikácia práve vytvorila, a pre nič iné. Nie sú politikou celého zariadenia, nepretrvávajú pre iných klientov a nemôžu preniknúť do cudzieho VPN. Keď volanie staviteľa vyhodí výnimku, pretože paket nemožno rozlíšiť, rozhranie sa nikdy nevytvorí, čo je čisté, a nie tiché zlyhanie.

Prečo vylúčenie vyzeralo ako blokovanie

Vylúčená aplikácia je smerovaná okolo vášho tunela do podkladovej siete. To je opak blokovania: premávka stále opúšťa zariadenie, len mimo rozhrania, ktoré ovládate. Aplikácia v štýle firewallu robí opak. Vpustí premávku aplikácie do svojho tunela a potom pakety zahodí alebo odmietne ich ďalej poslať, takže rozhranie je rovnaké a smer politiky je prevrátený.

Práca za tým prevrátením nie je konfiguračný príznak. Čítate IP pakety z deskriptora tunela, rozhodujete podľa toku a potom ich pošlete cez chránený socket alebo ich zahodíte. Všetko, čo neošetríte, sa jednoducho zastaví, a preto polotovar tunela vyzerá ako pokazená sieť a nie ako fungujúci filter. Ak je cieľom blokovanie, naplánujte spracovanie paketov, službu v popredí a písomnú politiku pre premávku, ktorú neviete zaradiť.

Čo sa pokazí, keď si to postavíte sami

Android zvyčajne povoľuje len jeden aktívny VPN naraz, takže váš filtračný tunel a tunel súkromia súťažia o to isté miesto, ak produkty nepodporujú reťazenie. VPN stále zapnuté s blokovaním pripojení mení spôsob zlyhania tak, ako je to tu dôležité: premávka, ktorá sa nemôže dostať do tunela, sa zahodí namiesto priameho odoslania, čo chce návrh proti únikom a čo relácia ladenia zriedka očakáva.

Viditeľnosť paketov je druhá pasca. Rozlíšenie názvu paketu aplikácie môže zlyhať s NameNotFoundException a v novších verziách Androidu závisí sada viditeľných paketov od dopytov, ktoré ste deklarovali. Ošetrite výnimku namiesto predpokladu, že sa každý názov vyrieši, a zoznam čítajte znova pri inštalácii alebo odstránení aplikácií, namiesto večného držania v cache.

Spravované zariadenia pridávajú tretieho vlastníka. Politika podnikovej mobility môže nastaviť VPN podľa aplikácie alebo profil stále zapnutý a bežná aplikácia to nemôže prepísať. Pred ladením vlastného kódu overte, či je zariadenie spravované, pretože v tom prípade zoznam, ktorý sa snažíte zmeniť, nemusí byť upraviteľný pre nikoho, kto drží telefón.

Vyskúšajte to s aplikáciou, ktorú ovládate

Netestujte s aplikáciou, ktorú sa snažíte filtrovať. Použite druhú aplikáciu, ktorej sieťové správanie môžete pozorovať, a overte, či jej premávka vychádza cez váš tunel, zatiaľ čo premávka cieľa nie. Ak obe zostanú vnútri, politika funguje a cieľ je vylúčený; ak nevyjde ani jedna, chybný je samotný tunel a zoznam aplikácií nie je problém.

Potom sa rozhodnite, ktorú z troch vecí skutočne staviate. Tunel podľa aplikácie je API staviteľa, so zoznamom ako súčasťou vášho profilu. Firewall zariadenia je spracovanie paketov plus životný cyklus, ktorý dokážete obhájiť. Meniť cudzí VPN nie je vôbec podporovaná cesta a čestná odpoveď tam je, že to nastavenie patrí tomu produktu.

Súvisiace články