DNS サーバ djbdns のインストールと設定 - 動作チェック
DNS サーバである djbdns のインストールと設定をまとめてみました。
ここは、tinydns に登録した情報を用いて正しく名前解決を行えるかどうかを確認する方法についてのお話です。
3-4: 動作チェック
data.cdb のレコードを確認する
tinydns が参照する data.cdb ファイルにちゃんとレコードが登録されているかを調べるプログラムとして、tinydns-get というプログラムが用意されています。
tinydns-get [type] [fqdn]
この tinydns-get というプログラムは、カレントディレクトリにある、data.cdb をチェック対象とします。稼動している tinydns に問い合わせるのではないので気をつけましょう。
[type] の部分に、A や MX などの調べたいレコードタイプを指定して、[fqdn] のところには調べたいゾーン名を指定します。
以下は架空のドメイン、ez-net.local というのを用意して、MX レコードの確認を行ってみた結果です。
root@localhost:/service/tinydns/root# tinydns-get mx ez-net.local
15 ez-net.local:
136 bytes, 1+2+1+3 records, response, authoritative, noerror
query: 15 ez-net.local
answer: ez-net.local 86400 MX 0 a.mx.ez-net.local
answer: ez-net.local 86400 MX 0 b.mx.ez-net.local
authority: ez-net.local 259200 NS a.ns.ez-net.local
additional: a.mx.ez-net.local 86400 A 192.168.0.1
additional: b.mx.ez-net.local 86400 A 192.168.0.2
additional: a.ns.ez-net.local 259200 A 192.168.0.254
root@localhost:/service/tinydns/root#
このうちの、answer: で始まる行が、目的のレコードに関する情報です。そのほかにも additional: の部分に関連する情報が出ているようです。
逆引きのチェックの場合、[type] は PTR 、[fqdn] は 0.0.168.192.in-addr.arpa のような感じで指定します。
なお、ドット ( . ) 行や Z 行によって SOA レコードが登録されたドメインでないと、最初の1行しか返されないので気をつけましょう。
もうひとつ重要なこととして、tinydns は通常では UDP プロトコルのみを使用する都合上、ここで返されるバイト数が 512 バイトを越える場合には、axfrdns を合わせて起動する必要があるそうです。
なので、上の例では 136 bytes と表示されていますけど、ここが 512 を越えていないかも確認するといいと思います。なお、検索するレコードタイプによって、このサイズは変わってきます。
tinydns が稼動しているか調べる
data ファイルの正当性は別として、tinydns が稼動しているかどうかを調べるには svstat というコマンドを使用します。
svstat [path]
[path] の部分には一般に、/service/tinydns を指定します。すると次のような感じの結果になると思います。
root@localhost:/# svstat /service/tinydns
/service/tinydns: up (pid 22224) 0 seconds
root@localhost:/service/tinydns/root#
ここで up (pid xxxxx) みたいな感じになれば、tinydns が動いている確認ができるそうです。
ただ、ためしに関係ないディレクトリ ( /tmp ) のシンボリックリンクを /service/ に作成して、svstat /service/tmp としてみたところ、up (pid xxxxx) という返事が返ってきました…。
/tmp ディレクトリを見てみると、supervise/ というディレクトリが自動的に用意されていたので、このチェックはむしろ、tinydns の稼動チェックではなく、svscan の稼動チェックのような気がします。
ちなみにシンボリックリンクがないと、"unable to chdir: file does not exist" というエラーが返るようです。
tinydns に問い合わせる
稼動中の tinydns に問い合わせるには、dnsq というプログラムを使用します。
dnsq [type] [fqdn] [DNS-SERVER]
[type] には調べたいレコードタイプを、[fqdn] には調べたいホスト名等を指定します。
そして [DNS-SERVER] の部分には、問い合わせる DNS サーバを指定します。ここはドメイン名でもいいのですが、IP アドレスを指定するのが一般的だと思います。
自サーバの tinydns がどの IP アドレスで待ち受けているかは、/service/tinydns/env/IP というテキストファイルを覗くことで調べられます。
返ってくる値は、tinydns-get で data.cdb をチェックしたときと同じ値になるようです。
キャッシュサーバに問い合わせる
tinydns に直接問い合わせるのではなく、/etc/resolv.conf に登録されているキャッシュサーバに問い合わせるには、dnsqr というプログラムを使用します。
dnsqr [type] [fqdn]
[type] には調べたいレコードタイプを、[fqdn] には調べたいホスト名等を指定します。すると resolv.conf に登録されている DNS サーバをつかってその情報を取り出そうとします。
いわゆる一般的な経路で検索を行うので、外部から検索可能かを調べることができます。ただし、tinydns を resolv.conf に登録してしまっていたりすると、内部からは正常に検索できてしまったりするので気をつけましょう。/etc/resolv.conf に登録するのは普通、tinydns 自身ではなく、dnscache です。
なお、この dnsqr というプログラムは、目的のレコードを格納している DNS サーバが、tinydns でなくても利用できます。
【目次】