37

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

  1. Android 4.0 + (api レベル 14 以上) では、仮想ネットワーク インターフェイスを作成し、それを構成し、そこから VPN サーバーにパケットをインターセプト/転送するためのフックを提供する VpnService という新しいコンポーネントがあることがわかりましたが、存在しません。 PPTP や IPSec などの vpn プロトコルが組み込まれているため、それらを実装する可能性があります。私の質問は、PPTP と IPSec が VpnService と連携する既製のソリューションはありますか?

  2. 以前のバージョンの Android では、これまでに発見したことから、VPN を使用する唯一の方法は、Android の隠し API を (リフレクションを使用して) ラップすることによって、デバイスの組み込みの vpn ソリューションにアクセスして構成することのようですが、これはデバイスをルート化する必要があるため、面倒なソリューションです。また、非表示の API の実装は、デバイスごと、OS バージョンごとに異なる場合があります。基盤となる Linux OS の組み込み VPN をプログラムで構成するより良い方法はありますか?

4

1 に答える 1

28

1) Android 4.x ICS VpnService のオープンソース PPTP または IPSec 実装については知りません。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 の一貫性と信頼性がどの程度かはわかりません。ベンダーが独自の VPN 実装を追加している可能性はあるものの、基本的な VPN 実装を再実装する可能性は低いため、ほとんどの Android デバイスで動作すると思います。また、そのようなプロファイルを有効にするために必要な API を変更したり、機能を拡張したりしている可能性もあります。

于 2012-12-04T00:24:28.150 に答える