djbdnsを動かしてみる/

1. DNSサーバの設定法

DNS関連ドキュメントを整理する上でとても参考になるので、少しずつwikiに移す。-- ToshinoriMaeno 2020-08-13 14:26:08

https://cr.yp.to/djbdns/run-server.html

D. J. Bernstein [Translated into Japanese by MAENO Toshinori]
Internet publication
djbdns

IP アドレスを公開するためのコンピュータの設定法です。

1.1. サーバを設定する

ここの方法はあなたがすでに daemontools と djbdnsを インストール済みであり、 svscan が動作中であることを前提にしています。

1. root で、 UNIX アカウント Gtinydns と Gdnslogを作る。

2. root で、 /etc/tinydns サービスディレクトリを作る。
   いっしょに DNS サーバの IP アドレスを設定する。
     tinydns-conf Gtinydns Gdnslog /etc/tinydns 1.8.7.200

このディレクトリにはログと構成設定ファイルがあり、 後で変更できます。

IPアドレスはこのコンピュータのものでなければなりません。

3. root で、 svscan に新サービスを通知する。 
   svstat を使って、サービスが動きだしたことを確認する:
     ln -s /etc/tinydns /service
     sleep 5
     svstat /service/tinydns

4. このページで以降に説明されている方法で DNS データを設定する。

5. 公開webページにあなたのDNSサーバが djbdns を使っていることをのせてください。

}}}

1.2. DNS サービスの複製を作る

第一の DNS サーバと同じ情報を提供するために 第二コンピュータを DNS サーバとして設定する方法です。

DNS サーバは 2 台設定しなければならないというものではありません。

しかしながら、いろんなサービスをする大規模サイトを運営しているなら、 DNS サーバを複数設定すべきです。

例のために、 第一の DNS サーバは IP アドレス 1.8.7.200 で動作し、 第二の DNS サーバは IP アドレス 1.8.7.201 で動作するものとして 説明します。

1. 第二のコンピュータで、 root で、 UNIX アカウント Gtinydns と Gdnslogを作る。

2. 第二のコンピュータで、 root で、 /etc/tinydns サービスディレクトリを作る。
   いっしょに第二の サーバの IP アドレスを設定する。

     tinydns-conf Gtinydns Gdnslog /etc/tinydns 1.8.7.201

3. 第一のコンピュータで、 root で、 /service/tinydns/root/Makefile を編集して、
  /service/tinydns/root/data を第一のコンピュータから第二のコンピュータへ複写するようにする。

     remote: data.cdb
             rsync -az -e ssh data.cdb 1.8.7.201:/service/tinydns/root/data.cdb

     data.cdb: data
             /usr/local/bin/tinydns-data

もし rsync がなければ、こうする:

     remote: data.cdb
             scp data.cdb 1.8.7.201:/service/tinydns/root/data.cdb.tmp
             ssh 1.8.7.201 mv /service/tinydns/root/data.cdb.tmp \
             /service/tinydns/root/data.cdb

     data.cdb: data
             /usr/local/bin/tinydns-data

これで 第一のコンピュータでの変更はすべて第二のコンピュータへ 複製される。

4. 第二のコンピュータで、rootで、 /service/tinydns/root/data を編集して、
   DNS データが 第一のコンピュータから第二のコンピュータへ複写されている ことを注記しておく:

     # Do not edit data on this computer! data.cdb is copied from 1.8.7.200.
     # The following line protects data.cdb by stopping make.
     9

5. 第二のコンピュータで、rootで、 svscan に新サービスを通知する。 svstat を使って、サービスが動きだしたことを確認する:

     ln -s /etc/tinydns /service
     sleep 5
     svstat /service/tinydns

1.3. 委譲を受ける

名前を委譲してもらって、あなたの DNS サーバで扱うようにするための 二つのとても重要な作業があります。

最初にあなたのサーバが委譲を受けられるようにする必要があります。

以下のコマンドにより、 末尾が heaven.af.mil と 7.8.1.in-addr.arpa であるような名前に責任があることをあなたのサーバに教えます:

     cd /service/tinydns/root
     ./add-ns heaven.af.mil 1.8.7.200
     ./add-ns heaven.af.mil 1.8.7.201
     ./add-ns 7.8.1.in-addr.arpa 1.8.7.200
     ./add-ns 7.8.1.in-addr.arpa 1.8.7.201
     make

これらのコマンドは以下のこともサーバに知らせています。

第二の作業は親サーバに名前をあなたのサーバへ委譲してもらうことです。 インターネット上のキャッシュがあなたのネームサーバに 名前を問合せるためには その名前があなたのサーバに委譲されていなければなりません。 例でなら、

BIND の不良 (日本語訳) をひき起さないために、 同じ IP アドレスの別の名前ではなく、 親サーバも a.ns, b.ns などの同じ名前を 使うようにしなければなりません。 tinydns はこれらとは異なる名前を使うように設定できますが、 その場合には親サーバもそれらの名前を使う必要があります。

1.4. コンピュータのアドレスを公開する

ひとたび、heaven.af.milのような名前があなたのサーバに委譲されたら、 heaven.af.milや 末尾が .heaven.af.mil である名前の IP アドレスを 決められます。

二種類の名前を設定するのが普通に行われています:

コンピュータ名とサービス名とを区別することで あとでコンピュータ間で移動させようとした時に役立ちます。

例えば、あなたはheaven.af.milの管理者だったとします; 三台のコンピュータがあって、それらの IP アドレスは 1.8.7.4, 1.8.7.5, 1.8.7.6 だとします; ウェブサーバは一台目のコンピュータで動かします; 一台目のコンピュータでFTP サーバも動かします; コンピュータには lion, tiger, bear という名前を付けることにして、 以下のコマンドを実行します:

     cd /service/tinydns/root
     ./add-host lion.heaven.af.mil 1.8.7.4
     ./add-host tiger.heaven.af.mil 1.8.7.5
     ./add-host bear.heaven.af.mil 1.8.7.6
     ./add-alias www.heaven.af.mil 1.8.7.4
     ./add-alias ftp.heaven.af.mil 1.8.7.4
     make

add-host と add-aliasプログラムは /service/tinydns/root/data ファイルを編集します。 ファイルは tinydns-data 形式 をしています。 make は tinydns-data プログラムを実行し、 tinydns に新しい情報のことを知らせます。 なにか不都合がおきたら、 tinydns-data はエラーメッセージを出力し、 tinydns は古い情報を提供し続けます。

さて、インターネットの誰かが lion.heaven.af.milや www.heaven.af.mil、 ftp.heaven.af.milのアドレスを探すと IP アドレス 1.8.7.4 が返ります。 1.8.7.4 に対応するコンピュータの名前を探すと lion.heaven.af.milが返ります。

add-host と add-aliasを使う代わりに /service/tinydns/root/data を直接編集して、 以下の行を追加することもできます。:

     =lion.heaven.af.mil:1.8.7.4
     =tiger.heaven.af.mil:1.8.7.5
     =bear.heaven.af.mil:1.8.7.6
     +www.heaven.af.mil:1.8.7.4
     +ftp.heaven.af.mil:1.8.7.4

data を直接編集するのではなく、 add-host と add-alias プログラムを 使うのには ふたつの理由があります。

名前の選び方の続き IP アドレス ひとつについて一回だけ、 異なるコンピュータ名を各 IP アドレス を与えるように add-hostを実行すべきです。 add-alias はコンピュータ名に対して実行してはいけません; ひとつのコンピュータ名にはただひとつのIP アドレスを 対応させるべきです。

コンピュータ名を付けるときのいくかの推奨候補です:

コンピュータに二つめの IP アドレスを追加するときには、 あたかも第二のIP アドレスが実際には別のコンピュータであるかのように add-host 新しい名前を使う方が普通はいい考えでしょう:

こうすれば、 その IP アドレスが別のコンピュータに本当に移動しても なにも変更する必要がないでしょうから。

1.5. コンピュータのアドレスを調べる

tinydns が名前に対して正しい IP アドレス を返しているか を系統的に確認する方法です: 例えば、www.heaven.af.milの IP アドレス が 1.8.7.4 となっているかどうか。

第一に/service/tinydns/root/data 内のアドレスが tinydns-data 形式になっているかを確認する:

IP アドレスは +, =, @, ., & 行を使って割付けできます。

第二に tinydns-get を使って、 アドレスが /service/tinydns/root/data.cdbにあることを 確認する:

     cd /service/tinydns/root
     tinydns-get a www.heaven.af.mil

以下の行のような出力があるでしょう。

ただし、数はおそらく 86400 ではないでしょう。 この答が得られなかったり、古かったりするときのよくある理由: dataを変更したあとにmake を実行していない; data内に関連ネームサーバを示す . 行 ( または Z 行) がない。

逆引きを確認したければ、 a www.heaven.af.milを ptr 4.7.8.1.in-addr.arpaで置きかえます。

第三に tinydns が使う IP アドレスが コンピュータのアドレスであることを確認する:

     cat /service/tinydns/env/IP
     netstat -n -i

第四では tinydns サービスが起動されていることを確認する:

tinydns-get が 512 バイト以上の返事をするなら、 TCP サービスが必要になる; その時は axfrdns サービスが起動されているか確認する。

第五に tinydns に名前を問い合わせる:

ここの 1.8.7.200 と 1.8.7.201 は あなたの DNS サーバの IP アドレスです。 dnsq の出力は前述のtinydns-getの出力と 一致していなければなりません。

第六に DNS cache にアドレスを問い合わせる:

dnscache がアドレスを見つけられなかったら、 ほとんど確実に親サーバが関連ドメインをあなたの tinydnsに委譲していないからです。 /service/dnscache/log/main/current のログを調べて、 dnscache がどのサーバに問い合わせているか、 どういう情報を送っているかを見なさい。 全体をデバッグスキャンするには dnstraceを使いなさい。

DNS サーバをテストするのに nslookupを使ってはなりません。

1.6. メイルサーバのアドレスを公開する

インターネットのメイル配送エージェント(MTA)が heaven.af.milへメイルを送りたい場合、 heaven.af.mil の IP アドレス を検索します。 そして、その IP アドレスの SMTP サーバに接続しようとします。 add-mx を使って、別の IP アドレスを設定できます:

(mx とは メイル中継機 "mail exchanger"を示しています) add-mxを使う代わりに data を直接編集して以下の行を追加してもよろしい:

If you add several mail servers for heaven.af.milに対して、複数のメイルサーバを設定するなら、 最初のものには a、次には b という風にしなさい。 add-mx はこれを自動的に行います。

1.7. 他のサーバに委譲する方法

ある名前を子供のサーバに委譲するには 委譲すべき名前と子供サーバの IP アドレスとともに add-childnsを使います。

add-childnsを使うのではなく、 data を直接編集して、以下の行を加えるのでもかまいません。

heaven.af.mil をいくつかの IP アドレスに委譲するなら、 最初は a で、次は b というようにします。 add-childns はこれを自動的に行います。

デフォルトのサーバ名 a.ns.elysium.heaven.af.mil 以外の名前を選択することもできます。 BIND の不良 (日本語訳) をひき起さないために、 親サーバも子サーバと同じ名前を使うようにしなければなりません。 例えば、子サーバが以下のように指定しているとき、

親サーバも同じ名前を使わなくてはなりません:

他のdata 行によって その名前にすでに IP アドレス が割付けられている場合、 IP アドレスを省略します。

1.8. 複数の独立した DNS サーバを設定する

(異った IP アドレスでなら) 異ったデータファイルを持つ複数のサーバを動かすことができます。 例えば、 heaven.af.mil の情報を公表する二台のサーバと panic.mil の情報を公表する二台のサーバと 合わせて四台のサーバを設定したとしましょう。 heaven.af.milについての変更は第一のサーバで行い、 第二のサーバにコピーされるとします。。 Changes to panic.milについての変更は第三のサーバで行い、 第四のサーバにコピーされるとします。

いうまでもないことですが、一台のサーバで heaven.af.mil と panic.milの両方を扱うこともできます。 しかしながら、ギガバイトもある DNS データを持っているなら、 複数の独立したサーバにデータを分割して動かすことを検討すべきです。

1.9. 独立した DNS サーバにゾーンをひとつ移す

IP アドレス 1.8.7.200 と 1.8.7.201 の DNS サーバ にあるheaven.af.mil ゾーンを IP アドレス 1.8.11.50 と 1.8.11.51 の 別の DNS サーバへ移す方法を 説明します。

1. heaven.af.mil のデータを旧サーバから新サーバへコピーする。

2. 新サーバ上で、a.ns.heaven.af.mil の IP アドレスを 1.8.7.200 から 1.8.11.50 へ変更するために /service/tinydns/root/data内の

     .heaven.af.mil:1.8.7.200:a 


     .heaven.af.mil:1.8.11.50:a 

に書きかえる。 同様に b.ns.heaven.af.mil の IP アドレスを 1.8.7.201 から 1.8.11.51 へ変更する。

     make 

を実行して、新サーバが新しい IP アドレスを返答するようにする。

3. 親サーバでも同様の修正をする。

4. 旧サーバでも同様の修正をする。 キャッシュはいつまでも旧サーバに問合せ続けるかもしれないので、 この修正は重要である。 キャッシュには親サーバに問い合わせて整合性をチェックする義務はないので。

5. キャッシュが旧サーバにアクセスしなくなるまで、2、3 日待つ。 この間に heaven.af.mil のデータを変更したときには 旧サーバでも同様の修正をすること。

6. heaven.af.milのデータを旧サーバから削除する。 これで出来上がり。

2003-08-13 訳:前野年紀

MoinQ: djbdns/動かしてみる/DNSサーバの設定法 (last edited 2023-03-24 10:56:38 by ToshinoriMaeno)