あなた自身のドメインの設定方法
このセクションを本当に始める前に、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.net
がedu.
の名前を与えることを示す
ので、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
steawb
、w20ns
及び bitsy
がmit
の名前を与えるので、
この中から一つを選んで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.edu
がai.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.bogus
を
named.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.bogus
かmail.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
から該当する部分を消します。