DNSとは
DNSとは、ホスト名からIPアドレスを求めたり、IPアドレスをもとにホスト名を求めたりするためのサービスである。Domain Name Systemの略称で、DNSプロトコルは、RFC1034、RFC1035で規定されている。
DNSは、Internetの前身であるARPANETの頃から使われている。DNSが普及する以前は、インターネット上のすべてのホストの名前とIPアドレスが記載されたHOSTS.TXTが配布されていた。このファイルは、/etc/hostsと同じような形式で記載されていた。
ARPANETが大きくなると、このファイルの更新や配布の手間が非常に煩雑になってきた。そこで、より効率よくホスト名とIPアドレスを管理するために開発されたのがDNSである。
ドメインと階層構造
DNSでは、ホストをグループで管理する。このグループがドメインである。ホストは、ドメインの名称とローカルなホスト名を組み合わせたホスト名で管理される。例えば、www.example.comの場合、example.comがドメインである。wwwはホスト名で、その組織内で一意な名前である。また、www.example.comのようにドメイン名を省略せずにホスト名を記載したものをFQDN(Fully Qualified Domain Name)と呼ぶ。
ドメインは、内部に他のドメインを内包することができる。内包する側のドメインを親ドメイン、内包される側を子ドメインまたはサブドメインと呼ぶことがある。
ドメインの頂点は、ルート(root)で「.」と表記される。したがって、www.example.comの場合、comはルートのサブドメイン、example.comはcomのサブドメインとなる。このようにDNSの名前空間は、ルートを元とする階層構造になっている。
ドメイン名の割り当て
ルートのすぐ下のドメインは、トップレベルドメイン(TLD; Top Level Domain)と呼ばれている。トップレベルドメインは、ICANN(Internet Corporation for Assigned Names and Numbers)によって管理されている。また、各TLDの管理は、レジストラと呼ばれる組織に委任されている。
私たちがインターネット上で何らかのドメイン名を使いたい場合には、レジストラに申請を行いドメイン名を割り当ててもらう必要がある。
ゾーンとゾーンデータベース
ゾーンは、DNSの情報を管理する単位で、ドメイン名空間の一部である。ゾーンは、単独のホストでも構わない。また、何らかのドメイン全体やサブドメイン全体を指すこともある。
DNSで利用する名前解決のためのデータベースは、ゾーンデータベースと呼ばれる。ゾーンデータベースは、各ゾーンの権威DNSサーバが保持する。インターネットのゾーンの大元を管理する権威DNSサーバは、ルートDNSサーバと呼ばれる。ルートDNSサーバには、各TLDが管理する権威DNSサーバの情報が保持されている。また、各TLDは、自身が割り当てたドメインの権威DNSサーバの情報を保持している。さらに、各ドメインの権威DNSサーバは、自身のドメインの一部を別の権威DNSサーバに移譲することもできる。
このように、ゾーンデータベースは多くの権威DNSサーバで階層的に管理されている。
DNSの名前解決
DNSのゾーンデータベースが階層的に管理されているため、実際にDNSで名前解決を行う場合にも、階層的に調査を行う必要がある。まず最初に、ルートDNSサーバに問い合わせを行い、該当ドメインのTLDを管理する権威DNSサーバのアドレスを入手する。次に、TLDの権威DNSサーバから該当ドメインを管理している権威DNSサーバの情報を取得する。もし、さらにサブドメインがある場合には、このような問い合わせを繰り返す。そして、指定した名前を管理している権威DNSサーバが見つかれば、その結果を取得することができる。
こうした名前解決を、各ネットワークノードで行うのは大変である。また、DNSの調査のためにかなりの通信が必要になってしまう。そのため、このような名前解決を代行して行ってくれるDNSキャッシュサーバが使われている。
DNSキャッシュサーバは、名前解決を代行するだけではなく、問い合わせ結果もキャッシュ(保管)してくれる。同じような問い合わせがあった場合には、このキャッシュから回答を行うことで迅速に回答を返すことができる。しかも、ネットワークへの負担も軽減することができる。
DNSの拡張プロトコル
ARPANETの頃から使われていたDNSだが、インターネットが普及するにしたがって問題が指摘されてきた。その問題に対処するために、いくつかの拡張プロトコルが決められている。
DNSSEC
1999年にRFC2535として規定された拡張プロトコルである。DNSキャッシュサーバに間違ったデータを強制的に送り込む「キャッシュポイズニング」という攻撃の根本的な対策として導入された。DNSのデータに電子署名を付けることで、データの改竄を検出することができる仕組みである。詳しくは、「DNSSEC」を参照。
EDNS0
DNSSECと同じ1999年にRFC2671として規定された拡張プロトコルである。DNSSECを使うと、署名データが付加されるようになり、DNSの応答パケットの大きさが以前よりも大きくなってしまう。また、IPv6が利用されるようになり、一回の問い合わせで返すデータの量が多くなってしまった。しかし、従来のDNSのUDPを使う実装では、メッセージサイズに上限があり、この大きなデータを扱うことができなかった。そのため、より大きなデータを扱うことができるようEDNS0が考案された。詳しくは、「EDNS0」を参照。
【カテゴリ】:プロトコル  
【Webセミナー】自社でOSSを採用しよう!今更聞けないOSSの基本セミナー
日程: | 11月22日(金)Webセミナー「BigBlueButton」を使用します。 |
内容: | OSSを導入したいけど、どこから手をつければいいかわからない方必見! |
ご興味のあるかたはぜひご参加ください。 |
関連用語
DNSに関連するページ(事例など)
- PowerDNSによるDNSサーバ事例
- unboundによるDNSキャッシュサーバ事例
- デージーネットのチャレンジ〜PowerDNS調査〜
- PowerDNS商用サポート
- DNSキャッシュサーバの水責め攻撃対策事例
- マルチDNS環境事例
- PowerDNSによるDNSSEC対応の権威DNSサーバ事例
- bindによるDNSSEC対応の権威DNSサーバ事例
- DNSサーバ構築
- BINDに替わるDNSサーバ〜PowerDNS〜
- NSD調査報告書
- DNSサーバのおすすめOSS比較9選!選定ポイントも解説
- unbound〜攻撃に強いDNSキャッシュサーバ〜
- unboundのDNS攻撃対策
- unboundのシステム構成とBINDからの移行
- unboundのインストール