■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