公開:

DNS(Domain Name System)とは?意味をわかりやすく簡単に解説

text: XEXEQ編集部


DNS(Domain Name System)とは

DNS(Domain Name System)とはドメイン名とIPアドレスを相互に変換するためのシステムです。人間にとって覚えづらい数字の羅列であるIPアドレスを、覚えやすい文字列であるドメイン名に変換することで、インターネット上のリソースへのアクセスを容易にしています。

DNSはドメイン名を入力するとIPアドレスを返答する、いわばインターネット上の電話帳のような役割を果たしています。ウェブブラウザにURLを入力した際、まずDNSサーバーに問い合わせが行われ、対応するIPアドレスが返されることで、目的のウェブサイトに接続することができるのです。

DNSの仕組みは階層構造になっています。トップレベルドメイン(TLD)を管理するルートDNSサーバーを頂点として、各ドメインを管理する権威DNSサーバーが階層的に配置されています。問い合わせはこの階層構造をたどることで、目的のIPアドレスを取得します。

また、DNSには名前解決以外にも、ドメインの委譲やメールサーバーの指定など、様々な機能があります。ドメイン名とIPアドレスの対応関係を定義するリソースレコードと呼ばれるデータを管理することで、これらの機能を実現しているのです。

DNSはインターネットにおける重要なインフラストラクチャの一つであり、その信頼性と可用性を維持することが求められます。DNSサーバーが攻撃を受けたり、障害が発生したりすると、ウェブサイトへのアクセスができなくなるなど、大きな影響が生じる可能性があるのです。

DNSの仕組みと名前解決の流れ

DNSの仕組みと名前解決の流れに関して、以下3つを簡単に解説していきます。

  • DNSの階層構造とドメインの委譲
  • 再帰的問い合わせと反復的問い合わせ
  • キャッシュの仕組みとTTL

DNSの階層構造とドメインの委譲

DNSはツリー状の階層構造を有しています。最上位にはルートドメイン(.)があり、その下にTLD(トップレベルドメイン)が存在します。さらにその下には各組織に委譲された個別のドメインが階層的に配置されているのです。

この階層構造により、ドメインの管理が分散化されています。各階層のドメインは下位の階層に対して管理権限を委譲することができます。これにより、各組織がそれぞれのドメインを自由に管理することが可能となっているのです。

ドメインの委譲はNSレコード(Name Server Resource Record)を使って行われます。NSレコードにはそのドメインを管理するDNSサーバーのホスト名が記載されています。これにより、問い合わせがその階層の適切なDNSサーバーに転送されることになるのです。

再帰的問い合わせと反復的問い合わせ

クライアントからDNSサーバーへの名前解決の問い合わせには再帰的問い合わせと反復的問い合わせの2種類があります。再帰的問い合わせでは問い合わせを受けたDNSサーバーが、自身で名前解決を行い、結果をクライアントに返します。

一方、反復的問い合わせではDNSサーバーは自身では名前解決を行わず、クライアントに問い合わせるべき次のDNSサーバーを教えるだけです。クライアントはその情報をもとに次のDNSサーバーに問い合わせを行い、最終的に名前解決を完了させることになります。

通常、クライアントから最初に問い合わせを受けるDNSサーバー(フルサービスリゾルバ)は再帰的問い合わせを行い、その過程で権威DNSサーバーに対しては反復的問い合わせを行います。こうすることで、クライアントは複雑なDNSの階層構造を意識することなく、シンプルに名前解決を行うことができるのです。

キャッシュの仕組みとTTL

DNSには名前解決の効率化のためのキャッシュの仕組みが備わっています。一度名前解決を行った結果はDNSサーバーのキャッシュに一定期間保持されます。同じドメイン名に対する問い合わせがあった場合、キャッシュされた情報を返すことで、改めて名前解決を行う必要がなくなるのです。

キャッシュの有効期間はTTL(Time To Live)という値で管理されています。DNSレコードにはTTLが設定されており、その時間が経過するとキャッシュが失効します。TTLを長く設定すれば、キャッシュの効果が高まる一方、変更が反映されるまでに時間がかかるようになります。

逆にTTLを短く設定すれば、変更がすぐに反映される代わりに、キャッシュの効果が薄れてしまいます。運用においてはこの両者のバランスを考慮してTTLを設定する必要があるのです。また、キャッシュを持つDNSサーバーが複数存在することで、変更の反映にはある程度の時間を要することにも留意が必要です。

DNSの主要なリソースレコード

DNSの主要なリソースレコードに関して、以下3つを簡単に解説していきます。

  • Aレコード(Address Record)
  • MXレコード(Mail Exchanger Record)
  • CNAMEレコード(Canonical Name Record)

Aレコード(Address Record)

Aレコードはドメイン名とIPアドレスの対応関係を定義するためのレコードです。ドメイン名を引数として問い合わせを行うと、対応するIPアドレスが返されます。これにより、ドメイン名からIPアドレスへの変換、つまりDNSの基本的な名前解決が実現されているのです。

AレコードはIPv4アドレスに対応しています。IPv6アドレスとの対応づけはAAAAレコード(Quad-A Record)を使用します。AレコードはDNSにおける最も基本的かつ重要なレコードの一つと言えるでしょう。

www.example.com. IN A 192.0.2.1

MXレコード(Mail Exchanger Record)

MXレコードはドメインのメールサーバー(SMTP)のホスト名を定義するためのレコードです。メールアドレスのドメイン部分に対応するMXレコードを検索することで、そのドメイン宛てのメールを受け取るべきサーバーがわかります。

MXレコードにはメールサーバーのホスト名と優先度が記述されます。優先度は数値で表現され、小さいほど優先度が高いことを意味します。メールは優先度の高いサーバーから順に配送が試みられることになるのです。

example.com. IN MX 10 mail1.example.com.
example.com. IN MX 20 mail2.example.com.

CNAMEレコード(Canonical Name Record)

CNAMEレコードはあるドメイン名に対して別名(エイリアス)を定義するためのレコードです。CNAMEレコードで定義された別名に対する問い合わせは正規名(Canonical Name)に対する問い合わせに変換されます。

CNAMEレコードは同一のサーバーに複数のサービスを提供する際などに使用されます。別名を使うことで、サーバーの実装を変更した際にも、利用者側の設定を変更する必要がなくなるのです。ただし、CNAMEレコードとして定義できるのは他のリソースレコードが存在しないドメイン名に限られます。

www.example.com. IN CNAME example.com.

DNSの運用とセキュリティ対策

DNSの運用とセキュリティ対策に関して、以下3つを簡単に解説していきます。

  • セカンダリDNSの活用とゾーン転送
  • DNSSECによる改ざん防止とDoS攻撃対策
  • DNSキャッシュポイズニングへの対応

セカンダリDNSの活用とゾーン転送

DNSの可用性を高めるため、複数のDNSサーバーを用意することが一般的です。プライマリDNSサーバーに加えて、セカンダリDNSサーバーを設置し、ゾーン転送によってデータを同期させるのです。

ゾーン転送とはプライマリDNSサーバーからセカンダリDNSサーバーにゾーンデータ(リソースレコードの集合)を転送することを指します。これにより、プライマリDNSサーバーに障害が発生した場合でも、セカンダリDNSサーバーがバックアップとして機能することになります。

ただし、ゾーン転送はDNSサーバー間の重要な通信であるため、適切にアクセス制御を行う必要があります。悪意のあるユーザーにゾーンデータが漏洩すると、ネットワークの構成が不正に把握されてしまう可能性があるからです。TSIGなどの技術を用いて、セキュアなゾーン転送を実現することが求められます。

DNSSECによる改ざん防止とDoS攻撃対策

DNSSECはDNSの応答の完全性と真正性を保証するための仕組みです。DNSレコードにデジタル署名を付与することで、応答が改ざんされていないことを確認できるようになります。これにより、DNSの応答を信頼することができ、フィッシングサイトへの誘導などを防ぐことができるようになるのです。

また、DNSSECではDNSサーバー自身の真正性も保証されるため、なりすましによるDoS攻撃のリスクも軽減されます。ただし、DNSSECの導入には各レコードへの署名や検証のための処理が必要となるため、DNSサーバーの負荷が増大することに留意が必要です。

DNSに対するDoS攻撃への対策としては他にもAnycast方式の採用などがあります。Anycastでは同一のIPアドレスを複数の地点で使用することで、攻撃トラフィックを分散させることができます。DNSの可用性を高める上で有効な手段の一つと言えるでしょう。

DNSキャッシュポイズニングへの対応

DNSキャッシュポイズニングはDNSサーバーのキャッシュに不正な情報を注入する攻撃です。この攻撃により、DNSサーバーが偽の名前解決結果を返すようになり、ユーザーが偽のサイトに誘導されてしまう可能性があります。

この攻撃への対策としてはDNSサーバーソフトウェアの脆弱性に対処することが重要です。また、DNSの問い合わせと応答に、ランダムな値(トランザクションID)を含めるようにすることで、応答の予測を困難にすることも有効とされています。

さらに、DNSSEC の導入も、キャッシュポイズニング対策として有効です。DNSSECによって、改ざんされた応答を検知することができるため、不正な情報がキャッシュされるリスクを低減できるのです。DNSの信頼性を確保する上で、DNSSECの重要性は高まっていると言えるでしょう。

「コンピュータ」に関するコラム一覧「コンピュータ」に関するニュース一覧
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。