Come autore di NetGuard ho esperienza diretta in questo campo.
Uno svantaggio di un firewall basato su una VPN locale è che non tutti i tipi di traffico possono essere gestiti, poiché il kernel (Android) Linux non consente l'inoltro di tutti i tipi di traffico su una connessione basata su socket. Un esempio è IPsec, che viene utilizzato per le chiamate IP da alcuni produttori. Una soluzione parziale (non per IPsec) sarebbe quella di utilizzare un server VPN remoto per inoltrare il traffico, ma questo è saggio della privacy non accettabile per molte persone e verrebbe con ulteriore complessità e probabilmente anche con un ulteriore utilizzo della batteria. In pratica, la gestione del traffico TCP e UDP sembra essere sufficiente per il 99,9% degli utenti NetGuard. Da Android 5 è possibile escludere il routing delle applicazioni nella VPN (l'applicazione di implementazione della VPN decide se è obbligatoria o facoltativa), che può essere utilizzato per risolvere i problemi derivanti dal fatto di non poter inoltrare tutto il traffico. Un'altra opzione è quella di escludere l'indirizzo (intervalli), che NetGuard utilizza per "correggere" le chiamate IP per alcuni produttori.
Un altro svantaggio è che il traffico di inoltro aumenterà l'utilizzo della batteria sui dispositivi mobili, poiché comporta una certa elaborazione, poiché i pacchetti devono essere ispezionati e inoltrati. L'uso di iptables, che è integrato nel kernel di Linux, è più efficiente e quindi più compatibile con la batteria.
In generale è apparso che Android instrada tutto il traffico verso la VPN, anche il traffico di applicazioni e componenti di sistema, ma un produttore potrebbe decidere di escludere determinati tipi di traffico, riducendo la sicurezza che può essere raggiunta da un firewall basato su VPN.
NetGuard non analizza i dati stessi, ad eccezione delle richieste DNS per fornire il blocco degli annunci, ma se ciò potesse sollevare un problema di privacy. Tuttavia, tecnicamente visto questo è un vantaggio di un firewall basato su VPN (se vuoi ancora chiamarlo in quel modo), perché consentirebbe un'ispezione completa dello stato dei flussi di dati oltre ciò che è possibile con iptables. Ciò sarebbe probabilmente a spese dell'utilizzo della batteria, a causa dell'elaborazione in questione. Si noti che richiederebbe un attacco MiT locale per ispezionare i flussi SSL.
Un altro svantaggio è che Android non consente il concatenamento di VPN, quindi l'utilizzo di una VPN locale per implementare un firewall impedirà l'utilizzo di un vero servizio VPN, a meno che il firewall non fornisca tale servizio stesso o in alternativa un meccanismo di inoltro o proxy a un'altra VPN applicazione.
Infine, un firewall basato su VPN dipende dall'applicazione che fornisce il servizio VPN firewall in esecuzione. Questo sembra essere banale, ma non lo è, perché alcune versioni / varianti di Android del produttore stanno uccidendo i processi in modo troppo aggressivo in condizioni di memoria insufficiente (IMHO è un bug se Android uccide le applicazioni che forniscono un servizio VPN).
Infine, il rooting dei dispositivi Android sta diventando sempre più difficile, lasciando un firewall basato su VPN come l'unica scelta per molte persone. Non mi aspetto che Google aggiunga presto un firewall basato sul sistema, perché potrebbe influire in modo significativo sulle entrate degli annunci. iOS ha un firewall basato sul sistema.
Fammi sapere se ci sono domande e cercherò di rispondervi.