【インターネット】DNSの仕組み

こんにちは。

今回は、自分の復習としてDNSについて調べなおしてまとめてみたいと思います。

DNSとは、わかりやすい住所をつける仕組み

DNS (Domain Name System)は、ネットワークをいくつかのドメインと呼ばれるサブネットワークに分割することで、各ドメイン内で分散して管理しています。

したがって、クライアントが接続を試みる際は、検索の起点となるルートサーバにまずは接続し、そこから順次たどっていくことで接続を実行します。

/etc/hosts

Linuxにおいて、/etc/hosts の中にコンピュータのIPアドレスとドメイン名を紐付けるための設定を記述するファイルがあります。DNSの仕組みはかなり大掛かりなものであるため、小規模なネットワークを振り分けようとする際に、ファイルが役に立ちます。DNSが出来上がる前は、hosts.txtというファイルが存在し、Network Information Center (NIC)と呼ばれる団体が毎回名前を確認してhosts.txtに適用することによって、名前による接続を実現していたようです。

これは、manの中に記されている/etc/hostsの例です。IPアドレスの次にドメイン名を記述し、オプションとなるエイリアス(より短い名前)をその後に記述することができます。

DNSの大事な要素

DNSサーバ(名前サーバ)

先程も記述したルートサーバは、ルートノードに存在するDNSサーバと捉えることができます。ルートサーバには、その下位に存在するドメイン名とIPアドレスのテーブルのデータが保存されています。

例えば、クライアントがアクセスしたいURLがwww.kz-notebook.xyzだったとすると、まず世界中に13クラスタ存在するルートサーバー(A~M.ROOT-SERVERS.NET)に接続し、xyzのDNSサーバへのIPアドレスを得ます。

無事xyzのネームサーバに接続できたので、今度はkz-notebookとそのIPアドレスが載っているテーブルを探して、kz-notebookのIPアドレスを得ることになります。

これで最終的にこのブログにたどり着くことができます。ちなみに、wwwはHTTPサーバにたどり着くためのノードであると考えることができます。これは慣習的なものであって、つけていてもつけていなくても目当ての接続先にたどり着くことは可能です。

DNSコンテンツサーバー

このサーバが管理する領域にある、資源レコードと委任に関する情報をデータとしてもっていて、問い合わせを要求されたときにその情報を返します。

DNSキャッシュサーバー

クライアントが利用したいDNSコンテンツサーバーの情報を一時的に保管することのできるサーバーで、クライアントはまずDNSキャッシュサーバーに問い合わせを行うことによって、ルートサーバーへの負荷を軽減しています。

リゾルバ

DNSサーバにはリゾルバと呼ばれるアプリケーションがあり、名前解決、つまり主にドメイン名からIPアドレスを呼び出すプログラムを実行する必要があります。Linuxにおいては/etc/resolv.conf にその設定情報が記載されることになります。

リゾルバの仕事としては、「問い合わせを行うこと」です。

まず、ネームサーバへIPアドレスの問い合わせを行います。問い合わせ先が複数ある場合は、プライマリDNSサーバへ問い合わせを行い、順次ネームサーバへ問い合わせを行っていきます。最終的に、問い合わせが成功した場合は、その結果を出力することになります。

資源レコード

それぞれのドメイン名空間の部分(ゾーン)が、管理するためにその情報を記述したものを指します。情報としては、レコードの種類、ドメイン名のキャッシュを保管する制限時間(TTL)、ドメイン名、プライマリーDNSサーバ、管理者のメールアドレスなどが主に記述されます。

最も有名なリゾルバとしてBINDがありますが、このアプリケーションは/etc/bind/named.conf(追加する場合はnamed.conf.local)にゾーンの名前と、資源レコードのあるゾーンファイルがどこに定義されているか記述されています。

まとめ

習ったことだったので、簡単にまとめられるかと思っていましたが、正直かなり忘れていたり理解できていないことが判明しました。

よく調べて書くようにしましたが、もしかすると間違った情報があるかもしれませんので、ご了承ください。

他にも学習すべき点がたくさんあったので、別の機会にまとめてみようと思います。

参考