■DNSサーバのIPv6対応
DNSサーバをIPv6に対応させるには以下の4つのステップが必要です。
① DNSの通信をIPv6に対応させる
リゾルバを⇔サーバ間のIP通信をIPv6による通信にします。
② IPv6用DNSリソースレコードの追加
以下の2つのリソースレコードをサポート可能にする必要があります。
・AAAA ( クワッドエー ) レコード : IPv6の正引き用レコードです。IPv4のAレコードに相当します。
・PTRレコード : IPv6の逆引き用レコードです。
③ IPv6用DNSリソースレコードの情報追加
リソースレコードに対応させるだけではクエリに応答することはできないのでIPv6用の情報を追記します。
④ Extension Mechanisms for DNS ( EDNS0 ) への対応
IPv4のDNSでは最大パケット長が512オクテッドまでしかサポートされませんが、IPv6ではこれを超える可能性があるためEDNS0に対応する必要があります。bindではデフォルトでこれが有効となっています。
bindはyumからインストールします。
# yum install bind bind-chroot # rpm -qa | grep bind bind-9.8.2-0.17.rc1.el6_4.4.i686 bind-libs-9.8.2-0.17.rc1.el6_4.4.i686 bind-utils-9.8.2-0.17.rc1.el6_4.4.i686 bind-chroot-9.8.2-0.17.rc1.el6_4.4.i686 |
キャッシュサーバとしても利用するという前提で/etc/named.confを編集します。以下、編集部分のみ明記しています。
# vi /etc/named.conf
options {
# 任意のインターフェイスで受け付ける
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
# 任意からのqueryに対応
allow-query { any; };
# automatic empty zone: XXXXXのログ出力を停止
empty-zones-enable no;
# DNS SECを無効にする
dnssec-enable no;
dnssec-validation no;
}
logging {
# 不要なログを出力しない
category resolver { null; };
category database { null; };
category lame-servers { null; };
};
|
■正引きの設定
各組織で取得したドメイン名をDNSサーバに登録します。まず、named.confから追記します。
# vi /etc/named.conf
[ 以下の内容を追記する ]
zone "unix-power.local" {
# マスターサーバとして定義
type master;
# ゾーンファイル名を定義
file "unix-power.local.zone";
};
|
続いて上記で定義したゾーンファイル「unix-power.local.zone」を作成します。太文字になっているところがIPv6のAAAAレコードでIPv4のアドレスも合わせて記載しています。
# vi /var/named/unix-power.local.zone
[ 以下の内容で作成する ]
$TTL 1800
@ IN SOA ns1.unix-power.local. postmaster.unix-power.local. (
2013062200 ;Serial
10800 ;Refresh 3 hours
3600 ;Retry 1 hour
86400 ;Expire 1 day
3600 ) ;Minimum 24 hours
IN A 192.168.12.20
IN AAAA 2001:db8::100
IN NS ns1.unix-power.local.
ns1.unix-power.local. IN A 192.168.12.20
ns1.unix-power.local. IN AAAA 2001:db8::100
|
■逆引きの設定
正引きのnamed.confに行うゾーン定義はIPv4と全く同じものでしたが、逆引きの際は少々複雑です。IPv6アドレスは16進数を用いて4桁ごとに:で区切ったものを用いますがIPv4のときと同様にこれを反転したものを用います。その際、4bit(16進数1文字)ごとに「.」を挿入し、「:」を削除します。これで32個のサブドメインに分割されたことになります。そして末に「ip6.arpa」を連結します。
例えば2001:db8::100の場合を例にしてみます。
2001:db8::100 |
↓ 0の省略を外して全て記載する。
2001:0db8:0000:0000:0000:0000:0000:0100 |
↓ :を削除し全ての数字をドットで区切る
2.0.0.1.0.d.b.8.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0 |
↓ 順序を反転させ末尾にip6.arpaを連結する
0.0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa |
↓ 上記の中のプレフィックス部分をゾーン定義します。
0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa |
これをそのままnamed.confに定義しましょう。
# vi /etc/named.conf
[ 以下の内容を追記する ]
zone "0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa" {
# マスターサーバとして定義
type master;
# ゾーンファイル名を定義
file "2001:db8::.zone";
};
|
続いて逆引きゾーンファイルを作成します。ゾーン定義で使用していない残りの部分をホストとして登録します。
# vi /var/named/2001\:db8\:\:.zone
[ 以下の内容で作成する ]
$TTL 1800
@ IN SOA ns1.unix-power.local. postmaster.ns1.unix-power.local.
(
2013062200 ;Serial
10800 ;Refresh 3 hours
3600 ;Retry 1 hour
86400 ;Expire 1 day
3600 ) ;Minimum 24 hours
IN NS ns1.unix-power.local.
0.0.1.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR ns1.unix-power.local.
|
桁数が多くて非常にわかりづらいですね・・・・・。これはなんとかしてほしいものですが、今のところなんともならないんでしょうね。ここまで設定が終わればbindを起動します。
# /etc/rc.d/init.d/named start named を起動中: named: 既に実行中です [ OK ] |
■動作確認
リモートのIPv6ノードからnslookupで動作確認をとってみます。下記のようになればOKです。
>nslookup
既定のサーバー: ns1.unix-power.local
Address: 2001:db8::100
> ns1.unix-power.local
サーバー: ns1.unix-power.local
Address: 2001:db8::100
名前: ns1.unix-power.local
Addresses: 2001:db8::100
192.168.12.20
> 2001:db8::100
サーバー: ns1.unix-power.local
Address: 2001:db8::100
名前: ns1.unix-power.local
Address: 2001:db8::100
|
■DNSサーバの留意点
IPv6対応のDNSサーバを構築する上で留意する点はAレコードとAAAAレコードの両方が登録されていた場合です。DNSサーバに問い合わせAレコード、AAAAレコードの両方を回答するとIPv6が優先されます。もしIPv6ノードに通信を試みても通信が成立しない場合は即座にIPv4に切り替わるわけではなくIPv6のタイムアウトを待ってからIPv4に切り替わります。仮にIPv6のタイムアウトに30秒かかるとするとユーザはストレスを感じることになります。
こういった自体に陥らないためにIPv6の通信経路が確保されていないサーバ等はレコードの登録は行わないなどの配慮が必要です。
参考URL : http://www.atmarkit.co.jp/ait/articles/0401/14/news090.html