基本情報技術者試験など情報処理技術者試験を受験する方にとっては必須の,DNS(Domain Name System)についてシンプルにまとめています。DNSの説明からはじめ,ドメイン名(ドメイン空間,トップレベルドメイン(TLD),分野別トップレベルドメイン(gTLD),国コードトップレベルドメイン(ccTLD),FQDN(Fully Qualified Domain Name)),ゾーン(ルートゾーン,jpゾーン,co.jpゾーンなど,権限移譲),名前解決の問い合わせ方法(リゾルバ(スタブリゾルバ,フルサービスリゾルバ),再帰問合せ,反復問合せ,キャッシュ,DNSキャッシュサーバー),権威DNSサーバー(プライマリDNSサーバー,セカンダリDNSサーバー),ゾーン情報の設定(TTL,SOAレコード,Aレコード,AAAAレコード,NSレコード,MXレコード,CNAMEレコード,TXTレコード),digコマンド,nslookupコマンドを説明しています。ややこしいところがありますが,しっかり頑張りましょう。
DNS(Domain Name System)
DNSとは,TCP/IPネットワークで,ドメイン名とIPアドレスの対応を管理するシステムのことをいいます。
※ DNSはアプリケーション層(OSI参照モデル)のプロトコルである
※ TCP/UDPのポート番号53を使用する
※ 名前解決ともいう
ドメイン名
ドメイン名とは,インターネット上に存在するホストを階層構造で一意に管理するために登録された名前のことをいいます。ドメイン名の構成は,次のようになっています。
※ ドメイン空間…ホストを管理する階層構造全体のこと
ドメインは,住所のように広い領域を示す名前から順に範囲を狭めていく構造になっています。一番右が最上位階層のトップレベルドメイン,右から2番目が第2レベルドメイン…,というように,範囲が狭くなっていきます。
トップレベルドメイン(TLD)
トップレベルドメインには,次のような分類があります。
分野別トップレベルドメイン (gTLD;generic TLD) | 国や地域に関係なく,用途や組織の種類などに応じて設定されたTLD |
国コードトップレベルドメイン (ccTLD;country code TLD) | 国や地域ごとに割り当てられたTLD |
gTLDの場合,第2レベルドメインは個別の組織に割り当てられます。ccTLDの場合は,各管理者(JPNICなど)が運用するドメインが第2レベルドメインになりますので,個別の組織に割り当てられるドメインは第3レベルドメインになります。
FQDN(Fully Qualified Domain Name)
FQDNとは,トップレベルドメインからホスト名までを省略せずに記述した形式のことをいいます。
ゾーン
ゾーンとは,各DNSサーバーが管理する(それぞれの)ドメイン空間のことをいいます。
ルートゾーンのDNSサーバーはjpドメインのDNSサーバーに,jpドメインのDNSサーバーはco.jpドメインのDNSサーバーに…,というように,ゾーンという概念を用いて,下位ドメインの管理を下位ドメインのDNSサーバーに委譲しています。
名前解決の問い合わせ方法
リゾルバ
リゾルバとは,DNSサーバーに名前解決の問い合わせを行うプログラムのことをいいます。最初に問い合わせを行う(ローカル)DNSサーバーのIPアドレスを設定し,UDPのポート番号53を使用して,名前解決の問い合わせを行います。
※ リゾルバは,OSに組み込まれていることが多い
再帰問合せ (Recursive Query) | リゾルバが,DNSサーバーに対して,目的のホスト名に対応したIPアドレスを要求する問い合わせ |
反復問合せ (Iterative Query) | ルートサーバーから順にドメイン空間の階層構造をたどり,最終的に,目的のホスト名に対応したIPアドレスを取得するような問い合わせ |
スタブリゾルバ(Stub Resolver)
スタブリゾルバとは,クライアントのリゾルバのことをいい,DNSサーバーに対して再帰問合せを行います。
※ 反復問合せはできない
フルサービスリゾルバ(Full-Service Resolver)
フルサービスリゾルバとは,反復問合せを行うリゾルバのことをいいます。
たとえば,「www.example.co.jp」というWebサイトのIPアドレスの問い合わせは,次のようになります。
ローカルDNSサーバーは,名前解決の際に得た情報を,一定期間,キャッシュに保存しています。反復問合せの際に,情報がキャッシュに保存されていれば,その情報を使用します。
※ キャッシュの仕組みを利用することで,名前解決のためのトラフィックを抑制できる
DNSキャッシュサーバー
DNSキャッシュサーバーとは,ゾーン情報を持たないキャッシュ専用のDNSサーバーのことをいい,名前解決の問い合わせのみを担当します。キャッシュ専用のDNSサーバーと,ゾーン情報を持つDNSサーバーを別々に配置することで負荷分散が可能になります。
※ DNSキャッシュサーバーは,ISPなどが設置・運用している(障害に備え,複数の系統を設置・運用していることが多い)。利用者のコンピューターでは,優先的に問い合わせをする優先DNSサーバーと,(優先サーバーが利用できない場合に)代わりに問い合わせをする代替DNSサーバーの2つを設定することが多い
権威DNSサーバー
権威DNSサーバーとは,ゾーン情報を管理するDNAサーバーのことで,外部からの問い合わせに応答するものをいいます。
プライマリDNSサーバー
プライマリDNSサーバーとは,ゾーン情報のマスターデータを管理する主系統の権威DNSサーバーのことをいい,各ゾーンに1台(1系統)だけ設置できます。
セカンダリDNSサーバー
セカンダリDNSサーバーとは,副系統の権威DNSサーバーのことをいい,障害などに備え,各ゾーンに少なくとも1台は設置されます。定期的にプライマリDNSサーバーのゾーン情報を確認し,変更されていた場合は,そのゾーン情報を取得します(ゾーン転送)。
ゾーン情報の設定
ゾーン情報は,ゾーン情報を管理するゾーンファイルに設定します。
ゾーンファイルに設定するレコードは,資源レコード(リソースレコード)と呼ばれ,次の書式が用いられます。
また,資源レコードのタイプには,次のようなものがあります。
SOAレコード | 管理しているゾーンに関する情報を定義するレコード(上図2行目~7行目)。プライマリDNSサーバーのホスト名や,セカンダリDNSサーバーにゾーン転送するための情報などを設定する |
Aレコード | ホスト名に対応するIPv4のIPアドレスを定義するレコード(上図12行目~17行目)。1つのホスト名に対して複数のIPアドレスを定義することで,ラウンドロビンに方式による負荷分散が可能となる。また,1つのIPアドレスに対して複数のホスト名を割り当てることもできる(バーチャルドメイン機能) |
AAAAレコード | ホスト名に対応するIPv6のIPアドレスを定義するレコード |
NSレコード | ドメイン名に対応するDNSサーバーのホスト名を定義するレコード(上図9行目,10行目)。複数のDNSサーバーを設定することができる |
MXレコード | ドメイン名に対応するメールサーバーのホスト名と,プレファレンス(優先度)を定義するレコード(上図11行目) 複数のメールサーバーを設定した場合,プレファレンスの値が小さい方が優先される |
CNAMEレコード | ホスト名の別名を定義するレコード |
TXTレコード | コメントを記入するためのレコード |
SPFレコード | 電子メールの送信元ドメインを確認できるようにするためのレコード(電子メールの受信者が,電子メールの受信時に,送信元のドメイン名とメールサーバーのIPアドレスの適合性を問い合わせる際に照会される) |
DNSサーバーのサービスを確認するコマンド
digコマンド
digコマンドは,DNSサーバーのサービスを確認するコマンドです。ほとんど,そのままの結果を表示しますので,より正確な情報を得ることができます。
nslookupコマンド
nslookupコマンドは,DNSサーバーのサービスを確認するコマンドです。加工された結果が表示されますので分かりやすいのですが,場合によっては,正しく表示されないことがあります。
※ 正確さを求める場合は,digコマンドを使用した方がよい
まとめ
今回は,DNSについて,シンプルにまとめてみました。理解に時間がかかるかもしれませんが,しっかり頑張りましょう。