VPN pro jednotlivé aplikace v Androidu: vyloučení aplikace není její blokování
Seznam aplikací na obrazovce patří jednomu vlastníkovi tunelu a vyloučení aplikace ji vede okolo tohoto tunelu, ne mimo síť. Začněte tam.
Dva lidé kladou stejnou otázku a dostávají neslučitelné odpovědi, protože stojí na různých místech. Jeden má otevřenou obrazovku systémového nastavení VPN a upravuje seznam aplikací. Druhý píše VpnService.Builder.addDisallowedApplication() v editoru. Oba tomu říkají VPN filtr podle aplikací. Jen jeden z nich vlastní ovládání, které popisuje, a ani jeden nic neblokuje.
Začněte na obrazovce, kterou uživatel vidí
Otevřete Nastavení, najděte položku VPN a podívejte se, které připojení je skutečně aktivní. Pokud klient nabízí seznam podle aplikací, patří tento seznam jeho vlastnímu tunelu. Platforma nezveřejňuje obecné API, přes které by nesouvisející aplikace mohla číst nebo upravovat výběr aplikací jiné VPN, takže druhá aplikace nemůže tento seznam za uživatele opravit.
Toto je první rozcestí v návodu. Pokud nainstalovaná VPN takové nastavení nemá, není co obcházet kódem: funkce v produktu, který tunel vlastní, chybí. Pokud ho má, správná oprava je na této obrazovce a provede ji ten, kdo ji může otevřít.
Sledujte paket do tunelu
Když vaše aplikace staví tunel, vytvoří rozhraní TUN a deklaruje, čí provoz do něj vstupuje. Volání členství probíhají před zřízením rozhraní a poté je sada pravidel pro tuto relaci 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
Tato volání platí jen pro tunel, který vaše aplikace právě vytvořila. Nejsou celosystémovou politikou, nezůstávají pro jiné klienty a nemohou zasáhnout do cizí VPN. Když volání builder selže, protože balíček nelze přeložit, rozhraní se nikdy nezřídí, což je čisté, ne tiché selhání.
Proč vyloučení vypadalo jako blokování
Vyloučená aplikace se vede okolo vašeho tunelu do podkladové sítě. To je opak blokování: provoz stále opouští zařízení, jen mimo rozhraní, které ovládáte. Aplikace ve stylu firewallu dělá opak: přijme provoz aplikace do svého tunelu a pak pakety zahodí, nebo odmítne je předat, takže rozhraní je stejné a směr politiky je obrácený.
Práce za tímto obrácením není konfigurační přepínač. Čtete IP pakety z deskriptoru tunelu, rozhodujete podle toku a buď je předáváte chráněným socketem, nebo je zahazujete. Vše, co neošetříte, prostě přestane, a proto poloviční tunel vypadá jako rozbitá síť, ne jako fungující filtr. Pokud je cílem blokování, naplánujte zpracování paketů, službu na popředí a písemnou politiku pro provoz, který nedokážete zařadit.
Co se rozbije, když si to postavíte sami
Android obvykle povoluje jen jednu aktivní VPN najednou, takže váš filtrační tunel a tunel soukromí soutěží o stejné místo, pokud produkty nepodporují řetězení. Trvalá VPN s blokováním připojení mění režim selhání způsobem, který je zde důležitý: provoz, který nemůže do tunelu vstoupit, se zahodí místo přímého odeslání, což návrh proti únikům chce a relace ladění málokdy čeká.
Viditelnost balíčků je druhá past. Překlad názvu balíčku aplikace může selhat s NameNotFoundException a v novějších verzích Androidu závisí množina balíčků, které vidíte, na dotazech, které jste deklarovali. Ošetřete výjimku místo předpokladu, že se každý název přeloží, a při instalaci nebo odebrání aplikací seznam znovu načtěte, místo abyste ho navždy kešovali.
Spravovaná zařízení přidávají třetího vlastníka. Zásada podnikové mobility může nastavit VPN pro jednotlivé aplikace nebo trvalý profil a běžná aplikace ji nemůže přepsat. Před laděním vlastního kódu zkontrolujte, zda je zařízení spravované, protože v takovém případě seznam, který se snažíte změnit, nemusí být upravitelný nikým, kdo telefon drží.
Otestujte to s aplikací, kterou ovládáte
Netestujte s aplikací, kterou se snažíte filtrovat. Použijte druhou aplikaci, jejíž chování v síti můžete sledovat, a zkontrolujte, zda její provoz odchází vaším tunelem, zatímco provoz cíle ne. Pokud obě zůstanou uvnitř, politika funguje a cíl je vyloučen; pokud neodchází ani jedna, tunel je špatný a seznam aplikací není problém.
Pak se rozhodněte, kterou ze tří věcí skutečně stavíte. Tunel pro jednotlivé aplikace je API builderu a seznam je součástí vašeho profilu. Firewall zařízení je zpracování paketů plus životní cyklus, který umíte obhájit. Měnit cizí VPN není podporovaná cesta a poctivá odpověď je, že nastavení patří tomu produktu.