本明細書において概観的に述べられ図面に例示される本発明のコンポーネントは、幅広く様々に異なる構成で配置、設計されうることが容易に理解されるであろう。従って、下記の、図面に示される本発明の実施形態の詳細な説明は、請求項に記載される発明の範囲の限定を意図するものではなく、単に本明細書において考察される本発明に係る実施形態の幾つかの例を代表するにすぎない。本明細書において述べられる実施形態は図面への参照により最もよく理解され、図面において、同様の要素は同じ参照番号で表される。
バーチャルプライベートルータ(VPR)と更に称されるクライアントコンピュータ上のソフトウェアは、1つ以上のクライアントアプリケーションにより開始された1つ以上のDNSリクエストを傍受し、リクエストされたドメイン名に対する疑似IPアドレスを返信し、リクエストされたドメイン名と返信された疑似IPアドレスとの対応関係を格納する。疑似IPアドレスは、リクエストされたドメイン名を実体コンテンツサーバに正確にマッピングする必要はない。
1つ以上の疑似IPアドレスを返信した後、VPRは、宛先として疑似IPアドレスを有する1つ以上のコンテンツリクエストを検出し、検出された疑似IPアドレスに対応するドメイン名を検索し、検索されたドメイン名の記述子と共にコンテンツリクエストを中間サーバに提出する。中間サーバは、提示されたドメイン名の記述子を実体コンテンツサーバに対応するIPアドレスに解決し、該サーバにコンテンツリクエストを転送し、クライアントコンピュータにコンテンツ応答を返信する。結果として、クライアントアプリケーションは、コンピュータネットワーク上でDNSリクエストを送信することなく、リクエストされたコンテンツを受信し、それにより、レイテンシ及びデータトラフィックの量を減少させる。
一実施形態において、VPRは、コンテンツリクエストが中間サーバを通じて送信されるべきか、それとも中間サーバをバイパスすべきかを判定する。コンテンツリクエストが中間サーバをバイパスすべき場合、VPRは、コンピュータネットワーク上でDNSリクエストを発行し、実IPアドレスを返信し、コンテンツリクエストが中間サーバを通じて送信されるべき場合、VPRは、コンピュータネットワーク上でDNSリクエストを発行することなく、疑似IPアドレスを返信する。
コンテンツリクエストを中間サーバを通じて送信するか否かかの判断は、ドメイン名、ポート、プロトコルのグループからの1つ以上のパラメータと関連づけられた一組のルーティング規則に依存してもよい。一実装において、VPRは、傍受されたDNSリクエストに応答を返信する前に、リクエストが中間サーバをバイパスすべきか否かを判定し、この判定は、リクエストされたドメイン名を1つ以上のルーティング規則に整合させることにより行われる。
別の実装では、VPRは、DNSリクエストを傍受した後、疑似IPアドレスを常に返信し、その後、疑似IPアドレスを宛先として有するコンテンツパケットを受信すると、そのIPアドレス、ポート、プロトコルと関連付けられたドメイン名のグループから1つ以上のパラメータを取得し、取得されたパラメータを1つ以上のルーティング規則に整合させ、コンテンツリクエストが中間サーバをバイパスすべき場合、取得されたドメイン名の実IPアドレスに対する自身のDNSリクエストを発行し、取得された実IPアドレスを用いてコンテンツリクエストをその後直接発行する。
一実施形態において、疑似IPアドレスはルーティング不可IPアドレスである。一実装において、ルーティング不可IPアドレスは、10.0.0.0−10.255.255.255、172.16.0.0−172.31.255.255、及び192.168.0.0−192.168.255.255の範囲の少なくとも1つの内のルーティング不可IPv4アドレスのグループから選択される。別の実装において、疑似IPアドレスはルーティング不可IPv6アドレスである。別の実装において、疑似IPアドレスとして用いられるルーティング不可IPアドレスは、クライアントコンピュータが接続されるローカルネットワーにより使用される範囲とは異なる1つ以上の範囲から選択される。別の実装において、疑似IPアドレスは、IPv4又はIPv6以外のトランスポートプロトコルと関連付けられたネットワークアドレスである。
幾つかの実施形態において、クライアントがVPNトンネルを通じてコンテンツリクエストを送信した後、VPNサーバは、リクエストされたドメイン名に対する自身のDNSリクエストを発行し、宛先IPアドレスをDNSリクエストから取得したものに置き換える。一実施形態において、この置き換えは、VPNトンネルからのトラフィックのデカプセル化(dis-encapsulate)後に行われる。別の実施形態においては、VPNトンネル内でトラフィックが依然としてカプセル化されている間に行われる。典型的には、HTTP及びHTTPSプロキシサーバは、それらのデータパケットが実宛先IPアドレスを含まない(幾つかの実施形態において、プロキシサーバのアドレスにそれは置き換えられる)ため、自身のDNSリクエストを発行する必要がある。先行技術におけるVPNサーバは、宛先IPアドレスを既に含むデータパケットに対する追加のDNSリクエストを行わず、カプセル化ヘッダを単に削除し、元のパケットをそれらの宛先に転送する。
一実施形態において、検出されたIPアドレスに対応するドメインの検索は、疑似IPアドレスのサブセットを抽出することと、格納されたドメイン名を参照するために該サブセットを用いることと、それにより、異なる範囲の疑似IPアドレスに対して、IPアドレスとドメイン名との間で同じ参照を維持可能にする。一実装において、検索された疑似IPアドレスのサブセットは、IPv4疑似IPアドレスの32ビット整数表現の下位ビット20桁以下を含む。
一実施形態において、VPRは、大きなTTL値を有する疑似IPアドレスを返信し、それにより、傍受される必要があるDNSリクエストの数を減少させる。
一実施形態において、中間サーバは少なくとも1つのプロキシサーバを含み、VPRは、1つ以上のクライアント側アプリケーションからのコンテンツリクエストをクライアント側プロキシにリダイレクトし、クライアント側プロキシは、リクエストを、リクエストされたドメインと共に、コンピュータネットワーク上でプロキシサーバに転送する。一実装において、1つ以上のHTTPコンテンツリクエストがクライアント側HTTPプロキシに提示され、クライアント側HTTPプロキシはHOSTヘッダ内のリクエストされたドメインを転送する。別の実装において、1つ以上のHTTPSコンテンツリクエストがクライアント側HTTPSプロキシに提示され、クライアント側HTTPSプロキシは、SNIヘッダ内のリクエストされたドメインを転送する。別の実装において、1つ以上のTCPコンテンツリクエストがクライアント側接続プロキシに提示され、クライアント側プロキシはCONNECTヘッダ内のリクエストされたドメインを転送する。
一実施形態において、中間サーバは、DNSリクエストを発行することによって、リクエストされたドメイン名の記述子をIPアドレスに解決する。一実装において、ドメイン名の記述子は、VPRによって傍受されたDNSリクエスト中で特定されるテキスト列(string)を含む。別の実装では、ドメイン名の記述子はテキスト列へのポインタであり、中間サーバは、リクエストされたドメイン名をIPアドレスに解決する前に、記述子によって指し示されたデータストレージからテキスト列の値を取得する。
一実施形態において、VPRは、2つ以上のコンテンツリクエストを少なくとも2つの異なる中間サーバに提示し、各コンテンツリクエストに対する中間サーバは、そのIPアドレス、ポート、及びプロトコルと関連付けられたドメイン名のグループからコンテンツリクエストの1つ以上のパラメータを取得し、これらのパラメータを1つ以上のルーティング規則とその後整合させることによって判定される。
別の実施形態において、中間サーバはVPNサーバであり、VPRは、クライアントコンピュータとVPNサーバとの間のVPNトンネル内において1つ以上のコンテンツリクエストをカプセル化する。一実装において、VPRは、VPNトンネル内において、リクエストされたドメイン名の記述子を提示する。一実装において、リクエストされたドメイン名の記述子は、宛先IPアドレスとして疑似APアドレスを有するTCP又はUDP接続の一組のデータパケットに、これらのデータパケットがVPNパケット内でカプセル化される前に追加される。
幾つかの実施形態において、中間サーバは、(自身のDNSリクエストを発行することにより解決された)実IPアドレスをコンテンツデータと共にクライアントに返送する。クライアントは、自身のDNSリクエストを発行せずに、中間サーバのバイパスにおいてリクエストを発行するためにそのアドレスを後で用いる。これにより、クライアントは、この実施形態においてDNSリクエストの発行を避けるために中間サーバを用いるが、それは実IPアドレスを取得するまでのみである。結果として、クライアントは、自身のDNSリクエストの代わりに疑似IPアドレスを依然として用いながら、中間サーバを通じた追加のホップに起因するパフォーマンス悪化を軽減する。
本発明に従った実施形態は、装置、方法、又はコンピュータプログラム製品として具体化されてもよい。従って、本発明は、全体がハードウェアという実施形態、全体がソフトウェアという実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又は本明細書において概して“モジュール”又は“システム”と言及されるソフトウェア及びハードウェアの側面を組み合わせた実施形態の形式をとってもよい。更に、本発明は、媒体において具体化されるコンピュータ使用可能プログラムコードを有する、任意の有体の表現媒体で具体化されたコンピュータプログラム製品の形式をとってもよい。
1つ以上のコンピュータ使用可能又はコンピュータ読み取り可能な媒体の任意の組み合わせが利用されてもよい。例えば、コンピュータ読み取り可能媒体は、ポータブルコンピュータフロッピーディスク、ハードディスク、ランダムアクセスメモリ(RAM)デバイス、リードオンリーメモリ(ROM)デバイス、消去可能プログラマブルリードオンリメモリ(EPROM又はフラッシュメモリ)デバイス、ポータブルコンパクトディスクリードオンリメモリ(CDROM)、光学ストレージデバイス、及び磁気ストレージデバイスの内の1つ以上を含んでもよい。幾つかの選ばれた実施形態において、コンピュータ読み取り可能媒体は、命令実行システム、装置、もしくはデバイスにより、又はこれらに接続して使用されるプログラムを保持、格納、通信、伝播、又は移動できる任意の非一時的媒体を含んでもよい。
本発明の動作を実行するためのコンピュータプログラムコードは、例えば、Java、Smalltalk、又はC++等のオブジェクト指向型プログラム言語、及びCプログラム言語又は同様のプログラミング言語等の従来の手続き型プログラム言語を含む、1つ以上のプログラム言語の任意の組み合わせで記述されてもよく、HTML、XML、及びJSON等の記述言語又はマークアップ言語をも用いてもよい。プログラムコードは、その全体がコンピュータシステム上で、スタンドアロン型ソフトウェアパッケージとして実行されてもよく、コンピュータからいくらかの距離をおいた場所にあるリモートコンピュータ上で部分的に実行されてもよく、又は、その全体がリモートコンピュータ若しくはサーバ上で実行されてもよい。後者の場合、リモートコンピュータは、例えば、ローカルエリアネットワーク(LAN)若しくはワイドエリアネットワーク(WAN)を含む任意の種類のネットワークを通じてコンピュータに接続されてもよく、又は、(例えば、インターネットサービスプロバイダを用いてインターネットを通じて)外部コンピュータに接続されてもよい。コンピュータネットワークは、インターネットプロトコル以外のトランスポートプロトコルを用いてもよい。それに応じて、本発明は、IPアドレス以外の種類のネットワークアドレスに対して実装されてもよい。
以下、本発明の実施形態に従った方法、装置(システム)、及びコンピュータプログラム製品のフローチャート図及び/又はブロック図を参照しながら本発明を説明する。フローチャート図及び/又はブロック図中の各ブロック、並びにフローチャート図及び/又はブロック図中のブロックの組み合わせは、コンピュータプログラム命令又はコードとして実装できることが理解されるであろう。これらのコンピュータプログラム命令は、コンピュータ又はその他のプログラマブルデータ処理装置のプロセッサを通じて実行される命令がフローチャート及び/又はブロック図の1つ以上のブロックに特定される機能/行為を実装する手段を作り出すように、マシンを生み出す汎用コンピュータ、専用コンピュータ、又はその他のプログラマブルデータ処理装置のプロセッサに提供されてもよい。
これらのコンピュータプログラム命令はまた、コンピュータ読み取り可能媒体に格納される命令がフローチャート及び/又はブロック図の1つ以上のブロック中でに特定される機能/行為を実装する命令手段を含む製品を生み出すように、コンピュータ又はその他のプログラマブルデータ処理装置を特定の方法で機能させることができる非一時的コンピュータ読み取り可能媒体に格納されてもよい。
コンピュータプログラム命令はまた、コンピュータ又はその他のプログラマブルデータ処理装置上で実行される命令がフローチャート及び/又はブロック図の1つ以上のブロック中で特定される機能/行為を実装するためのプロセスを提供するように、コンピュータ又はその他のプログラマブル装置で実施される一連の動作ステップがコンピュータ実装プロセスを生み出させるために、コンピュータ又はそのたのプログラマブルデータ処理装置上にロードされてもよい。
図1は、本明細書に開示される方法が実装されてもよい例示的ネットワークアーキテクチャ100を説明する。具体的には、図13のコンピューティング装置1300等のコンピューティング装置は、1つ以上のアプリケーション102を格納及び実行することができる。具体的には、アプリケーション102は、そのようなアプリケーションを、ネットワーク上でデータを送信し又はリモートデバイスから受信するウェブブラウザ又はその他のアプリケーションとして含んでもよい。
コンピューティング装置1300は同様に、バーチャルプライベートルータ(VPR)104(その機能は後に詳しく述べる)をホストしてもよい。具体的には、VPR104は、ドメイン名の解決に対するリクエスト(例えばドメインネームサービス(DNS)リクエスト)と、コンテンツ又はコンテンツ送信に対するリクエストとの両方をアプリケーション102から傍受するトラフィックインターセプタ106を含んでもよい。
DNS解決リクエストはリゾルバ108によって処理されてよい。後に詳述するように、DNSリゾルバ108は、アプリケーション102からDNS解決リクエストを受信し、応答において、ルーティング不可IPアドレス(以下、「疑似IPアドレス」)をアプリケーション102に返信してもよい。幾つかの実施形態及び環境において、DNSリゾルバ108は、その実際のDNSリクエストをDNSサーバに送信し、ルーティング可能IPアドレス(以下、「実IPアドレス」)を受信し、そのルーティング可能IPアドレスをアプリケーション102に返信することで、アプリケーション102からのDNSリクエストに応答してもよい。DNSリゾルバ108は、ドメイン名を解決するためのリクエストに応答して、ドメイン名と、DNSリゾルバ108により生成された疑似IPアドレスと間のマッピングを記録してもよい。DNSリゾルバ108また、ドメインとDNSリゾルバ108によって解決された実IPアドレスとの間のマッピングを格納してもよい。
VPR104は更に、コンテンツルータ110を含んでもよい。アプリケーション102から受信されたコンテンツに対するリクエストは、コンテンツルータ110によって、コンテンツリクエスト中の疑似IPアドレスを識別し、該疑似IPアドレスにマッピングされたドメイン名を検索し、該ドメイン名を含む修正済みコンテンツリクエストを出力することで処理される。コンテンツリクエストに対する応答は、コンテンツルータ110によって受信され、アプリケーション102に返信されてもよい。
修正済みコンテンツリクエストは、コンテンツリクエストに対応する適切なモジュール112〜116により処理されてもよい。例えば、HTTPコンテンツリクエストはHTTPプロキシ112によって処理されてもよく、CONNECTコンテンツリクエストはCONNECTプロキシ114によって処理されてもよい。VPNトンネル内の通信はVPNモジュール116によって処理されてもよい。コンテンツリクエスト及びその他の通信は、モジュール112〜116によって中間サーバ118にその後送信されてもよい。幾つかの実施形態において、VPR104は、例示したモジュール112〜116よりも多い、又は少ないモジュールを実装してもよい。幾つかの実施形態において、VPRは更に、不正アクセスを防ぐためのファイアウォールを実装してもよい。
一実施形態において、中間サーバ118は少なくとも1つのプロキシサーバを含む。VPR104は、リクエストされたドメイン名を含むDNSリクエストを、1つ以上のクライアント側アプリケーションからクライアント側プロキシ(例えば、モジュール112〜116のうちの1つ)にリダイレクトし、クライアント側プロキシは、リクエストされたドメインと共に、そのリクエストをコンピュータネットワーク上で、プロキシサーバとして動作する中間サーバ118に転送する。一実装において、1つ以上のHTTPコンテンツリクエストがクライアント側HTTPプロキシ112に提示され、HTTPプロキシ112は、HOSTヘッダ内のリクエストされたドメインを転送する。別の実装において、1つ以上のHTTPSコンテンツリクエストがクライアント側HTTPSプロキシに提示され、クライアント側HTTPSプロキシはSNI(サーバネームアイデンティフィケーション)ヘッダ内のリクエストされたドメインを転送する。別の実装において、1つ以上のTCPコンテンツリクエストがクライアント側CONNECTプロキシ114に提示され、クライアント側CONNECTプロキシ114は、CONNECTヘッダ内のリクエストされたドメインを転送する。
一実装において、VPRは、2つ以上のコンテンツリクエストを少なくとも2つの異なる中間サーバに提示し、各コンテンツリクエストに対する中間サーバは、そのIPアドレス、ポート、及びプロトコルと関連付けられたドメイン名のグループからコンテンツリクエストの1つ以上のパラメータを取得し、これらのパラメータを1つ以上のルーティング規則と整合させることにより判定される。例えば、リクエストされたドメインに対する中間サーバは、中間サーバの位置に特有のコンテンツ(ローカルニュース等)を検索するため、又は、パフォーマンス改善のため(例えば、クライアントとコンテンツサーバとの間の直接ルートからの逸脱を最小化するため)に選択される。
VPR104の例示されたコンポーネントは、単一のクライアント装置1300によって格納及び実行されてもよいし、又は、ローカルネットワーク若しくはその他のネットワークによってクライアント装置1300に接続されたゲートウェイコンピュータ若しくはルータ等の複数のコンピューティング装置1300に分散されてもよい。
中間サーバ118は、修正済みコンテンツリクエスト及びその他の通信を受信し、ドメイン名を抽出し、ドメイン名をIPアドレスに解決し、そのIPアドレスに修正済みコンテンツリクエストを転送してもよい。幾つかの実施形態において、中間サーバ120は、コンテンツリクエストを受信してもよく、後に詳述するように、DNSリクエストを削減しつつVPN接続を管理するVPNサーバとして実施されてもよい。中間サーバ118はまた、VPNサーバとして機能してもよく、又はVPNトンネル内のコンテンツリクエスト及びその他の通信を他のVPNサーバに転送してもよい。
中間サーバ118、120はインターネット122、又は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、若しくはその他のネットワーク等のその他のネットワークに結合されてもよい。インターネット122への接続は、任意の有線又は無線の接続手段によってなされてもよい。コンテンツリクエストの対象であり、それらに対する応答を送信するサーバは、インターネット122に含まれるものと理解されてもよく、ネットワーク通信の対象であり、それらに対する応答を送信できる任意の装置を含んでよい。アプリケーション102及びVPR104を格納及び実行するコンピューティング装置1300(図13を参照)は、DNS名解決のリクエスト等のデータをインターネットから受信してもよく、それらに応答を送信してもよい。
図2は、VPR104、具体的にはDNSリゾルバ108によって実行されうる方法200を説明する。方法200は、DNSリクエストを傍受202することと、該DNSリクエストから、完全修飾ドメイン名(FQDN)をDNSから取得204することとを含んでよい。FQDNを疑似IPにマッピングするテーブル(FQDN_to_nr_IPテーブル)から該FQDNに対応する疑似IPを取得206するための試行がなされる。FQDN_to_nr_IPテーブルは、FQDNをキーとし、対応するIPアドレスをそのキーに対応する値とするハッシュテーブルであってもよい。本明細書にて説明されるその他のテーブルも同様にハッシュテーブルとして具体化されてもよい。
テーブル中にエントリが発見されないと判定された208場合、新しい疑似IPアドレス(nr_IP)が割り当て210られる。割り当てられた疑似IPアドレスは、該疑似IPアドレスがステップ204で取得されたFQDNに一意に解決するように、VPRの範囲内、又はVPR内の他のネーム空間内で一意であってもよい。一実装において、疑似IPアドレスは、10.0.0.−10.255.255.255、172.16.0.0−172.31.255.255、及び192.168.0.0−192.168.255.255の内の少なくとも1つの内のルーティング不可IPv4アドレスのグループから割り当て210られる。別の実装において、疑似IPアドレスはルーティング不可IPv6アドレスである。別の実装において、疑似IPアドレスとして用いられるルーティング不可IPアドレスは、クライアントコンピュータが接続されるローカルネットワークによって用いられる範囲とは異なる1つ以上の範囲から選択される。
一実装において、疑似IPアドレスとして用いられるルーティング不可IPアドレスは、クライアントコンピュータが接続されるローカルネットワークによって用いられる範囲とは異なる1つ以上の範囲から選択される。一実施形態において、検出されたIPアドレスに対応するドメインの検索は、疑似IPアドレスのサブセットを抽出することと、格納されたドメイン名を参照するために該サブセットを用いることと、これにより、異なる範囲の疑似IPアドレスに対するIPアドレスとドメイン名との間の同じ参照を維持することとを含む。例えば、Mビットの長さの疑似IPアドレスは、最下位ビットNビット(N<M)のみとして格納されてもよい。一実装において、疑似IPアドレスの検索されたサブセットは、IPv4疑似IPアドレスの32ビット整数表現の下位ビット20以下を含む。
例えば、VPR104は、FQDN_to_nr_IPテーブル中に有効なエントリを有しない、”example.com”というドメインに対するDNSリクエストを受信する。ローカルネットワーク上の他のリソースとの競合を避けるために、VPRは、現在のローカルネットワークが使用する範囲とは別のIP範囲内の疑似IPアドレスを返信すべきである。例えば、ユーザが192.168.0.0−192.168.255.255の範囲内のIPアドレスを有するローカルネットワークに現在接続している場合、VPRは、10.0.0.0−10.255.255.255の範囲内の疑似IPアドレス(例えば、0x11213に等しい最下位20ビットを有する10.17.18.19)を、FQDN_to_nr_IP又はnr_IP_to_FQDNテーブル中に同じ最下位20ビットを持つ疑似IPアドレスと他のFQDNが関連付けられていないことを確認した後に返信する。一意の対である<FQDN−>疑似IPアドレスの最下位20ビット”>は、FQDN_to_nr_IPテーブル(ドメインをキーとする)とnr_IP_to_FQDNテーブル(疑似IPアドレスの最下位20ビットをキーとする)の両方に格納される。
その後何らかの時点で、ユーザは、例えば10.0.0.0−10.255.255.255の範囲内のIPアドレスで、別のローカルネットワークに切り替えてもよい。ドメイン名“example.com”に対する別のDNSリクエストを受信した後、VPRは、nr_IP_to_FQDNテーブルから疑似IPの最下位20ビットを検索し、異なる範囲(例えば、172.16.0.0−172.31.255.255)の疑似IP、例えば最下位20ビット0x11213を有する疑似IP172.17.18.18をその後返信する。この方法では、ユーザが別の範囲のローカルIPアドレスに切り替えることに応じて、テーブルが変更される必要がない。別の例において、格納され得る疑似IPアドレスのビットは、実IPを記述するビット数よりも小さい範囲で、異なる数であってもよい。例えば、FQDN_to_nr_IP及びnr_IP_to_FQDNテーブルは、IPv4アドレスの最下位16ビットを格納してもよく、又は、IPv6アドレスの、ルーティングプレフィックス、サブネット識別子、若しくはインターフェース識別子の少なくとも数ビットを除いた部分を格納してもよい。
別の例において、FQDN_to_nr_IP及びnr_IP_to_FQDNの両方が疑似IPアドレス(10.17.18.19)全体を格納するが、同じ下位ビットを有する別の範囲内の疑似IPアドレスを生成つつ、最上位ビット又はその他のビットは無視される。結果として、ローカルリソースに割り当てられたルーティング不可IPアドレスと競合するリスクなしに、異なるローカルネットワークにおいて、疑似IPとドメイン名との間の同じ参照を用いることができる。このことは、ローカルネットワークの切り替えを検出した後、FQDN_to_nr_IP及びnr_IP_to_FQDNテーブルの一部を消去することに代えて、格納された参照をより長く維持することが可能となる。
方法200は更に、ステップ204で取得したFQDNを、割り当て210られた疑似IPアドレスにマッピングするために、FQDN_to_nr_IPテーブルを更新212することを含む。同様に、割り当て210られた疑似IPアドレスをステップ204で取得したFQDNにマッピングするエントリがnr_IP_to_FQDN中に作成される。
疑似IPアドレスに対するタイムトゥーリブ(TTL)は、VPR104及び/若しくはアプリケーションによって実装される所定のDNSプロトコルに対する最大許容値に、又は同一のFQDNに対するDNSリクエストの頻度を低減するのに十分大きな別の値、例えば実IPアドレスに対して用いられるTTL値よりも大きな値に設定214される。このことは、TTLの期限切れに起因するアプリケーションによるDNSリクエストの数を減少させる。ステップ210で割り当てられた疑似IPアドレスとステップ314で設定されたTTLとを含むDNS応答が作成316され、傍受202されたDNSリクエストを生成したアプリケーションにDNS応答が返信218される。
幾つかの例において、アプリケーションがドメイン名を解決するための別のリクエストを再度発行してもよいように、又は、別のアプリケーションが、過去の解決リクエストが傍受202されたドメイン名の解決をリクエストしてもよいように、疑似IPアドレスのTTLは期限が切れてもよい。どちらにせよ、ステップ204で識別されたFQDNは、FQDN_to_nr_IPテーブル中に対応するエントリを有すると発見208されるであろう。これに応じて、方法200は、ステップでFQDNに対応するテーブルから疑似IPアドレスに対するTTLの最大値に設定214することと、テーブル中のFQDNにマッピングされた疑似IPアドレスとステップ214で設定されたTTLとを含むDNS応答を作成216することと、傍受202されたDNSリクエストを生成したアプリケーションに該DNS応答を返信218することとを含んでもよい。TTLはまた、同一のFQDNに対するDNSリクエストの頻度を低減するのに十分大きなその他の値、例えば実IPアドレスに対して用いられるTTL値よりも大きな値に設定されてもよい。
図2の方法は、DNSリクエストを有利に抑制し、それにより、特にモバイルデバイスに対するレイテンシを減少させる。
図3を参照すると、幾つかの実施形態において、VPR104、具体的にはDNSリゾルバ108は、図2で説明されたプロセスからの幾つかのDNSリクエストをバイパスしてもよい。例えば、中間サーバ118、120は、VPR104をホストするコンピューティング装置1300と地理的に近接していない可能性がある。従って、幾つかのドメインは、ローカルニュース、スポーツ、天気、小売店等、位置に特有のコンテンツへのアクセスを提供しうる。このため、リモート中間サーバ118、120よりもむしろVPR104にDNSリクエストを解決させることが有利となる場合がある。
例えば、方法300は、図2を参照しながら上述したように、DNSリクエストを傍受202することと、該DNSリクエストからFQDNを取得204することとを含んでもよい。方法300は更に、FQDNをルーティング規則にマッピングするFQDN_to_rulesテーブル等から、FQDNに対応するルーティング規則を取得302することを試行することを含んでもよい。規則が発見されないと判定304された場合、方法300はデフォルトのルーティング規則の取得306を含んでもよい。テーブルからの規則、又はデフォルトの規則が中間サーバ118、120のバイパスを必要としないと判定308された場合、方法300は、図2を参照しながら上述したように、傍受202されたDNSリクエストを発行したアプリケーションに疑似IPアドレスを返信するステップ206〜218を実行することを含んでもよい。
テーブルからの規則、又はデフォルトの規則がバイパスを必要とすると発見308した場合、方法300は、FQDNを対応する実IPアドレスにマッピングするFQDN_to_r_IPテーブル等から、ステップ204のFQDNに対応する実IPアドレスを取得310することを試行することを含んでもよい。エントリが発見されない場合、そのエントリに対するTTLは、実IPアドレスに対する残存TTL、例えば、実IPアドレスを受信してからまだ経過していないDNSサーバから実IPアドレスに対して受信されたTTLの量に設定される。実IPアドレスとTTLとを含むDNS応答が作成216されてもよく、リクエスト元のアプリケーションに返信218されてもよい。
ステップ204のFQDNに対応する実IPアドレスが発見されない場合、方法316は、ステップ204のFQDNを含むDNSリクエストをDNSサーバに送信316することと、ステップ204のFQDNに対する実IPアドレスとTTLとを含む応答を受信318することと、FQDNを実IPアドレスに、実IPアドレスをFQDNに、それぞれマッピングするためにFQDN_to_r_IP及びr_IP_to_FQDNテーブルを更新することと、ステップ318で受信したDNS応答をリクエスト元のアプリケーションに返信218することとを含んでよい。実IPアドレスに対するTTLも、FQDN_to_r_IP及びr_IP_to_FQDNテーブル中のエントリと関連付けて格納されてもよい。FQDN_to_r_IPテーブルは同一のFQDNに対する2つ以上のIPアドレスを格納してもよく、r_IP_to_FQDNテーブルは同一の実IPに対する2つ以上のFQDNを格納してもよい。そのような場合、同一のキーと関連付けられた複数の値の内の1つが、ランダムセレクション、ラウンドロビン、又はその他のアルゴリズムによって選択されてもよい。
別の実装において、VPR104は、DNSリクエストを傍受した後に疑似IPアドレスを常に返信する。例えば、ルーティング規則が中間サーバ118、120のバイパスを必要とすると判断308されるか否かにかかわらず、ステップ206〜218を例外なく実行してよい。そのような実施形態において、ルーティング規則が中間サーバのバイパスを必要とすると判断308された場合、当該FQDNを参照するコンテンツリクエストが受信されるまで実IPアドレスが取得されないように、ステップ316〜320は省略されてもよい。
ルーティング規則によってバイパスが命じられていても疑似IPアドレスが割り当て210される場合、VPRは、疑似アドレスIPを宛先として有するコンテンツパケットを受信すると、当該疑似IPアドレスに関連付けられたドメイン名、ポート、プロトコルの内の幾つか又は全て等、1つ以上のパラメータを該パケットからを取得してもよい。VPR104は、取得したパラメータを1つ以上のルーティング規則とその後整合させ、コンテンツリクエストがルーティング規則毎の中間サーバをバイパスすべき場合、VPR104は、取得されたドメイン名の実IPアドレスに対する自身のDNSリクエストをその後発行し、取得された実IPアドレスを用いてコンテンツリクエストをその後直接発行する、すなわち、コンテンツリクエストを中間サーバ118、120にまず送信することなく、そのコンテンツリクエストを、実アドレスIPによりアドレス指定されたサーバに送信する。
図4は、VPR104により、例えばコンテンツルータ110により実行されてもよい方法400を説明する。方法400は、コンテンツリクエストが、コンテンツリクエストの宛先IPフィールド中等に、疑似IPアドレス(つまりルーティング不可IPアドレス)を含むか否かを判定402することを含んでよい。そうである場合、方法400は、その疑似IPアドレスに対応するFQDNを、nr_IP_to_FQDNテーブルから取得404することを試行することを含む。テーブル中に疑似IPアドレスが発見406された場合、テーブルからの対応するFQDNは、コンテンツリクエストに追加408され、コンテンツリクエストは中間サーバ118、120に送信410される。疑似IPアドレスに対するエントリが発見406されない場合、その後エラーが返信412される。
コンテンツリクエストが疑似IPアドレスを含まず、実IPアドレスを含むと発見402された場合、r_IP_to_FQDNテーブル中の該実IPアドレスに対応するFQDNを取得414する試行がなされる。テーブル中に実IPアドレスに対応するFQDNの発見416されない場合、又は同一の実IPアドレスに対する複数のFQDNが発見された場合、その後コンテンツリクエストは、単に該実IPアドレスで中間サーバ118、120に送信410されてよい。一意なFQDNが発見された場合、その後FQDNがコンテンツリクエストに追加408され、コンテンツリクエストは中間サーバ118、120にその後送信410される。
方法400は、コンテンツリクエストが疑似IPアドレスを含まない場合でも例外なくコンテンツリクエストを中間サーバ118、120に送信することを含む。コンテンツリクエストを受信すると、コンテンツリクエストに含まれるFQDNに対応する実IPアドレスが中間サーバ118、120により取得されてよく、幾つかの実施形態では、実IPアドレスを含むコンテンツリクエストに対しても同様である。
代替的な実施形態において、FQDNをコンテンツリクエストに追加408することよりもむしろ、VPR104は、コンテンツリクエストを疑似IPアドレスと共に中間サーバ118、120に送信する。VPR104は更に、コンテンツリクエストの傍受及び/又はコンテンツリクエストの中間サーバ118、120への転送の前に、中間サーバ118、120にnr_IP_to_FQDNテーブルの現在のコピーを通信するために中間サーバ118、120と連絡する。nr_IP_to_FQDNに対する更新は、定期的に、又は変更がある度、例えば新しい疑似IPアドレスが割り当て210られる度に、又はXミリ秒毎に送信されてよい。コンテンツリクエストの受信に応答して、中間サーバ118、120は、FQDNを検索して実IPアドレスに解決するために、自身のnr_IP_to_FQDNのコピーを用いてもよい。
図5は、コンテンツルータ110による等、VPR104により実行されてもよい、ある一定の環境下で中間サーバ118、120をバイパスすることを含む方法500を説明する。上記のように、中間サーバ118、120をバイパスすることは、コンテンツリクエストに応答して場所的に関連性のあるコンテンツが返信されるようにするため等、様々な理由のために、幾つかのドメインに対して有利に行われてよい。
方法500は、コンテンツリクエストが疑似IPアドレス(すなわち、ルーティング不可IPアドレス)を含むか否かを判定502することを含んでもよい。そうである場合、方法500は、その疑似IPアドレスに対応するFQDNをnr_IP_to_FQDNテーブルから取得504することの試行を含む。テーブル中に疑似IPアドレスが発見506された場合、ステップ504で取得されたFQDNに対応するルーティング規則を、ルーティング規則をFQDNにマッピングするFQDN_to_rulesテーブル等のテーブルから取得512することの試行がなされてよい。
コンテンツリクエストが疑似IPアドレスを含まないが、実IPアドレスを含むと発見502された場合、r_IP_to_FQDNテーブル中の実IPアドレスに対応するFQDNを取得508することの試行がなされる。テーブル中に実IPアドレスに対応するFQDNが発見510された場合、ステップ508で取得されたFQDNに対応するルーティング規則を、FQDN_to_rulesテーブル等のテーブルから取得512することの試行がその後なされる。r_IP_to_FQDNテーブルが同一の実IPに対する複数のFQDNを含む場合、規則はこれらのFQDNに対する一組の規則から選択することができる。例えば、これらのFQDNの内の少なくとも1つがこの規則と関連付けられている場合、中間サーバを通じてコンテンツリクエストが送信される。
ステップ504又はステップ508で取得されたFQDNに対するルーティング規則が発見514された場合、その後方法500は、ルーティング規則がコンテンツリクエストにより中間サーバ118、120のバイパスを必要とするか否かを判定516することを含んでよい。そうである場合、コンテンツリクエスト中で特定された宛先に、コンテンツリクエストがその後送信518される。具体的には、コンテンツリクエストが実IPアドレスを含む場合、コンテンツリクエストは、その実IPアドレスに送信される。コンテンツリクエストが疑似IPアドレスを含む場合は、DNSリクエストを発行し、実IPアドレスを含む応答を受信し、実IPアドレスを含むようにコンテンツリクエストを修正し、その実IPアドレスに修正済みコンテンツリクエストを送信することによって、疑似IPアドレスに対応するFQDN(FQDN_to_nr_IPテーブル中のFQDNにマッピングされたFQDN等)が実IPアドレスに解決されてもよい。中間サーバ118、120のバイパス中にコンテンツリクエストを送信する方法の例は、図7に関して後述する。
ルーティング規則が中間サーバ118、120のバイパスを必要としないと判定516された場合、ステップ504及び508の内の1つで判定されたFQDNを含むコンテンツリクエストは中間サーバ118、120にその後送信520される。
ステップ504及び508の内の1つで判断されたFQDNに対するルーティング規則が発見512されない場合、コンテンツリクエストに対応するポート及びプロトコル(HTTP、TCP、VPN、CONNECT等)の一方又は両方に対応するルーティング規則、例えば各ポート及び/又はプロトコルを、各ポート及び/又はプロトコルに対応するルーティング規則にマッピングするport_proto_to_rulesテーブル中等から取得522することの試行がなされてよい。ルーティング規則が発見されたと判定524された場合、上述のようにステップ516においてルーティング規則がその後適用される。規則が発見されないと判断524された場合、デフォルトの規則が設定526され、上述のようにステップ516においてデフォルトの規則が適用される。
幾つかの実施形態において、特定のFQDN、プロトコル、及び/又はポートと関連付けられたルーティング規則は、例えば、リクエストされたFQDNに対する追加的なテストに基づいて、動的に変更されてもよい。例えば、コンテンツリクエストに対するテスト応答時間から判定されると、コンテンツリクエストは、クライアントから遠いが中間サーバの近くに格納されたコンテンツに対しては中間サーバ118、120を通じて送信されてもよく、又は、中間サーバよりもクライアントの近くに格納されたコンテンツに対してはバイパスされてよい。
幾つかの実施形態において、コンテンツリクエストが中間サーバ118、120をバイパスすべきかに加えて、ルーティング規則は更に、コンテンツリクエストの属性に基づき、コンテンツリクエストのその他の側面を特定してもよい。例えば、ルーティング規則は、コンテンツリクエストをプロキシを通じて送るか、それともVPNを通じて送るか、又はいづれの中間サーバ118、120を用いるか等の、追加的な情報を特定してよい。一実装において、VPR104は、2つ以上のコンテンツリクエストを、少なくとも2つの異なる中間サーバに提示する。各コンテンツリクエストに対する中間サーバ118、120は、そのIPアドレス、ポート、及びプロトコルと関連付けられたドメイン名のグループからコンテンツリクエストの1つ以上のパラメータを取得し、これらのパラメータを1つ以上のルーティング規則と整合させることにより判定される。例えば、リクエストされたドメインに対する中間サーバ118、120は、中間サーバの位置に特有のコンテンツ(ローカルニュース等)を検索するため、又は、パフォーマンス改善のため(例えば、クライアントとコンテンツサーバとの間の直接ルートからの逸脱を最小化するため)に選択される。
幾つかの実施形態において、DNSリゾルバ108は、中間サーバをバイパスするか否かを特定する規則のみを用いてもよく、一方、コンテンツルータ110は、コンテンツリクエストをリクエストされたモジュール112〜116又はその他のモジュールを通じてルーティングするための追加情報を用いてよい。一例において、ルーティング規則は、宛先ポート80へのTCPトラフィックをHTTPプロキシ112を通じて、その他の全てのTCPトラフィックをCONNECTプロキシ114を通じて送ることを特定してもよく、その他の任意のプロトコルを用いるトラフィックは、VPNモジュール116を通じてルーティングされる。別の例において、ルーティング規則は、暗号化されていないデータ交換が第三者により傍受されうる公衆WiFiホットスポットにおいて、セキュリティを高めるために動的に変更されてもよい。例えば、HTTPトラフィック(TCPポート80)は、セキュアなWiFiホットスポットにおいてパフォーマンスを改善するためにHTTPプロキシを通じて、又は、公衆WiFiホットスポットでユーザを保護するためにセキュアなVPNを通じて、送信できる。WiFiホットスポットのセキュリティを判定する方法は、参照によってその全体が全ての目的に対し本明細書に組み込まれる、2013年12月30日に出願された、SYSTEM AND METHOD FOR SECURITY AND QUALITY ASSESSMENT OF WIRELESS ACCESS POINTSを名称とする、米国特許出願番号61/921,781に従ってもよい。WiFiホットスポットのセキュリティを判定する方法はまた、参照によってその全体が全ての目的に対し本明細書に組み込まれる、2014年12月17日に出願された、SYSTEM AND METHOD FOR SECURITY AND QUALITY ASSESSMENT OF WIRELESS ACCESS POINTSを名称とする、米国特許出願番号14/574,240に従ってもよい。
図6は、トラフィックインターセプタ106により傍受されたコンテンツリクエストに関するコンテンツルータ110による等、VPR104により実行されてもよい方法600を説明する。方法600は図3〜5の方法と組み合わせて実行されてもよい。具体的には、コンテンツリクエストは、それらに対応するFQDNがコンテンツリクエストに含まれるか、又は図3〜5の方法により追加される場合、方法300〜500の内の幾つか又は全てに従って中間サーバ118、120にルーティングされると判定され、コンテンツリクエストが生成されたプロトコルに基づいて処理されてよい。
例えば、方法600は、傍受されたコンテンツリクエストに関して行われてよい。方法600は、コンテンツリクエストがトランスミッションコントロールプロトコル(TCP)コンテンツリクエストであるか否かを判定602することを含んでもよい。そうである場合、コンテンツリクエストがHTTP(ハイパーテキストトランスミッションプロトコル)リクエストであるか否かがステップ604で評価される。そうである場合、コンテンツリクエストはHTTPプロキシ112を通じて中間サーバ118に送信606される。
コンテンツリクエストがHTTPリクエストではないと判定604された場合、その後FQDNがコンテンツリクエスト中に発見されたか、それとも上述のように疑似IPアドレスに従ってコンテンツリクエストに解決されたか。そうである場合、コンテンツリクエストのCONNECTヘッダにそのFQDNが追加され、修正された状態のコンテンツリクエストがCONNECTプロキシ114を通じて送信612される。FQDNが発見されいと判定608された場合、その後方法600は、コンテンツリクエストが疑似IPアドレスを含んだか否かを評価614することを含む。そうでない場合、実IPを含んだコンテンツリクエストがCONNECTプロキシ114を通じて送信612されてもよい。コンテンツリクエストが疑似IPアドレスを含むと発見614した場合、その後エラーが返信616される。一実施形態において、FQDNがIPアドレスと一意に関連付けられている場合にのみ、FQDNがCONNECTリクエストに追加される。そのような実施形態では、2つ以上のFQDNが同一の実IPと関連付けられる場合、FQDNを追加することなく、該リクエストはCONNECTプロキシを通じて送信される。
コンテンツリクエストがTCPコンテンツリクエスト以外であると判定602された場合、方法600は、FQDNがコンテンツリクエスト中で発見されたか、それとも上述のように疑似IPアドレスに従ってコンテンツリクエストに解決されたかを評価618することを含んでもよい。そうである場合、その後FQDNがコンテンツリクエストに追加620され、コンテンツリクエストはVPNモジュール116を通じて送信622される。FQDNがコンテンツリクエスト中又はコンテンツリクエストに対して発見されないと判定618された場合、その後ステップ624において、コンテンツリクエストが疑似IPアドレスを含むか否かが評価される。そうである場合、その後エラーが返信616される。そうでない場合、その後コンテンツリクエストはVPNモジュール622を通じて送信622される。
図6は、コンテンツリクエストが受信されてもよい3つの可能なプロトコル(HTTP、CONNECT、VPN)の一例である。他の実施形態では、他のプロトコルがが使用されてもよく、コンテンツリクエストは、そうしたコンテンツリクエストの送信を実装するための対応するモジュールを通じてルーティングされる。
図7は、VPR104、具体的にはコンテンツルータ110が、図5の方法500等に従って、中間サーバをバイパスするように選択されたコンテンツリクエストを処理してもよい例示的方法700を説明する。方法700は、コンテンツリクエストが疑似IPアドレスを含むか否かを判定702することを含んでもよい。そうでない場合、その後コンテンツリクエストは、コンテンツリクエストに含まれる実IPアドレスに単に送信704される。そうである場合、その後方法700は、疑似アドレスに対応するFQDNが、nr_IP_to_FQDNテーブル中等で発見されるか否かを評価706することを含んでもよい。そうでない場合、その後エラーが返信708される。そうである場合、その後FQDNに対する実IPアドレスは、FQDNと共にDNSリクエストを送信710し、実IPアドレスと共にDNSリクエストに対する応答を取得712し、FQDN_to_r_IP及びr_IP_to_FQDNテーブルをFQDNと実IPアドレスとの間のマッピングを含むように更新714し、コンテンツリクエスト中の疑似IPアドレスを実IPアドレスに置き換える716ことによって取得される。修正済みのコンテンツリクエストは実IPアドレスにその後送信704されてもよい。ドメイン名とIPアドレスとの間のマッピングを格納することに加えて、コンテンツルータはルーティング不可IPアドレスと実IPアドレスとの間のマッピングをも格納し、これを、ルーティング不可IPアドレスが同じドメインに既に割り当てられた後に実IPを受信すると、このマッピングを更新する。
図8A〜8Dは、様々なプロトコルのコンテンツリクエストに対して中間サーバ118、120により実行されてもよい方法800を説明する。図8AのステップはHTTPコンテンツリクエストに対して実行されてもよい。HTTPリクエストに対しては、方法800は、コンテンツリクエストが疑似IPアドレスを含むか否かを判定702することを含んでもよい。そうでない場合、コンテンツリクエストは、該コンテンツリクエストに含まれる実IPに単に送信804される。そうである場合、その後方法800は、HTTPコンテンツリクエストのホストヘッダからFQDNを取得806することを含んでもよい。そのFQDNに対する実IPアドレスは、FQDNと共にDNSリクエストを送信808し、実IPアドレスと共にDNSリクエストに対する応答を取得810し、HTTPコンテンツリクエスト中の疑似IPアドレスを実IPアドレスに置き換える812ことによって取得される。修正済みのHTTPコンテンツリクエストは、実IPアドレスにその後送信804されてもよい。
図8Aから理解されるように、また、図8B〜図8Dに関して理解されるように、本明細書の他の方法において説明されるように疑似IPアドレスを含むことに起因してFQDNを含むように修正されたコンテンツリクエストは、中間サーバ118、110に送信される場合に、疑似IPアドレスを宛先IPフィールド中等に依然として含んでもよく、これにより、中間サーバ118、120によるDNS解決が必要か否かかの判定を容易にするようにしてもよい。
図8Bを参照すると、非HTTP TCPコンテンツリクエストに対しては、方法80は、コンテンツリクエストが疑似IPアドレスを含むか否かを判定814することを含んでもよい。そうでない場合、その後コンテンツリクエストは、該コンテンツリクエストに含まれる実IPアドレスに単に送信816される。そうである場合、その後方法800は、CONNECTヘッダからFQDNを取得818することを試行することと、FQDNがCONNECTヘッダ中に発見されるか否かを評価820することとを含んでもよい。そうでない場合、その後エラーが返信822される。そうである場合、その後FQDNに対する実IPアドレスは、FQDNと共にDNSリクエストを送信824し、実IPアドレスと共にDNSリクエストに対する応答を取得826し、コンテンツリクエスト中の疑似IPアドレスを実IPアドレスに置き換える828ことによって取得される。修正済みのコンテンツリクエストは実IPアドレスにその後送信816されてもよい。
図8Cを参照すると、VPNコンテンツリクエストに対しては、方法80は、コンテンツリクエストが疑似IPアドレスを含むか否かを判定830することを含んでもよい。そうでない場合、その後コンテンツリクエストは、該コンテンツリクエストに含まれる実IPアドレスに単に送信832される。そうである場合、その後方法800は、コンテンツリクエストに含まれるデータからFQDNを取得834することを試行することと、FQDNがリクエストデータ中で発見されるか否かを評価836することとを含んでもよい。そうでない場合、その後エラーが返信838される。そうである場合、その後FQDNに対する実IPアドレスは、FQDNと共にDNSリクエストを送信840し、実IPアドレスと共にDNSリクエストに対する応答を取得842し、コンテンツリクエスト中の疑似IPアドレスを実IPアドレスに置き換える844ことで取得される。修正済みのコンテンツリクエストは、実IPアドレスにその後送信832されてもよい。
図8A〜図8Cは、DNSサーバからDNS名をリクエストすることによりDNS解決が行われる方法を記述する。しかしながら、方法800は更に、各FQDNを、そのFQDNに対して過去に受信した実IPアドレスにマッピングするFQDN_to_r_IPテーブル中等に、ドメイン名をキャッシュすることを含んでもよい。従って、コンテンツリクエストに対するFQDNが特定されると、このテーブルから実IPが検索されてもよい。
幾つかの実施形態において、実際のドメイン名を含まないがドメイン名を表す列へのポインタを含むコンテンツリクエストがVPRによって生成されてもよい。ドメイン名を含むテーブルは、各ポインタをテーブル中のテキスト列に解決することによって中間サーバがポインタをドメイン名に解決するように、VPR104と中間サーバ118、120との間で共有されてもよい。
図9は、VPR104と、VPNサーバ120として機能する中間サーバ120とにより実行されてもよい方法900を説明する。方法900は、VPR104によってVPNトラフィックを傍受902することと、そのトラフィックが疑似IPアドレスを含むか否かを評価904することとを含んでもよい。そうでない場合、その後トラフィックは、該トラフィックのアドレス指定を修正することなく、VPNサーバ120に送信906されてもよい。
そうである場合、その後方法900は、その疑似IPアドレスに対するFQDNを上述のFQDN_to_nr_IPテーブル等から検索908することを含んでもよい。FQDNは、VPNトンネル内でトラフィックにその後追加910されてもよく、修正済みのトラフィックがVPNサーバ120に送信912されてもよい。FQDNを追加910することは、トラフィックに追加のパケットを挿入すること、又は傍受902されたトラフィックの幾つか又は全てのパケットのフィールドにFQDNを追加することを含んでもよい。一実施形態において、FQDNの記述子は、疑似IPを宛先IPアドレスとして有するTCP又はUDP接続の一組のデータパケットに、これらのデータパケットがVPNパケット内にカプセル化される前に追加される。
トラフィックを送信912することは、VPNトンネル内で修正済みのトラフィックをまずカプセル化することを含んでもよい。当技術分野で周知のように、VPNトンネルは、パケットを暗号化することと、VPNサーバ120にその後送信される対応するVPNヘッダと共に、暗号化されたパケットをVPNパケット内に含むこととを含んでもよい。幾つかの例において、傍受902されたVPNトラフィックは、HOST、SNI、又はCONNECTヘッダ中等にFQDNをに既に含んでもよく、この場合ステップ908〜910は省略でき、トラフィックは、FQDNの追加なしに、カプセル化されてVPNサーバ120に送信912されてもよい。
VPNサーバ120は、修正済みのトラフィックを受信914してもよく、修正済みのトラフィックを取得するためVPNパケットをデカプセル化してもよい。当技術分野で周知のように、デカプセル化は、VPNヘッダを取り除くことと、カプセル化されたトラフィックを復号化することとを含んでもよい。FQDNは、VPNサーバ120によって修正済みのトラフィックから抽出916され、実IPアドレスに解決918されてよい。FQDNを実IPアドレスに解決918することは、FQDNと共にDNSリクエストを発行することと、その応答として実IPアドレスを受信することを含んでよい。解決918することは、過去に解決されたFQDNを実IPアドレスにマッピングするテーブルから実IPアドレスを検索することを含んでもよい。
幾つかの実施形態において、VPR104は、FQDNではなくむしろ、修正済みのトラフィック中のテキスト列へのポインタを含んでもよく、該テキスト列はFQDNを含む。これに従い、FQDNを抽出916することは、ポインタに対応するテキスト列を検索することを含んでもよい。
幾つかの実施形態において、VPR104及びVPNサーバ120はnr_IP_to_FQDNテーブルを共有してもよく、すなわち、VPNサーバ120がテーブルの現在のコピーを有するように、VPR104は定期的にテーブルを送信してもよく、又はテーブルを更新をしてもよい。従って、トラフィックはVPR104によって修正される必要がなく、VPNサーバ120はトラフィックを受信し、自身のバージョンのnr_IP_to_FQDNテーブルを用いて疑似IPアドレスをFQDNに解決する。
実IPアドレスが一旦取得されると、VPNサーバ120は、受信914されたトラフィック中の疑似IPアドレスを実IPアドレスに置き換え920、ステップ920で修正済みのトラフィックを実IPアドレス、すなわち、実IPアドレスが割り当てられたコンピュータシステムに送信922してもよい。
図9の方法は、VPNサーバへの従来のアプローチとは異なる。HTTP及びHTTPSプロキシサーバは、それらのデータパケットが実宛先IPアドレスを含まない(それはプロキシサーバのアドレスにより置き換えられる)ため、自身のDNSリクエストを発行する必要がある。しかしながら、従来技術のVPNサーバは、宛先IPアドレスを既に含むデータパケットに対して追加のDNSリクエストを行わなわず、カプセル化ヘッダを取り除き、元のパケットをそれらの宛先に送るだけである。
図10を参照すると、幾つかの実施形態において、VPNサーバ120は、それに接続するクライアント装置に対するレイテンシを、クライアント装置が本明細書に記載されるようにVPR104を実行するか否かにかかわらず、低減してもよい。例えば、VPNサーバ120は、VPN接続内で受信されたコンテンツリクエストに関して、図示された方法1000を実行してよい。方法1000は、ルーティング可能IPアドレスを含むコンテンツリクエストを受信1002することと、逆DNS(rDNS)リクエストをDNSサーバに発行すること、又は過去のDNS又はrDNSリクエストに対する応答に従ってルーティング可能IPアドレスをドメイン名にマッピングするキャッシュからルーティング可能IPアドレスを検索すること等によってルーティング可能IPアドレスに対応するドメイン名を識別1004することを含んでよい。
方法1000は更に、ステップ1004で識別されたドメイン名に対するDNSリクエストを発行1006することと、その返答に、ステップ1004で識別されたものとは異なりうるルーティング可能IPアドレスを受信1008することとを含んでよい。該異なるルーティング可能IPアドレスを受信すると、コンテンツリクエストは、その異なるルーティング可能IPアドレスを含むように修正されてもよく、その異なるルーティング可能IPアドレスを有するサーバシステムに送信1012されてもよい。
例えば、ヨーロッパのクライアント装置がヨーロッパ及び米国の両方のコンテンツサーバに対応するドメインに対するDNSリクエストを発行し、ヨーロッパのコンテンツサーバに対する実IPアドレスをその後受信する。このIPアドレスは、コンテンツリクエストがヨーロッパ内においてクライアントから直接発行された場合のアクセスレイテンシを低減する。しかしながら、ヨーロッパのクライアントが米国のVPNサーバ120とVPN接続を確立した場合、提供された実IPアドレスは、著しいパフォーマンス悪化の生じさせることがあり、クライアントリクエストは、米国のVPNサーバ120からヨーロッパのコンテンツサーバに送られるであろう。応答は米国のVPNサーバ120から送られ、ヨーロッパのクライアントにその後返される。VPNサーバ120がDNSリクエストを発行1006することにより、ドメイン名は、同一のドメイン名に対応するより近いサーバシステムのIPアドレスに解決されてもよく、それによりレイテンシを低減する。
幾つかの実施形態において、本発明に従うと、VPNサーバ120は、追加のDNSリクエストを発行1006する必要があると検出し、提供された宛先IPアドレスをDNS応答から取得されたものにより置き換える。上記の例において、VPNサーバ120は実IPアドレスを評価し、その提供された実IPアドレスがヨーロッパのコンテンツサーバを参照することを検出する。その応答として、VPNサーバ120は、自身のDNSリクエストを発行1006し、より近くの、例えば上記の例では米国の、より近くのコンテンツサーバを参照する応答を受信1008してもよく、それによりパフォーマンスが改善される。一実装において、追加のDNSリクエストが必要であるとの検出は、(a)ステップ1002で受信した、リクエストされた実IPアドレスの地理的位置を解決し、(b)リクエストされた実IPアドレスがVPNサーバ120のものとは異なる地理的地域に設置されたコンテンツサーバを参照すると判断された場合、例えばコンテンツサーバが、ある政治的若しくは地理的地域(国、州、大陸)の外にある、又はVPNサーバ120からの閾値距離を超える場合、追加のDNSリクエストが発行されるようにすることを含む。VPNサーバ120は、それ故、この比較を容易にするために、自身の位置を格納させられるか、又は取得するようにプログラムされてもよい。VPNサーバ120及びコンテンツサーバの地理的地域が同じか、又は互いから閾値距離内にあると判断される例では、ステップ1002で受信された実IPアドレスはVPNサーバ120によってその後変更されず、コンテンツリクエストは、ステップ1002で受信された実IPアドレスに対応するコンテンツサーバに送信される。
図11は、VPR104及び中間サーバ118の双方によるDNSリクエストを減らすために、VPR104及び中間サーバ118によって実行されてもよい方法1100を説明する。方法1100は、コンテンツリクエストを受信1102することと、コンテンツリクエストが(a)実IPアドレスを含むこと、(b)VPR104により実IPアドレスが格納されるFQDNにマッピングされる疑似IPアドレスを含むこと、又は(c)VPR104が対応するIPアドレスを格納しているFQDNを含むこと、の内の少なくとも1つであるか否かを判定することとを含む。例えば、コンテンツリクエストが疑似IPアドレスを含む場合、対応するFQDNがnr_IP_to_FQDNテーブル中で検索されてよい。コンテンツリクエストに含まれる、又は疑似IPアドレスから判定されるFQDNに対応する実IPアドレスは、そのFQDNに対するエントリが存在する場合、FQDN_to_r_IPテーブルから検索されてもよい。言い換えると、ステップ1104は、DNSリクエストを発行することなく、VPR104によってコンピュータシステム1300にキャッシュされたデータのみを用いて、VPR104によって実IPアドレスが判定されうるか否かを判定することを含んでもよい。
コンテンツリクエストがアドレス指定される実IPアドレスが、ステップ1104に関して上述したようにVPRによって解決されてもよい場合、その後コンテンツリクエストは、そのコンテンツリクエストを中間サーバ118にまず送信することなく、VPR104によって、該実IPアドレスに対応するサーバシステムに直接送信1106される。
実IPアドレスがコンピュータシステム1300上に格納されたキャッシュデータのみを用いて判定できない疑似IPアドレス又はFQDNを含むとコンテンツリクエストが発見1104された場合、その後コンテンツリクエストは、リクエストに含まれるFQDN又はリクエストに含まれる疑似IPアドレスに対応するFQDNと共に中間サーバ118に送信1108されてもよい。
中間サーバ118は、FQDNと共にリクエストを受信1110し、そのFQDNと共にDNSリクエストを発行して応答を受信することによって、又は中間サーバ118にローカルに格納されたデータ中の実IPアドレスへのFQDNのマッピングを発見することによって、FQDNを実IPアドレスに解決1110する。中間サーバは、実IPアドレスをコンテンツリクエストにその後追加し、コンテンツリクエストを実IPアドレス、すなわち実IPアドレスを割り当てられたサーバに転送1114し、該サーバは、コンテンツリクエストを処理し、中間サーバ118に応答を返信する。中間サーバ118は、コンテンツリクエストに対する応答を受信1116し、ステップ1112で判断されたFQDNに対する実IPアドレスと共に、VPR104に応答を返信1118する。DNSリクエストに対する応答中に含まれるその他のデータ、例えばFQDNに対する実IPアドレスやFQDN又はリクエストされたコンテンツと関連付けられた他の実IPアドレスのTTLも返信されてよい(例えば図12及び対応する説明を参照)。
例えば、1つ以上の実IPアドレスと任意の追加データ(例えばTTL)は、リクエストされたコンテンツと共に返信1118されるHTTPヘッダ内において返信されてもよい。別の実装において、実IPアドレスは、そのデータパターン又は返信されるデータセット内での位置によりVPR104によって認識されるデータパケット中で返信される。例えば、実IPアドレスは、リクエストされたコンテンツのパケットの前に挿入される最初のコンテンツパケット中で返信されることができる。VPR104は、リクエスト元のアプリケーションに応答を返信する前に、実IPアドレスを検索し、最初のパケットを除去する。
別の実装において、あるコンテンツリクエストに対する実IPアドレスは、別のコンテンツリクエストに対するデータと共に返信される。一実施形態において、中間サーバ118、120は、複数のドメイン名とそれらの実IPとの間の一組の対応関係を、コンテンツデータと共に返信する。リストされたIPに対応するドメイン名は、過去に発行されたコンテンツリクエスト、又は将来発行されると予想されるコンテンツリクエストを参照することができる。
例えば、ドメインAからコンテンツへのリクエストを受信した後、中間サーバ118、120は、メインサイトA(サーバに既知の、又はドメインAからのHTML応答を解析することで得られるドメイン)により参照されるドメインに対するDNSリクエストを発行してもよく、そのようなドメインと実IPとの組を、ドメインAからのコンテンツリクエストに対する応答と共に提供してもよい。結果として、VPR104は、未知のドメインへの少量のコンテンツリクエストのみのために中間サーバ118、120を使う必要があり、それにより、パフォーマンスが更に改善される。
VPR104は、応答を受信し、FQDNと実IPアドレスとの対応関係をFQDN_to_r_IP及びr_IP_to_FQDNテーブル中に格納すること等によって、1つのFQDN(又は複数のFQDN)にマッピングされた1つの実IPアドレス(又は複数の実アドレス)を格納1122する。応答は更に、受信1102されたコンテンツリクエストを発行したアプリケーションに、VPR104によって返信されてよい。応答は実IPアドレスを含んでもよく、又は除外してもよい。
同一又は異なるアプリケーションによるその他のコンテンツリクエストに関する方法1100の後続の反復において、FQDNに対する実IPアドレスはステップ1104において発見され、ステップ1108〜1122は省略でき、それによって、後続のコンテンツリクエストに対するレイテンシが低減され、中間サーバ118、120がバイパスされる。
図12を参照すると、図示の方法1200は、本明細書に記載されるように、VPR104を実行してもしなくてよいクライアント装置に対するプロキシサーバとして機能する中間サーバ118により実行されてもよい。方法1200は、中間サーバが後続のDNSリクエストの少なくとも一部を予期することを可能とし、クライアント装置のキャッシュに実IPアドレスを追加することでレイテンシを低減する。
方法1200は、ドメイン名又は実IPアドレスにアドレス指定されるコンテンツに対するリクエストを受信1202することと、その実IPアドレスにアドレス指定されたコンテンツリクエストを送信しその実IPアドレスと関連付けられたサーバからコンテンツリクエストに対する応答を受信すること等によって、そのドメイン名又は実IPアドレスによりアドレス指定されたサーバからリクエストされたコンテンツを検索1204することとを含んでもよい。
方法1200は更に、そのコンテンツに対する関連するドメインを識別1206することを含んでもよい。例えば、検索1204されたコンテンツがウェブページである場合、ウェブページ中のリンクによる参照ドメインが識別1206されてもよい。別の例において、元のドメインリクエストに追随するドメインリクエストの過去の組を観察することによって、関連ドメインのリストを作成することができ、この方法は、中間サーバによって解析できないHTTPSコンテンツに対して用いることができる。方法1200は更に、関連ドメインに対するDNSリクエストを発行1208することと、関連ドメインに対する実IPアドレスを受信1210することとを含んでもよい。方法1200は更に、関連ドメインに対する実IPアドレスを返信することと、コンテンツが受信1204されたクライアント装置に、検索1204されたコンテンツを返信1214することとを含んでもよい。コンテンツリクエストがドメインを含む場合、そのドメインに対する実IPアドレス及び関連ドメインが返信1212されてもよい。実IPアドレス及びコンテンツは、同一又は異なるメッセージ中に含まれてもよい。
実IPアドレスを受信すると、クライアント装置は、後続のコンテンツリクエストを中間サーバ118に送信することなく、IPアドレスに対応するサーバに直接送信されるように、それらをキャッシュしてもよい。例えば、クライアント装置は、関連ドメインと実IPアドレスの間の対応関係をFQDN_to_r_IP及びr_IP_to_FQDNテーブル中に格納してもよい。
方法1200は更に、関連ドメインの1つ以上の実IPアドレスへのTCP接続を、クライアントがこれらのドメインにコンテンツリクエストを送信するのを待たずに、サーバが先制して確立することを含んでよい。
方法1200は更に、サーバが1つ以上の関連ドメイン、例えば、コンテンツリクエストに対してHTTPSプロトコルを使用すると知られているものに対するTLSハンドシェイクを先制して行うことを含んでもよい。これを行うために、サーバは、クライアントによって特定のドメインに対し行われたTLSハンドシェイクから、セッションID又はセッションチケットを取得し、同じドメインに対する別のTLSハンドシェイクを先制して開始するために取得した値を用い、TLS応答をクライアントにその後渡す。クライアントは、TLS応答をキャッシュし、同一のセッションID又はチケットで同一のドメインに対するTLSリクエストを発行した後にそれをアプリケーションに返信することで、更にパフォーマンスを改善させる。サーバは、セッションID又はセッションチケットを、クライアントにより開始されたTLSハンドシェイクを観察することによって、又はそうした値をクライアントから受信することによって、取得でき、TLSセッションID又はセッションチケットのどちらも、クライアントとコンテンツプロバイダにのみ知られるべきである暗号鍵を開示しないので、秘匿される必要はない。
図13は、VPR104をホストしてよい例示的コンピューティング装置1300を説明するブロック図である。中間サーバ118、120も、コンピューティング装置1300の幾つか又は全体の属性を有してよい。コンピューティング装置1300は、例えば本明細書に述べられるような、様々な手順を実行するために用いられてよい。コンピューティング装置1300は、サーバ、クライアント、又はその他の任意のコンピューティングエンティティとして機能できる。コンピューティング装置は本明細書に述べられるような様々な監視機能を実行でき、例えば本明細書に述べられるアプリケーション等の、1つ以上のアプリケーションプログラムを実行できる。コンピューティング装置1300は、、デスクトップコンピュータ、ノートブックコンピュータ、サーバコンピュータ、ハンドヘルドコンピュータ、タブレットコンピュータ等の多様な種類のコンピューティング装置の何れかであってもよい。
コンピューティング装置1300は、1つ以上のプロセッサ1302、1つ以上の記憶装置1304、1つ以上のインターフェース1306、1つ以上の大容量記憶装置1308、1つ以上の入出力(I/O)装置1310、及び表示装置1330を含み、これらの全てはバス1312に結合される。プロセッサ1302は、記憶装置1304及び/又は大容量記憶装置1308に格納された1つ以上の命令を実行するプロセッサ又はコントローラを含む。プロセッサ1302はまた、キャッシュメモリ等の、様々な種類のコンピュータ読み取り可能媒体を含んでもよい。
記憶装置1304は、揮発性メモリ(例えばランダムアクセスメモリ(RAM))及び/又は不揮発性メモリ(例えばリードオンリメモリ(ROM)1316)等の様々なコンピュータ読み取り可能媒体を含む。記憶装置1304はまた、フラッシュメモリ等の書き換え可能なROMを含んでもよい。
大容量記憶装置1308は、磁気テープ、磁気ディスク、光学ディスク、及び固体メモリ(例えばフラッシュメモリ)等の様々なコンピュータ読み取り可能媒体を含む。図13に示されるように、具体的な大容量記憶装置はハードディスクドライブ1324である。様々なドライブがまた、大容量記憶装置1308に含まれてもよく、様々なコンピュータ読み取り可能媒体との間での読み取り/書き込みを可能にしてよい。大容量記憶装置1308は可換型媒体1326及び/又は固定型媒体を含む。
入出力装置1310は、データ及び/又はその他の情報を、コンピューティング装置1300との間で入力又は検索可能にする様々な装置を含む。例示的な入出力装置1310は、カーソル制御装置、キーボード、キーパッド、マイク、モニタ若しくはその他の表示装置、スピーカ、プリンタ、ネットワークインターフェースカード、モデム、レンズ、及びCCD若しくはその他の画像取得装置等を含む。
表示装置1330は、コンピューティング装置1300の1人以上のユーザに、情報を表示できる任意の種類の装置を含む。表示装置1330の例は、モニタ、表示端末、及び映像投影装置等を含む。
インターフェース1306は、コンピューティング装置1300が他のシステム、装置、又はコンピューティング環境と相互作用すること可能にする様々なインターフェースを含む。例示的なインターフェース1306は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、無線ネットワーク、及びインターネット等の任意の数の異なるネットワークインターフェース1320を含む。その他のインターフェースはユーザインターフェース1318及び周辺装置インターフェース1322を含む。インターフェース1306はまた、1つ以上のユーザインターフェース要素1318を含む。インターフェース1306はまた、プリンタ、ポインティング装置(マウス、トラックパッド等)、及びキーボードに対するインタフェース等の1つ以上の周辺インターフェースを含む。
バス1312は、プロセッサ1302、記憶装置1304、インターフェース1306、大容量記憶装置1308、及び入出力装置1310が、バス1312に結合されたその他の装置又はコンポーネントと共に相互に通信することを可能とする。バス1312は、システムバス、PCIバス、IEEE 1394バス、及びUSBバス等の幾つかの種類のバス構成の内の1つ以上を表す。
例示の目的で、プログラム及びその他の実行可能なプログラムコンポーネントは本明細書において個別のブロックとして示されているが、そのようなプログラム及びコンポーネントはコンピューティング装置1300の異なる記憶要素内に、様々なタイミングで存在し、プロセッサ1302により実行されてもよいことが理解される。代替的に、本明細書に述べられるシステム及び手順は、ハードウェア、又はハードウェア、ソフトウェア、及び/若しくはファームウェアの組み合わせにより実行することができる。例えば、1つ以上の特定用途集積回路(ASIC)が、1つ以上の本明細書に述べられるシステム及び手順を実行するようプログラムされることが可能である。