Le problème est qu'Orbot est conçu comme un proxy réseau, plutôt que comme un service VPN, et qu'Android n'expose aucune API pour le proxy brut de paquets réseau.
Selon la Description d'Orbot sur F-Droid :
Orbot permet d'accéder à Tor en accédant à un proxy SOCKS ou HTTP local. Sur un appareil rooté, le proxy peut être complètement transparent, c'est-à-dire que l'application qui accède au réseau n'a pas besoin de connaître l'existence du proxy.
La distinction importante ici est qu'Orbot agit en tant que mandataire et non un VPN. Il dispose donc de deux options pour l'acheminement du trafic applicatif :
- Fonctionner application par application, l'utilisateur devant définir les paramètres du proxy pour chaque application qu'il souhaite faire fonctionner par l'intermédiaire d'Orbot. Aucun Root n'est nécessaire pour cela, puisque chaque application acheminera de manière appropriée son propre trafic vers Orbot.
- Travailler à l'échelle du système en réacheminant todos le trafic sur le réseau.
Android ne fournit aucune API permettant d'accéder à un trafic réseau arbitraire ou de le réacheminer, car cela ne serait évidemment pas sûr. Par conséquent, Orbot doit recourir à en utilisant iptables
les règles du pare-feu à la place qui nécessite un accès racine. Une application VPN, en revanche, est capable de tirer parti de l'accès Root. VpnService
API pour établir une connexion VPN.
La principale différence réside dans le fait que le système est profondément impliqué dans la création et la gestion d'une connexion VPN, même lorsqu'elle est initialisée par une application tierce. L'utilisateur doit toujours approuver la connexion et le système fournit une notification et des boîtes de dialogue d'information qui (en théorie, en tout cas) ne peuvent pas être cachées ou modifiées. Le système est également responsable de la configuration de l'interface réseau virtuelle utilisée pour le tunnel.
Je ne connais pas très bien le protocole Tor, il se peut donc qu'agir en tant que proxy soit la seule solution possible à l'heure actuelle. Si c'est le cas, ils ne peuvent tout simplement pas éviter l'exigence de la racine pour le routage à l'échelle du système.