作为NetGuard的作者,我在这一领域具有第一手经验。
基于本地VPN的防火墙的缺点是不能处理所有流量类型,因为(Android)Linux内核不允许通过基于套接字的连接转发所有流量类型。一个示例是IPsec,某些制造商正在将其用于IP呼叫。解决此问题的部分解决方案(非IPsec解决方案)是使用远程VPN服务器转发流量,但这是很多人无法接受的隐私保护方式,并且会带来额外的复杂性,并且可能还会增加电池使用量。在实践中,对于99.9%的NetGuard用户来说,处理TCP和UDP流量似乎足够了。由于Android 5可以排除将应用程序路由到VPN中(由VPN实施应用程序确定这是强制性还是可选),可以用来解决由于无法转发所有流量而引起的问题。另一种选择是排除地址(范围),NetGuard用来“修复”某些制造商的IP呼叫。
另一个缺点是转发流量将增加移动设备上的电池使用量,因为它涉及一些处理,因为需要检查和转发数据包。使用集成在Linux内核中的iptables更加有效,因此对电池更友好。
通常,Android似乎会将所有流量都路由到VPN中,甚至将系统应用程序和组件的流量都路由到VPN中,但是制造商可以决定排除某些流量类型,从而降低了基于VPN的防火墙可以实现的安全性。
除了提供广告拦截的DNS请求外,NetGuard不会分析数据本身,但如果这样做会引起隐私问题。但是,从技术上看,这是基于VPN的防火墙的优势(如果您仍想以这种方式调用它的话),因为它可以对iptables无法进行的数据流进行全状态检查。由于涉及处理,这可能会以电池使用为代价。请注意,这将需要本地MiT攻击来检查SSL流。
另一个缺点是Android不允许链接VPN,因此使用本地VPN来实现防火墙将阻止使用真正的VPN服务,除非防火墙本身提供了这样的服务或向另一个VPN提供转发或代理机制应用。
最后,基于VPN的防火墙取决于要运行的提供防火墙VPN服务的应用程序。这似乎是微不足道的,但事实并非如此,因为某些制造商的Android版本/变体在内存不足的情况下过于激进地杀死进程(恕我直言,如果Android杀死提供VPN服务的应用程序,则是一个错误)。
最后,Android设备的生根变得越来越困难,基于VPN的防火墙成为许多人的唯一选择。我不希望Google很快添加基于系统的防火墙,因为这可能会严重影响其广告收入。iOS确实具有基于系统的防火墙。
让我知道是否有任何问题,我会尽力回答。