DNSのIPv6設定でやっていいこと、悪いことIPv6導入虎の巻(4)

» 2003年01月18日 00時00分 公開
[鈴木伸介日立製作所]

 前回第3回 IPv6で内部のルーティングを設定しよう!までで、IPv6での経路制御周辺とDNSのIPv6関連の設定に関して解説した。これからは、サーバ周りのIPv6対応の設定の説明を進めていく。第4回の今回はまずDNSのIPv6関連(図1)の設定を解説する。

図1 ある企業網における、要素ごとのIPv6導入ケース。今回は、赤枠で囲まれたサーバの部分について説明していく 図1 ある企業網における、要素ごとのIPv6導入ケース。今回は、赤枠で囲まれたサーバの部分について説明していく

DNSのIPv6化には2つの意味がある

 一口に「DNSをIPv6対応させる」といっても、2つの意味がある。1つはDNSでホスト名からIPv6アドレスを引くことができるようになる意味で、もう1つはDNSサーバへの通信をIPv6で行うことができるようになるという意味である(図2)。

図2 DNSをIPv6に対応させる2つの意味 図2 DNSをIPv6に対応させる2つの意味

 前者はIPv6ネットワークで最低限必要なものだが(そうでないと40文字近いIPv6アドレスをべた書きしないとならない)、後者はIPv4ネットワークが残っていれば必須ではない。そこで本稿では前者を中心に説明する。

 後者は「IPv6トランスポート対応」のDNSサーバを用いれば、何もしなくても実現可能である(後述)。

DNSサーバの準備

 まずは普通にIPv4のサービスを行うDNSサーバを立てる必要がある。IPv4のDNSサーバ設定に関しては連載:DNSの仕組みと運用を参照いただくことにして、本稿ではIPv6のDNSサーバ設定に限定して解説したい。

IPv6のDNSサーバに必要な機能

 IPv6への対応に当たりDNSサーバに必要とされる機能は以下のとおりである。DNSサーバを準備するときには、以下の機能がサポートされていることを確認しておく必要がある。

1. AAAAレコード対応

 ホスト名に対応するIPv6アドレスをDNSに格納するために用いられるレコードの種類である。同様な目的で「A6レコード」というものもあるが、まだ実験段階なので、当面は「AAAAレコード」のみが対応していれば十分である。

2. ip6.int.またはip6.arpa.ドメイン対応

 IPv6アドレスに対応するホスト名をDNSに格納するために用いられるドメインである。

 ドメインが2つ存在する背景には歴史的な経緯がある。もともとはip6.int.ドメインのみが用いられていたが、後日.int.が国際機関用トップレベルドメインとして予約されてしまったので、重複を避けるためにip6.arpa.が定義されたという次第である。2003年1月現在はip6.int.からip6.arpa.への移行段階であるため、両方のドメインが併用されている。

3. EDNS0対応

 DNSパケットのデータ長は最大512byte、ということになっている。ところがIPv4アドレスが4byteだったのに対して、IPv6アドレスは16byteあるため、512byteの大きさでは時として必要なIPv6アドレスをDNSパケットにすべて格納し切れないことがある。

 こうした問題を避けるために、DNS拡張オプションEDNS0(Extension mechanism for DNS)がRFC2671にて定義されている。このオプションにてDNS問い合わせクライアント側から受信可能なデータ長を通知することにより、DNSサーバはDNSパケットにより多くのデータを詰め込むことができるようになる。

 特にマルチホーム構成などのために1つのホストが複数アドレスを持つような環境では、DNS応答パケットも大きくなりがちなので、EDNS0は必須な機能である。

4. IPv6トランスポート対応

 DNSでの問い合わせ/応答通信は、TCP/UDPの53番ポートを使って行われる。通常はIPv4のTCP/UDPでこの通信は行われるが、IPv6トランスポート対応DNSサーバはIPv6のTCP/UDPでもこの通信を行うことができ る。IPv6でのDNSサーバ通信を行う必要がなければ、この機能は不要である。

1
AAAAレコード対応
2
ip6.int.またはip6.arpa.ドメイン対応
3
EDNS0対応
4
IPv6トランスポート対応
BIND 4 × ×
BIND 8
BIND 9
djbdns ×
Windows 2000 DNS × ×
〇:対応済み △:未対応だが第三者がパッチを配布 ×:未対応
表1 DNSサーバの要求事項

更新:BIND 8のEDNS0やIPv6トランスポート機能が、2003年6月2日に公開された BIND-8.4.0で標準サポートとなったため、表1を更新しました。(2003年6月4日)

お詫びと訂正:djbdnsのEDNS0をサポートと記述してありましたが、非サポートの誤りでした。お詫びして、訂正します。(2003年6月4日)


DNSサーバでIPv6アドレスを引けるようにする

 上記の準備が終わったら、後はIPv6アドレスをDNSに登録するだけである。書式が若干違うものの、IPv4アドレスをDNSに登録するのとまったく同じ要領である。唯一気を付けなければならないのは、逆引きドメインを2つ用意する必要があることくらいだ(図3)。

[named.conf]
...
zone "example.com" {
        type master;
        file "example.com";
};
zone "0.0.0.0.f.f.f.f.f.f.f.f.e.f.f.3.ip6.arpa" {
        type master;
        file "example.com.rev"
};
zone "0.0.0.0.f.f.f.f.f.f.f.f.e.f.f.3.ip6.int" {
        type master;
        file "example.com.rev"
};
...  
[example.com]
....
host1 IN AAAA 3ffe:ffff:ffff::1
....
[example.com.rev]
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR host1.example.com.
....
図3 BIND 9でのIPv6アドレスの登録例(IPv6設定関連部のみ取り出した)

IPv6設定べからず集

 最後にIPv6関連での、DNS設定でやってはいけないことをリストアップしておく。

  • リンクローカルアドレスは登録してはダメ
     リンクローカルアドレスはあるセグメントでのみ一意なアドレスである。DNSサーバにリンクローカルアドレスを登録しても期待とは異なる動作をするので(図4)、決してリンクローカルアドレスをDNSに登録してはならない。
図4 DNSサーバがPC1のリンクローカルアドレスを登録しているとき、クライアントがPC1へ通信しようとすると、PC2に通信してしまう 図4 DNSサーバがPC1のリンクローカルアドレスを登録しているとき、クライアントがPC1へ通信しようとすると、PC2に通信してしまう
  • サイトローカルアドレスは外に見せたらダメ
     上とまったく同様に、サイト(通常は企業内)外にサイトローカルアドレスを公開すると、違う場所に通信することになるからである。公開するならば、サイト内限定で公開しなければならない。

  • IPv4-mappedアドレスは登録してはダメ
     「::ffff:1.2.3.4」という形式のIPv6アドレスは、IPv4-mappedアドレスといわれ、IPv6対応アプリケーション内部でIPv4アドレスを表現するために用いられるアドレスである。その用途からも分かるように、このアドレスは内部表現限定で用いるものであり、ネットワークの外に流出してはならないものである。そのためIPv4-mappedアドレスをDNSに登録してはならない。

  • トランスレータ用アドレスのDNS登録には細心の注意を
     NAT-PT(RFC2766)、FAITH(RFC3142)などのIPv6/IPv4トランスレータを導入している場合、ある範囲のIPv6プレフィックスがこれらのトランスレータ経由でIPv4ホストと通信するために予約される。この範囲のIPv6アドレスをDNSに登録しておけば、IPv6のみ機能している端末からIPv4のみが機能している端末へホスト名を用いて到達可能となるので、非常に便利である。

     ただしDNSサーバのIPv4アドレスのトランスレータ経由版IPv6アドレスをDNSに登録すると、余計なDNS問い合わせが発生することがある。IPv6/IPv4トランスレータの実装や設定によってはDNSパケットの変換を行わないものがあるため、DNS検索の内部過程でDNSサーバへ問い合わせを行うときにトランスレータ経由版IPv6アドレスあての問い合わせパケットが通らないからである(図5)。
図5 DNSサーバのトランスレータ経由アドレスをDNSに登録すると、問い合わせに失敗することがある 図5 DNSサーバのトランスレータ経由アドレスをDNSに登録すると、問い合わせに失敗することがある

 最終的にはトランスレータを経由しない問い合わせにより名前解決ができることが多いものの、余計なDNS問い合わせによるDNSサーバ負荷を減らすためには、こうしたことは起こらない方が望ましい。

 そのためトランスレータ用アドレスをDNSに登録するとき、特にDNSサーバに関しては十分注意して登録する必要がある。



  • MXレコードのIPv6化には要注意
    DNSのMX(Mail eXchange)レコードにIPv6アドレスを設定したら、そのSMTPサーバのOSや、SMTPサービスもIPv6対応にしなければならない(SMTPサーバのIPv6化の詳細は連載第5回「HTTP、SMTP、POPサーバのIPv6設定」で説明)。

     IPv6未対応のメールサーバに、IPv6でメールを送ろうとしても、失敗してしまい迷惑となるからだ。MXレコードのIPv6アドレスを新たにDNSサーバに設定し、SMTPサーバをIPv6に対応させることで、IPv4とIPv6の両方をサポートできることになる。

     もしSMTPサービスをIPv6対応させられないならば、MXレコードに指定するサーバを、IPv4アドレスだけ定義したホスト名に変更する必要がある。

 今回は、DNSのIPv6対応について解説した。次回はメールのIPv6対応について解説していく。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。