web-dev-qa-db-ja.com

AndroidでVPNをプログラムで構成する方法は?

Androidアプリを実装する必要があります。これにより、ユーザーはAndroidデバイスのネイティブメニューにアクセスしなくてもVPN接続を構成できます。これにより、 2つの問題があります。

  1. Android 4.0 +(APIレベル14以上)で、仮想ネットワークインターフェイスを作成し、それを構成し、そこからパケットを傍受/転送するためのフックを提供するVpnServiceと呼ばれる新しいコンポーネントがあることを発見しましたVPNサーバーに、しかしPPTPまたはIPSecのような組み込みのvpnプロトコルはありません。それらを実装する可能性があるだけです。私の質問は、PPTPとIPSecがVpnServiceと連携するように?

  2. Androidの以前のバージョンでは、これまでのところ、VPNを使用する唯一の方法は、Androidですが、デバイスをルート化する必要があるため、これは扱いにくいソリューションです。また、隠しAPIの実装は、デバイスごと、OSバージョンごとに異なる場合があります。プログラムで組み込みを構成するより良い方法はありますか基になるLinux OSのVPN?

34
Paul

1)オープンソースがわからないPPTPまたはAndroid 4.x ICS VpnService。VpnServiceは、カスタムプロトコルVPNアプリケーション(理論的にはpptpまたはIPSecの可能性があります)を作成するために設計されています。この新しいAPIを利用する唯一のオープンソース実装は、OpenVPN用です。

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

これにより、完全に制御できる1つの潜在的なVPNソリューションが提供されます(サーバーもオープンソースです)が、PPTPまたはIPSecではありません。PPTPプロトコル、これをそのようなVPNクライアントを実装するためのモデルとして使用できるはずです。

2)はい、以前のバージョンでは、唯一の方法はプライベートAPIを使用することです。実際、組み込みのVPNサポート(つまり、組み込みのPPTPまたはIPSecサポート)を使用して、それ以降のバージョンでそれを実行したい場合でも、これらの隠されたAPIを利用する必要があります。基盤となるlinuxカーネルを使用して下位レベルでそれを行うには、OSを応援し、Androidアプリケーションパラダイムを回避する必要があります。これは、プライベートAPIを使用するよりも優れた代替手段とは限りません。

これらのAPIを使用してVPNを構成する方法に関する情報については、

http://grepcode.com/file/repository.grepcode.com/Java/ext/com.google.Android/android/2.2_r1.1/Android/net/vpn/PptpProfile.Java ( PPTPプロファイルオブジェクト、APIに渡すために必要)の例

Android 4.0? を使用してプログラムで新しいVPNインターフェイスを作成する方法)(この新しいVPNプロファイルをシステムに保存する方法を説明しています)

これらのAPIがどれほど一貫して信頼できるかはわかりません。ほとんどのAndroidデバイスはベンダーが独自のVPN実装を再実装する可能性は低いため、独自に追加している可能性があるため、これらのデバイスで動作することを期待します。有効にするために必要なAPIを変更した可能性もあります。そのようなプロファイル、またはそれらの機能を拡張しました。

28
Rajiv Makhijani