前のページ 次のページ 目次

3. 単純なドメイン

あなた自身のドメインの設定方法

このセクションを本当に始める前に、DNSを動かすための定石を いくつか挙げておきます。役に立つので是非読みましょう。読みたくない場合 でも、少なくとも流し読みくらいはしておいてください。 流し読みはnamed.bootファイルについての箇所に来るまでです。

DNS は階層的システムです。その頂点は `.' と記述され、'root'と 発音されるものです。'.'の下にはたくさんのトップレベルドメイン(TLD)があ ります。ORG, COM, EDU や NET などが有名ですが、他にもたくさんあります。 あなたがホストprep.ai.mit.edu のアドレスを問い合わせると、あなた のドメインのネームサーバは edu を担当するネームサーバを見つけなければ なりません。このとき、まず.のサーバに対する問い合わせが行われ、 .のサーバからeduのサーバの一覧が得られます。これを具体例を挙げて 説明します。


$ nslookup

Default Server:  localhost

Address:  127.0.0.1



> server c.root-servers.net.

Default Server:  c.root-servers.net

Address:  192.33.4.12

ルートサーバに問い合わせます。


> set q=ns


> edu.

問い合わせのタイプ(Query type)をNS(name server records)にします。


> edu.

最後についている '.' は重要です。これは、現在問い合わせを行っている edu は '.' の直下にあることを示し、検索をいくらか絞りこみます。


Server:  c.root-servers.net

Address:  192.33.4.12



edu     nameserver = E.ROOT-SERVERS.NET

edu     nameserver = I.ROOT-SERVERS.NET

edu     nameserver = F.ROOT-SERVERS.NET

edu     nameserver = G.ROOT-SERVERS.NET

edu     nameserver = A.ROOT-SERVERS.NET

edu     nameserver = H.ROOT-SERVERS.NET

edu     nameserver = B.ROOT-SERVERS.NET

edu     nameserver = C.ROOT-SERVERS.NET

edu     nameserver = D.ROOT-SERVERS.NET

E.ROOT-SERVERS.NET      internet address = 192.203.230.10

I.ROOT-SERVERS.NET      internet address = 192.36.148.17

F.ROOT-SERVERS.NET      internet address = 39.13.229.241

G.ROOT-SERVERS.NET      internet address = 192.112.36.4

A.ROOT-SERVERS.NET      internet address = 198.41.0.4

H.ROOT-SERVERS.NET      internet address = 128.63.2.53

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

これは、*.root-servers.netedu.の名前を与えることを示す ので、cに問い合わせれば良いことがわかります。続いて、その次のドメ イン名の階層mit.edu.を担当するサーバを調べます:


> mit.edu.

Server:  c.root-servers.net

Address:  192.33.4.12



Non-authoritative answer:

mit.edu nameserver = STRAWB.mit.edu

mit.edu nameserver = W20NS.mit.edu

mit.edu nameserver = BITSY.mit.edu



Authoritative answers can be found from:

BITSY.mit.edu   internet address = 18.72.0.3

STRAWB.mit.edu  internet address = 18.71.0.151

W20NS.mit.edu   internet address = 18.70.0.160

steawbw20ns 及び bitsymitの名前を与えるので、 この中から一つを選んでai.mit.eduについての問い合わせを行います:


> server W20NS.mit.edu.

ホスト名は大文字でも小文字でも関係ないのですが、画面上でカット・アンド・ ペーストを行ったため、例における入力の大文字・小文字は nslookup の結果 と全く同じになっています。


Server:  W20NS.mit.edu

Address:  18.70.0.160



> ai.mit.edu.

Server:  W20NS.mit.edu

Address:  18.70.0.160



Non-authoritative answer:

ai.mit.edu      nameserver = WHEATIES.AI.MIT.EDU

ai.mit.edu      nameserver = ALPHA-BITS.AI.MIT.EDU

ai.mit.edu      nameserver = GRAPE-NUTS.AI.MIT.EDU

ai.mit.edu      nameserver = TRIX.AI.MIT.EDU

ai.mit.edu      nameserver = MUESLI.AI.MIT.EDU



Authoritative answers can be found from:

AI.MIT.EDU      nameserver = WHEATIES.AI.MIT.EDU

AI.MIT.EDU      nameserver = ALPHA-BITS.AI.MIT.EDU

AI.MIT.EDU      nameserver = GRAPE-NUTS.AI.MIT.EDU

AI.MIT.EDU      nameserver = TRIX.AI.MIT.EDU

AI.MIT.EDU      nameserver = MUESLI.AI.MIT.EDU

WHEATIES.AI.MIT.EDU     internet address = 128.52.32.13

WHEATIES.AI.MIT.EDU     internet address = 128.52.35.13

ALPHA-BITS.AI.MIT.EDU   internet address = 128.52.32.5

ALPHA-BITS.AI.MIT.EDU   internet address = 128.52.37.5

GRAPE-NUTS.AI.MIT.EDU   internet address = 128.52.32.4

GRAPE-NUTS.AI.MIT.EDU   internet address = 128.52.36.4

TRIX.AI.MIT.EDU internet address = 128.52.32.6

TRIX.AI.MIT.EDU internet address = 128.52.38.6

MUESLI.AI.MIT.EDU       internet address = 128.52.32.7

MUESLI.AI.MIT.EDU       internet address = 128.52.39.7

これで、weaties.ai.mit.eduai.mit.eduのネームサーバの一つで あることがわかります。


> server WHEATIES.AI.MIT.EDU.

Default Server:  WHEATIES.AI.MIT.EDU

Addresses:  128.52.32.13, 128.52.35.13

ネームサーバを見つけたので、ここで、問い合わせのタイプを変更します。 ホストwheatiesがprep.ai.mit.eduについて知っていること全てを問い合 わせることにしましょう。


> set q=any

> prep.ai.mit.edu.

Server:  WHEATIES.AI.MIT.EDU

Addresses:  128.52.32.13, 128.52.35.13



prep.ai.mit.edu CPU = dec/decstation-5000.25    OS = unix

prep.ai.mit.edu

        inet address = 18.159.0.42, protocol = tcp

         #21 #23 #25 #79

prep.ai.mit.edu preference = 1, mail exchanger = life.ai.mit.edu

prep.ai.mit.edu internet address = 18.159.0.42

ai.mit.edu      nameserver = alpha-bits.ai.mit.edu

ai.mit.edu      nameserver = wheaties.ai.mit.edu

ai.mit.edu      nameserver = grape-nuts.ai.mit.edu

ai.mit.edu      nameserver = mini-wheats.ai.mit.edu

ai.mit.edu      nameserver = trix.ai.mit.edu

ai.mit.edu      nameserver = muesli.ai.mit.edu

ai.mit.edu      nameserver = count-chocula.ai.mit.edu

ai.mit.edu      nameserver = life.ai.mit.edu

ai.mit.edu      nameserver = mintaka.lcs.mit.edu

life.ai.mit.edu internet address = 128.52.32.80

alpha-bits.ai.mit.edu   internet address = 128.52.32.5

wheaties.ai.mit.edu     internet address = 128.52.35.13

wheaties.ai.mit.edu     internet address = 128.52.32.13

grape-nuts.ai.mit.edu   internet address = 128.52.36.4

grape-nuts.ai.mit.edu   internet address = 128.52.32.4

mini-wheats.ai.mit.edu  internet address = 128.52.32.11

mini-wheats.ai.mit.edu  internet address = 128.52.54.11

mintaka.lcs.mit.edu     internet address = 18.26.0.36

さて、.から始めて、ドメイン名の次の階層のネームサーバを見つけ るところまできました。もし、あなたがよそのサーバを使う代わりに自前の DNSサーバを使っていたならば、もちろんそのサーバは調べた情報を全てキャッ シュするので、しばらくの間はよそへ問い合わせる必要がなくなります。

いままでほとんど触れませんでしたが、非常に重要なドメイン in-addr.arpa があります。これは、`普通の'ドメインのようにネスト もします。in-addr.arpa はハック、優れたハックですが、単なるハック に過ぎません。これを使うことで、アドレスがわかっている時にホスト名を得 ることができます。あるマシンのアドレス192.128.52.43を知っている時、 named は 先程のprep.ai.mit.eduの例と同じように動作します: 最初にarpa. のサーバを見つけます。次にin-addr.arpa. のサーバ、 192.in-addr.arpa. のサーバ、128.192.in-addr.arpa. のサーバ、 find 52.128.192.in-addr.arpa. おサーバを見つけます。そして 43.52.128.192.in-addr.arpa.に対する必要なレコードを見つけます。 わかりますよね?(「はい」と言ってください。)

最初に少々不正確な説明をすると書きましたが、DNSはここに書いた文字通 りに動作するわけではありません。しかし、大体こんな感じです。

さて、我々独自のドメインを定義しましょう。ドメイン名は linux.bogus を作り、我々のマシン内に定義します。筆者は外部の 誰にも迷惑をかけないため、まったく嘘のドメイン名を使うことにします。

しかし、独自ドメインの定義を始める前に、namedにローカルホストについ て教えてやる必要があります。

ディレクトリ /var/named/pz (pz はプライマリゾーンを意味し ます) を作り、named.boot ファイルの最後に以下の行を付け加えます:



primary         0.0.127.in-addr.arpa            pz/127.0.0

primary         localhost                       pz/localhost

このファイル内ではドメイン名の最後に`.'を付けない点に注意してくだ さい。最初の行はpz/127.0.0ファイルを0.0.127.in-addr.arpa を定義するものとして指定します。このファイルは以下のような内容です:



$ORIGIN 0.0.127.IN-ADDR.ARPA.

@               IN      SOA     linux.bogus. hostmaster.linux.bogus. (

                                1       ; Serial

                                360000  ; Refresh

                                300     ; Retry

                                3600000 ; Expire

                                360000 )        ; Minimum

                        NS      ns.linux.bogus.

1                       PTR     localhost.

先程のnamed.bootの場合と違って、このファイル内ではドメイン名の 最後に`.'があることに注意してください。この`ゾーンファイル'は3つ の`リソースレコード`(resource records, RR)を含みます: つまり、SOA RR 、NS RR 、PTR RR です。SOA は start of authority の省略です。最初のレ コードの前に$ORIGIN 命令を置きます。各ゾーンファイルの最初に $ORIGIN 命令を置くことは良い例であると広く考えられています。

@は起点(origin)を意味する特別な記号なので、最初の行は実際には次のような意味 になります。


  0.0.127.IN-ADDR.ARPA  IN      SOA ...

NSは Name Server RR の略で、どのマシンがこのドメインのネームサーバ であるかを DNS に教えます。最後に PTRレコードは 1.0.0.127.IN-ADDR.ARPA (つまり 127.0.0.1)がローカルホストという名前であることを示します。

SOAレコードは全てのゾーンファイルの最初に書かれるもので、各ゾーンファ イルの最初に、ただ一つだけ書かれます。このレコードはゾーンについて記述 します。どこから得られるのか(linux.bogusというマシン)、内容に関し て誰が責任を持っているのか(hostmaster@linux.bogus)、バージョンは いくらであるか(serial: 1)や、その他にキャッシングや2次DNSサーバについ てなど多くのことが記述されます。残りの fields 、refresh、 retry、 expire 、minimum については、このHOWTOに書かれている値をそのまま使えば 問題ないでしょう。

NSレコードは、どのマシンが0.0.127.in-addr.arpaのネームサーバと して働くのかを示します。この例ではns.linux.bogusです。PTRレコード は1.0.0.127.in-addr.arpa (別名 127.0.0.1)はlocalhostであるこ とを示します。

pz/localhostファイルは以下のような内容になります:



$ORIGIN localhost.

@               IN      SOA     linux.bogus. hostmaster.linux.bogus. (

                                1       ; Serial

                                360000  ; Refresh

                                300     ; Retry

                                3600000 ; Expire

                                360000 )        ; Minimum

                        NS      ns.linux.bogus.

                        A       127.0.0.1

もし、第2章から途中を飛ばしてきた場合には、named を停止・再起動して から、第2章に戻れば良いでしょう。

さて、ここで named を停止・再起動してから nslookup コマンドを使って 今までの設定の確認を行いましょう:


$ nslookup



Default Server:  localhost

Address:  127.0.0.1



> 127.0.0.1

Server:  localhost

Address:  127.0.0.1



Name:    localhost

Address:  127.0.0.1

なんとか 127.0.0.1 から localhost が得られました。いい感じですね。 あわてないで、localhostについて調べてみましょう。


> set q=any

> localhost.

Server:  localhost

Address:  127.0.0.1



localhost

        origin = linux.bogus

        mail addr = hostmaster.linux.bogus

        serial = 1

        refresh = 360000 (4 days 4 hours)

        retry   = 300 (5 mins)

        expire  = 3600000 (41 days 16 hours)

        minimum ttl = 360000 (4 days 4 hours)

localhost       nameserver = ns.linux.bogus

localhost       internet address = 127.0.0.1

localhost       nameserver = ns.linux.bogus

うまくいっているようです。それでは本題に戻って、linux.bogusnamed.boot の新しい primary 行に付け加えましょう。



primary               linux.bogus                     pz/linux.bogus

繰り返しますが、named.bootファイルではドメイン名の最後には `.' を付けないことに注意しましょう。

ゾーンファイル linux.bogus 内では、以下のようなデータをでっちあげて みました。



;

; Zone file for linux.bogus

;

$ORIGIN linux.bogus.

;

; Mandatory minimum for a working domain

;

@       IN      SOA     linux.bogus. hostmaster.linux.bogus. (

                        199511301       ; serial, todays date + todays serial #

                        900             ; refresh, seconds

                        600             ; retry, seconds

                        3600000         ; expire, seconds

                        86400 )         ; minimum, seconds

;

@               NS      ns.linux.bogus.

@               NS      ns.friend.bogus.

ns.friend.bogus. A      127.0.0.10

@               MX      10 mail.linux.bogus     ; Primary Mail Exchanger

@               MX      20 mail.friend.bogus. ; Secondary Mail Exchanger

mail.friend.bogus. A    127.0.0.11

この例では新しいリソースレコードが一つ現われます、MX つまり Mail eXchanger レコードです。これはメールシステムにsomeone@linux.bogus というアドレスのメールはどこに送るのかを示します。この例では mail.linux.bogusmail.friend.bogusとなります。マシン名の前 の数字はMXレコードの優先度を表すもので、最小(10)のレコードを持つマシン に優先的にメールが送られます。もしメールを送るのに失敗した場合には、よ り大きい数字を持つメールサーバ(この例では優先度20を持つ mail.friend.bogus)にメールが送られます。

/usr/sbin/named.restart を実行して named を再起動し、 nslookupの実行結果を見てみましょう。


$ nslookup

> set q=any

> linux.bogus

Server:  localhost

Address:  127.0.0.1



linux.bogus

        origin = linux.bogus

        mail addr = hostmaster.linux.bogus

        serial = 199511301

        refresh = 900 (15 mins)

        retry   = 600 (10 mins)

        expire  = 3600000 (41 days 16 hours)

        minimum ttl = 86400 (1 day)

linux.bogus     nameserver = ns.linux.bogus

linux.bogus     nameserver = ns.friend.bogus

linux.bogus     preference = 10, mail exchanger = mail.linux.bogus.linux.bogus

linux.bogus     preference = 20, mail exchanger = mail.friend.bogus

linux.bogus     nameserver = ns.linux.bogus

linux.bogus     nameserver = ns.friend.bogus

よく見ると、バグが発見できると思います。


 linux.bogus     preference = 10, mail exchanger = mail.linux.bogus.linux.bogus

というのはおかしいですね。これは、


  linux.bogus     preference = 10, mail exchanger = mail.linux.bogus

となっているべきです。

読者のためになるよう :-) 筆者はわざと間違いを含めました。ゾーンファ イルを見て、以下の行を見つけてください。



@               MX      10 mail.linux.bogus     ; Primary Mail Exchanger

この行でピリオドを忘れています。あるいは'linux.bogus'が書きすぎである とも言えます。ゾーンファイル内でホスト名がピリオドで終らない場合には、 起点が最後に加えられます。ですから、


@               MX      10 mail.linux.bogus.    ; Primary Mail Exchanger

とするか、


@               MX      10 mail                 ; Primary Mail Exchanger

とするべきなのです。筆者は打ち込む量が少ない後者が好きです。ゾーンファ イル内ではドメインは全部書き下して`.'で終えるか、全く書かない(こ の場合はデフォルトで$ORIGIN となります)のどちらかにします。 named.boot ファイル内ではドメイン名の後に`.'をつけてはいけな いことを強調しておきます。`.'が多すぎたり少なすぎたりしたおかげで どれだけ多くの人が混乱したことか想像がつきますか?

いくつか追加情報を含んでいる新しいゾーンファイルで、要点を説明しま す。



;

; Zone file for linux.bogus

;

$ORIGIN linux.bogus.

;

; Mandatory minimum for a working domain

;

@       IN      SOA     linux.bogus. hostmaster.linux.bogus. (

                        199511301       ; serial, todays date + todays serial #

                        900             ; refresh, seconds

                        600             ; retry, seconds

                        3600000         ; expire, seconds

                        86400 )         ; minimum, seconds

;

@               NS      ns              ; Inet Address of name server

@               NS      ns.friend.bogus.

ns.friend.bogus. A      127.0.0.10

@               MX      10 mail         ; Primary Mail Exchanger

@               MX      20 mail.friend.bogus. ; Secondary Mail Exchanger

mail.friend.bogus. A    127.0.0.11

;

; Extras

;

localhost       A       127.0.0.1

@               TXT     "Linux Bogus, your DNS consultant"

ns              A       127.0.0.2

                MX      10 mail

                MX      20 mail.friend.bogus.

                HINFO   "Pentium" "Linux 1.2"

                TXT     "RMS"

richard         CNAME   ns

www             CNAME   ns



donald          A       127.0.0.3

                MX      10 mail

                MX      20 mail.friend.bogus.

                HINFO   "i486"  "Linux 1.2"

                TXT     "DEK"

mail            A       127.0.0.4

                MX      10 mail

                MX      20 mail.friend.bogus.

                HINFO   "386sx" "Linux 1.0.9"

ftp             CNAME   127.0.0.5

                MX      10 mail

                MX      20 mail.friend.bogus.

                HINFO   "P6" "Linux 1.3.59"

ここでいくつか新しいリソースレコードが登場します:HINFO(Host INFOmation, ホスト情報)は二つのデータを持ち、普通クォートされています。 最初のデータはハードウェアかCPUを示し、2番目のデータはソフトウェアかOS を示します。ホストnsはPentium CPUを搭載し、Linux 1.2 が動いています。 TXTレコードは自由にテキストを書くレコードで、好きなことを書いてかまい ません。CNAME(Canonical NAME)レコードは、一つのマシンに複数の名前をつ けるためのものです。例ではrichardとwwwがホストnsの別名になっています。 重要な点を注意しておきます。MX、CNAME、SOAレコードは他のCNAMEレコード を参照しては駄目で、これらのレコードはAレコードで使われているものを参 照しなくてはなりません。ですから、



foobar  CNAME   richard                 ; 間違い!

という指定は正しくなくて、



foobar  CNAME   ns                      ; 正しい!

という指定が正しいものとなります。

もう一つ重要な点を述べます。CNAMEはメールアドレスとしては正しいもの ではありません。つまり、webmaster@www.linux.bogusは今まで示した設 定では不法なもので、たとえあなたのところでうまく動いたとしても、多くの メール管理者はこの規則を主張することでしょう。これを避ける方法はかわり にAレコードを用いることです。



foobar  A       127.0.0.2

named の第一人者であるPaul Vixie氏は CNAMEは使わないことを 推奨しています。使わないことを真面目に考えてみましょう。

/usr/sbin/named.reloadを実行して、新しいデータベースを読み 込みます。これは、named に設定ファイルを再度読み込ませます。


$ nslookup

Default Server:  localhost

Address:  127.0.0.1



> ls -d linux.bogus

これはレコードをすべて表示します。


[localhost]

 linux.bogus.                   SOA   linux.bogus hostmaster.linux.bogus. (1995

11301 900 600 3600000 86400)

 linux.bogus.                   NS    ns.linux.bogus

 linux.bogus.                   NS    ns.friend.bogus

 linux.bogus.                   MX    10   mail.linux.bogus

 linux.bogus.                   MX    20   mail.friend.bogus

 linux.bogus.                   TXT   "Linux Bogus, your DNS consultant"

 mail                           A     127.0.0.4

 mail                           MX    10   mail.linux.bogus

 mail                           MX    20   mail.friend.bogus

 mail                           HINFO 386sx       Linux 1.0.9

 localhost                      A     127.0.0.1

 www                            CNAME ns.linux.bogus

 donald                         A     127.0.0.3

 donald                         MX    10   mail.linux.bogus

 donald                         MX    20   mail.friend.bogus

 donald                         HINFO i486        Linux 1.2

 donald                         TXT   "DEK"

 richard                        CNAME ns.linux.bogus

 ftp                            CNAME 127.0.0.5.linux.bogus

 ftp                            MX    10   mail.linux.bogus

 ftp                            MX    20   mail.friend.bogus

 ftp                            HINFO P6          Linux 1.3.59

 ns                             A     127.0.0.2

 ns                             MX    10   mail.linux.bogus

 ns                             MX    20   mail.friend.bogus

 ns                             HINFO Pentium     Linux 1.2

 ns                             TXT   "RMS"

 linux.bogus.                   SOA   linux.bogus hostmaster.linux.bogus. (1995

11301 900 600 3600000 86400)

うまくいっていますね。www単独についての結果も調べてみましょう。


> set q=any

> www.linux.bogus.

Server:  localhost

Address:  127.0.0.1



www.linux.bogus canonical name = ns.linux.bogus

...言い替えれば、www.linux.bogus の本当の名前は ns.linux.bogusということです。


linux.bogus     nameserver = ns.linux.bogus

linux.bogus     nameserver = ns.friend.bogus

ns.linux.bogus  internet address = 127.0.0.2

そして、ns.linux.bogus のアドレスは127.0.0.2です。うまくいっているみた いですね。

もちろん、このドメインはまったくのでたらめです。使っているアドレス もそうです。実際に使う時には、本当のドメイン名とアドレス、他の情報を使っ てください。それができれば、次は逆引き用のゾーンファイルが必要となりま す。これは127.0.0ファイルのようなもので、使われている各アドレスに対し てちょうど一つずつのPTRレコードを持ちます。

例としているドメインでは次のようになります。 (とうぜん、SOAレコードに加えてです。)


127.0.0.2       PTR     ns.linux.bogus.

127.0.0.3       PTR     donald.linux.bogus.

127.0.0.4       PTR     mail.linux.bogus.

127.0.0.5       PTR     ftp.linux.bogus.

さあ、今度はあなたが自分のドメインを設定していろいろ試してみましょ う。linux.bogusドメインで試してみるのが済んだら、named.boot から該当する部分を消します。


前のページ 次のページ 目次