web-dev-qa-db-fra.com

Comment configurer VPN par programmation sur Android?

J'ai besoin d'implémenter une application Android Android qui permettrait à l'utilisateur de configurer une connexion VPN sans avoir à accéder au menu natif de l'appareil Android. Avec cela, je ont deux problèmes:

  1. dans Android 4.0 + (niveau 14 et supérieur de l'API), j'ai découvert qu'il existe un nouveau composant appelé VpnService qui fournit un crochet pour créer une interface réseau virtuelle, la configurer et intercepter/transférer des pachets à partir de celle-ci à un serveur VPN, mais il n'y a pas de protocoles vpn intégrés comme PPTP ou IPSec, il y a juste la possibilité de les implémenter. Ma question est de savoir s'il existe une solution toute faite pour PPTP et IPSec pour fonctionner avec VpnService?

  2. Dans les versions antérieures d'Android, d'après ce que j'ai trouvé jusqu'à présent, il semble que la seule façon d'utiliser VPN est d'accéder et de configurer la solution vpn intégrée de l'appareil en enveloppant (en utilisant la réflexion) des API cachées dans Android mais il s'agit d'une solution lourde car l'appareil doit être enraciné, les implémentations de l'api cachées peuvent également différer d'un appareil à l'autre et d'une version du système d'exploitation à la version du système d'exploitation. Existe-t-il une meilleure façon de configurer par programme le VPN du système d'exploitation Linux sous-jacent?

34
Paul

1) Je ne connais aucune implémentation open-source PPTP ou IPSec pour le Android 4.x ICS VpnService. VpnService est conçu pour créer des applications VPN à protocole personnalisé (qui pourraient en théorie être pptp ou IPSec). La seule implémentation open-source que j'ai trouvée qui exploite cette nouvelle API est une pour OpenVPN:

https://github.com/schwabe/ics-openvpn

Cela fournit une solution VPN potentielle que vous contrôlez entièrement (le serveur est également open-source), mais ce n'est pas PPTP ou IPSec. Si vous comprenez le PPTP protocol, il devrait être possible de l'utiliser comme modèle pour implémenter un tel client VPN.

2) Oui, il est vrai que dans les versions antérieures, le seul moyen est d'utiliser des API privées. En fait, même si vous voulez le faire dans des versions ultérieures en utilisant le support VPN intégré (c'est-à-dire intégré PPTP ou support IPSec), vous devez tirer parti de ces API cachées. Il peut être possible pour le faire à un niveau inférieur en utilisant le noyau linux sous-jacent, mais cela nécessiterait d'enraciner le système d'exploitation et de contourner le paradigme d'application Android Android. Ce n'est pas nécessairement une meilleure alternative à l'utilisation d'API privées.

Pour plus d'informations sur la configuration de VPN à l'aide de ces API:

http://grepcode.com/file/repository.grepcode.com/Java/ext/com.google.Android/android/2.2_r1.1/Android/net/vpn/PptpProfile.Java ( exemple d'un objet de profil PPTP, nécessaire pour passer dans l'API)

Comment créer par programmation une nouvelle interface VPN avec Android 4.0? (Explique comment stocker ce nouveau profil VPN sur le système)

Je ne suis pas sûr de la cohérence et de la fiabilité de ces API. Je m'attendrais à ce qu'ils fonctionnent sur la plupart des appareils Android car il est peu probable que les fournisseurs réimplémentent les implémentations VPN de base, bien qu'ils aient peut-être ajouté la leur. Ils peuvent également avoir modifié les API nécessaires pour activer ces profils, ou ont étendu leurs capacités.

28
Rajiv Makhijani