DNSとは

はじめに

ドメインネームシステム(DNS)は、インターネットまたはプライベートネットワークに接続されたコンピューター、サービス、その他のリソースのための、階層型の分散命名システムです。ブラウザーがコンピューター上のサービスやデバイスを見つけて接続する際、DNSはバックグラウンドで、覚えやすいドメイン名をそのリソースの数値形式のインターネットプロトコル(IP)アドレスに変換します。DNSは、インターネットの電話帳のようなものです。インターネットに接続されたすべてのデバイスやサービスを、名前で簡単に識別できるようにするために作られました。

DNSの用語

ドメイン名

ドメイン名とは、インターネット上のリソースに関連付けられた、ユーザーにとってわかりやすい名前です。たとえば、www.f5.comはドメイン名であり、このURLはF5が所有するサーバーに関連付けられています。

ドメインを細分化したものをサブドメインと呼びます。たとえば、support.f5.comはF5.comのサポート用サブドメインです。サブドメインとは、ドメイン名の左側にドットで区切って付加される部分です。

DNSルックアップ

DNSルックアップとは、クライアント(Webブラウザなど)が特定のドメインについてDNSサーバーに問い合わせるプロセスです。DNSサーバーはIPアドレスを返し、クライアントはそのアドレスを使用して目的の宛先にアクセスします。

ドメイン名空間

ドメイン名空間は、インターネット全体の名前付け構造を定義します。最上位にルートドメイン名を置く、ドメイン名のツリー状の構造です。そのルートドメインから、.com、.net、.orgなどの主要なドメインが分岐します。

ゾーン

名前空間ツリーは複数のゾーンに分割されます。各ゾーンは、特定のドメインで利用可能なリソースを定義します。

ネームサーバー

ネームサーバーはゾーンに関する情報を保存します。ネームサーバーには、プライマリとセカンダリの2種類があります。各ゾーンのデータは、プライマリとセカンダリの両方のネームサーバーに保存されます。

DNSリゾルバー

DNSリゾルバーは、DNSのクライアント側にあたります。ドメイン名をIPアドレスに変換するために必要なクエリを開始し、順序に従って実行します。

DNSの仕組み

簡単に言うと、ユーザーがブラウザに入力したドメイン名(www.f5.comなど)は、DNSサーバーによってIPアドレス(104.219.105.148)に変換されます。これにより、デバイスはインターネット上で目的のリソース(この場合はF5のホームページ)を見つけることができます。

このプロセスを詳しく見ていきましょう。

たとえば、ユーザーがブラウザーにドメイン名www.f5.comを入力したとします。ブラウザーはwww.F5.comの場所を認識していないため、ローカルDNSサーバー(LDNS)にリクエストを送信し、そのWebサイトのレコードがあるかどうかを問い合わせます。LDNSにそのサイトのレコードがない場合は、www.F5.comの所有者を特定するため、インターネット上のドメインを再帰的に検索します。

まず、LDNSはいずれかのルートサーバーにアクセスし、そこから.com DNSサーバーに案内されます。次に、.comサーバーはwww.F5.comの所有者を特定し、F5.comのネームサーバー(NS)レコードをLDNSに通知します。

次に、LDNSはF5.com DNSサーバーのNSレコードを照会します。f5.com DNSサーバーは、www.F5.comという名前を検索します。名前が見つかると、アドレス(A)レコードをLDNSに返します。このAレコードには、要求名、LDNSでその名前に割り当てられたIPアドレス、およびその名前のTime to Live(TTL)が含まれます。TTLは、F5.com DNSサーバーに再度問い合わせるまでAレコードを保持する期間をLDNSに示します。

LDNSはAレコードを受信すると、TTLで指定された期間、IPアドレス情報をキャッシュします。ほかのクライアントが同じ情報を必要とする場合、LDNSはクエリを外部に送信する前に、自身の名前キャッシュから応答します。情報をローカルに保持できるため、f5.com DNSサーバーへ繰り返し問い合わせる必要がなくなり、以降はそのリソースにより迅速に接続できます。

次に、ブラウザはIPアドレスを使用してwww.F5.comのポート80への接続を確立し、GET /…を送信します。これにより、WebサーバーからWebページのレスポンスが返されます。

実際のDNSは上記の例よりもはるかに複雑ですが、この例からその仕組みをおおよそ把握できます。

DNSレコードと一般的な種類

DNSレコードは、どのドメイン名にどのIPアドレスが関連付けられているかをDNSサーバーに伝えるマッピングファイルです。また、それらのリクエストの処理方法もDNSサーバーに指示します。DNSレコードにはさまざまな種類がありますが、特定のドメインに関するすべてのDNSレコードは、DNSゾーンと呼ばれるものに格納されます。DNSゾーンは、インターネット上で特定の1つのドメインに対応するIPアドレスを検索できるようにするコンテナと考えることができます。

一般的なDNSレコードの種類は次のとおりです。

AレコードとAAAAレコード

アドレスレコード(Aレコード、ホストレコードとも呼ばれます)は、DNSの中核となるレコードです。ドメインをIPアドレスに関連付けます。AAAAレコードはAレコードと同様ですが、32ビットのIPv4アドレスではなく、128ビットのIPv6アドレスを返します。

NSレコード

ネームサーバー(NS)レコードは、ドメインのDNS情報をやり取りするサーバーを指定します。通常、ドメインにはプライマリとセカンダリのネームサーバーレコードがあります。

MXレコード

Mail Exchangeレコードは、メールメッセージを特定のドメインのサーバーに転送します。1つのドメインに対して、優先度の異なる複数のMXレコードを定義できます。数値が小さいほど優先度が高くなります。最も優先度の高いレコードを使用してメールを配信できない場合は、次に優先度の高いレコードが使用され、以降も同様です。

TXTレコード

TextレコードまたはTXTレコードには任意のテキストを含めることができ、機械可読テキストの定義にも使用できます。

CNAMEレコード

Canonical NAME(CNAME)レコードは、エイリアス名を別の正規ドメイン名に関連付けます。たとえば、alias.example.comをexample.comに関連付けることができます。

DNSの重要性と制限事項

DNSは、インターネットを支える主要技術の1つであり、ネットワークインフラストラクチャに不可欠な要素でもあります。可用性、インテリジェンス、セキュリティ、拡張性を備えたDNSインフラストラクチャは極めて重要です。DNSはコンテンツやアプリケーションを配信するだけでなく、分散型の冗長アーキテクチャを管理し、高可用性と良好なユーザー応答時間を確保します。DNSに障害が発生すると、ほとんどのWebアプリケーションは正常に機能しなくなります。この重要性ゆえに、DNSは攻撃の主要な標的にもなります。適切なDNSインフラストラクチャがなければ、お客さまはアプリケーションやコンテンツにアクセスできず、ニーズを満たすために他社へ移る可能性があります。

ただし、標準的なDNSサービスには一定の制約があります。まず、DNSはアプリケーション、Webサイト、コンテンツへのアクセスを可能にしますが、それらが稼働しているか、さらには実際に存在するかどうかまでは確認しません。

さらに、DNSには実質的な負荷分散機能がありません。各IPアドレスに対応するアプリケーションが過負荷状態または停止状態にあっても、DNSはすべてのIPアドレスを引き続き使用します。

DNSにはステートフルアプリケーションという概念もないため、ユーザーが同じIPアドレスに再度アクセスすることを保証できません。たとえば、特定のデータセンターにアクセスし、そのデータセンターで保持されるショッピングカートを作成しても、次回の名前解決時に同じIPアドレスが返される保証はありません。

最後に、標準的なDNSサーバーが1秒あたりに応答できるDNSクエリの数には限りがあるため、分散型サービス拒否(DDoS)攻撃の影響を受けやすくなります。

セキュリティ上の問題

DNSはインターネットを支える基盤ですが、ネットワーク内で最も脆弱なポイントの1つでもあるため、価値の高い攻撃対象となります。DDoS攻撃によってDNSサーバーに大量のトラフィックが送り込まれると、乗っ取りや障害が発生し、リクエストが悪意のあるサーバーにリダイレクトされる可能性があります。これを防ぐには、高性能で分散型のセキュアなアーキテクチャをネットワークに統合する必要があります。また、DNSトラフィックの急増時やDDoS攻撃時には、DNSサーバーを増設することも推奨されます。

DNSサーバーやクラウドサービスは、1秒あたりのリクエスト数の変動に対応できますが、クエリが増えるほどコストも増加します。また、このソリューションでは、変更が必要になるたびに手動での対応を求められることが少なくありません。さらに、新たな脆弱性が次々と発見されるため、従来のDNSサーバーには頻繁なメンテナンスとパッチ適用が必要となり、コストがさらに増大します。

DNSインフラストラクチャにおけるアプリケーションデリバリーコントローラーの役割

DNSが深刻な攻撃を受けやすいことを踏まえ、Application Delivery Controller(ADC)がDNSインフラストラクチャの保護にどのように役立つかを説明します。ADCは、複数のDNSサーバー間で負荷を分散し、応答をキャッシュできます。これにより拡張性が向上し、DNSサーバーは大量のトラフィックや大規模な攻撃に対応できるようになります。この機能により、多数のDNSサーバーを同時に導入できるため、アプリケーションの可用性を最大限に高め、応答を高速化し、パフォーマンスを向上できます。また、ADCはDDoS攻撃を迅速に検知し、該当する接続をサーバーから別の経路へ振り分けるか、完全に拒否します。ADCはDNSSECをサポートしており、キャッシュポイズニングや中間者攻撃などの脅威に対する組織の防御を可能にします。こうした機能により、過負荷や攻撃に備えたバックアップ用の追加DNSサーバーを用意する必要性が低減され、お客さまの総所有コストを削減できます。

つまり、高性能なADCは、DNSサーバーをさまざまな攻撃から保護するだけでなく、大量のトラフィックを処理できるようにしながら、拡張性の確保、パフォーマンスの向上、TCOの削減にも貢献します。

今後の展望

モバイルアプリやモノのインターネット(IoT)デバイスなどの新しいテクノロジーの普及に伴い、DNSも拡大しています。また、アプリケーション数が急増し、それらにアクセスするトラフィック量も増加しています。過去5年間で、.comなどのアドレスに対するDNSクエリの量は2倍になりました。2016年には1,000万件を超えるドメイン名がインターネットに追加されました。クラウド、モバイル、IoTの導入が進むにつれ、DNSはさらに速いペースで拡大すると予想されています。世界のインターネットトラフィックに関する最近の複数の調査では、インターネットユーザー数が2020年末までに41億人に達すると示されています。DNSサーバーはインターネットに不可欠であり、DNSが正常に機能しなければ、インターネットは事実上利用できません。

IoTと同様に、クラウドサービスの普及もここ数年で大幅に進んでいます。そのため、DNSインフラストラクチャと、それに伴うメリットや脅威について検討することが、これまで以上に重要になっています。クラウドベースの権威DNSは、パフォーマンス、可用性、セキュリティ、拡張性の向上をもたらす一方で、DNSインフラストラクチャへの攻撃やDDoS攻撃などの脅威にさらされる可能性もあります。

こうした脅威により、Webサイト、アプリケーション、クラウドサービスなどのリソースへのアクセスが大幅に妨げられる可能性があります。これらの攻撃を防ぎ、従業員やお客さまが必要なときに必要な場所からリソースへアクセスできる状態を維持するには、ITインフラストラクチャを効果的に計画・管理することが極めて重要です。

2017年10月5日公開