連載
» 2017年06月22日 05時00分 UPDATE

超入門DNS:ドメイン情報を提供するDNSのコンテンツサーバ

DNSサーバには、ドメインの情報(権威情報)を定義・公開するコンテンツサーバと、それを利用するリゾルバの2種類がある。今回はコンテンツサーバの機能についてまとめておく。

[打越浩幸,デジタルアドバンテージ]

本入門連載では、システム管理者やシステムエンジニアの方々を主な対象として、IT業界でよく使われる技術や概念、サービスなどの解説をコンパクトにまとめておく。



 前回はDNSで提供されているサービスの概要について解説した。今回は、DNSサーバの機能について解説する。

 単にDNSサーバと言った場合、実は1台のDNSサーバの中に、DNSのゾーン情報を提供する機能だけでなく、ゾーン情報を利用する側の機能も含まれていて、少し分かりづらくなっている。本連載ではこの2つの機能を次のように区別する。

  1. ドメインの情報を管理する「コンテンツサーバ」機能
  2. 他のDNSサーバに問い合わせて名前解決する「リゾルバ」機能

 DNSサーバで提供されているサービスには複数の機能があるが、今回は1.のコンテンツサーバ機能についてまとめておく。リゾルバ機能については第3回で触れる。

ドメインのゾーンと権威(オーソリティ)

 DNSサーバでは、ドメインごとの情報を「ゾーン」と呼ばれる単位で管理している。ゾーンの中には、そのドメインの情報(ドメイン名や属性など)やホスト名、IPアドレス、ネームサーバ情報など、さまざまな情報が「レコード」として記録されている(登録できるレコードの種類については後述)。

 以下にドメインのゾーン定義の例を示しておく。これはWindows Server OSのDNSサービスで定義されているexample.jpゾーンの例である。

ゾーン情報の定義例 ゾーン情報の定義例
これはWindows Server 2012 R2のDNSサーバの例。Active Directoryと連携しているので、Active Directory用のレコードも多数登録されている
  (1)このDNSサーバではexample.jpドメインの情報を定義している。
  (2)「SOA(Start Of Authority)」という権威(オーソリティ)を表すレコード。SOAレコードにはこのドメインの名前や管理者名、このドメインのDNSサーバ名とそのIPアドレス情報などが定義されている。上位のDNSサーバはこの情報を使って、example.jp内の名前解決を行う。
  (3)各種のリソースを定義するレコード。ホスト名などの名前とそのIPアドレスを指定するA/AAAAレコード、メールサーバを指定するMXレコード、別名を定義するCNAMEなど、さまざまなものがある。

 (2)のSOAレコードで定義されているのがドメインの「権威情報(Authority)」であり(詳細は後述)、ドメインに関する一番重要な情報である。

コンテンツサーバ/権威DNSサーバ

 あるドメインの権威情報を提供するDNSサーバを特に「コンテンツサーバ」とか「権威DNSサーバ(authoritative name server)」という。コンテンツサーバは、外部からのDNS問い合わせに応答する責任を持つ。コンテンツサーバを上位のDNSサーバに登録することにより、ルートからドメインの階層をたどって、目的のドメインやそこにあるホスト名などを見つけることができるようになる。

 例えばexample.jpというDNSドメインがある場合(実際にはjpドメインでこの名前を取得することはできないが。組織内のみで使うなら自由)、このドメインに対するゾーンを作成後、このサーバの名前やIPアドレス情報を上位ドメインに追加してもらう。するとルートDNSサーバからjpドメインのDNSサーバをたどって、example.jpドメインの情報を見つけることができるようになる。

 example.jpドメインまでたどり着けば、あとはSOAレコード中で定義しているDNSサーバによって、このドメイン内のホスト名などを参照できるようになる。

 通常は、ドメインの所有者がそのドメインに対する権威DNSサービスを提供するが(DNSサーバを用意するが)、ISPが提供するDNSサーバサービスを使ったり、「Google Cloud DNS」のような汎用のDNSサービスなどを使うこともできる。

 example.jpの下にさらに下位のドメイン階層を設ける場合は、example.jp内でサブドメイン(サブゾーン)として定義してもよいし、独立した別のドメインとして定義して、そのドメインを担当する別のDNSサーバに処理を「委任、委譲(delegate)」してもよい。

プライマリDNSサーバとセカンダリDNSサーバ

 DNSサービスは、ドメインに対する名前解決の基本的な機能なので、もしDNSサーバに障害が発生するとそのドメインに対する名前解決が行えず、結果として、そのドメインへはアクセスできなくなってしまう。このような事態を避けるため、コンテンツサーバは複数台用意するのが普通である。

 だがDNSサーバの台数が増えると、管理したり、DNSサーバ間で登録情報の同期を取る手間が増える。そこで一般的には、1台を「プライマリDNSサーバ」(マスター)とし、残りは全て「セカンダリDNSサーバ」(スレーブ)として運用することが多い*1

*1 プライマリ/セカンダリという呼び方について
プライマリ/セカンダリではなく、マスター/スレーブと呼ぶこともある(BIND 8.x以降ではプライマリ/セカンダリではなく、マスター/スレーブと呼んでいる)。だが本記事では、Windows OSの表記に合わせてプライマリ/セカンダリと呼ぶことにする。


 管理者はプライマリDNSサーバのゾーン情報だけを管理・更新する。するとプライマリDNSサーバに設定された内容が自動的にセカンダリにコピー/同期される。DNSサーバ間では「ゾーン転送」という、登録データを直接コピーする機能が使われる。

 このような構成にしている場合、プライマリとセカンダリにはどちらにも同じようにDNSの要求が届くので(プライマリに障害があるときだけセカンダリにアクセスが来るわけではない)、どちらも同じ程度の負荷に耐えられるような機器構成が望ましい。

DNSレコード情報

 最後に、DNSサーバに登録できるレコード情報についてまとめておく。

レコード 意味/用途
SOA Start Of Authority。ドメインの権威情報を定義するレコード。次のような情報を含む
・シリアル番号。ゾーン情報を更新する度に増加させること。クライアントはこの数字の増加を確認すると、ゾーン情報が更新されたと判断する
・ネームサーバ:ドメインのDNSサーバ名
・更新時間/再試行時間/期限:キャッシュしたゾーン情報の有効期限
NS Name Server(DNSサーバ名)
A IPv4アドレス
AAAA IPv6アドレス
CNAME Canonical Name(ホスト名の別名)。同じホストを異なる名前でアクセスできるようになる
PTR Pointer(IPv4/IPv6の逆引きアドレス)
MX Mail Exchanger(メールサーバ情報)
TXT Text(テキスト)情報
DNSSEC DNSのセキュリティ拡張機能DNSSECで利用するためのキー情報などを定義するレコード(DNSKEY/RRSIG/DS/NSECなど)。ゾーンデータを暗号化して公開鍵暗号で署名してやり取りする。「DNSSEC の概要」(TechNetサイト)参照
主なDNSレコードの種類とその意味

 幾つか補足しておく。

●SOAレコード

 これはドメインの権威情報を定義する、一番重要なレコードである。

SOAレコードの例 SOAレコードの例
SOAではドメインの権威情報を定義する。
  (1)DNS管理ツールで対象ドメインのプロパティ画面を開き、このタブを選択する。
  (2)シリアル番号。
  (3)ドメインのDNSサーバ情報。
  (4)ドメインの管理者名。最初の「 . 」を「@」に置き換えるとメールアドレスになる。
  (5)SOAレコードの有効時間。一度DNSサーバにアクセスすると、この時間以内なら再アクセスしない。

 (2)はSOAレコードのシリアル番号を表している(2の32乗以内の数値)。ゾーン情報を更新したら、手動で増加させておく。するとDNSのクライアントはSOAレコードの変更を検知して、内容を再取得する。番号が同じだとキャッシュした値をそのまま使うので、変更が反映されない。

 (5)は、クライアントが取得したSOAレコードの有効期限を表している。長いとDNSサーバの負荷は減るが、更新があった場合にすぐには反映されない可能性がある。もしWebサーバやメールサーバのIPアドレスの変更などを考えているなら、この値(および関連するレコードのTTLなど)を短く設定しておくとよい。

●逆引きレコード

 逆引きレコードとは、与えられたIPv4やIPv6のアドレスから、対応する元のDNS名(FQDN)を定義するためのレコードである。

 IPアドレスは32bitもしくは128bitのバイナリデータである。これをレコードとして登録するため、DNSではIPアドレスに対しては特殊なゾーン記述方法を用意している。

 IPv4の場合は次のようにして登録する。

  1. IPv4アドレスを8bitずつ区切って4つの10進数の組にする直す(例:10.20.2.101)
  2. 上位の3組だけを取り出す(→10.20.2)
  3. 数字を逆順に並べる(→2.20.10)
  4. この数字列の末尾に.in-addr.arpaを付加する(→0.2.20.101.in-addr.arpa)
  5. この名前のゾーンを用意して、そこにPTRレコードとして、元のFQDNと共に登録する

:ホストアドレス部が8bit未満の場合は、さらにサブドメインに分割するなどの特殊な措置が必要になることがあるが、ここでは触れない。

逆引きIPv4アドレスの例 逆引きIPv4アドレスの例
逆引きを登録するには、IPv4アドレスを逆順にした特別なゾーン名を使う。
  (1)逆引き専用のゾーン群。
  (2)10.20.1.xというIPv4アドレスは、このゾーン内に登録する。
  (3)10.20.2.101というIPv4アドレスと、それに対応するFQDN名。

 IPv6の場合もほぼ同様にして処理する

  1. IPv6アドレスのうち、プレフィックス部分のみを取り出す(例:2001:db8:abba:1001:6048:8c4a:9265:d4f0/64なら、上位64bitのみの2001:db8:abba:1001:/64にする)
  2. IPv6アドレスを4bitずつ区切って16進数(0〜9/a〜f)に直す(→20010db8abba1001)
  3. 逆順に並べ替える(→1001abba8bd01002)
  4. 16進数を1桁ごとにピリオドで区切る(→1.0.0.1.a.b.b.a.8.b.d.0.1.0.0.2)
  5. この数字列の末尾に.ip6.arpaを付加する
  6. この名前のゾーンを用意して、そこにPTRレコードとして、元のFQDNと共に登録する
逆引きIPv6アドレスの例 逆引きIPv6アドレスの例
逆引きを登録するには、IPv6アドレスを逆順にした特別なゾーン名を使う。
  (1)作成されたipv6の逆引き用ゾーン。
  (2)逆引き登録されたIPv6アドレス。

●MXレコード

 MXレコードは、このドメインに対するメールサーバ(メールの受信サーバ)を指定するためのレコードである。このドメインに対してメールを送信するメールサーバは、まずドメインのMXレコードを取得してメールサーバの名前やIPアドレスを求め、そこにSMTPプロトコルで接続する。

C:\>nslookup -type=mx example.jp …example.jpドメインのメールサーバ情報を取得する
サーバー:  UnKnown
Address:  ::1

example.jp    MX preference = 20, mail exchanger = centosserver1.example.jp …メールサーバ1
example.jp    MX preference = 10, mail exchanger = example-dc1.example.jp …メールサーバ2
centosserver1.example.jp      internet address = 10.20.2.101
example-dc1.example.jp  internet address = 10.20.1.101
…(以下省略)…



 この例ではメールサーバが2台表示されている、実際にはPreference(優先度)の小さい方を優先して使用する。もし接続できなければ、次に大きい値を持つメールサーバを利用する。

●TXTレコード

 これはDNS中に任意のテキストを定義するためのレコードである。一般的にはあまり使うことはないが、例えば「ドメインの正統な所有者の証明」のために使われることがある。例えば以下のページで解説しているサービスでは、途中で指定されたテキストをDNSのTXTレコードとして設定するという手順がある(他にも確認方法はあるが)。DNSサーバの設定を変更できるのはドメインの所有者だけなので、これによって、ドメインの所有者であることが確認できる、というわけだ。

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。