Prečo zablokovaná aplikácia pre Android stále zobrazuje sieťovú prevádzku
Počítadlo spotreby meria bajty na jednej hranici, nie úspešnú požiadavku. Skontrolujte časové okno, priradenie k UID a to, ktorá aplikácia vlastní službu VPN.
Zablokujete aplikáciu vo svojom Android VPN firewalle, aplikácia prestane fungovať a jej riadok spotreby ďalej rastie. Lákavý záver je, že blokácia presiakla, alebo že počítadlo je pokazené. Ani jedno nevyplýva. Záznam o spotrebe hovorí, že bajty boli v nejakom pozorovacom bode priradené tejto identite; nehovorí nič o tom, či vzdialená služba požiadavku prijala. Keď viete, ktorá hranica bola meraná a ktorej identite to bolo zaúčtované, obe pozorovania si prestanú odporovať.
Počítadlo meria bajty, nie doručenie
Android priraďuje prevádzku k UID a počíta ju v oboch smeroch, a robí to na hranici rozhrania, nie v okamihu, keď požiadavka aplikácie uspeje.
Odmietnutý pokus o spojenie napriek tomu hýbe paketmi: SYN, reset alebo nasledujúce opakované prenosy, plus dotaz DNS, ktorý obom predchádzal. Tie bajty existujú, aj keď nič nebolo doručené, a na niektorých cestách sa počítajú skôr, než akýkoľvek filter rozhodne, čo s nimi.
Preto môže riadok zablokovanej aplikácie rásť, aj keď každá požiadavka zlyhá. Počítadlo odpovedá na otázku „koľko bajtov bolo priradených tejto identite“, nie „dosiahla táto identita internet“. Graf nerozlíši prijatý prúd od zdvorilo odmietnutého podania ruky a súčet, ktorý sčíta oba smery, tiež nie.
Priradenie sleduje UID, nie ikonu
Riadok je podľa UID a jedno UID môže zdieľať viac balíkov, zatiaľ čo viditeľná aplikácia môže prácu odovzdať samostatnému komponentu, ktorý beží pod vlastnou identitou. Karta prehliadača vykreslená zdieľaným procesom WebView, služba synchronizácie na pozadí alebo sprievodný balík nainštalovaný vedľa hlavnej aplikácie — všetky vytvárajú prevádzku, ktorú obrazovka spotreby môže zobraziť pod menom, ktoré ste nečakali, alebo pod aplikáciou, ktorú ste zablokovali. Zablokovaný balík a pomocník, ktorý nesie jeho požiadavky, sú dva rôzne subjekty a pravidlo pokrývalo len jeden z nich.
Keď čísla vyzerajú nesprávne, porovnávajte UID, nie označenie. API spotreby sa dopytuje podľa UID a adb shell dumpsys package <package> | grep userId= vypíše číslo, s ktorým treba porovnávať, takže dva záznamy s rovnakým UID sú z pohľadu počítadla tá istá identita.
Časové okno môže predchádzať vášmu pravidlu
Údaje o spotrebe sa zhromažďujú v segmentoch a dopytujú sa periodicky, nie sú streamované naživo. Denný súčet môže zahŕňať minúty pred zapnutím blokácie, synchronizáciu na pozadí z predchádzajúcej hodiny alebo prevádzku, ktorá už bola na ceste. Porovnávať kumulatívny súčet s jednou odmietnutou požiadavkou a rozdiel nazývať únikom je chyba merania, nie zistenie firewallu.
Použite kratšie okno a čistý začiatok. Poznamenajte si časovú značku, keď zmeníte pravidlo, počkajte jeden interval zberu a potom sa pozerajte len na údaje po ňom. Ak súčet v okne, ktoré začína po pravidle, ďalej rastie, máte čo vyšetriť; ak rásť prestane, predchádzajúci rast bol zobrazovanou históriou.
Služba VPN nemusí byť tá, ktorú ste nastavili
VPN firewall vidí len prevádzku, ktorú nesie jeho vlastná služba. Ak sa spustí iná aplikácia VPN a prevezme aktívne spojenie, váš filter už nie je na ceste, hoci jeho rozhranie v nastaveniach stále existuje. Zoznamy obídenia podľa aplikácií robia to isté zámerne a profil, ktorý aplikáciu vylučuje, nie je únikom, keď aplikácia potom funguje.
IPv4, IPv6 a DNS sa tiež môžu rozísť. Filter, ktorý spracúva IPv4, môže nechať IPv6 alebo privátny DNS resolver mimo seba, takže časť prevádzky aplikácie ide cestou, ktorú vaše pravidlá nikdy neopísali. Skontrolujte, ktorá aplikácia práve vlastní VPN a čo hovorí zoznam výnimiek, skôr než čokoľvek prepíšete:
adb shell settings get secure always_on_vpn_app
adb shell dumpsys connectivity
adb shell dumpsys netstats detail
Vyskúšajte jednu novú požiadavku a zapíšte štyri fakty
Vyberte neškodnú požiadavku, raz ju vykonajte a zapíšte štyri fakty: platné pravidlo, UID aplikácie, stav siete a čas. Potom skontrolujte, či váš filter tok zaznamenal a či cieľ alebo brána videli to isté spojenie. Jeden tok identifikovaný na oboch stranách je dôkaz; súhrnný súčet nie.
Obhájiteľný záver pomenuje, čo bolo odmietnuté a ktoré pozorovanie to potvrdilo. „Počítadlo stúplo“ nie je zistenie a „všetky počítadlá spotreby sú falošné“ tiež nie. Slogan o vrstve OSI to nevyrieši: čestná odpoveď je, že počítadlo aj blokácia môžu byť obe správne, pričom opisujú rôzne veci. Referenčná dokumentácia NetworkStatsManager pre Android dokumentuje, ako sa tieto segmenty dopytujú a priraďujú.