IPv6 onlyネットワークの構築〜Ecdysis (NAT64) / BIND 9.8 (DNS64) / ISC DHCP 4 (DHCPv6)〜
使用ソフトウェア等
- NAT64: Ecdysis (OpenBSD 4.6 + NAT64 in pf (no DNS64): ecdysis-openbsd-4.6-amd64-20100226.iso)
- IPv6 onlyネットワークからIPv4サーバへの接続性を提供するため,特定のプレフィックス宛のIPv6パケットをIPv4パケットに変換する機能を持つNAPTゲートウェイ.
- DNS64:
BIND 9.8.1 (FreeBSD ports: dns/bind98)
- IPv4サーバ(AAAAレコードを持たないホスト名)に対して対応するAAAAレコード(NAT64によりIPv6-IPv4変換されるIPv6アドレス)の名前解決をIPv6 onlyネットワークに提供する機能.
- DHCPv6:
ISC DHCP server 4.2.3 (FreeBSD ports: net/isc-dhcp42-server)
- DHCPのIPv6版.IPv6 onlyネットワーク内のクライアントノードにクライアントのIPアドレスやDNSサーバ(ここではDNS64サーバ)を設定する.なお,IPアドレスについては,IPv6 router advertisementによるautoconfiguration機能で代用可能であり,この場合のDHCPv6はクライアントへのIPv6アドレスの割り当て状況(ステート)を管理する必要が無いため,ステートレスDHCPv6とも呼ばれる.
ネットワークトポロジー・構成
本稿では,Fig. 1のネットワークトポロジーにてIPv6 onlyネットワークを構成する.また,本稿ではNAT64にてIPv6-IPv4変換されるプレフィックスとしてWell-known NAT64 prefixである64:ff9b::/96を用いるが,インターネット上で用いられている他のプレフィックスと重複しない別のプレフィックスを用いても良い.但し,このプレフィックスに32ビットであるIPv4アドレスをマッピングするため,プレフィックス長は96 (即ち128-32ビット) 以下である必要がある.また,このプレフィックスに対してインターネットからの到達性がある場合は,外部の機器からの通信を中継しないようにNAT64機器などに適切なフィルタを設定する必要がある.
NAT64/DNS64の動作
各機器およびソフトウェアの設定を説明する前に,NAT64およびDNS64の動作について概説する.
Fig. 2はIPv4サーバであるwww.example.netのTCP 80番ポートへのアクセス時のNAT64およびDNS64の動作を示したものである.
まず,IPv6 onlyネットワーク内の機器にはDNSサーバとしてDNS64サーバが設定されているものとする.これはDHCPv6または手動により設定できる.この機器がwww.example.netのAAAAレコードを解決する際,そのリクエストを受け取ったDNS64サーバは,まず,通常の名前解決と同様にwww.example.netのAAAAレコードの解決を試みる.AAAAレコードが解決できればDNS64サーバはそのAAAAレコードをレスポンスとして返す.この図におけるwww.example.netのようにAAAAレコードが設定されていない場合,DNS64サーバはwww.example.netのAレコードを解決し,このIPv4アドレスをNAT64プレフィックス(本稿では64:ff9b::/96)の下32ビットに付与したIPv6に変換し,AAAAレコードとしたレスポンスを返す.これにより,IPv6 onlyネットワーク内の機器はAAAAレコードを解決できる.
次に,IPv6 onlyネットワーク内の機器は,解決したAAAAレコードを用い, 対象のサーバへの通信を開始する.ここで,解決したAAAAレコードがNAT64プレフィックスで無い場合は通常のIPv6の通信となる.解決したAAAAレコードがNAT64プレフィックスの場合は,このプレフィックス宛のパケットをNAT64サーバへとルーティングし,NAT64により,IPv6からIPv4への変換・送信元ポート番号の変換およびこれらの変換状態の記憶を行う.この変換状態を保持することで,IPv4でのNAPTと同様に,IPv4サーバ(www.example.net)からの通信をIPv4からIPv6へ変換した上で適切な宛先ポート番号に変換することでIPv6 onlyネットワーク内の機器へとパケットが配送される.
NAT64/DNS64で通信できないもの
NAT64によりアドレスファミリーの変換が行われるためには,DNS64にて対象のIPv4アドレスをNAT64プレフィックスにマッピングしたIPv6アドレス(AAAAレコード)を解決できる必要がある.そのため,IPv6 onlyネットワーク内のクライアントがDHCPv6で設定されるべきDNS64ではない独自のDNSサーバを設定していたり,名前解決をDNSに頼らないアプリケーションやIPv4アドレスを直接指定したりアドレスファミリーを指定して通信するアプリケーションは,DNS64やIPv6自体を利用できないため正常に通信ができない.
また,NAT64はIPv4におけるNAPT(ステートフルNAT)のようにポート番号の変換も行うものであるため,従来のNAPTと同様に様々な制限があるが,前述のIPv6やDNS64を使用できないことに由来する問題と比較して,軽微であると考えられる.