■自前のDNSを構えたけれど、ブロードバンドルーターのDHCPからIPアドレスを配布する構成をとっている。WindowsのIPプロパティには「DNSサーバーに登録する」とかいった設定があるので、それで登録されるかなと試してみたのだけど、BINDには登録されない。面白いのはビエラはDNSサーバーへ登録されていた。どうやらWindowsクライアントが自PC名を登録できるのはMSのDNSサーバーに限られるようだ。
DHCPで動的に割り当てられるアドレスに追随してホスト名の解決ができるようにしておきたいので、自分なりにあれこれ調べていたのだけど、どうやらDHCPサーバーをDNSサーバーのクライアントとし、DHCPがDNSに登録する手段があるという。
結局は全部自前で揃えることになるけれど、ここまできたのだからDHCPサーバーも立ててしまいましょうか。
/etc/dhcp/dhcpd.conf を整備しました。IPv4用です。IPv6用の設定もあるようですが、そちらはRADVDがカバーしているので使いません。DHCPは基本的に自分が扱うネットワークの指定と割り当てるアドレスの範囲、それから今回はDNSサーバーを更新する設定を行えば動きます
not authoritative;
ignore client-updates;
ddns-update-style interim;
zone local. {
primary 192.168.1.xxx;
}
zone 1.168.192.in-addr.arpa. {
primary 192.168.1.xxx;
}
subnet 192.168.1.0 netmask 255.255.255.0 {
option domain-name "local";
option domain-name-servers server.local;
use-host-decl-names on;
range 192.168.1.aa 192.168.1.bb;
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
default-lease-time 600;
max-lease-time 86400;
host ps3-001.local {
hardware ethernet 00:xx:xx:xx:xx:xx;
fixed-address 192.168.1.yy;
option host-name "ps3-001.local";
}
}
ddns-update-styleを指定することでDNSを更新する設定にしています。更新先は2つのzoneセクション(正引き、逆引き)です。DHCPがハンドリングするアドレス範囲はsubnetセクションで規定しているプライベートネットワークです。ドメイン名はそのドメインにおけるDNSサーバーの名前を指定し、rangeで割り付けるアドレスの範囲をaa~bbに設定しています。
他にIPv4設定でのルーターやサブネットマスク、ブロードバンドアドレスの情報も記述しています。ちょっと面白かったのはPS3です。ビエラはDHCPに対して自分の名前を通知していて、DNSには登録されるのですが、PS3は自サーバーの名前を通知しないため、DNSに出てきません。
そのため、PS3についてはMACアドレスを使ってDHCPサーバー側で同定できるようにしています。hardware ethernetがMACアドレスで、fixed-addressで固定IPアドレスを割り付けています。
ただ、DHCPサーバーをクライアントとするにはDNS側も設定が必要でした。
DHCP側で更新対象としている正引き、逆引きの設定ファイル、named.hosts, named,revに$ORIGIN . の記述をファイル先頭に追加しました。
また、data/ディレクトリにドメイン名のファイル('local')を作成し、そこにSOAとネームサーバーの定義をnamed.hostsからコピーしました。
$ORIGIN .
$TTL 86400
@ IN SOA server.local. (
2012031601 ;serial
10800 ;Refresh
3600 ;Retry
604800 ;Expire
86400 ) ;Minimum
NS server.local.
server A 192.168.1.xxx
逆引きに登録されても正引きに登録されなかったり、一度登録されたあとにPC名を変更しようと思っても反映されなかったりすることがありましたが、BINDがnamed.hostsやnamed.rev, *.jnlファイルを更新して情報を更新してしまうためだったようです。うまく登録されなくなってしまったら、named.hosts, named.revをオリジナルに回復することと、*.jnlを削除してnamedを再起動する必要があるようです。