TOPへ
起票 2005.2.13/更新 2005.2.13
 目次へ  
   


DNSの設定(bind8〜bind9)

 

 


以前の記事をそのまま転載します。そのままつかえるハズだし・・・


 

固定IPで独自ドメインを発信するDNSのセットアップの解説 - BIND

BINDを使って独自ドメインを運用するまでの手順を説明します。
BIND8でもBIND9でも基本は同じです。私のメイン環境はBIND8でテスト環境にBIND9があります。
BIND9の特徴として、LAN内用とLAN外(=WAN側)用の設定が別々に出来るという拡張的な機能が使えますが、まあそれはおいておいてまず基本をセットしてみましょう。基本が出来ないとDNSは使えません。またBIND9からはBIND8では甘く許されていたいくつかの不整合な設定が、ダメよ、ってなっていて動かないことがありますが変な設定をしなければちゃんと動作します。
尚、基本が出来上がってもLAN向けの説明はしていませんのであしからず。


1、まず最初に独自ドメイン(zone設定)なしに、基本となるBINDを稼動させてDNSサーバーになってみましょう

独自ドメインの設定は後回しにして、まずDNSサーバーを起動させてみましょう。
BINDがインストールされていると基本となるファイルは標準状態で既に設定されているはずです。
ベースとなる設定のファイルは
  /etc/named.conf
これです。
  options
{   } というカッコ内に
  directory "/var/named";
というディレクトリが示してあります。この例と違う場合は読み替えてください。
  zone "." {
    type hint;
    file "named.ca";
  };

 zone "0.0.127.in-addr.arpa" {
  type master;
  file "named.local";
 };
初めからこんな2つの設定が指定してありますよね。
だから
 /var/named/named.ca
 /var/named/named.local
の2つがあればまずはOKです。

これで必要なファイルは揃っているのがわかりました。ではbindを起動させます。
  /etc/rc.d/init.d/named  start
又は
  /etc/init.d/named  start  turbo7以降
です。
起動しているか?確認の為に
  ps  aux | grep named
とタイプして
  named 238 0.0 4.6 2800 1516 ? S Jul05 0:03 named -u named -g
こんな結果が複数行表示されます。これで起動はOKです。当然ですが数字はそれぞれの環境で変りますよ。
まずは大丈夫ですね。
bindを起動させると、自分がDNSサーバーになることが出来ます。

2、DNSをテスト

起動したらテストしてみましょう。サーバー自身から私のホストの名前を検索して見てください。
検索にはhostコマンドを使ってみましょう。
nslookupコマンドを使った例を書いておいたのですが、どうやら検索サーバーを指定する時にはネームサーバー登録されてないとnslookupが受け付けてくれない事がわかり、うまく検証できないので2002.7.27にhostコマンドにかえて説明を直しました。
  host www.ayamizu.com
でもコマンドはこれで良いのですが、自分のサーバーからデータを取ってきているのかを明確にしてテストする為に
  
host www.ayamizu.com  localhost
これで行きましょう。 host www.ayamizu.com  127.0.0.1 でもいいです
さてこれで、一番最後の行はどう表示されますか?
    Host not found.

って出たらダメ。
    ns.ayamizu.com has address 61.205.232.120
こう表示されればOKです。

また、同じLAN内のWindows2000やXPマシンからテストしたい場合は、DOS窓より
    nslookup www,ayamizu.com xxx.xxx.xxx.xxx
などとやってみましょう。ここでいう、xxx.xxx.xxx.xxxはサーバーのローカルIPで、例えば192.168.0.2などで、サーバーのDNSをテストする事ができます。

どうですか?OKですか?OKなら3番に進んでください。

もしこれで結果がダメだったら、おおもとのサーバー達がちゃんと認識できているのかを調べなければいけません。
  dig
とタイプして

    ;;    ADDITIONAL SECTION:
       G.ROOT-SERVERS.NET.    5d11h53m4s IN A 192.112.36.4
       F.ROOT-SERVERS.NET.    5d11h53m4s IN A 192.5.5.241
       B.ROOT-SERVERS.NET.    5d11h53m4s IN A 128.9.0.107
       J.ROOT-SERVERS.NET.    5d11h53m4s IN A 198.41.0.10
       K.ROOT-SERVERS.NET.    5d11h53m4s IN A 193.0.14.129
       L.ROOT-SERVERS.NET.    5d11h53m4s IN A 198.32.64.12
       M.ROOT-SERVERS.NET.    5d11h53m4s IN A 202.12.27.33
       I.ROOT-SERVERS.NET.    5d11h53m4s IN A 192.36.148.17
       E.ROOT-SERVERS.NET.    5d11h53m4s IN A 192.203.230.10
       D.ROOT-SERVERS.NET.    5d11h53m4s IN A 128.8.10.90
       A.ROOT-SERVERS.NET.    5d11h53m4s IN A 198.41.0.4
       H.ROOT-SERVERS.NET.    5d11h53m4s IN A 128.63.2.53
       C.ROOT-SERVERS.NET.    5d11h53m4s IN A 192.33.4.12
    ;; Total query time: 17 msec
       ;; FROM: ns.ayamizu.com to SERVER: default -- 127.0.0.1
       ;; WHEN: Thu Jul 25 23:07:01 2002
       ;; MSG SIZE sent: 17 rcvd: 436
こんな結果が出てくればまずはOKです。
画面には表示しきれませんので最後の方だけの表示です。
何らかのエラーが出て上記の様なルートサーバーが表示されない様なら
    /etc/named.conf に書かれている
     zone "." {
      type hint;
      file "named.ca"; 
     }; 
この named.ca(又はそれに相当しているファイル)が故障している場合がありますので、正しいファイルを調達して配置しなければなりません。
   
   

3、外部から引いてみましょう


上記までがクリアできたらルーターを越えてみましょう。
インターネットの外から、Linuxを使って
  
host www.ayamizu.com ggg.ggg.ggg.ggg
ggg.ggg.ggg.gggはサーバーのローカルIPでは無く、グローバルIPの方です。
これでちゃんと結果が出れば、DNSとしての基本動作はルーターを含めて完了です。
でも別のインターネットアクセスからLinuxを立ち上げるのは環境が厳しいですよね。その場合はWIn2000かXPから
  nslookup www.ayamizu.com ggg.ggg.ggg.ggg
これでチェックはOKです。
ちゃんと 61.205.232.120 というIPが出てきましたか?
もしunknownなどになる場合は、ルーターが止めている可能性がありますので、フィルターをチェックしてみましょう。

チェックポイントは、ルーターのport 53 - udp がオープンされているかどうか、です。

4、ご自分のzoneを登録してみましょう。


さて、ようやくzoneを登録してみます。
まず
  /etc/named.conf
このファイルの下の方に新しい自分のzone情報を書き加えます。
  zone "ayamizu.com" {
    type master;
    file "ayamizu.com.zone";
  };

こんな感じで書きます。
file "ayamizu.com.zone"; というのはファイル名なのでなんでもいいのですが、私はドメインの後ろに .zoneをくっつけています。
次に、それに相当するzoneのファイルです。
  /var/named/ayamizu.com.zone
この例の場合では、上記の様なファイルを作ります。
そして中身はテスト用に簡単に書いてみましょう。次のようにして下さい。


     $TTL 86400
     @ IN  SOA  ns.ayamizu.com. postmaster.ayamizu.com. (
     2002042301 ; Serial <---ファイルを編集したら、かならず直します。通常は日付と通し番号を使います
     10800    ; Refresh 3h
     3600    ; Retry 1h
     604800   ; Expire 1w
     86400    ; TTL 1d
     )
        IN   NS  ns.ayamizu.com.<---自分のホスト名+ドメイン名をネームサーバーとして書いてください
     ns  IN   A  61.205.232.120 <---自分のIPを入れてね
   

このファイルはこれで仮の設定が完了です。
あと /var/named/named.local を開いて、一行め
$TTL 86400という行をチェックしてみてください。
@TTL 86400と書いてあるパッケージがあります。$に直さないと動作しません。
以上ができたら
  /etc/rc.d/init.d/named  restart
として、再起動させます。
ここで一つ、チェックのコツをかきます。私のTurbo6.5の場合は表示されないのですがTurboLinux7Serverの場合に有効です。
restartすると
   shutting down named :    OK
   starting named :        OK
こんな表示が出ます。
一度目のrestartでは上記のように出ますが、設定ファイルに大きなミスがあると、namedが起動出来ずに落ちます。
そうすると、もう一度restartすると
   shutting down named :    NG
   starting named :        OK
となってしまいます。
私は、この様に2度restartすることで、起動出来ない様なミスをチェックしています。活用して見てください。

 

5、さて、さっき設定した独自ドメインは引けてるかな?


zoneを登録して稼動したら早速動作チェックしてみましょう。
独自ドメインを www.example.com と仮定します。サーバーから
  host ns.example..com localhost
と実施
その後、同じLANのWin2000かXPからも試してみると良いですね。
  nslookup 
 ns
.example..com   xxx.xxx.xxx.xxx  
xxx.xxx.xxx.xxxはサーバーのローカルIPです。

これで登録したipが表示されるはずです。
もしここで登録したipが表示されない場合は、
 digとタイプして2の項目で説明した様なルートサーバーの一覧が表示されますか?
   表示される → zoneの設定がおかしいので、追加したzoneについてよく見直して下さい。
             私の実験では一行目の $であるはずのところ@になっていてはまってしまいました。
   表示されない → namedが起動できていませんね。重大なエラーを起こしている可能性が大きいです。
              修正したファイルを見直して下さい。

上記をクリアして是非自分のドメインを引けるようにして下さい。
これで基本動作はばっちりです。

6、そろそろレジストラの登録を変更します。


レジストラに登録しているネームサーバーを仮のものから本物に変えなくてはなりません。
本物の一つは今回作成している自分自身です。
あとはセカンダリDNSになってくれる先を探します。
2つが決まったらレジストラへ登録変更してしまいましょう。
お名前.comなどの一部のレジストラによっては自分自身をネームサーバーにするには一旦ネームサーバーとして登録したりする必要がありますが、特に難しいことではありませんね。レジストラの説明を良く確認して切替えてください。
もしセカンダリDNSが決まっているならできるだけ早めに登録変更すれば運用がどんどん進みます。

変更後数日(1〜3日程度)でレジストラに登録したDNSの参照ができはじめます。

7、zoneファイルの設定を仕上げましょう


ここまでに設定した
  /var/named/ayamizu.com.zone
は仮の姿です。
ちゃんと設定しておきましょう。ここではホスト名に www と mail を使う例をしまします。mailというホストはあえて使わないかもしれませんが wwwは使いますよね。

$TTL 86400
@ IN  SOA  ns.ayamizu.com. postmaster.ayamizu.com. (
20020072902; Serial <---ちゃんとカウントアップしてね
10800    ; Refresh 3h
3600    ; Retry 1h
604800   ; Expire 1w
86400    ; TTL 1d
)
     IN  NS  ns.ayamizu.com.
      IN  NS   スレーブサーバーのホスト名をちゃんと追加して記載しましょう
      IN  MX  10 ns.ayamizu.com.  <---メールを受けとるホストを書いてね。10は優先度、そのまま10と書いておけばOK
ns   IN  A  61.205.232.120
www   IN  A  61.205.232.120  <---自分のIPを入れてね
mail  IN  A  61.205.232.120  <---もし使うなら自分のIPを入れてね

例その2: http://www. で始まらない、 いきなり独自ドメインでアクセスする場合は次のような一行を加えておきます。

    IN  NS  ns.ayamizu.com.
    IN  NS   スレーブサーバーのホスト名を記載する
    IN  MX  10 ns.ayamizu.com.
     IN   A  61.205.232.120  <---こういう行を書いておきます
ns   IN   A  61.205.232.120

事例のお断り: 設定のミス等により問題が発生するのを回避する為に省略した記載があります。
DNSにはCNAMEという機能があり、一つのホストを複数に見せかける為のものです。

    IN  NS  ns.ayamizu.com.
    IN  NS   スレーブサーバーのホスト名を記載する
    IN  MX  10 ns.ayamizu.com.
ns   IN   A  61.205.232.120
mail  IN   CNAME ns
ftp   IN   
CNAME ns
www  IN   CNAME ns

これはmailやftpやwwwはnsの別名だよ = CNAME、という事です。以前からたくさん使われています。
でも間違って書くと誤動作のモトになり、アクセスが増えるのでそのCNAMEを避けて、上記のようなAレコードでの記載で例を載せました。
一応ただし書きとして書いておきます。

これでrestartすれば正常に動作します。

8、ルーターの確認を再度実施


さて、一通り動作チェックまで済んだところで、セカンダリDNSサーバーにzone情報を転送する為に設定を書きます。
  /etc/named.conf
のoptionsの中に転送許可するセカンダリDNSのホストを書いておきましょう。
  allow-transfer {
     xxx.xxx.xxx.xxx;
スレーブサーバのアドレスです
  };

またzone転送のプロトコルがルーターで止まっていてはいけません。ルーターの設定をチェックしておきましょう。
チェックするのはポート53のtcpです。DNSを使う方ではポート53のudpが必要だったのですが、zone転送には、同じく53のtcpの転送を通さなくてはなりません。
結果的に53ポートについてはtcp,udpの両方を開いている事を確認しておきましょう。

9、nameserverの設定 /etc/resolv.conf


サーバーから
  nslookup  www.ayamizu.com
とタイプした場合、上の2行は自分(127.0.0.1とか 0.0.0.0 など)になってますか?
プロバイダのDNSのアドレスが表示されている場合、DNS自分の不具合がわかりにくくなります。自分を第一優先のDNSサーバーとして単体で行くのが異常を察知するのに良いと私は思っています。
  /etc/resolv.conf を調べて nameserverという記載を一個にしてしまいましょう。
   nameserver 127.0.0.1
こんな記載が良いでしょう。


10、slaveサーバーのテスト


世界中の人がwww.example.comを検索します。その場合、www.example.comの登録してある指定のDNSサーバーに問い合わせに行きますね。
その際、primaryとslaveのどちらに問い合わせが行くのか? というと、両方に同じ割合でいくらしいです。だからslaveサーバーの動作もチェックしておかないと。
と思ったのですが、もし仮に、何らかの原因でzone情報がうまくslaveサーバーへ転送出来てない、または更新できていないとします。
その上で
  host  www.example.com  
sss.sss.sss.sss
としてsss.sss.sss.sssというslaveサーバーからwww.example.comの情報を見た場合、slaveサーバーが普通にDNS検索をかけてきた結果を表示してしまい、slaveである区別がつきません。・・・・・・・
いちばんいいのは、slaveサーバーのオーナーが、転送を受けたzoneのファイルが新しいシリアル番号のモノに更新されているかどうかを調べるのが一番いいのですが・・・・
もしダメなら別のチェック方法を・・・ちょうど、DNSの検査サイトを教えていただきました。
  http://www.dnsreport.com/
ここに目的のドメインを入力して、エラーになるところが無いかテストしてみましょう。

 

最後に、namedの自動起動をセットしておかなければいけませんね。
 chkconfig --list named
とすると
 named 0:off 1:off 2:off 3:on 4:on 5:on 6:off
こんな感じで3がONになっていれば起動とともにnamedが動作します。
 chkconfig named  on
とすれば3はonになります。

Last Update 2002.7.30


セカンダリサーバーの設定手順

セカンダリサーバー(slave server)を引き受ける方への手順もお知らせします。
/etc/named.conf

  zone "example.com" {
  type slave;
  file "example.com.zone";
  masters {
     61.205.232.120;
   };
  };

こういうのを書きます。
普通のzoneと違うのは type が slaveになっていること、また、mastersとして元になるサーバーのIPを記載しておくこと。
これだけです。
namedを起動して
 /var/named/example.com.zone というファイルができていて、中身が転送モトと同じであればGOODです。
slaveは簡単ですね。


あ、そうそう
/var/named ディレクトリが、rootの権限になっていると named から書込みが出来ずエラーになります。
chown named  /var/named
chgrp  named /var/named
の2つを実行してnamedディレクトリの所有者を変えておきましょう。


改めて、独自ドメイン(zone)を登録するファイルの書方 をまとめて書いておきます

IP1では逆引きの権利をもらえないので、その設定はしない。しても意味がないし。
逆引きとは ip xxx.xxx.xxx.xxx という数値からホスト名を見つけるデータベースです。IPが固定で1つの場合ではだいたいプロバイダの方で登録してあってその登録の名義を変更してくれません。


まずは


/etc/named.conf の中身です。optionsの中と追加したzone以外は標準で入っている事が多いと思います。

options {
  directory "/var/named";
  allow-query {
    any;
  };
  allow-transfer {
     xxx.xxx.xxx.xxx;
スレーブサーバのアドレスへ転送許可を書きます
  };
};

ルートキャッシュファイルです デフォルトのままです
zone "." {
   type hint;
   file "named.ca";   
};

ローカルの逆引きです デフォルトのままです
zone "0.0.127.in-addr.arpa" {
   type master;
   file "named.local";
};

主ドメインのゾーン設定です これが追加するところです
zone "ayamizu.com" {
   type master;
   file "ayamizu.com.zone";
};

サブドメインのゾーン設定です 必要に応じて追加してください
zone "example.net" {
   type master;
   file "example.net.zone";
};

以上です。簡単ですね。

次に各ゾーンファイルです

/var/named/named.local

$TTL 86400 ←このデフォルトのTTLがないとBIND9からはエラーになります
@ IN SOA localhost.  root.localhost.  ( 
この部分を @ IN SOA ns.xxxxxxxx.net. postmaster.xxxxxxxx.net. と記載していましたが、わかりにくい表記でしたのでこの様に直しました。2003.1.9) 
2002040301 ; SeriaL
10800    ; Refresh
3600     ; Retry
604800   ; Expire
86400;
)
  IN  NS   ns.ayamizu.com.
  IN  NS   ns.example.net. <-バーチャルドメインを使う場合だけ追加
1  IN  PTR  localhost.



次に独自ドメインです、
/var/named/ayamizu.com.zone

$TTL 86400
@ IN  SOA  ns.ayamizu.com. postmaster.ayamizu.com. (
2002042301 ; Serial
10800    ; Refresh 3h
3600     ; Retry 1h
604800   ; Expire 1w
86400    ; TTL 1d
)
    IN  NS  ns.ayamizu.com.
    IN  NS   スレーブサーバーのドメインを記載する
    IN  MX  10 ns.ayamizu.com.
ns   IN   A  61.205.232.120  <---自分のIPを入れてね
www IN   A  61.205.232.120  <---自分のIPを入れてね
ftp  IN   A  61.205.232.120  <---自分のIPを入れてね
localhost IN A 127.0.0.1  <--これは入れた方が良いのかどうかわからなかったのですがBIND9で起動させると読み飛ばされてるので不要の様です。


バーチャルドメインを運用する場合は、同じようにzone設定を追加して書いていきます。
/var/named/example.net.zone
$TTL 86400
@ IN  SOA  ns.example.net.  postmaster.example.net. (
2002042301 ; Serial
10800    ; Refresh 3h
3600     ; Retry 1h
604800   ; Expire 1w
86400    ; TTL 1d
)
    IN  NS  ns.example.net.
    IN  NS   スレーブサーバーのドメインを記載する
    IN MX  10  ns.example.net.
ns   IN  A   61.205.232.120  <---自分のIPを入れてね
www IN  A   61.205.232.120  <---自分のIPを入れてね
ftp   IN  A   61.205.232.120  <---自分のIPを入れてね
localhost IN A  127.0.0.1

以上です。
簡単に解説しておきます。
zoneの書方は人それぞれで、参考にすると訳がわからなくなります。どれがベストなのでしょう?
できるだけ検索手順を減らす方向が良いとされています。でもよくわかりませんよね。
わからないのでまずは具体的な説明に入ります。
ns IN A xxx.xxx.xxx.xxx
これがメインとなるそのサーバーのAレコードです。nsって名前がホストの名前ですよ。そう登録している重要なレコードです。もちろんご自分のホスト名に合わせて書き換えましょう。ご自分のホスト名は uname -a で確認できます。
もし登録されていない場合は
/etc/sysconfig/network
を編集しましょう。たとえば、もしも私のドメインなら
 NETWORKING=yes
 HOSTNAME=ns.ayamizu.com
 GATEWAY=192.168.0.1
 GATEWAYDEV=eth0

こんな風になっていると思います。(実際は全然ちがうんですけどね)。nsがホストだとわかりますよね。参考にどうぞ。
あと /etc/hosts が
 127.0.0.1 localhost.localdomain localhost
 192.168.0.2 ns.ayamizu.com ns
 61.205.232.120 ns.ayamizu.com ns
こんな感じになってたりするはず。ご参考まで。

さて、すこし話は戻りますが、WEBにアクセスする時に、例えば www.ayamizu.com でなくて ayamizu.comだけで開くページをみかける事が多いですよね。それはAレコードの登録に
www IN A  xxx.xxx.xxx.xxx
と書くところを
  IN A xxx.xxx.xxx.xxx
とホスト名を省略して書くことでそうなります。このように省略してもちゃんと動作します。省略には@をCNAMEで登録する方法も見たことがありますが、なかなか取扱い通りに動作してくれないので忘れることにしました。

次のネームサーバーの記載、これは問題ないですよね。
  IN NS yyy.yyyyy.yyy.com. 
こんな感じ。説明しません。

次MXです。
そのドメイン宛のメールをどのホストへ流すか、そういう設定です。
  IN MX 10 ns.ayamizu.com.
たいてい独自のサーバー1台での運用でしょうから、上記の設定でOKです。複数のメールサーバーを作って予備に作動させておいたりする場合に優先度をつける、それが10です。1台なら意味はありません。フルドメインで記載する場合は.を最後に忘れずに。
(2002.7.28記事内容を変更いたしました)
当初、説明用のサンプルには
    IN  NS  ns.ayamizu.com.
    IN  NS   スレーブサーバーのドメインを記載する
    IN  MX  10 ns.ayamizu.com.
ns   IN   A  61.205.232.120  <---自分のIPを入れてね
www IN   CNAME  ns
ftp  IN   CNAME  ns

と記載しておいたのですが
www IN   A  61.205.232.120  <---自分のIPを入れてね
ftp  IN   A  61.205.232.120  <---自分のIPを入れてね

という表記に変えました。CNAMEとは、ここではnsという実ホストがあり、そのニックネームとしてwwwやftpなどのホスト名も兼任する、そういう機能です。これはニックネームと考えてください。キャノニカルネームだそうです。
CNAMEを使うと、不要なクエリを発生してしまうこと、MXへの指定ホストがCNAMEになっていると誤動作の元になることの理由により、あまり使わない方が良いとの論議があり、どう説明しようか迷ったのですが、誤動作回避を念頭にする、すなわち
CNAME表記をやめる方向が良いとの判断をいたしまして、記事をまとめなおしました。
DNSとしてどうあるべきか、不明なのですが、誤動作のない表記を優先させてこのようにいたしました。
ご了承下さい。



あと /etc/resolv.conf もチェックしておきましょう
search xxxxxxxx.net
search ayamizu.com 
←バーチャルホストをどうしてここに書いたのか記憶に無い??必要なのかな??実験出来ずそのまま書きつづけています。
nameserver 0.0.0.0
 ←これを書かないとnslookupが自分のDNSで動作しません。0.0.0.0か127.0.0.1を書きます。
・・・・・必要に応じてセカンダリ以下のDNSを列挙すればそちらを引きに行きますが無い方がDNSサーバーらしいと思う。

 

【ルートサーバーの一覧が書いてあるファイル 私の場合は named.ca について】
自分のzoneを発信するという事とは関係なく、BIND等のDNSサーバー稼動させると、世界中の名前解決をはじめる訳ですね。
そのデータを取ってくるおおもとのルートサーバー一覧がこのファイルです。
一覧がまれに変更になる事もあるとか。
で、昨年2002年秋、Jというサーバーが引っ越ししてアドレスが変りました。しばらくは並行運用していますが、恐らくもう変わった頃かと思います。
次の行を探してIPを変更して置きましょう。

J.ROOT-SERVERS.NET.  3600000  A  192.58.128.30

上記は変更後のIPです。(2003.1.9)

Last Update 2003.1.9