IPv6の名前解決という場合、IPv4上のDNSクエリでIPv6ホストのアドレスを解決する場合と、クエリ自体もIPv6で行う場合の二つが考えられる。BIND9はどちらも対応済みなので設定を加えるだけで動作する。ちなみにWindows XPは前者の形でしかクエリできない。
まず/var/named/chroot/etc/named.confの設定をする。
[root@intra etc]# cat named.conf
acl "internal" {
127.0.0.1;
192.168/16;
::1;
fd00::/8;
};
options {
directory "/var/named";
allow-query{ internal; };
listen-on-v6 {internal;};
};
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
inet ::1 allow { ::1; } keys { rndckey; };
};
include "/etc/rndc.key";
view "internal" {
match-clients { localhost; localnets; internal; };
recursion yes;
include "/etc/named.rfc1912.zones";
zone "grandarbre.net" {
type master;
file "grandarbre.net.lan";
allow-update { none; };
};
zone "0.168.192.in-addr.arpa" {
type master;
file "0.168.192.in-addr.arpa.db";
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file "1.168.192.in-addr.arpa.db";
allow-update { none; };
};
zone "0.0.0.0.8.6.1.0.2.9.1.0.0.0.d.f.ip6.arpa" {
type master;
file "0.168.192.fd00.ip6.arpa.db";
allow-update { none; };
};
zone "1.0.0.0.8.6.1.0.2.9.1.0.0.0.d.f.ip6.arpa" {
type master;
file "1.168.192.fd00.ip6.arpa.db";
allow-update { none; };
};
};
optionsの中のlisten-on-v6はBIND自身がIPv6によるクエリを受け取る設定。
IPv6用の逆引き設定は、IPv6アドレスを16進数の1文字毎にばらして逆に並べ、最後にip6.arpaをつける。上記の例では32文字(128ビット)中の上位16文字(64ビット)までをマッチさせている。
次に正引きのゾーンファイル。ここではIPv4とIPv6を分けずに/var/named/chroot/var/named/grandarbre.net.lanに記述している。特徴的なのはAレコードではなくAAAAレコードを使っていることのみ。ちなみに下記では同じホストに対してIPv4とIPv6で別のホスト名を付与しているが、同じホスト名にしてもいい。
[root@intra named]#cat grandarbre.net.lan
$TTL 86400
@ IN SOA grandarbre.net. root.grandarbre.net.(
2009021803 ; serial
3600 ; refresh (1 hour)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; negative (1 day)
)
IN NS grandarbre.net.
IN MX 10 grandarbre.net.
intra IN A 192.168.0.3
gateway IN A 192.168.0.254
www IN A 192.168.1.1
intra6 IN AAAA fd00:192:168:0::3
gateway6 IN AAAA fd00:192:168:0::254
www6 IN AAAA fd00:192:168:1::1
そしてIPv6用の逆引きゾーンファイル。named.confで16文字をマッチさせたので、ここでは残りの16文字を逆順に記述する。
[root@intra named]#cat 0.168.192.fd00.ip6.arpa.db
$TTL 86400
@ IN SOA grandarbre.net. root.grandarbre.net.(
2009021805 ; serial
3600 ; refresh (1 hour)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; negative (1 day)
)
IN NS grandarbre.net.
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR intra6.grandarbre.net.
4.5.2.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR gateway6.grandarbre.net.
[root@intra named]# cat 1.168.192.fd00.ip6.arpa.db
$TTL 86400
@ IN SOA grandarbre.net. root.grandarbre.net.(
2009021805 ; serial
3600 ; refresh (1 hour)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; negative (1 day)
)
IN NS grandarbre.net.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR www6.grandarbre.net.
これで設定は完了。BINDを再起動しよう。
[root@intra named]# service named configtest zone localdomain/IN: loaded serial 42 zone localhost/IN: loaded serial 42 zone 0.0.127.in-addr.arpa/IN: loaded serial 1997022700 zone 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 1997022700 zone 255.in-addr.arpa/IN: loaded serial 42 zone 0.in-addr.arpa/IN: loaded serial 42 zone grandarbre.net/IN: loaded serial 2009021803 zone 0.168.192.in-addr.arpa/IN: loaded serial 2008122800 zone 1.168.192.in-addr.arpa/IN: loaded serial 2009021200 zone 0.0.0.0.8.6.1.0.2.9.1.0.0.0.d.f.ip6.arpa/IN: loaded serial 2009021805 zone 1.0.0.0.8.6.1.0.2.9.1.0.0.0.d.f.ip6.arpa/IN: loaded serial 2009021805 [root@intra named]# service named restart named を停止中: [ OK ] named を起動中: [ OK ]
BINDがDNSクエリを待ち受けていることを確認する。
[root@intra named]# netstat -a | grep :domain tcp 0 0 intra.grandarbre.net:domain *:* LISTEN tcp 0 0 localhost.localdomai:domain *:* LISTEN tcp 0 0 intra6.grandarbre.ne:domain *:* LISTEN tcp 0 0 localhost6.localdoma:domain *:* LISTEN udp 0 0 intra.grandarbre.net:domain *:* udp 0 0 localhost.locald:domain *:* udp 0 0 intra6.grandarbr:domain *:* udp 0 0 localhost6.local:domain *:*
それでは他のホストから名前解決が出来ることを確認しよう。digで正引きがうまく動かなかったのでhostコマンドで名前解決をしてみた。
[ishii@www ~]$ host intra6 intra6.grandarbre.net has IPv6 address fd00:192:168::3 [ishii@www ~]$ host fd00:192:168::3 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.6.1.0.2.9.1.0.0.0.d.f.ip6.arpa domain name pointer intra6.grandarbre.net.
次に、DNSクエリ自体をIPv6でやってみよう。やり方は簡単で、/etc/resolv.confのnameserverをIPv6アドレスに書き換える。
[root@localhost etc]# cat resolv.conf search grandarbre.net nameserver fd00:192:168:0::3
[root@localhost etc]# host intra6 intra6.grandarbre.net has IPv6 address fd00:192:168::3 [root@localhost etc]# host fd00:192:168::3 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.6.1.0.2.9.1.0.0.0.d.f.ip6.arpa domain name pointer intra6.grandarbre.net.
うまくいった。なおDNSサーバ側で動いているip6tablesはデフォルトではDNSクエリを通さないので、/etc/sysconfig/ip6tables以下のような記述を追加してservice iptables restartしておく。
-A RH-Firewall-1-INPUT -m udp -p udp -s fd00::/8 --dport 53 -j ACCEPT -A RH-Firewall-1-INPUT -m tcp -p tcp -s fd00::/8 --dport 53 -j ACCEPT