¿Por qué Orbot necesita root para el proxy transparente pero OpenVPN no?

Orbot requiere un dispositivo rooteado para proporcionar proxy transparente a todas las aplicaciones, pero si entiendo correctamente, la aplicación OpenVPN no lo hace.

Entiendo que esas dos aplicaciones hacen cosas diferentes, pero me parece que si OpenVPN puede enrutar todo su tráfico a través de una VPN sin root, entonces Orbot también debería poder prescindir de él.

AFAIK Orbot permite el proxy transparente (específicamente VPN) sin root, pero la configuración específica de la aplicación (listas de inclusión y exclusión) solo es posible con permiso de root debido a la necesidad de modificar las tablas de ip.
No, no lo hace. El proxy transparente con Orbot requiere root
Bueno, nunca usé Orbot sin root debido a las listas específicas donde puedo habilitar Orbot solo para algunas aplicaciones y no para todas. El proxy transparente oculta el hecho de que está utilizando una VPN/proxy, tal vez eso necesite root.
Probablemente esto se reduzca al hecho de que Tor no es una VPN. Android tiene una API para que las aplicaciones configuren VPN, pero presumiblemente Orbot no puede aprovecharlas. Supongo que funciona más parecido a algo como Wireshark, en el sentido de que intercepta paquetes en todo el sistema y los modifica. Android no tiene una API para eso (AFAIK). Sin embargo, no conozco los fundamentos de Orbot lo suficientemente bien como para saber si ese es realmente el caso.
Esa API tendría que estar implementando básicamente la capa VPN. Siempre que una aplicación actúe como un puente de red, debería poder enrutar a través de Tor.
De hecho, aparentemente esto existe github.com/guardianproject/OrbotVPN
Tenga en cuenta mi frase un poco más de cerca: la API permite que una aplicación configure una VPN , no actúe como una VPN . Es decir, permite que las aplicaciones agreguen nuevas entradas de VPN a la configuración del sistema, tal como lo haría un usuario a mano, luego habilitar y deshabilitar la conexión y enviar/recibir datos a través del túnel del sistema. La aplicación en sí no actúa como un puente de red ni nada por el estilo en ese escenario, solo crea una entrada de configuración y la activa para que pueda comunicarse con ella. El sistema operativo todavía está haciendo todo el enrutamiento de la red. No sé si Orbot necesita un acceso más profundo a los paquetes, pero parece que sí.
@eldarerathis Eso me parece una respuesta, especialmente destacando las diferencias entre "preparar" y "actuar como". Al menos es un mejor "candidato de respuesta" que la única respuesta que existe actualmente aquí :)
Definitivamente, con mucho gusto lo aceptaré como tal.

Respuestas (1)

El problema aquí es que Orbot está construido como un proxy de red, en lugar de un servicio de VPN, y Android no expone ninguna API para el proxy sin formato de los paquetes de red.

Según la descripción de Orbot en F-Droid :

Orbot permite el acceso a Tor accediendo a un proxy SOCKS o HTTP local. En un dispositivo rooteado, el proxy puede ser completamente transparente, es decir, la aplicación que accede a la red no necesita saber de la existencia del proxy.

La distinción importante aquí es que Orbot actúa como un proxy , no como una VPN. Por lo tanto, tiene dos opciones para enrutar el tráfico de aplicaciones:

  • Trabaje aplicación por aplicación, con el usuario configurando la configuración del proxy en cada aplicación que desee ejecutar a través de Orbot. No se necesita root para eso, ya que cada aplicación enrutará adecuadamente su propio tráfico a Orbot.
  • Trabaje en todo el sistema al redirigir todo el tráfico de red.

Android no proporciona ninguna API para acceder o redirigir el tráfico de red arbitrario porque, por supuesto, sería inseguro. Por lo tanto, Orbot debe recurrir al uso iptablesde reglas de firewall en su lugar , lo que requiere acceso de root. Una aplicación VPN, por otro lado, puede aprovechar la VpnServiceAPI para construir una conexión VPN.

La principal diferencia aquí es que el sistema está profundamente involucrado en la creación y administración de una conexión VPN, incluso cuando una aplicación de terceros la inicializa. El usuario aún debe aprobar la conexión y el sistema proporciona una notificación y cuadros de diálogo de información que (en teoría, de todos modos) no se pueden ocultar ni manipular. El sistema también es responsable de configurar la interfaz de red virtual que se usa para el túnel.

No estoy completamente al tanto del protocolo Tor, por lo que podría ser que actuar como un proxy sea la única solución factible en este momento. Si ese es el caso, simplemente no pueden evitar el requisito de raíz para el enrutamiento de todo el sistema.