(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0014】
詳細な説明
権威DNSサーバは、ウェブサイトの名前についてのクエリに、そのウェブサイトを指し示すIPアドレスを返すことによって応答する。通常、権威DNSサーバは、IPアドレスは変わっていないと仮定して、所与のウェブサイトに向けられたクエリについて毎回同じIPアドレスを与えるべきである。しかし、権威DNSサーバが所与のドメイン名について問合された際に異なる応答(たとえばIPアドレス)を返すこと、すなわち、権威DNSサーバが同じクエリに異なる回答を与えることが有利になると思われる場合がある(この挙動は一般に「先進的DNSサービス」と呼ばれる)。たとえば、異なるエンドユーザを異なるIPアドレスに向けることをディレクトリレベルでの負荷分散のために使用して、各エンドユーザが最も近いサーバ(たとえば、最低の待ち時間または最短の地理的距離を有するサーバ)によってサービス提供されることを保証するか、もしくは、エイリアス機能性またはCNAME平坦化(別名ALIAS)を提供してDNS規格自体の制限を回避してもよい。同様に、権威DNSサーバがリカーサの地理に依存して異なる他の名前を指し示すCNAMEを返すことが有用であり得る。
【0015】
残念ながら、DNS規格は、同じクエリに異なる応答を提供しない。この制限を回避するために、権威DNSサーバは、たとえば所与のクエリを行なう再帰的サーバのIPアドレスまたは時刻に依存して、当該クエリに異なる応答を提供するように修正されてもよい。それらの応答はまた、複数のサーバにわたって負荷を分散させるために、より大きい集合からランダムに選択されてもよい。典型的には、修正は、登録者によって提供される情報またはアルゴリズムまたはコードに基づく。たとえば、権威DNSサーバは、問題になっているドメインについての所望の挙動を特殊レコードタイプとしてDNSデータ内に格納し、それを修正されたコードに従って返すように修正されてもよい。
【0016】
しかし、これらの修正は概してカスタムであり、また、権威DNSサーバの複雑性に一部起因して貧弱なスケールになる傾向がある。伝統的に、権威DNSサーバは通常、ある使用事例について最適化されているため、カスタム回答を提供するようにそれを修正することはスケーリング問題をしばしばもたらす。それらのスケーリング問題のうちの一例は、インメモリサーバを選択したためにメモリにロードし過ぎることである。メモリにロードすることは、多数のレコードのために不都合に長い時間を要し得る。オーソリテイティブのスケーリングまたは他の特性を、異なるものとの交換によって変更することは、カスタム作業をやり直すこと、およびおそらくは、異なるシステムにおいて異なるバージョンを維持することをしばしばもたらす。また、これらのシステムは複雑であり、維持することが難しい。カスタマイズされた権威DNSサーバを維持することもまた、特にレコードが時間とともに変化する場合、複雑であり得る。
【0017】
本技術は、権威DNSサーバを修正する代わりに、権威DNSサーバに結合されたプロキシサーバを使用して、同じクエリへの異なる応答を生成するやり方を提供する。その結果、プロキシサーバは顧客データまたは先進的サービス仕様を保持する必要がないため、それは、そのデータのスケーリングまたはそれへのアクセスパターンによる影響を受けない。
【0018】
インテリジェントDNS転送のためのシステム
図lは、インテリジェントDNS転送を提供するために、クライアントデバイス120からのDNSクエリを検出し、権威DNSリゾルバ110からの応答を処理するように構成された、DNSプロキシサーバまたはDNSプロキシとも呼ばれるプロキシサーバ130を含む、システム100の図である(図lは、理解を容易にするための簡略バージョンである)。システム100はまた、権威DNSリゾルバ110と、エイリアスリゾルバ135と、ネットワークリソース(メモリ)199とを含む。これらのデバイスとプロキシサーバ130とはDNSエッジ101に位置し、(たとえばインターネットを介して)トランス170に動作可能に結合されており、トランス170は次に、ポリシーマスタ160およびポリシーコンパイラ150に結合される。
【0019】
当業者には容易に理解されるように、プロキシサーバ130、権威サーバ110、再帰的リゾルバ135、ポリシーコンパイラ150、ポリシーマスタ160、およびトランス170は各々、コンピュータ読取可能不揮発性メモリに格納され、プロセッサによって実行される、コンピュータ実行可能コードとして実現され得る。それらは、好適なハードウェアおよび接続を使用して、要望通り配列または分散され得る。同様に、ネットワークリソース199は、プロキシサーバ130およびトランス170に通信可能に結合された任意の好適なタイプのコンピュータ読取可能不揮発性メモリとして実現され得る。
【0020】
以下により詳細に説明されるように、顧客140は、従来のシステムと全く同様に、そのドメイン名についてのDNSレコードを権威DNSリゾルバ110を用いて構成する。これらのドメイン名は、コンテンツ配信ネットワーク(content delivery network:CDN)などの1つ以上の顧客アセット145a〜145c(まとめて顧客アセット145)に関連付けられてもよく、それらは各々、異なるIPアドレスを有しており、所与のドメイン名に対応するIPアドレスとして解決され得る。顧客140は、ユーザ121からのドメイン名クエリに応答して、これらのIPアドレスにトラフィックを向けるための1つ以上のダイナミックステアリングポリシーを設定する。たとえば、顧客140は、エンドユーザ121からの所与のDNSクエリに応答して、どのIPアドレスを供給するかを判断するための待ち時間、可用性、地理的位置、および他の基準を特定するために、ウェブベースのインターフェイスを使用してもよい。ネットワークリソース199は、インテリジェントDNS転送におけるプロキシサーバ130による使用のために、これらの基準に対応するリンクデータ180、サブネットデータ190、および/またはアセットデータ195を格納してもよい(リンクデータ180およびサブネットデータ190はまた、プロキシ130に対してローカルであるメモリデータ構造に格納され得る)。より一般的には、ダイナミックステアリングポリシーは、顧客のドメイン名のうちの1つについてのDNSクエリに応答してIPアドレスを供給するための、顧客140からの、およびおそらくはエンドユーザ121からの基準、データ、および規則を含む。
【0021】
ポリシーマスタ160は、顧客140からのダイナミックステアリングポリシーを、たとえば正式のコンピュータ言語で書かれた1つ以上の関数として格納する。ポリシーマスタ160は、これらの関数を含むプログラムを、ポリシーコンパイラ150を用いて生成する。ポリシーコンパイラ150は、ダイナミックステアリングポリシーを含む関数がプロキシサーバ130によって解釈され得るようにこれらのプログラムを構築するように構成された、単純な実行可能ラッパーとして実現され得る。ポリシーマスタ160は、
図1に示すように、(たとえば、要求リソース署名(RRSIG)レコードにおけるプログラムとしての)先進的サービスの顧客構成を権威DNSリゾルバ110に供給してもよい。
【0022】
ポリシーマスタ160からのダイナミックステアリングポリシーと、リンクデータ180、サブネットデータ190、およびアセットデータ195などの添付データとは、トランス170を介してネットワークリソース199に送信される。トランス170は、動的データ(たとえば、リンクデータ180、サブネットデータ190、アセットデータ195など)をエッジ101に伝播する。トランス170は、さまざまなチャネルにおけるイベントをリッスンし、それらを、「192.0.2.0/24におけるリゾルバの背後からExampleCDNまでの平均待ち時間は42ミリ秒です」、または「198.51.100.0/24はフランスにあります」、または「webserver2.example.comはダウンしています」といった宣言的情報になるよう処理することによって、そのデータを得る。
【0023】
よって、ネットワークリソース199は、顧客140によって提供されたデータ、または、DNSクエリへの応答を判断するために使用される待ち時間、健全性、地理的位置、可用性、および他の基準に関して取得されたデータを格納する。たとえば、リンクデータ180は、権威DNSリゾルバ110によって(たとえば5分ごとに)集計され得る、加工された(cooked)待ち時間パフォーマンスデータを格納する。サブネットデータ190は、顧客アセット145ごとに、およびおそらくはクライアント120ごとに、地理的位置データを格納する。アセットデータ195は、IPアドレスの健全性といった可用性データを含む。
【0024】
動作時、プロキシサーバ130は、顧客140によって定義され、とりわけリンクデータ180、サブネットデータ190、および/またはアセットデータ195に基づいたポリシーを使用して、クライアント120を適切な顧客アセット145a、145bまたは145cへ導く。プロキシサーバ130は、クライアント120からDNSサーバ110についてのクエリを受信し、それらがDNSSEC情報などのメタデータについての要求を含むかどうかを確かめるためにそれらを検査する。クエリがDNSSEC情報についての要求を含む場合、プロキシサーバ130はクエリを権威DNSサーバ110へ渡し、含んでいない場合、プロキシサーバ130は、権威DNSサーバ110からDNSSEC情報を検索するために、クエリにおいてDNSSEC OK(DO)フラグを設定する。権威DNSサーバ110は、DNS規格に従ってプロキシサーバ130に応答する。プロキシサーバ130は、DNSSEC情報、元のクエリ、クエリソース(IPアドレス)、時刻などに基づいて権威DNSサーバ110からの応答を修正し、次に、修正された応答を、要求を行なった再帰的DNSサーバに送信する。
【0025】
プロキシサーバ130は、クライアント120によって要求されていないDNSSEC関連RRなどのメタデータを検索するかもしれないため、要求されなかった場合、それは応答からメタデータを除去する。関連して、そのDOフラグはOPTと呼ばれるレコードの内部にあり、いくつかのクライアントはそれも要求せず、その場合、それも同様に除去される。より一般的には、クライアントクエリへの修正は、それらの結果を逆にしてからクライアントに返す。さまざまな状況で使用される修正は、(1)OPTレコードが存在しない場合、OPTレコードを追加すること;(2)DOが設定されていない場合、DOを設定すること;および(3)クライアントソースIPアドレスを有するクライアントサブネットオプションを追加すること、を含む。プロキシサーバはまた、レガシーインフラストラクチャからの移行をよりシームレスにするようにクライアントソースIPを渡すために、EDNS0プロキシオプション(EDNS0 Proxy Option:EPO)と呼ばれるカスタムオプションを追加することができる。修正された権威DNSサーバと連携する場合、EPOは有用である。これらすべてのうち、OPTおよびDO部分のみが、RRSIGアプローチにとって必須である。
【0026】
いくつかの実現化例では、プロキシサーバ130は、権威DNSサーバ110上のDNSSECレコードに格納された要求リソース署名(RRSIG)と呼ばれる暗号署名情報に従って、権威DNSサーバ110からの応答を修正する。プロキシサーバ130は、RRSIGと、クエリソースのIPアドレスなどのクエリにおいて符号化された情報との双方を使用して、クエリへの応答を修正するかどうか、およびクエリへの応答をどのように修正するかを判断する。いくつかの点では、このアプローチは、権威DNSサーバ110をRRSIG用の「メモリ」として扱うことを伴う。プロキシサーバ130はDNSSECレコードを返すようにクエリを修正するため、プロキシサーバ130はRRSIGについて別個の要求を行なう必要はない。そして、クエリ応答を修正するためのこの手法は余分のクエリを伴なわないため、それは、RRSIGについて別個のクエリを行なう場合よりも、権威DNSサーバ110にかかる処理負担を小さくする。すなわち、権威DNSサーバ110は、プロキシサーバ130からの(場合によっては修正された)単一の要求を、それが2つの別個の要求を処理し得る場合よりも効率的に処理することができる。
【0027】
にもかかわらず、DNSクエリへの応答を修正するためにプロキシサーバ130を使用しない明白な理由がいくつかある。プロキシサーバ130を追加することは余分なレイヤーをネットワークに追加し、それは待ち時間、コスト、および複雑性を増加させる。プロキシサーバ130を使用することはまた、ネットワークトラフィックの量を倍にする。しかし、修正された権威DNSサーバ110を使用することとは異なり、プロキシサーバ130を使用することは、ルーチンDNSサービスを提供する機能性から先進的DNS機能性を分離する。それは、それらの機能性をともに混合することとは対照的である。プロキシサーバ130を使用することはまた、先進的DNS機能性を提供するためのフレキシビリティを高める。そして、プロキシサーバは機能開発のために構築可能であるため、プロキシサーバにおいて新機能を実現することがより容易でより迅速であるかもしれない。プロキシサーバ130はまた、プロキシサーバ自体への、または権威DNSサーバへの更新を行なうことなく、多くの新機能がリリースされ得ることを十分に一般化する言語を使用できる。それはまた、すでに構築されたかもしれない大抵のDNSSEC対応の権威DNSシステムに、修正をほとんど加えることなく、先進的機能をオーバーレイすることを実用的にする。
【0028】
権威DNSサーバ110とともにプロキシサーバ130を使用することはまた、サーバ間の一貫性を維持することを単純化する。いくつかのプロキシサーバ130は、たとえばウェブサイト用の構成データを保持するが、この構成データは、実際のコンテンツサーバ上の構成データと慎重に同期されなければならない。所望の先進的機能挙動とデータとの双方を同じゾーンに保持することは、これらが標準的なゾーン更新メカニズムを使用して同期したまま保持されることを可能にする。これが、全く別のアプローチではなく、カスタムRRタイプが一般に使用される理由である。なぜなら、別個のデータベースが先進的機能を包含し得るものの、それを同期したまま保持することは問題になるためである。ここに開示されるプロキシアプローチは、実現部を分離しつつ、このゾーン内特性を保っており、それはかなりまれである。
【0029】
プロキシサーバ130が権威DNSサーバ110に結合された状態では、オープンソースまたは内部で開発された権威サーバの実装への変化を維持する必要はない。プロキシサーバ130を使用することはまた、各権威DNSサーバ内で機能を再開発することなく、異なる権威DNSサーバ実現を使用するためのフレキシビリティを提供する。そのフレキシビリティは、機能群(feature set)が、非常に異なるパフォーマンス特性およびスケーリング特性を有するデプロイメントにおいて使用されることを可能にする。現在、異なる権威サーバ実現を使用してこれらの異なるマーケットにサービス提供するシステムが複数ある。これらのシステムのうちの一部のみが先進的機能を提供してもよく、残りは、非常に多くの(たとえば何百万もの)ゾーンが存在し、パフォーマンスがそれほど敏感ではない、バルクホスティングマーケットなどのマーケットに対処する。
【0030】
次に、これらのシステムのすべてが先進的機能を提供してもよい。たとえば、企業DNSは概してパフォーマンスに敏感であり、一方、バルクDNSは、アクセス頻度が低い非常に多くのゾーンへのスケーリングにより関与する傾向がある。それらの異なるアクセスパターンは、異なる権威DNSサーバによってより良好にサービス提供され得る。加えて、オペレータは、自分のネットワークをよりレジリエントにするために、2つ以上の権威DNSサーバ実現を使用したいかもしれず、それは本来なら、先進的機能が2つの異なる実現に行なわれるのをサポートするための修正を要求するかもしれない。
【0031】
インテリジェントDNS転送のためのプロキシサーバ
図2は、DNSサーバ210(たとえば、権威DNSサーバ、またはバックエンド再帰的DNSサーバ)の前に位置するDNSプロキシサーバ230を示す。動作時、それは、クライアント220(たとえば再帰的サーバ)から転送制御プロトコル(Transmission Control Protocol:TCP)207およびユーザデータグラムプロトコル(User Datagram Protocol:UDP)205のDNSクエリ(たとえば、DNSクエリ233aおよび233b)を受入れ、DNSクエリ(たとえば、233cおよび233d)をDNSサーバ210へ発行する。DNSプロキシサーバ230は、クライアントのクエリへのさまざまな動的応答を一般的なやり方で提供するために、それらの動的応答に関する構成を必ずしも格納することなく、権威DNSサーバ210からの応答に埋込まれた命令を解釈して、同期の懸念を減少させるかまたは排除する。それは、権威DNSサーバからの応答を必ずしもキャッシュに入れず、また、優れたパフォーマンスまたは正しい挙動について必ずしもキャッシュに依存しない。
【0032】
より具体的には、DNSプロキシサーバ230は、クライアント220からのクエリ233aおよび/または233bを(何らかの軽微な修正を加えて)DNSサーバ210へ渡し、返答を待つ。DNSプロキシサーバ230は、クエリ233を取扱う(それらを修正し、それらを権威または再帰的サーバ210へ送信し、結果を処理し、クライアント220に応答する)ための1つ以上のクエリ処理ワーカ232を含む。実際には、プロキシサーバ230は、均一のワーカ232の大きい集合を保持し、クエリが到着するとそれらにクエリ233を手渡してもよく、各ワーカ232は一度に1つのクエリ233に専念する。応答が送信されるやいなや、ワーカ232は、次のクエリ232に対する準備ができている。
【0033】
TCPバックエンド236における1つ以上のTCPクライアント234は、ワーカ232からサーバ210への、および反対方向のメッセージを、同様の一度に1つの態様で調整するが、効率のためにサーバ210への持続接続を維持することができる。各TCPバックエンド236は、同じサーバ210専用のTCPクライアント234のプールである。多くの別個のサーバ210があってもよく、それらの各々は、TCPクライアント234のプールを有する対応するTCPバックエンド236を有する。
【0034】
DNSサーバ230からの返答(たとえば、237aおよび237b)は、クエリについての回答レコードを包含していてもよく、オプションで1つ以上のRRSIGレコードも包含していてもよい。その挙動は、どのDNSSEC準拠DNSサーバにも存在し、RRSIGレコードの意図された用途と矛盾しない。RRSIGレコードは、標準化されたカスタム暗号化タイプを使用するものを含んでいてもよく、それは次に、特定の所有者まで追跡可能であり、ひいては一意的である名前によって明確にされる。
【0035】
その名前の後に、RRSIGレコードは、所望の挙動を作り出すためにより小さい関数をともに構成するのに十分精巧な言語で書かれた埋込まれたプログラムを含む任意のデータを担持していてもよい。それはまた、プログラムで命名されている各機能の劣化ケースなどの挙動/機能ごとに特定のRRタイプを使用することができる。たとえば、劣化ケースは、人間が読める形で、Alias(“domain.com”)として表現されてもよい。および、より多くの原始関数(非常に近似的)を構成するより精巧な表現:ReplaceRR(Qname(), Qtype(), LookupRecursive("domain.com"))として表現されてもよい。それは、適切なRRSIGレコードをゾーンに追加することによって権威メモリに入れられる。
【0036】
DNSプロキシサーバ230は埋込まれたプログラムを監視し、それを実行して、クライアント220の元のクエリへの修正された応答を生成する。DNSプロキシサーバ230がクライアント220にどの応答を送信すべきか判断する過程で、DNSプロキシサーバ230は、DNSまたは他のプロトコルを使用して他のシステムへの追加のクエリを発行してもよく、または他のローカルデータを調べてもよい。最後に、プロキシサーバ230は、結果(たとえば、237cおよび/または237d)をクライアント220に返す。
【0037】
最も一般的な場合、RRSIGレコードにはプログラムが埋込まれておらず、そのため、DNSプロキシサーバ230は、たった1つのクエリを権威DNSサーバ210へ渡すことによって、クライアントのクエリへの応答を生成することができる。反対に、カスタムタイプにプログラムを埋込むことは、2つのクエリを必要とするであろう。一方のクエリは、プログラムがあるかどうかをカスタムタイプが確かめるためのものであり、もう一方のクエリは、要求されたデータのためのものである。RRSIG実現のために、DNSプロキシサーバ230は、アプリケーション特有の挙動が実現されることに依存して、最初のクエリを超えた追加のクエリを行なってもよい。
【0038】
ポリシーマスタおよびポリシーコンパイラ
ポリシーマスタは、顧客からのダイナミックステアリングポリシーおよび添付データを格納することを担当する。ポリシーマスタは、ポリシーコンパイラを用いてプログラムを生成し、ポリシーコンパイラは、プロキシサーバによって解釈され得るプログラムを構築するように構成された単純な実行可能ラッパとして実現され得る。ポリシーコンパイラは、プログラムを構築するように構成された関数を提供する。ポリシーコンパイラに追加されるいくつかの例示的な関数は、DNSクエリに応答して供給され得る可能なすべてのIPアドレスの中からIPアドレスを選択するためのフィルタ関数およびソーティング関数を含む。
【0039】
一実現化例では、ポリシーコンパイラは、最終応答に入るかもしれないリソースレコードのリストを得るBuildResponse関数と、レコードのリストをソートすることおよび/または減少させることによって当該リストを変更することができる規則関数とを含む。そのような関数は、ソーティングまたはフィルタリングを行なうための引数に加えて、規則関数も得る。このように、1つのポリシーに複数の規則を適用することができる。適用される必要がある一連の規則を終了するために、特殊関数Endを使用することができる。規則をすべて適用した後で、BuildResponse関数は、レコードの(減少した)リストをシャッフルしてDNS応答を構築することができる。BuildResponseプログラムの一例は、以下の通りである:
【0041】
この例では、Available、Performance、およびPriorityは、ソーティングおよびフィルタリングを行なうための規則である。これらの規則を以下にさらに説明する。
【0042】
関数Available [av1, av2, ...]は、各要素が提案されたリソースレコードのリストにおけるリソースレコードindexをアセット識別子にマッピングするアセットマッピングのリストに基づいて、リソースレコードのリストをフィルタリングすることができる。アセット識別子は、ネットワークリソースから可用性データをルックアップするために使用され得る。利用できないアセットに対応するレコードは、リストから除去される。そのため、以下の例における"0:asset9998"は、アセット"asset9998"についての可用性をルックアップし、そのアセットが利用できないとマークされている場合にリソースレコード"rr0"を取り除く、ということを意味する。この規則はリストを空のままにせず、すべてのレコードが除去された場合、フィルタリングは行なわれない。
例:
【0044】
関数Performance [lp1, lp2, ...]タイプは、各要素が提案されたリソースレコードのリストにおけるリソースレコードindexをアセット識別子にマッピングするアセットマッピングのリストに基づいて、リソースレコードのリストをフィルタリングすることができる。アセット識別子は、リンクの待ち時間データをルックアップするために使用され得る。待ち時間データがないアセットは、最大の待ち時間を有すると考えられる。長い待ち時間を有するアセットに対応するレコードは、リストから除去される。そのため、以下の例における"1:asset1001"は、アセット"asset1001"についてのリンクパフォーマンスデータをルックアップし、そのアセットが有する待ち時間が長すぎる場合にリソースレコード"rr1"を取り除く、ということを意味する。この規則はリストを空のままにせず、すべてのレコードが除去された場合、フィルタリングは行なわれない。
【0045】
このタイプの引数は、リンクパフォーマンスフィルタリングがどのように適用されるかを定義する。それは、リンクパフォーマンスフィルタオプションへの非負整数値Nのマッピングであると定義される。これらのオプションは、以下のものを含んでいてもよい:
・"count":最低の待ち時間を有する最大でN個のアセットを返す。どのレコードにも待ち時間データがない場合を除き、待ち時間データがないレコードは含まれないであろう;
・"absolute":最低の待ち時間を有するアセットと、Nミリ秒以内の待ち時間を有するすべてのアセットとを返す;
・"relative":最低の待ち時間を有するアセットと、所与のレベルのNパーセント以内の待ち時間を有するすべてのアセットとを返す。
【0047】
関数Priority [pf1, pf2, ...]は、各要素が提案されたリソースレコードのリストにおけるリソースレコードindexを優先順位にマッピングする優先度マッピングの所与のリストに基づいて、リソースレコードのリストをソートすることができる。そのため、以下の例における"0:20"および"1:10"は、"rr1"が"rr0"よりも好まれるということを意味する。レコードが同じ順位を有する(同点である)場合、プロキシサーバは順序をランダムに定めることができる。優先度が割当てられていないレコードは、無限の優先度を与えられるであろう。空のリストは、優先度がなく、最終応答がシャッフルされるであろうということを意味する。順位は、16ビットの符号なし整数等価物(16-bit unsigned integer equivalent:uint16)として特定される。
【0049】
規則の他の例は、リソースレコードのリストをランダムにシャッフルするためのBias、リソースレコードのリストを制限するためのMax num、および特定のリソースレコードを除去するためのRejectなどの関数を含み得る。規則に加えて、条件付きの状態でプログラムを設定する、BuildResponseとEndとの間の関数がある場合がある。プログラムが条件付きの状態にある場合、規則関数は、規則を適用すべきか否かを判断するために条件付きの状態を評価するであろう。いくつかの例は、Switch、Case、Default、およびEndSwitchを含む。
【0050】
プロキシサーバを使用するDNS転送
図3は、プロキシサーバを使用してインテリジェントDNS転送を提供するためのプロセス300を示すフロー図である。このプロセス300は、
図1に示すシステム100、もしくは、
図2のプロキシサーバ130などのプロキシサーバを含む任意の他の好適なシステムまたはネットワークを使用して実現され得る。プロセス300は、インテリジェントDNS転送を提供するために、クライアントデバイスからのDNSクエリを検出し、権威DNSサーバからの応答を処理することを伴う。
【0051】
クライアントデバイスがドメインへのアクセスを試みると、ステップ310で、それはDNSクエリをDNSプロキシに送信する。ステップ320で、DNSプロキシはDNSクエリを分析して、DNSクエリがメタデータについての要求を含むかどうかを判断する。一実現化例では、DNSプロキシはDNSクエリを検査して、DNSクエリがDNSSEC情報またはOPTレコードなどのメタデータについての要求を含むかどうかを判断する。DNSクエリがメタデータについての要求(たとえば、DNSSEC情報についての要求)を含む場合、ステップ330で、DNSプロキシはDNSクエリを権威DNSサーバへ渡す。DNSクエリがメタデータについての要求を含んでいない場合、ステップ340で、DNSクエリはメタデータについての要求を含むように更新される。一実現化例では、DNSプロキシは、権威DNSサーバからDNSSEC情報を検索するために、DNSクエリにおいてDNSSEC OK(DO)フラグを設定する。別の実現化例では、DNSプロキシは、権威DNSサーバからOPTレコードを検索するために、OPTレコードDO=1を設定する。ステップ330で、DNSプロキシは、更新されたDNSクエリを権威DNSサーバへ渡す。
【0052】
ステップ350で、DNSプロキシは、権威DNSサーバからの応答がメタデータを含むかどうかを判断する。一実現化例では、DNSプロキシは、応答がメタデータ、たとえば、DNSSECレコードに格納されたRRSIGを含むかどうかを判断する。別の実現化例では、DNSプロキシは、応答がOPTレコードを含むかどうかを判断する。権威DNSサーバからの応答がメタデータを含んでいない場合、ステップ360で、権威DNSサーバからのDNS応答メッセージがクライアントデバイスに送信される。すなわち、プロキシサーバは、権威DNSサーバからのドメイン名に対応する1つ以上のIPアドレスを有するDNSレコードを検索し、それをクライアントデバイスに送信する。しかしながら、権威DNSサーバからの応答がメタデータ(たとえばRRSIG)を含む場合、DNSプロキシはメタデータをさらに処理して、権威DNSサーバからのIPアドレスのうちの1つを含む修正された応答を生成する。ステップ370で、プロキシサーバによって生成されたこの修正された応答が、クライアントデバイスに送信される。
【0053】
図4は、プロキシサーバで権威DNSサーバからのメタデータを処理する方法400を示すフロー図である。ステップ410で、DNSプロキシは、権威DNSサーバからの応答を受信する。この応答は、メタデータと、1つ以上のIPアドレスとを含む。ステップ420で、DNSプロキシは、メタデータに埋込まれた1つ以上のプログラムを処理する。メタデータに埋込まれたプログラムは、ドメイン名に関連付けられた最適なIPアドレスを判断するためのダイナミックステアリングポリシーおよび規則を定義する。一実現化例では、DNSプロキシは、RRSIGに埋込まれた1つ以上の関数を処理する。ステップ430で、DNSプロキシは、メタデータにおける埋込まれた規則および関数に基づいてネットワークリソースをルックアップする。一実現化例では、DNSプロキシは、RRSIGにおける埋込まれたプログラムを実行し、RRSIGにおける規則に依存して、DNSプロキシは、リンクデータ、サブネットデータ、およびアセットデータなどのネットワークリソースをルックアップする。リンクデータ、サブネットデータ、およびアセットデータは、待ち時間、パフォーマンス、健全性についての情報、ならびにコンテンツIPアドレスおよびクライアントIPアドレスに関する他の情報を含む。
【0054】
ステップ430で、ドメイン名に関連付けられた1つの最適なIPアドレスを判断するために、ネットワークリソースからのデータは並べ替えられ、ソートされ、フィルタリングされる。たとえば、クライアントデバイスからコンテンツ配信ネットワークまでの経路が、それらの待ち時間に基づいてソートされてもよく、IPオリジンが、それらの健全性に基づいてソートされ、並べ替えられてもよい。このように、権威サーバからのDNS応答は、DNSプロキシによって生成された最適な回答を含むように修正される。修正されたDNS応答メッセージは、クライアントデバイスに送信される。クライアントデバイスからのDNSクエリがメタデータについての要求を含まなかった場合、修正されたDNS応答メッセージにおけるメタデータは、それがクライアントデバイスに送信される前に除去され得る。
【0055】
図5は、プロキシサーバ530によるインテリジェントDNS転送のより具体的な一例を示す。プロキシサーバ530は、
図1に示すプロキシサーバ130および
図2に示すプロキシサーバ230と機能的に同じとは言えないまでも似ている。クライアントデバイス520は、DNSクエリ512を権威DNSサーバ510に送信することによってドメイン名へのアクセスを試みる。プロキシサーバ530はDNSクエリ512を受入れ、DNSクエリ512が、応答に含まれるべきメタデータについての要求を含むかどうかを判断する。DNSクエリ512がこの要求を含んでいないと判断すると、クエリ512は、メタデータについての要求を反映するように更新される。更新されたDNS要求516は、ドメイン名についてのDNSレコードを検索するために、DNS権威サーバ510に送信される。DNS権威サーバ510が要求されたドメインについてのメタデータを含んでいない場合、DNS権威サーバ510は、プログラムなし応答518をプロキシサーバ530に送信する。プログラムなし応答518は、メタデータがないドメイン名のためのターゲットIPアドレスである。522で、プロキシサーバ530は、このプログラムなし応答518をクライアントにマッピングする。そして524で、プロキシサーバ530は、ドメインのAまたはAAAA(IPv4またはIPv6アドレス)をクライアントデバイス520に返す。
【0056】
権威DNSサーバ510が要求されたドメインについてのメタデータを含む場合、権威DNSサーバ510は、ドメイン526aに関するIPアドレスを含むDNSレコードを、要求されたメタデータ526bとともに、プロキシサーバ530に提供する。526aにおける"
example.com. A 0.0.0.0"は、526bにおける動的処理命令によって閉塞されるであろう「ダミーの」回答である。RRSIGレコードの基本特性は、それらがbaseデータを増大させるメタデータであるということである。
図5のこの局面は、回答データは、オーバーライドメタデータを伴うためにプロキシ530によって無視されても、オーソリテイティブ510からの応答の中に存在する、ということを示す。
【0057】
メタデータは、所望の挙動を作り出すための1つ以上の埋込まれたプログラムを含む。プロキシサーバ530は、メタデータ526bにおける埋込まれたプログラムを実行し、修正された応答を生成するためのインタープリタを含む。処理中、プロキシサーバ530は、待ち時間、パフォーマンス、健全性、または他のそのような基準に関する情報を得るために、サブネットデータ590および/またはリンクデータ580をルックアップする。サブネットデータ590およびリンクデータ580は、ルックアップ要求(たとえば528および536)に基づいて回答(たとえば532および538)をプロキシサーバ530に提供するネットワークリソースである。プロキシサーバ530は、これらの回答に基づいてIPアドレスのリストを並べ替え、フィルタリングし、減少させて、1つの最適なIPアドレスを判断する。回答はクライアントにマッピングされ、修正されたDNS応答メッセージ546がクライアント320に送信される。クライアント320からのDNSクエリがメタデータについての要求を包含していなかった場合、プロキシサーバ530はDNS応答メッセージからメタデータを除去し、IPアドレスのみを有する修正されたDNS応答メッセージ546をクライアントデバイス320に送信する。
【0058】
この例では、IPアドレス203.0.113.1を有するクライアントデバイス320が、ドメイン“example.com A”へのアクセスを試みる。“example.com A”へのアクセスを要求するDNSクエリ512が、プロキシサーバ530に送信される。DNSクエリ512はメタデータについての要求を含んでいないため、すなわち、DNSクエリはDNSSECレコードについての要求を含んでいないため、クエリ512は514でDNSSEC DOフラグを設定することによって更新される。更新された要求516が、権威DNSサーバ510に送信される。第1のシナリオでは、権威DNSサーバ510が“example.com”についてのメタデータを含んでいないと仮定して、権威DNSサーバ510は、ドメインに対応するCDNのIPアドレス(たとえばexample.com A 192.0.2.1)を有するプログラムなし応答518を返す。プログラムなし応答518はクライアントにマッピングされ、IPアドレス(example.com A 192.0.2.1)524はクライアントに送信される。
【0059】
第2のシナリオでは、権威DNSサーバ510がメタデータを含むと仮定して、権威DNSサーバ510は、DNSSECレコードに格納されたRRSIG526bをプロキシサーバ530に提供する。プロキシサーバ530は、RRSIGに含まれる"BuildResponse"関数を実行する。"BuildResponse"関数は、ドメインについてのダイナミックステアリングポリシーを格納するために1人以上の顧客によってポリシーマスタに追加された規則関数である。この例では、"BuildResponse"関数は、地理的位置データ(ジオデータ)および待ち時間についての引数を含む。534で、プロキシサーバ530は、ルックアップ要求528をサブネットに送信することによって、クライアント320についてのジオデータをルックアップする。サブネットは532で、クライアントについてのジオデータ(dyngeo=UK)を返す。プロキシサーバ530はジオデータを分析して、RRSIGにおけるジオデータがクライアントジオデータと整合するかどうかを判断する。プロキシサーバ530は次に、待ち時間ルックアップ要求536をリンクデータ580に送信することによって、RRSIGにおいて列挙されたコンテンツ配信ネットワーク(CDN)([0:cdnl, 1:cdn2])についてのパフォーマンスデータをルックアップする。リンクデータ580は、cdn1およびcdn2についての待ち時間を返す。この例では、cdn1についての待ち時間はcdn1について180ミリ秒、cdn2についての待ち時間は142ミリ秒である。542でパフォーマンスフィルタ関数を適用することにより、プロキシサーバ530は長い待ち時間レコードを取り除き、それによって回答をcdn2に減少させる。544で、プロキシサーバ530は応答をクライアントにマッピングし、次に、cdn2のIPアドレス(example.com a 198.51.100.1)を含むDNS応答メッセージ546をクライアント320に送信する。
【0060】
正規名(CNAME)レコードを使用するインテリジェントなデータなしDNS転送
先進的DNSサービスにはまた、権威DNSサーバからの正規名(Canonical Name:CNAME)応答のターゲット名における命令を探すプロキシサーバも提供され得る。当業者であれば理解するように、CNAMEレコードは、あるドメイン名が、別のドメイン名、すなわち「正規」ドメイン用のエイリアスであるということを特定する。正規ドメインは、サブドメイン、IPアドレスなどを含む、別のドメインについてのすべての情報を定義する。
【0061】
結論
さまざまな本発明の実施形態がここに説明され例示されてきたが、当業者であれば、ここに説明された機能を行なうための、ならびに/もしくは、結果および/または利点の1つ以上を得るためのさまざまな他の手段および/または構造を容易に思い描くであろう。また、そのような変形および/または修正の各々は、ここに説明された本発明の実施形態の範囲内にあると考えられる。より一般的には、ここに説明されたすべてのパラメータ、寸法、材料、および構成は例示的であるよう意図されていること、ならびに、実際のパラメータ、寸法、材料、および/または構成は本発明の教示が用いられる特定の用途に依存するであろうということを、当業者であれば容易に理解するであろう。当業者であれば、ここに説明された具体的な本発明の実施形態の多くの均等物を認識し、または日常の実験のみを用いて確かめることができるであろう。したがって、前述の実施形態は単なる例として提示されていること、ならびに、添付された請求項およびその均等物の範囲内で、本発明の実施形態は、具体的に説明され請求されたもの以外の態様で実践され得ることが理解されるべきである。本開示の発明の実施形態は、ここに説明された個々の特徴、システム、物品、材料、キット、および/または方法に向けられている。加えて、2つ以上のそのような特徴、システム、物品、材料、キット、および/または方法の任意の組合せは、そのような特徴、システム、物品、材料、キット、および/または方法が互いに矛盾しない場合、本開示の発明の範囲内に含まれる。
【0062】
上述の実施形態は、多くのやり方のうちのいずれでも実現され得る。たとえば、ここに開示された技術を設計し構築する実施形態は、ハードウェア、ソフトウェア、またはそれらの組合せを使用して実現されてもよい。ソフトウェアで実現される場合、ソフトウェアコードは、単一のコンピュータにおいて提供されようと、複数のコンピュータ中に分散されようと、任意の好適なプロセッサまたはプロセッサの集合上で実行され得る。
【0063】
また、コンピュータは、ラックマウント型コンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、またはタブレットコンピュータといった多くの形態のうちのいずれで具体化されてもよい、ということが理解されるべきである。加えて、コンピュータは、携帯情報端末(PDA)、スマートフォン、もしくは任意の他の好適な携帯または固定電子デバイスを含む、コンピュータとは通常見なされないものの好適な処理能力を有するデバイスに埋込まれてもよい。
【0064】
また、コンピュータは、1つ以上の入力および出力デバイスを有していてもよい。これらのデバイスはとりわけ、ユーザインターフェイスを提示するために使用され得る。ユーザインターフェイスを提供するために使用され得る出力デバイスの例は、出力の視覚表現のためのプリンタまたはディスプレイスクリーンと、出力の可聴表現のためのスピーカまたは他の音声生成デバイスとを含む。ユーザインターフェイスのために使用され得る入力デバイスの例は、キーボードと、マウス、タッチパッド、およびデジタル化タブレットなどのポインティングデバイスとを含む。別の例として、コンピュータは、音声認識を通して、または他の可聴フォーマットで入力情報を受信してもよい。
【0065】
そのようなコンピュータは、ローカルエリアネットワーク、またはワイドエリアネットワーク、たとえば企業ネットワーク、インテリジェントネットワーク(intelligent network:IN)、またはインターネットを含む1つ以上のネットワークによって、任意の好適な形態で相互接続されてもよい。そのようなネットワークは、任意の好適な技術に基づいていてもよく、任意の好適なプロトコルに従って動作してもよく、無線ネットワーク、有線ネットワーク、または光ファイバーネットワークを含んでいてもよい。
【0066】
ここに概説された。(たとえば上に開示された技術を設計し構築する)さまざまな方法またはプロセスは、さまざまなオペレーティングシステムまたはプラットフォームのうちのいずれか1つを採用する1つ以上のプロセッサ上で実行可能なソフトウェアとして符号化されてもよい。加えて、そのようなソフトウェアは、数々の好適なプログラミング言語および/またはプログラミングツールまたはスクリプト作成ツールのうちのいずれかを使用して書かれてもよく、フレームワークまたは仮想マシン上で実行される実行可能な機械語コードまたは中間コードとしてコンパイルされてもよい。
【0067】
この点で、さまざまな本発明の概念は、1つ以上のコンピュータまたは他のプロセッサ上で実行されると上述の本発明のさまざまな実施形態を実現する方法を行なう1つ以上のプログラムを用いて符号化されたコンピュータ読取可能記憶媒体(または複数のコンピュータ読取可能記憶媒体)(たとえば、コンピュータメモリ、1つ以上のフロッピー(登録商標)ディスク、コンパクトディスク、光ディスク、磁気テープ、フラッシュメモリ、フィールドプログラマブルゲートアレイまたは他の半導体装置における回路構成、もしくは他の非一時的媒体または有形コンピュータ記憶媒体)として具現されてもよい。コンピュータ読取可能媒体は、そこに格納されたプログラムが、上述のような本発明のさまざまな局面を実現するために1つ以上の異なるコンピュータまたは他のプロセッサにロードされ得るように、運搬可能であってもよい。
【0068】
「プログラム」または「ソフトウェア」という用語は、上述のような実施形態のさまざまな局面を実現するようにコンピュータまたは他のプロセッサをプログラムするために採用され得る任意のタイプのコンピュータコード、またはコンピュータ実行可能命令の集合を指すよう、包括的な意味でここに使用される。加えて、一局面によれば、実行されると本発明の方法を行なう1つ以上のコンピュータプログラムは、本発明のさまざまな局面を実現するために、単一のコンピュータまたはプロセッサ上に存在する必要はなく、数々の異なるコンピュータまたはプロセッサ中にモジュール式に分散されてもよい、ということが理解されるべきである。
【0069】
コンピュータ実行可能命令は、1つ以上のコンピュータまたは他のデバイスによって実行されるプログラムモジュールといった多くの形態を取ってもよい。一般に、プログラムモジュールは、特定のタスクを行なうかまたは特定の抽象データ型を実現するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。典型的には、プログラムモジュールの機能性は、さまざまな実施形態において所望されるように組合され、または分散されてもよい。
【0070】
また、データ構造は、任意の好適な形態でコンピュータ読取可能媒体に格納されてもよい。例示を簡潔にするために、データ構造は、データ構造における場所を通して関係付けられたフィールドを有するように示されてもよい。そのような関係は、フィールド間の関係を伝えるコンピュータ読取可能媒体における場所にフィールドのためのストレージを割当てることによって、同様に達成されてもよい。しかしながら、データ要素間の関係を構築するポインタ、タグ、または他のメカニズムを使用することを含む、任意の好適なメカニズムが、データ構造のフィールドにおける情報間の関係を構築するために使用されてもよい。
【0071】
また、さまざまな本発明の概念は1つ以上の方法として具現されてもよく、それらの例が提供されてきた。方法の一部として行なわれる行為は、任意の好適なやり方で順序付けられてもよい。したがって、例示されたものとは異なる順序で行為が行なわれる実施形態が構築されてもよく、それは、例示的な実施形態ではいくつかの行為が連続する行為として示された場合であっても、いくつかの行為を同時に行なうことを含んでいてもよい。
【0072】
ここに定義され使用されるようなすべての定義は、辞書での定義、引用により援用された文書での定義、および/または定義された用語の通常の意味を統括すると理解されるべきである。
【0073】
明細書および請求項でここに使用されるような不定冠詞「a」および「an」は、明らかに逆の指示がない限り、「少なくとも1つ」を意味すると理解されるべきである。
【0074】
明細書および請求項でここに使用されるような「および/または」という句は、そのように等位結合された要素、すなわち、ある場合には接続して存在し、他の場合には分離して存在する要素の「いずれかまたは双方」を意味すると理解されるべきである。「および/または」を用いて列挙された複数の要素は、同じように、すなわち、そのように等位結合された要素のうちの「1つ以上」と解釈されるべきである。「および/または」という句によって具体的に識別された要素以外の他の要素が、具体的に識別されたそれらの要素に関係していようとなかろうと、オプションで存在していてもよい。このため、非限定的な一例として、「Aおよび/またはB」への言及は、「備える」などのオープンエンドの文言とともに使用される場合、一実施形態ではAのみ(オプションでB以外の要素を含む)を指し、別の実施形態ではBのみ(オプションでA以外の要素を含む)を指し、さらに別の実施形態ではAおよびBの双方(オプションで他の要素を含む)を指す場合がある。
【0075】
明細書および請求項でここに使用されるように、「または」は、上に定義されたような「および/または」と同じ意味を有すると理解されるべきである。たとえば、リストにおける項目を分ける場合、「または」もしくは「および/または」は包括的である、すなわち、数々の要素、または要素のリストのうちの少なくとも1つだけでなく2つ以上、およびオプションで列挙されていない追加の項目を含む、と解釈されるものとする。「のうちの1つのみ」または「のうちのまさしく1つ」、もしくは、請求項で使用される場合、「からなる」といった、明らかに逆を示す用語だけが、数々の要素、または要素のリストのうちのまさしく1つの要素を含むことを指すであろう。一般に、ここに使用されるような「または」という用語は、「のいずれか」、「のうちの1つ」、「のうちの1つのみ」、または「のうちのまさしく1つ」といった排他性の用語が後にくる場合、排他的代替物(すなわち「一方または他方であるが、双方ではない」)を示すとのみ解釈されるものとする。「主として…からなる」は、請求項で使用される場合、特許法の分野で使用されるようなその通常の意味を有するものとする。
【0076】
明細書および請求項でここに使用されるように、1つ以上の要素のリストに関する「少なくとも1つ」という句は、要素のリストにおける要素のうちのいずれか1つ以上から選択された少なくとも1つの要素を意味するものの、要素のリスト内に具体的に列挙された1つ1つの要素のうちの少なくとも1つを必ずしも含まず、要素のリストにおける要素の任意の組合せを除外しないと理解されるべきである。この定義はまた、「少なくとも1つ」という句が指す要素のリスト内で具体的に識別された要素以外の要素が、具体的に識別されたそれらの要素に関係していようとなかろうと、オプションで存在していてもよい、ということを可能にする。このため、非限定的な一例として、「AおよびBの少なくとも1つ」(もしくは同等に「AまたはBの少なくとも1つ」、もしくは同等に「Aおよび/またはBの少なくとも1つ」)は、一実施形態ではAが少なくとも1つ(オプションで2つ以上を含む)、Bは存在しない(およびオプションでB以外の要素を含む)ことを指し、別の実施形態ではBが少なくとも1つ(オプションで2つ以上を含む)、Aは存在しない(およびオプションでA以外の要素を含む)ことを指し、さらに別の実施形態ではAが少なくとも1つ(オプションで2つ以上を含む)、Bが少なくとも1つ(オプションで2つ以上を含む)(およびオプションで他の要素を含む)を指す、などとなっている。
【0077】
請求項および上述の明細書において、「…を備える」、「含む」、「担持する」、「有する」、「包含する」、「伴う」、「保持する」、「から構成される」などの移行句はすべて、オープンエンドである、すなわち、「…を含むもののそれに限定されない」ということを意味すると理解されるべきである。「からなる」および「主として…からなる」という移行句のみが、米国特許庁特許審査便覧の第2111.03節に述べられているように、それぞれクローズドまたはセミクローズドの移行句である。