実践で学ぶ、一歩進んだサーバ構築・運用術

第 2 回 ネームサーバ (前編)


ドメイン・ネーム・システム(DNS)

ドメイン登録業者が何をするのか理解するには, まずDNS(ドメイン・ネーム・システム)を理解する必要があります。 DNSはインターネット全体に分散するデータベース・システムで, ドメイン名やホスト名からIPアドレスなどを検索したり, 逆にIPアドレスからホスト名を検索したりすることができます。 例えば,ホスト名「ns.gcd.org」のIPアドレスを調べたい場合は, nslookupコマンドを実行すると, 「210.145.125.162」であることが分かります(図1)。 では, nslookupはどうやってIPアドレスを調べたのでしょうか?


% nslookup ns.gcd.org.
Server: asao.gcd.org
Address: 0.0.0.0

Name: ns.gcd.org
Address: 210.145.125.162

図1 nslookupコマンドでネーム・サーバーへ問い合わせ
ネーム・サーバーへの問い合わせを行うコマンドがnslookupです。

nslookupは, まず/etc/resolv.confファイルに書いてあるネーム・サーバーへ問い合わせます。 私のマシン(asao.gcd.org)の /etc/resolv.conf は図2のようになっています。


search gcd.org
nameserver 0.0.0.0
nameserver 203.139.160.74

図2 /etc/resolv.confの設定
/etc/resolv.confファイルで使用するネーム・サーバーを指定します。

「nameserver 0.0.0.0」と書いてあるので, nslookup はまず nslookup が実行されたマシン (asao.gcd.org)上のネーム・サーバーへ問い合わせます。 問い合わせを受けたネーム・サーバーの動作には以下の2つの場合があります。

(1)ネーム・サーバーが ns.gcd.org の IP アドレスを知っている場合,
知っているIPアドレスを nslookup へ返します。
(2)ネーム・サーバーが ns.gcd.org のIPアドレスを知らない場合,
他のネーム・サーバーへ問い合わせ, 回答が返ってきたらそれを nslookup へ返します。

今回の場合, asao.gcd.org 上のネーム・サーバーは gcd.org ドメインのすべてのホスト名のIPアドレスを知っていますから, (1)の場合に該当します。 単に知っているIPアドレスをそのまま返すだけですから, 単純ですね。 では知らない場合はどうなるでしょうか。 例えば, 図3 の例のように知らないホスト名への問い合わせがあると, ネーム・サーバーは他のネーム・サーバーへ問い合わせるのですが, やみくもに問い合わせても回答が得られるとは限りません*9。 そこで, 最初に問い合わせるべきネーム・サーバーが決まっています。 この, 最初の窓口的ネーム・サーバーのことを, ルート(root)・サーバー*10と呼びます。


% nslookup dns.cybird.ne.jp.
Server: asao.gcd.org
Address: 0.0.0.0

Name: dns.cybird.ne.jp
Address: 210.156.250.253

図3 他のネーム・サーバーへの問い合わせ
自分の知らない情報を他のネーム・サーバーに問い合わせて解決している例です。

ルート・サーバー

ルート・サーバーの一覧を得るには, 図4のように nslookup を実行します。 実行結果のうち,a.root-servers.net から m.root-servers.net までの 13個のネーム・サーバーがルート・サーバーです。 ルート・サーバーは全世界からの問い合わせに迅速に回答できるように, 13個もあって, それぞれインターネットの要所に配置されています。


% nslookup -q=ns .
Server: asao.gcd.org

Address: 0.0.0.0
Non-authoritative answer:
(root) nameserver = L.ROOT-SERVERS.NET
(root) nameserver = M.ROOT-SERVERS.NET
(root) nameserver = I.ROOT-SERVERS.NET
(root) nameserver = E.ROOT-SERVERS.NET
(root) nameserver = D.ROOT-SERVERS.NET
(root) nameserver = A.ROOT-SERVERS.NET
(root) nameserver = H.ROOT-SERVERS.NET
(root) nameserver = C.ROOT-SERVERS.NET
(root) nameserver = G.ROOT-SERVERS.NET
(root) nameserver = F.ROOT-SERVERS.NET
(root) nameserver = B.ROOT-SERVERS.NET
(root) nameserver = J.ROOT-SERVERS.NET
(root) nameserver = K.ROOT-SERVERS.NET

Authoritative answers can be found from:
L.ROOT-SERVERS.NET internet address = 198.32.64.12
M.ROOT-SERVERS.NET internet address = 202.12.27.33
I.ROOT-SERVERS.NET internet address = 192.36.148.17
E.ROOT-SERVERS.NET internet address = 192.203.230.10
D.ROOT-SERVERS.NET internet address = 128.8.10.90
A.ROOT-SERVERS.NET internet address = 198.41.0.4
H.ROOT-SERVERS.NET internet address = 128.63.2.53
C.ROOT-SERVERS.NET internet address = 192.33.4.12
G.ROOT-SERVERS.NET internet address = 192.112.36.4
F.ROOT-SERVERS.NET internet address = 192.5.5.241
B.ROOT-SERVERS.NET internet address = 128.9.0.107
J.ROOT-SERVERS.NET internet address = 198.41.0.10
K.ROOT-SERVERS.NET internet address = 193.0.14.129

図4 nslookupコマンドでルート・サーバーの一覧を得る
ルート・サーバーは,インターネットでのDNS情報の問い合わせ窓口です。

試しに,m.root-servers.net(日本に配置されています)に対して 問い合わせてみましょう。 問い合わせ先を設定するには nslookup の会話モード(「>」のプロンプト)で 「server サーバー名」と指定します。 問い合わせを行うと, このルート・サーバーは図5のように返事をします。 つまり, ルート・サーバーは「dns.cybird.ne.jp の IP アドレスなんて知らないけど, *.jpだったら dns0.spin.ad.jp などのネーム・サーバーに問い合わせてみては」 と言っているわけです。


% nslookup
Default Server: asao.gcd.org
Address: 0.0.0.0

> server m.root-servers.net
Default Server: m.root-servers.net
Address: 202.12.27.33

> dns.cybird.ne.jp.
Server: m.root-servers.net
Address: 202.12.27.33

Name: dns.cybird.ne.jp
Served by:
- DNS0.SPIN.AD.JP
  165.76.0.98
   JP
- NS-JP.SINET.AD.JP
  150.100.2.3
   JP
- NS.WIDE.AD.JP
  203.178.136.63
   JP
- NS0.IIJ.AD.JP
  202.232.2.34
   JP
- NS0.NIC.AD.JP
  202.12.30.131
   JP
- NS-JP.NTT.NET
  210.175.162.226
   JP

図5 ルート・サーバーへの問い合わせ
ネーム・サーバーを指定して問い合わせを行うには,
nslookupコマンドの会話モードを利用します。

インターネットに接続しているホストの数は極めて多く, ルート・サーバーがインターネットの全ホストのIPアドレスを記憶することは 到底不可能です。 そこで, ドメインごとに他のネーム・サーバーへ管理権限を委譲しています(図6)。 この例で言えば, 末尾が jp で終わるドメインの管理を「dns0.spin.ad.jp」 などへ委譲しているわけです。

ネーム・サーバーの管理権限委譲モデル
図6 ネーム・サーバーの管理権限委譲モデル
管理権限を委譲されたネーム・サーバーは, そのドメイン内の情報について責任を持ちます。

というわけで, dns0.spin.ad.jp に問い合わせてみましょう。 nslookup コマンドの会話モードで続けて図7のように入力します。 結果を見ると分かるように, めでたく dns.cybird.ne.jp の IP アドレス「210.156.250.253」が得られました。 ここで, 回答の前に「Non-authoritative answer:」と出力されていることに注意してください。 直訳すれば「信頼すべき筋からの回答ではない」という意味になります。


> server dns0.spin.ad.jp
Default Server: dns0.spin.ad.jp
Address: 165.76.0.98

> dns.cybird.ne.jp.
Server: dns0.spin.ad.jp
Address: 165.76.0.98

Non-authoritative answer:
Name: dns.cybird.ne.jp
Address: 210.156.250.253

図7 目的のIPアドレスが得られる
管理権限を持つネーム・サーバーへの問い合わせで,
目的の情報が得られました。

信頼すべき筋

これは, dns0.spin.ad.jp が以前 dns.cybird.ne.jp の IP アドレスを 他のネーム・サーバーに問い合わせたことがあって, その時の結果を覚えていたので, (新たに問い合わせすることなく)覚えていた内容をそのまま返した, ということを意味します。 もしかするとこの瞬間には dns.cybird.ne.jp の IP アドレスが 変化しているかも知れないので, 信頼できる回答ではない, と言っているわけです。

このような, 一度問い合わせたときの結果を覚えておく仕掛けを 一般に「キャッシュ」と呼びますが, キャッシュによって DNS は 特定のネーム・サーバーに負荷が集中することを防いでいます。 キャッシュされた情報だというだけの意味ですから, 信頼すべき筋からの回答ではなくても全く問題はありませんが, ここでは実験として信頼すべき筋(ネーム・サーバー)を調べてみましょう。 それには検索対象をネーム・サーバーに設定して(set type=ns), 問い合わせます(図8)。


> set type=ns
> dns.cybird.ne.jp.
Server: dns0.spin.ad.jp
Address: 165.76.0.98

Authoritative answers can be found from:
cybird.ne.jp
    origin = dns.cybird.ne.jp
    mail addr = root.dns.cybird.ne.jp
    serial = 20000126
    refresh = 1800 (30M)
    retry = 900 (15M)
    expire = 3600000 (5w6d16h)
    minimum ttl = 1800 (30M)

図8 信頼できるネーム・サーバーの検索
どのネーム・サーバーから信頼できる回答が得られるのかを調べています。

「Authoritative answers can be found from:cybird.ne.jp」 という出力が得られています。 これを直訳すれば「信頼すべき回答は cybird.ne.jp の ネーム・サーバーから得られる」となります。

そこでまずは, cybird.ne.jp のネーム・サーバーを調べましょう(図9)。 またもや「Non-authoritative answer:」という答えですが, 信頼すべき筋が「dns.cybird.ne.jp」と「ns.ipro.ad.jp」であることが分かりました。 つまり, dns0.spin.ad.jp は cybird.ne.jp ドメインに関する管理権限を, 「dns.cybird.ne.jp」と「ns.ipro.ad.jp」に委譲しているわけです。


> cybird.ne.jp.
Server: dns0.spin.ad.jp
Address: 165.76.0.98

Non-authoritative answer:
cybird.ne.jp nameserver = dns.cybird.ne.jp
cybird.ne.jp nameserver = ns.ipro.ad.jp

Authoritative answers can be found from:
dns.cybird.ne.jp internet address = 210.156.250.253
ns.ipro.ad.jp internet address = 203.179.10.4

図9 cybird.ne.jpのネーム・サーバーを調査
dns0.spin.ad.jp は cybird.ne.jp ドメインに関する管理権限を,
「dns.cybird.ne.jp」と「ns.ipro.ad.jp」に委譲しています。

権限を持つネーム・サーバーが分かったので, 検索対象を IP アドレスに戻して(set type=a), dns.cybird.ne.jp に問い合わせてみます(図10)*11。 これで, めでたく信頼すべき情報「210.156.250.253」が得られました。


> set type=a
> server dns.cybird.ne.jp.
Default Server: dns.cybird.ne.jp
Address: 210.156.250.253

> dns.cybird.ne.jp.
Server: dns.cybird.ne.jp
Address: 210.156.250.253

Name: dns.cybird.ne.jp
Address: 210.156.250.253

図10 信頼すべき情報の入手
権限を持つネーム・サーバーから,
信頼すべき情報「210.156.250.253」が得られました。

さて, DNSの仕掛けが一通り分かったところで, ドメイン登録業者の話に戻ります。 ドメイン登録業者が何をするかというと, 一言で言えばドメインの管理権限を委譲してくれるのです。

例えば私が gcd.org ドメインを登録するときは, まず gcd.org ドメインに関する問い合わせに答えることができる ネーム・サーバーを立ち上げます。 そしてネーム・サーバーのホスト名(ns.gcd.org)と IP アドレス(210.145.125.162)をドメイン登録業者へ申請します。

するとドメイン登録業者は, gcd.org ドメインに関する管理権限を ns.gcd.org へ委譲してくれるのです。 この結果, ルート・サーバーに gcd.org に関する問い合わせが届くと, 管理権限委譲の連鎖をたどって 最終的に ns.gcd.org に対して問い合わせが行われます。

逆に言えばルート・サーバーと管理権限委譲の連鎖によって つながっていなくてもよいのなら, ドメイン登録業者に申請する必要はありません。 組織内で独自のルート・サーバー*12 を立ち上げる場合などがこれに当たります。

とは言っても, ドメイン登録業者への申請は, Webで簡単にできますから, 常時接続環境を持っていて, 独自ドメインをまだ持っていない人はぜひ申請してみて下さい。 大抵の業者が, ネーム・サーバーのホスト名と IP アドレス, それに管理者の名前とメール・アドレスと住所・電話番号を Web で送信するだけで済みます*13。

つい先日, 新興のドメイン登録業者*14を使って sengoku.org ドメインを取得してみたのですが, 初めて利用したにもかかわらず, 申請完了まで数分*15しかかかりませんでした。

*9
下手な鉄砲数打ちゃあたる式で問い合わせまくられたら迷惑ですね。
*10
世の中には,ルート(route)・サーバーというのもあるので, カタカナで書くと紛らわしいです。
*11
dns.cybird.ne.jp の IP アドレスを, 当の dns.cybird.ne.jp に問い合わせているのですから, ちょっと間抜けな話ですね。 これもひとえに「信頼すべき情報」を得るためです。
*12
alternic.net のように組織をこえて利用可能な 独自ルート・サーバーもありました。
*13
クレジット・カードを持っていれば支払いまで Web でできます。 残念ながら *.jp ドメインの登録を行う JPNIC は, あまり簡単ではありません。 ドメイン登録にあたって印鑑登録証明書などの身元を証明する書類が 必要になります。 しかも登録料を JPNIC へ直接支払うことはできず, JPNIC 会員が代行して支払う仕組みになっています。
*14
CSL GmbH(http://joker.com/)を利用しました。 CSL GmbHは, 正確に言うと登録業者というよりは, CORE(Internet COuncil of REgistrars)の再販業者です。 年間登録料が12ユーロと, Network Solutions Inc. のような老舗のドメイン登録業者(年間35米ドル)と 比べると大変安くなっています。 ちなみに JPNIC は, NTT(JPNIC会員)経由で支払う場合で年間 5000 円です。
*15
約款を熟読する場合は, もう少し必要かも知れません。

(ネーム・サーバーの 2 つのタイプ)


本稿は日経Linux 2000 年 5 月号に掲載された、 実践で学ぶ、一歩進んだサーバ構築・運用術, 第 2 回「ネームサーバ (前編)」を日経BP 社の許可を得て転載したものです。

Copyright(C)2000 by 仙石浩明 <sengoku@gcd.org>
無断転載を禁じます

| home | up |

sengoku@gcd.org