VPN のユーザー エクスペリエンスを改善する

このページでは、一般ユーザー向けおよび企業向けのバーチャル プライベート ネットワーク(VPN)アプリがネットワークで優れたエンドユーザー エクスペリエンスを提供するようにするための、ネットワーク事業者向けのガイドラインを紹介します。Android には、一般ユーザーや企業が通信の暗号化や別のネットワークへの通信の転送に使用する VPN ソリューションをデベロッパーが作成するための VpnManager クラスが用意されています。

ネットワーク事業者は、次のガイドラインに準拠することをおすすめします。

  • ネットワークで IPv6 Encapsulating Security Payload(ESP)プロトコル(Next Header 50)パケットをサポートし、このトラフィックのパフォーマンスが User Datagram Protocol(UDP)や伝送制御プロトコル(TCP)の接続に匹敵するようにします。ESP セッションは、デバイスへのインバウンドを許可するか、タイムアウトを非常に高く設定して、ラインレートで転送されるようにする必要があります。
  • ネットワーク アドレス変換(NAT)とステートフル ファイアウォールのタイムアウトを設定し(ポート 4500 での UDP 接続で 600 秒以上)、VPN ソリューションが電力コストをかけすぎることなく信頼できる接続を維持できるようにします。

IPv6 ESP プロトコル(Next Header 50)パケットをサポートする

Encapsulating Security Payload(ESP)は、VPN ソリューションでパケットの暗号化と認証を行うためのインターネット プロトコル セキュリティ(IPSec)のプロトコル セットの一部として定義されたパケット形式です。Android OS は、組み込みの VPN ソリューションでこの標準のセキュリティ プロトコルを実装しています。

IPv6 対応ネットワークでは、ESP パケットは IPv6 パケットの Next Header フィールド 50 で直接伝送されます。ネットワークがこれらの種類のパケットを適切にサポートしていないと、パケットをこれ以上カプセル化せずにこのプロトコルを使用するつもりの VPN ソリューションで未接続が生じる可能性があります。ファイアウォール設定のため、ネットワークがこれらのパケットをドロップする可能性もあります。また、ネットワーク パスで ESP パケットの速度が遅くなり、TCP 接続や UDP 接続と比べてスループット パフォーマンスが著しく低下する可能性もあります。

インターネット技術特別調査委員会(IETF)は、一般ユーザー向けインターネット アクセス サービスで使用されるファイアウォールで IPsec の通過を許可することを推奨しています。たとえば、RFC 6092 第 3.2.4 項をご覧ください。デバイスは、既存のセキュリティ アソシエーションに含まれない ESP パケットを受け取ると、そのパケットをドロップするため、ESP パケットがファイアウォールを双方向で通過することを安全に許可することができます。このため、デバイスは VPN 接続を維持するためにキープアライブ パケットを送信する必要がなく、バッテリーを無駄に使わずに済みます。Google は、ネットワークでデバイスへの ESP パケットを常に許可するか、長期間(たとえば、30 分間)無効であった場合のみ ESP セッションをタイムアウトすることをおすすめしています。

ネットワーク事象者に対しては、ネットワークで ESP プロトコル パケット(Next Header 50 による IPv6 パケット)をサポートし、ハードウェアではラインレートでこれらのパケットを転送することをおすすめしています。これにより、VPN ソリューションで接続に関する問題を発生させることなく、UDP 接続や TCP 接続に匹敵するパフォーマンスを提供できます。

十分な NAT とステートフル ファイアウォールのタイムアウトを設定する

接続の信頼性を維持するため、VPN ソリューションは、アウトバウンドとインバウンドの接続(プッシュ通知、チャット メッセージ、音声 / ビデオ通話の受信など)を提供する VPN サーバーへの長時間の接続を維持する必要があります。ほとんどの IPsec VPN アプリは、RFC 3948 に記載されているように、宛先ポート 4500 で ESP パケットの IPv4 UDP カプセル化を使用しています。

この接続を維持するため、デバイスはサーバーに定期的にパケットを送信する必要があります。これらのパケットは、ネットワーク事業者で課される NAT やファイアウォールのタイムアウトよりも高い頻度で送信する必要があります。キープアライブが頻繁に発生すると、クライアント側で電力を大量に消費し、バッテリー駆動時間に大きな影響を及ぼします。また、デバイスがアイドル状態の場合でも、ネットワーク上でかなりのシグナリング トラフィックが生成されます。

バッテリーに影響しないよう、事業者は NAT とステートフル ファイアウォールのタイムアウトを十分に高くすることをおすすめします。IPsec UDP カプセル化(ポート 4500)の推奨タイムアウトは 600 秒以上です。

モバイル ネットワークでは、IPv4 アドレス不足によりポートの再利用率が高くなるため、UDP NAT タイムアウトが低く抑えられていることがよくありますが、VPN が確立されれば、デバイス ネットワークは、長時間の TCP 接続(受信通知の配信に使用される接続など)をサポートする必要がありません。そのため、ネットワークがサポートする必要がある長時間の接続の数は、VPN が実行されているときは、実行されていないときと比べて同じまたはそれ以下となります。