web-dev-qa-db-ja.com

仮想プライベートネットワーク経由でWebサービスにアクセスする

Android=アプリケーションを開発しています。私のアプリケーションはWebサービスを使用して情報をJSON形式で取得し、それをアプリのビューに表示しています。

要件は、私のクライアントが自分の情報がインターネット経由で転送されることを望まないことです。したがって、仮想プライベートネットワークを介してデータを取得するようにアプリを調整する必要があります。考えられるのは、特定のVPNに接続されていないデバイスは、取得した情報にアクセスできないということです。

このタスクを実行するにはどうすればよいですか?どんな指摘も大歓迎です。

私はこのように思います:

  • サーバーネットワークをクライアントネットワークのローカルIPアドレスに配置する
  • このサービスのみが常駐する10.1.2.0/24のような専用ネットワークにする
  • VPNサーバーには、このネットワークにアクセスできるユーザーがいるため、一部のユーザーはすべてのネットワークにアクセスでき、一部のユーザーはこのサービスのみにアクセスできます
  • Androidアプリでは、10・1.2.0/24に到達可能かどうかを検出できます。特に、/proc/net/route経由でルートを確認しますノンブロッキングチェックこのファイルを解析できるライブラリを使用することもできます。
  • VPNが10.0.0.0/8のすべてのサブネットワークへのゲートウェイをセットアップする可能性があるため、さらにVPNの変更を処理できるように、解析とサブネット計算を行う必要がある場合があります。
  • アプリケーションがVPN接続を想定すると、JSON APIへの呼び出しを実行できますが、これはVPNであるため、タイムアウトを増やす必要がある場合があり、そのため、非ブロッキングにする必要がある場合があります。
  • 特に3G/LTEネットワークでは、VPN経由の接続の確立が遅いため、永続的な接続を維持したい場合があるため、使用するHTTPクライアントとサーバー(Tomcatなど)で設定する必要があります。/httpdキープアライブタイムアウト。永続的接続と非永続的接続をテストして、パフォーマンスの向上を確認できます。キープアライブは、「永続的接続」である場合もあれば、「TCPキープアライブ」である場合もあります。両方を使用できます。
  • 接続を探すのと同じ方法でVPN切断を監視できるため、切断の場合は、APP GUIで非侵入型のステータス変更を行うことができます
  • サーバーAPPは特定のサブネットのみを許可する必要がある場合があるため、誰もが使用できないようにファイアウォールを設定する必要がある場合があります

VPN接続とHTTPソケットの両方を処理する必要がある場合、これは非常に難しい問題です。私は再試行に注意し、1秒ごとにルートの監視を続けます。

1
Aria

もう少し独創的なアプローチは、MDMサーバー(MobileIronが思い浮かぶ)などのツールを使用してアプリごとのVPNを確認することです。お客様がすでにAndroid=デバイスを管理しているMDMサーバーを持っている場合、VPN構成をデバイスに適用するだけでなく、アプリをデプロイすることもできます。これにより、OSはいつでもVPNを強制できます。アプリケーションはネットワーク接続を確立します。OSがアプリの接続を管理して常にVPNを使用するようにするため、コーディングの変更は必要ないと思います。

0
Andrew