DNSサーバーを立ち上げよう! 

  Lesson1で、「インストール時にBindのインストールも同時に行わなければならない、そしてDNSのサービス機能を働かせる為の設定を行なわなければなりません。そこでその欄には、192.168.0.100と設定し、・・・。このサーバーはDNSのサービス機能を持ったサーバーつまりDNSサーバーにしなければならないと言う事になります。」という説明がありましたね。そしてLesson2では、「DNSのサービスが起動していなくてもホームページサーバーのサービス提供が受けられる」と言う説明もありました。はて、DNSとはどういう役割をしているのでしょうか?。それでは、その当たりから説明して行きましょう。
 ドメイン名とは? 
ネットワーク上に存在するホストつまりパソコンについている名前ここでは、PC1やPC2そしてSV1などがホスト名です。そしてそれらを一つの単位とした時に名前が必要です、グループ名みたいなものです。それにつける名前のことをドメイン名といいます。実際にインターネット上で運用する場合には、ドメインを管理している団体があります、そこにそのグループの名前ドメイン名の割り当てをしてもらわなくてはなりません。インターネット上では、全て管理されているからです。どのような管理団体があるかは、自分で調べて見てください。今回の実地検証ではまだドメイン名を決めていませんでしたね。実際には、インターネットに接続しませんので管理外の名前をつけて見ましょう。
なんて名前にしましょうか?  sample.con  とでもしましょう、実際にはありえませんが。

 図2のグリーンの枠のエリアが、sample.con です。

 PC1のホスト名は、pc1.sample.con.  、pc2のホスト名は、pc2.sample.con. 、sv1のホスト名は、sv1.sample.con. となります。
この名前をFQDN完全なるドメイン名といいます。注:CONのあとに "."ドットがついているのを見落としなく、重要です。

 このFQDNをIPアドレスに変換し、要求元に伝えるのがDNSサーバーの役割なのです。ですから、実際にはDNSサーバーがなくてもIPアドレスさえ分かっていれば必要ないのです。ただし、ひとつのIPアドレスを複数のドメイン名に割り当てている場合があります、いわゆるバーチャルホストです。ですから必ずしもまったく不要なわけではなく別なサービスも提供しているのでうまく利用するということになります。

 ネームサーバーの構築 

 BINDの起動

 Kメニューからデーモン設定ツールを起動させましょう。そしてnamedを探してください。stop状態になっていると思います、クリックしてrunning状態にさせましょう。これでDNSサーバーの出来上がりです。かんたん簡単

  ただこれだけではなんだかわかりませんね。では、pc1からpingを打って見ましょう。コマンドプロンプトから ping sv1.sample.con  enter。多分 Request timed out  のメッセージです。でも ping 192.16.0.100だとちゃんと返事が返ってきますよね。そうです、DNSサーバーは起動していても設定されていないので名前の解決が出来ないのです。それでは、設定の作業に入ります。

 BINDの設定

 必要な設定ファイル

ファイル名 内容
/etc/resolv.conf クライアントがDNSを使用する場合、
DNSサーバのIPアドレスを設定するファイル。
(このファイルはDNSサーバーを起動するためには必要ありません。)
/etc/named.conf namedの動作を設定する基本ファイル。
/var/named/named.root 名前解決のためのヒントとなるルートネームサーバーの情報ファイル。
/var/named/localhost.zone localhostの正引きファイル。
/var/named/0.0.127.rev localhostの逆引きファイル。
/var/named/sample.con.zone sample.conの正引きゾーンファイル。
/var/named/0.168.192.rev sample.conの逆引きゾーンファイル。

以上7つの設定ファイルが必要です。

 「 resolv.conf 」 下記のように設定して下さい。

domain sample.con
nameserver 192.168.0.100

  「 named.conf 」 下記のように設定して下さい。

options {
directory "/var/named";

zone "." IN {
type hint;
file "named.root";
};

zone "localhost" IN {
type master;
file "localhost.zone";
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "0.0.127.rev";
};

zone "sample.con" IN {
type master;
file "sample.con.zone";
};

zone "0.168.192.in-addr.arpa" IN {
type master;
file "0.168.192.rev";
};

  「 named.root 」 このファイルは、下記のサイトよりダウンロードしてください。

ftp://ftp.rs.internic.net/domain/named.root

対象をファイルに保存を選んでください。保存されたファイルが、named.root.txtにったら、名前の変更で、.txtを削除してください。

「 localhost.zon 」 下記のように設定して下さい。

$TTL 86400
$ORIGIN localhost.
localhost.    1D   IN   SOA  sv1.sample.con    ?????.aaaa.co.jp. (
                                   2003020101
                                   3H
                                   15M
                                   1W
                                   1D )
;
                         1D      IN     NS      sv1.sample.con.
                         1D      IN     A        127.0.0.1

  注: " ?????.aaaa.co.jp. "は、実際に利用できるメールアドレスを記入してください。ただし@の部分は"."になります。 

「 0.0.127.rev 」 下記のように設定して下さい。

$ORIGIN 0.0.127.in-addr.arpa.
$TTL 86400
0.0.127.in-addr.arpa.            IN      SOA      localhost.      root.localhost. (
                                                     2003020101
                                                     3H
                                                     15M
                                                     1W
                                                     1D )

                                            IN      NS        localhost.
1                                          IN      PTR      localhost.

 「 sample.con.zone 」 下記のように設定して下さい。

$ORIGIN sample.con.
$TTL 86400
@           1D  IN   SOA    sv1.sample.con  ?????.aaaa.co.jp. (
                          2003020101
                          3H
                          15M
                          1W
                          1D )
sample.con.     1D  IN  NS     sv1.sample.con.
gw           1D  IN  A      192.168.0.1
sv1          1D  IN  A      192.168.0.100
www          1D  cname      sv1.sample.con.

 「 0.168.192.rev 」 下記のように設定して下さい。

$ORIGIN 0.168.192.in-addr.arpa.
$TTL 86400
@      1D   IN    SOA   sv1.sample.con    ?????.aaaa.co.jp. (
                       2003020101
                       3H
                       15M
                       1W
                       1D )
       1D   IN    NS    sv1.sample.con.
1      1D   IN    PTR   gw.sample.con.
100     1D   IN    PTR   sv1.sample.con.
100     1D   IN    PTR   www.sample.con.

上記ファイルがダウンロードできます。良かったら参考にしてください。(6/27修正)

 BINDの再起動

 設定ファイルはそれぞれのディレクトリーに格納しましたか?それではBINDを再起動して設定を反映させましょう。

 Kメニューからデーモン設定ツールを起動させましょう。そしてnamedを探してください。running状態になっていると思います、クリックしてstop状態に一度してからrunning状態にさせましょう。これでDNSサーバーの設定完了です。

もし上手く起動できない場合は、もう一度設定ファイルの確認とそれぞれのファイルが、指定のディレクトリー内にあるか確認してください。それでもわからない場合は、/var/log/messages ファイルを見て、namedと書いてある行を追って見てください、何かヒントになるメッセージが出ていると思います。それを頼りにしてエラーを探してください。

 DNSクライアントの設定 
DNSサーバーの動作確認のため、nslookupというコマンドを使用します。DNSが正しく設定されているかどうか確実に行うためには、クライアントの設定を確実に行う必要があります。それでは、上記で設定した内容が動作するかどうか順を追って検証していきましょう。

 DNSクライアントの設定 「 resolv.conf 」

 上記で設定したファイル「 resolv.conf 」を確認して見ましょう。この内容が正確に記述してあればDNSクライアントの設定完了です。

実は、ここで設定される内容は、インストール時に入力した値が反映されます。それは、ネットワーク設定で、1番目のDNSという項目に入力した値です。次の項目に出てくるnameserver xxx.xxx.xxx.xxxの部分なのです。

 domainディレクティブ

 domain sample.conの行ですが、DNSクライアントが属するドメイン名を意味するローカルドメイン名を定義します。
今回は、sample.conがローカルドメイン名です。注:ローカルドメイン名の最後に"."ドットは付けない
この記述により、ホスト名のみの問い合わせの場合、ローカルドメイン名が補正される。たとえば、wwwとアクセスした場合、www.sample.conとしてアクセスします。

 nameserverディレクティブ

 nameserver 192.168.0.100の行ですが、DNSクライアントが問い合わせを行うリゾルバーのネームサーバーを指定します。設定例のようにホスト名ではなく、IPアドレスを設定します。
今回は、自分自身(localhost)がリゾルバーのネームサーバーになっているので、127.0.0.1でも良いのですが、今回の例のように、192.168.0.100でもokです。

 リゾルバーのネームサーバーとは、DNSクライアントから名前の解決を依頼された場合、ルートネームサーバーから順々にドメインを管理しているネームサーバーに対して問い合わせを行い実際に名前の解決を行う再帰型検索を行うサーバーのとこで、ここでは、SV1がこのサーバーに該当します。DNSサーバーの仕組みを理解していることが重要ですが、このあとの検証でも多少理解できると思います。さらに詳しくは、技術書等で学習してください。

 NSLOOKUPを使った検証 
DNSサーバに対してデーターの問い合わせを行うプログラムで、対話型とコマンドライン型の2種類があり、対話型が多く利用されます。今回の検証では、この対話型で行って行きましょう。

 nslookupの起動

 今あなたは、どのマシンの前にいますか?DNSクライアントを設定したマシン(sv1)の前にいますか?それともPC01の前にいますか?今回はまず、sv1からの検証を行うことにしましょう。では、ターミナルを開いてください。 [turbo@sv1 turbo]$ にカーソルがなりましたか?では、nslookup と入力しenter。何やらメッセージが出てカーソルが ">"  になりましたね。これで対話型のnslookupの起動が完了です。あとはコマンドを打って検証していきましょう。

 server と入力しenterしてください。

> server
Default server: 192.168.0.100
Address: 192.168.0.100#53
>

こんな感じになりましたか?
Default server: 192.168.0.100この行が、これから問い合わせをするサーバーです。
Address: 192.168.0.100#53この行が、ipアドレスとポート番号をあらわしています。

 localhost と入力しenterしてください。

> localhost
Server: 192.168.0.100
Address: 192.168.0.100#53

Name: localhost
Address: 127.0.0.1
>

こんな感じになりましたか?
Name: localhostこの行が、ホスト名です。
Address: 127.0.0.1この行が、ipアドレスです。

 www.sample.con と入力しenterしてください。

> www.sample.con
Server: 192.168.0.100
Address: 192.168.0.100#53

www.sample.con canonical name = sv1.sample.con.
Name: sv1.sample.con
Address: 192.168.0.100
>

こんな感じになりましたか?
www.sample.con canonical name = sv1.sample.con. この行は、sv1.sample.conの別名が、www.sample.conですと言う意味です。
これは、ドメイン名からipアドレスを解決する正引きと言います。

 192.168.0.100 と入力しenterしてください。

> 192.168.0.100
Server: 192.168.0.100
Address: 192.168.0.100#53

100.0.168.192.in-addr.arpa name = www.sample.con.
100.0.168.192.in-addr.arpa name = sv1.sample.con.
>

こんな感じになりましたか?
100.0.168.192.in-addr.arpa name = www.sample.con.と100.0.168.192.in-addr.arpa name = sv1.sample.con.は、同じipアドレスを使っていることが判ります。
これは、ipアドレスからドメイン名を解決する逆引きと言います。

 ここまで来れば内部での名前解決は出来たことになります。続いて外部の情報を引いて見ましょう。

 外部ネームサーバー情報の引き出し

 set type=ns 入力しenterしてください。
"."ドットを入力しenterしてください。

> set type=ns
> .
Server: 192.168.0.100
Address: 192.168.0.100#53

Non-authoritative answer:
. nameserver = i.root-servers.net.
. nameserver = j.root-servers.net.
. nameserver = k.root-servers.net.
. nameserver = l.root-servers.net.
. nameserver = m.root-servers.net.
. nameserver = a.root-servers.net.
. nameserver = b.root-servers.net.
. nameserver = c.root-servers.net.

. nameserver = d.root-servers.net.
. nameserver = e.root-servers.net.
. nameserver = f.root-servers.net.
. nameserver = g.root-servers.net.
. nameserver = h.root-servers.net.

Authoritative answers can be found from:
b.root-servers.net internet address = 128.9.0.107
c.root-servers.net internet address = 192.33.4.12
d.root-servers.net internet address = 128.8.10.90
e.root-servers.net internet address = 192.203.230.10
g.root-servers.net internet address = 192.112.36.4
h.root-servers.net internet address = 128.63.2.53
i.root-servers.net internet address = 192.36.148.17
l.root-servers.net internet address = 198.32.64.12
m.root-servers.net internet address = 202.12.27.33
>

こんな感じになりましたか?
これは、ルートドメインへns(ネームサーバー)を問い合わせた結果です。ルートドメインが管理しているネームサーバーの一覧が表示されます。
> set type=ns は、nsレコードを検索しますと言うことです。
> .で、ルートドメインを管理しているns(ネームサーバー)を問い合わせると言う意味です。その後に出てきたnameserver = i.root-servers.net.はルートドメインを管理しているサーバー名で、i.root-servers.net internet address = 192.36.148.17がipアドレスです。ということで、ルートドメインを管理しているサーバーは13台で管理していると言うことがわかりますね。これは、ラウンドロビンと言われる手法で、一つのホスト名に対して複数のipアドレスを定義し、負荷分散を目的として行います。用途は、DNSサーバーやウェブサーバー等によく用いられています。この辺の所も詳しく知りたい方は、技術書を参考にしてください。
つまり、ルートドメイン"."は、a.root-servers.net.からなる13台のネームサーバーにて管理されていると言う事です。

続いて、ではルートドメイインの配下にあるcom.ドメインを管理しているネームサーバーを問い合わせて見ましょう。
 server a.root-servers.net. と入力しenterしてください。
com. と入力しenter

> server a.root-servers.net.
Default server: a.root-servers.net.
Address: 198.41.0.4#53
> com.
Server: a.root-servers.net.
Address: 198.41.0.4#53

Non-authoritative answer:
com nameserver = H.GTLD-SERVERS.NET.
com nameserver = C.GTLD-SERVERS.NET.
com nameserver = I.GTLD-SERVERS.NET.
com nameserver = B.GTLD-SERVERS.NET.
com nameserver = D.GTLD-SERVERS.NET.
com nameserver = L.GTLD-SERVERS.NET.
com nameserver = F.GTLD-SERVERS.NET.
com nameserver = J.GTLD-SERVERS.NET.

com nameserver = K.GTLD-SERVERS.NET.
com nameserver = E.GTLD-SERVERS.NET.
com nameserver = M.GTLD-SERVERS.NET.
com nameserver = A.GTLD-SERVERS.NET.
com nameserver = G.GTLD-SERVERS.NET.

Authoritative answers can be found from:
H.GTLD-SERVERS.NET internet address = 192.54.112.30
C.GTLD-SERVERS.NET internet address = 192.26.92.30
I.GTLD-SERVERS.NET internet address = 192.43.172.30
B.GTLD-SERVERS.NET internet address = 192.33.14.30
D.GTLD-SERVERS.NET internet address = 192.31.80.30
L.GTLD-SERVERS.NET internet address = 192.41.162.30
F.GTLD-SERVERS.NET internet address = 192.35.51.30
J.GTLD-SERVERS.NET internet address = 192.48.79.30
K.GTLD-SERVERS.NET internet address = 192.52.178.30
E.GTLD-SERVERS.NET internet address = 192.12.94.30
M.GTLD-SERVERS.NET internet address = 192.55.83.30
A.GTLD-SERVERS.NET internet address = 192.5.6.30
G.GTLD-SERVERS.NET internet address = 192.42.93.30
>

こんな感じになりましたか?
最初の行(server a.root-servers.net.)は、serverコマンドにより、問い合わせをするサーバーを指定します。次のcom. は、com.を管理しているネームサーバーを問い合わせた結果です。comドメインをが管理しているネームサーバーの一覧が表示されます。

 それでは、管理者独自に取得したドメインparterre.cc.の正引きを一気に見てみましょう。

> cc.
Server: ns1.seattle.us.netdns.com
Address: 206.253.214.13




cc nameserver = L3.NSTLD.COM
cc nameserver = ns1.globaldns.COM
cc nameserver = ns1.newyork.us.netdns.COM
cc nameserver = ns1.sanfrancisco.us.netdns.COM
cc nameserver = ns1.seattle.us.netdns.COM
cc nameserver = ns1.tokyo.jp.netdns.COM
cc nameserver = ns1.london.uk.netdns.COM
cc nameserver = A3.NSTLD.COM
cc nameserver = B3.NSTLD.COM
cc nameserver = C3.NSTLD.COM
cc nameserver = D3.NSTLD.COM
cc nameserver = E3.NSTLD.COM
cc nameserver = F3.NSTLD.COM
cc nameserver = G3.NSTLD.COM
ns1.globaldns.COM internet address = 206.253.214.11
ns1.globaldns.COM AAAA IPv6 address = ::ffff:206.253.214.11
ns1.newyork.us.netdns.COM internet address = 216.32.212.86
ns1.newyork.us.netdns.COM AAAA IPv6 address = ::ffff:216.32.212.86
ns1.sanfrancisco.us.netdns.COM internet address = 207.82.50.166
ns1.sanfrancisco.us.netdns.COM AAAA IPv6 address = ::ffff:207.82.50.166
> server ns1.seattle.us.netdns.COM
Default Server: ns1.seattle.us.netdns.COM
Address: 206.253.214.13

> parterre.cc
Server: ns1.seattle.us.netdns.COM
Address: 206.253.214.13

Non-authoritative answer:
parterre.cc nameserver = NS1.parterre.cc

NS1.parterre.cc internet address = 61.122.81.83
> server NS1.parterre.cc
Default Server: NS1.parterre.cc
Address: 61.122.81.83

> set type=a
> parterre.cc
Server: NS1.parterre.cc
Address: 61.122.81.83



Name: parterre.cc
Address: 61.122.81.83

以上でnslookupの検証実習を終了します。色んなドメインがありますので、実験してみてください。

これであなたのDNSサーバーは立ち上がっている状態にあります。ただしこれはあくまでもLAN側からの検索でWAN側からは検索してもらえません。それには、ホスティングサービスをしている会社に正式なドメインを取得してからの話になります。また、自宅内にDNSサーバーを自前で構築するには固定IPアドレスが必要になります(ダイナミックDNSを使う場合は別ですが)。さらにセキュリティを考えて設定しなければなりません。今回の検証では、動作確認と実際の原理を多少学んだだけです。色々な実験をし、検証を重ねて自信が持てるようになってからでも遅くありません。じっくり研究してから行ってください。

PC1からDNSサーバーを利用してみよう
それでは、DNSサーバーが立ち上がったところで、PC1から実際にDNSサーバーを利用して見ましょう。利用する内容は、本当にこのサーバーが外部ドメインの名前解決をしてくれているかどうか確かめることです。

 PC1のTCP/IPの設定 (windows2000の場合)

 通常は、プロパイダーからDNSサーバーを指定されたアドレスを設定するか、DHCP機能により自動的に設定されています。
  まずいまどのような設定になっているか確認してみましょう。

 コマンドプロンプトから ipconfig -all と入力してください。下図

こんな感じで出力したと思います。
そこで、みてほしいところが、DHCP Server と DNS Sserversのところです。
この場合、DHCPのサーバーとDNSサーバー及びデフォルトゲートウェイが同じIPアドレスになっています。と言うことは1台のサーバーで3つの仕事をしてすべてそこを利用する設定になってるということです。そこで、DNSサーバーのみを今回設定したサーバーに変更して見ましょう。

TCP/IPのプロパティを下図のように変更してください。

設定前
設定後

 コマンドプロンプトから ipconfig -all と入力してください。下図

どうでしょうか?DNS ServerのところのIPアドレスが192.168.0.100に変更されましたね。
それでは、まずpingを打って見ましょう。

コマンドプロンプトからping www.sample.con と入力して見ましょう。下図

どうでしょうか? ちゃんと返事が返ってきましたでしょうか?上手く返事が返ってくれば成功です。このままインターネットの検索を行っても上手くいくでしょう。本当にこのサーバーが動いているかどうかは、DNSサーバーを停止してみてください。そしてインターネットに接続してみてください、その時の注意としてPC側にキャッシュが残っている場合がありますので、一度もアクセスしたことの無いサイトへアクセスしてみてください。するとちゃんとエラーで帰ってきます。そしたらもう一度DNSサーバーを起動して同じところをアクセスしてみてください。今度はちゃんとアクセスできるはずです。

 sample.conのサイトにアクセス
  今までは、http://192.168.0.100 と入力してapacheにアクセスしていたと思いますが、DNSサーバーを起動したことにより
  http://www.sample.con でアクセスできるようになります。ためしてみてください。

 DNSサーバーの使い道 
 せっかくDNSサーバーまで立ち上げたのにうまい利用方法はないのでしょうか?
たぶん今のところ必要ないと思います。今後利用しるとしたら、zone内のpcが増えてきた時、サーバーが2台以上になる時、独自ドメインを取得し、尚且つDNSサーバーを自前で構築する場合、などなど限られてしまいます。現段階で利用するとしたら、ローカルネット内でバーチャルドメインを作ってドメインごとにホームページのアクセス先を変えることぐらいでしょうか?・・・つまり、ipアドレスでPCが特定できれば必要が無く、ホスト名やドメイン名を駆使してPCを特定するような使い方をする場合に必要になります。
 今後サーバーを構築していく上でDNSの動作原理が分かっていれば次のステップがかなり楽になるはずです、色々試行錯誤し技術を確立していってください。まだ始まったばかりです。
本サイト利用者数は名です。本日は名、 昨日は名の受講ありがとうございます.
TOPページへ  Lesson3  ファイルのアップロード Lesson5 コマンドによるデーモンの起動及び停止
Since 2003/2/8  Copyright(C) 2003 Parterre.homelinux.net All Rights Reserved.