■今までサーバーのホスト名解決にはhostsを使っていました。それでなんとかなってきたし。ただ、DHCP環境下で、テレビやらPS3やらXBOXやらいろいろ諸々IPアドレスを取るオブジェクトが増えてきた中で、いつまでもhostsを使っているのはちょっと不便。もしかするとIPアドレス変わってしまうかもしれないし。
せめてサーバーくらいはhostsのメンテナンス無しで使えるようにしておきたい。それにradvd立てておいてIPv4をケアしないのもなんだか片手落ちだし。
DNS、実装はディストリビューションに含まれるBIND(9)を使います。DNSはSOAやらMXやらAやらPTRやら、やたらと面倒くさいという話は知っていて、敬遠気味だったのですが、やっぱり面倒でした。
まず/etc/named.confの設定から始めました。BINDサービス(namedサービス)としての設定になります。
options {
listen-on port 53 {
192.168.1.210;
127.0.0.1;
};
directory "/usr/local/named";
dump-file "/usr/local/named/data/nam_dump.db";
statistics-file "/usr/local/named/data/nam_stat.txt";
memstatistics-file "/usr/local/named/data/nam_memstat.txt";
allow-query {192.168.1.0/24;};
allow-transfer {none;};
recursion yes;
empty-zones-enable no;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/usr/local/named/dynamic";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "localhost.rev";
};
zone "local." {
type master;
file "named.hosts";
allow-update { 192.168.1.xxx; 127.0.0.1; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file "named.rev";
allow-update { 192.168.1.xxx; 127.0.0.1; };
};
このファイルでは、DNS要求を待ち受けるポート番号を設定し(listen-on port 53)、namedの作業ディレクトリやワークファイルのパスを設定しています(directoryからmemstatistics-file)。DNS問い合わせはローカルネットワークに限定しています(allow-query)。ここより下流のネットワークは無いので転送はしません(allow-transfer)。namedの動作ログはloggingセクションで設定されています。設定にミスがある場合のエラーはここで指定したファイルに出力されますから、tail -fなどで出力状態をフェッチしておくとデバッグが楽です。
他zoneセクション4つは、それぞれルートサーバの指定、ローカルホストの逆引きの設定と、ローカルドメインを対象とした正引き、逆引きのレコードファイルを指定しています。
ローカルドメインのエントリについてはクライアントからの外部更新を許可しています(allow-update)。これはDHCPで動的にIPアドレスを割り当てられたクライアントに追随するための設定ですが…。
ルートサーバ(named.ca)はftp://ftp.nic.ad.jp/internet/ rs.internic.net/domain/named.cacheなどから取得した内容をそのまま展開します。
ローカルホストの逆引き用(localhost.rev)の内容はこんな感じです。
$TTL 604800
@ IN SOA server.local. local. (
2012031601
10800
3600
604800
86400 ) ;
IN NS server.local.
1 IN PTR localhost.local.
固定IPアドレスを記述するnamed.hostsはこんな感じです。
$TTL 86400 ; 1 day
local IN SOA server.local. ns.server.local. (
2012031621 ; serial
10800 ; refresh (3 hours)
3600 ; retry (1 hour)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS server.local.
MX 10 server.local.
server A 192.168.1.xxx
router A 192.168.1.1
逆引きを定義するnamed.revはこんな感じに記述しました。
$TTL 604800 ; 1 week
1.168.192.in-addr.arpa IN SOA server.local. server.local. (
2012031627 ; serial
10800 ; refresh (3 hours)
3600 ; retry (1 hour)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS router.local.
NS server.local.
A 255.255.255.0
PTR freiheitstrom.
$ORIGIN 1.168.192.in-addr.arpa.
1 PTR router.local.
210 PTR server.local.
これでnamedを実行する設定が揃ったのですが、実行ユーザーを作成します。実際にはディストリされているnamedについては、オーナー:named、グループ:namedが用意されています。ディストリビューションで配置されたパスを変更しているため、このままではrc.d/namedが使えないので、起動は'named -u named -4'で行っています。namedユーザーで実行し、IPv4だけをサポートするオプションで実行する格好になります。
ただ、DNSを立てると、やはりDHCPで動的割り当てされたIPもサポートしたくなります。その拡張対応は次の段階ですね。