DNS サーバ djbdns のインストールと設定 - レコードの登録

DNS サーバである djbdns のインストールと設定をまとめてみました。

ここは、tinydns にゾーン情報を登録する方法についてのお話です。

 
djbdns のインストールと設定 > tinydns の設定と運用

3-3: レコードの登録

データファイルの仕組み

tinydns は、レコード情報を tinydns-data 形式で記録しています。

この tinydns-data 形式のデータは、/service/tinydns/root/ というディレクトリの中に、data というファイルで保存されています。

ただ tinydns は、この data ファイルをそのまま使用するのではなく、それに変換処理を施した data.cdb というファイルを使用します。

 

この data.cdb というファイルは、/service/tinydns/root/ の Makefile にその生成方法が記載されています。つまり、コマンドライン上で make コマンドを実行すれば、この data.cdb が出来上がるようになっています。

また、もしも data ファイルの記載ミスで make 時にエラーが発生したとしても、変更前の data.cdb ファイルは無事に残る配慮がなされているそうです。

なので、うっかりミスをしても運用は継続されますので、あわてずに間違いを探せるところがうれしいですね。

 

さて、data から data.cdb の作成方法はわかりましたので、次は肝心の data ファイルの書き方に触れようと思います。

自分の体験では、ここが一番のネックだったような気がします。なんせ BIND とは大きく異なります。慣れるとなかなか簡単なのですけどね、慣れるまでには結構苦労しました。

この data ファイルを編集する方法として、直接 data ファイルをエディタで編集する方法と、あらかじめ用意されているスクリプトを使用する方法とがあります。

ここでは先に、data ファイルを直接編集する方法に触れて、後でスクリプトの話を補足するという感じで進めて行こうと思います。

 

data ファイルを編集する

tinydns は、data ファイルに書かれた1行1行をレコードとして扱います。それらの各行は、先頭の1文字に現れた記号によって役割が決まります。

data ファイルのパスは通常、 /service/tinydns/root/data です。

 

まずは data ファイルに現れてくる記号にどのようなものがあるかを見て見ましょう。

とりあえずそれらを Appendix A-1 に一覧表のような感じでまとめてみました。何事も慣れるまではいまいちわかりにくいので、標準的な SOA とか A とかの対応も書いてみました。

記号は役割を重視して用意されているようで、1つの行で関連するレコードを自動的に生成してくれるので便利です。これらを data ファイルへ行ごとに書き加えていきます。

編集は vi とか、一般のテキストエディタで行います。

たとえば、dummy.ez-net.jp ドメインがあったとして、それに次のホスト等を登録したいととします。

  • [DNS] ns1.dummy.ez-net.jp / 192.168.0.1
  • [WEB] www.dummy.ez-net.jp / 192.168.0.2
  • [MAIL] mail.dummy.ez-net.jp / 192.168.0.3

 

このとき、data ファイルは次のようになります。

.dummy.ez-net.jp:192.168.0.1:ns1.dummy.ez-net.jp

@dummy.ez-net.jp:192.168.0.3:mail.dummy.ez-net.jp

=www.dummy.ez-net.jp:192.168.0.2

ドット ( . ) で始まる行は、tinydns が取り扱うゾーンの登録です。

この一行で、取り扱うゾーン [ SOA / dummy.ez-net.jp ] とプライマリネームサーバ [ NS / ns1.dummy.ez-net.jp ]、そしてプライマリサーバの IP アドレス [ A / ns1.dummy.ez-net.jp -> 192.168.0.1 ] が登録されます。

@ で始まる行はメールの設定です。

これで受け取るメールアドレス [ xxxx@dummy.ez-net.jp ] と、それを処理するメールサーバ [ MX 0 / mail.dummy.ez-net.jp ]、そして、メールサーバの情報 [ A / mail.dummy.ez-net.jp -> 192.168.0.3 ] が登録されます。

= で始まる行は、一般ホストの登録です。

これでホスト [ www.dummy.ez-net.jp -> 192.168.0.2 ] が登録され、また逆引き [ 192.168.0.2 -> www.dummy.ez-net.jp ] も登録されます。逆引きの登録をしないなら、"=" ではなくて "+" 行を使います。

 

これでレコードの登録は完了です。

あとは実際に有効にするには、kill コマンドなどで tinydns を再起動するのではなく、make コマンドを使用します。

/service/tinydns/root/ ディレクトリ ( data ファイルのあるディレクトリ) 上で、make と命令を打ち込むと、data ファイルから自動的に data.cdb というファイルが出来上がり、レコードが有効になります。

もし data ファイルの編集ミスで正常にレコードの登録ができなかった場合でも、肝心の data.cdb ファイルは変更前の状態を維持したまま tinydns が稼動し続けるので、安心して data ファイルを編集しなおすことができるようになっています。

 

既存のスクリプトを使用する

個人的には上記のように、自分で data ファイルを編集するのがすきなのですけど、tinydns をインストールしたときに、レコードの登録を助けるスクリプトも用意されます。

用意されるスクリプトと、実際に追加されるデータは次の通りです。

 

add-alias [fqdn] [ip] +[fqdn]:[ip]:86400
add-childns [fqdn] [ip] &[fqdn]:[ip]:a:259200
add-host [fqdn] [ip] =[fqdn]:[ip]:86400
add-mx [fqdn] [ip] @[fqdn]:[ip]:a::86400
add-ns [fqdn] [ip] .[fqdn]:[ip]:a:259200

それぞれのスクリプトでなれないうちは注意しなくてはいけないことがあります。

 

add-alias

エイリアスの追加には + 行が使用されます。つまり、CNAME レコードではなく A レコードが登録されます。本来これが正しいそうなのです。

add-host

ホストの登録は = 行が使用されます。つまり、正引きの A レコードと同時に、逆引きの PTR レコードも合わせて登録されます。

add-mx

メールサーバの登録は @ 行を使用します。

たとえば fqdn が dummy.ez-net.jp とした場合は、受けられるメールアドレスは xxxx@dummy.ez-net.jp となり、取り扱うサーバは a.mx.dummy.ez-net.jp となります。あわせて、a.mx.dummy.ez-net.jp の A レコードも登録されます。

生成される @ 行は、距離が省略されているので、0、つまり MX 0 が生成されます。

同じ fqdn に対して、add-mx でレコードを追加すると、サーバの fqdn に付加される "a" が、"b"、"c"、"d" …、というように変わります。登録される距離は、どれも MX 0 のままのようです。

add-ns / add-childns

add-ns の場合、ドット ( . ) 行を用いてネームサーバが登録されます。つまり SOA レコード有りです。add-childns の場合は、& 行を用いて登録されます。

たとえば、dummy.ez-net.jp ゾーンを登録したい場合は、fqdn に dummy.ez-net.jp を指定します。登録したい DNS サーバのホスト名ではないので気をつけましょう。

そうすると、dummy.ez-net.jp の DNS サーバとして、a.ns.dummy.ez-net.jp という NS レコードが登録されます。また、この DNS サーバの A レコードも登録されます。

自動的に付加される "a" の部分は、同じゾーンを追加するたびに、"b"、"c" … というように変わります。

 

これらのスクリプトを使っても、単純に data ファイルに行が追加されるだけなので、自力での data ファイル編集とあわせて利用することができます。

編集が終わったら、手作業での data ファイルの編集と同様に、make コマンドによって data.cdb を作成することで、レコードが有効になります。

 

目次