VMware Tunnel のアプリ ベース VPN を使用する iOS アプリ開発のベスト プラクティスと制限

URLSession などの高レベル connect-by-name API を使用

オンデマンド VPN をサポートするには、connect-by-name API を使用する必要があります。この API には CFSocketStream およびその上位層の API (URLSession など) が含まれます。名前解決と接続処理を別々に実装すると、オンデマンド VPN に対応できなくなります。また、通常は作業量の増加にもつながります。

注:BSD ソケットには connect-by-name API がありません。貴社アプリで AirWatch のアプリ ベース トンネル ソリューションを利用する場合は、BSD ソケットの使用は避けてください。

現在、Boxer でのアプリ ベース VPN 利用はサポート対象ではありませんが、将来的にはサポートされる予定です。 

 

独自の DNS リゾルバの使用は非推奨

一般的に VPN を利用する場合は、独自の DNS リゾルバをセットアップしないことが推奨されます。システム DNS リゾルバには、各種の特異な状況に対応するための処理が組み込まれています。そのような状況は VPN を利用するシナリオで発生しがちです。たとえば、次に示すような 2 台の DNS サーバを持つ企業 example.com があるとします。

例:

外部 DNS サーバは、インターネットに公開されている、限られた数の DNS レコードを保持しています。

(www.example.com など)

内部 DNS サーバは、内部システムすべての、多数の DNS レコードを保持しています。

(human-resources.example.com など)

この企業では、VPN が有効な場合はシステム DNS リゾルバが example.com の内部サーバを使用するよう、VPN を構成しています。貴社アプリが DNS 名前解決に独自のリゾルバを使用するように設計されている場合、上記のようなケースに対応できません。

 

iOS の Reachability API

記事「Designing for Real World Networks」でも述べられているように、ネットワーク呼び出しでは常に、NSStream や NSURL などの高レベル API を使用してください。どちらの API 群でもアプリ ベース VPN が正しくトリガされます。追加の情報は、上記リンク先に含まれる「Design for Variable Network Interface Availability」セクションを参照してください。

推奨されるネットワーク呼び出しを実行したら、ネットワーク接続に成功した場合でも失敗した場合でも、ネイティブ Reachability コードを使用して VPN インターフェイスの状態を確認し、必要であればトラブルシューティングを行うことができます。接続に失敗した場合は、Reachability イベントの結果を利用することで、必要に応じてその後の接続処理を実行することも、アプリをオフライン モードで動作させることもできます。

いずれのケースでも、推奨 API 群を正しく使用することで、必要な詳細処理の量に応じた、システム レベルの応答に基づくネイティブ Reachability 呼び出しを記述する手間をまとめて省くことができるかもしれません。

注:Reachability の呼び出しより前のネットワーク呼び出しで失敗する場合、アプリ ベース VPN プロトコルを開始しようとすると、ワークフローの不整合が生じる可能性があります。

 

 

Xamarin ベースのアプリ

Xamarin では HTTP クライアントの実装として次の 3 種類のプロトコルがサポートされています。

  1. Managed
  2. CFNetwork
  3. NSURLSession

Managed プロトコル スタックは BSD ソケットを使用する Microsoft 社のネイティブ実装です。これは低レベル DNS API を使用しており、オンデマンド VPN をトリガできないため、アプリ ベース VPN フレームワークには対応していません。貴社アプリで アプリ ベース VPN を利用する場合は、CFNetwork か NSURLSession を選択するようにしてください。 

このプロトコル スタックの設定は、Xamarin IDE の Project > Build > iOS Build > HttpClient Implementation で変更できます。

 

iOS でのネットワーク利用の一般的なベスト プラクティス

Apple 社の Web ページ「Avoiding Common Networking Mistakes」には、数多くのベスト プラクティスが掲載されています。貴社 iOS アプリでネットワークを利用する場合、開発者の方はこれらのベスト プラクティスを参考にしてください。

免責事項:これは英文の記事「Best Practices & Limitations for developing iOS applications leveraging per app VPN using VMware Tunnel」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。

Have more questions? Submit a request

2 Comments

Article is closed for comments.