2011年06月08日、日本時間の午前9時より
World IPv6 Dayが開催されています。
World IPv6 Dayとは、世界的にIPv6接続実験を行う日です。社団法人日本インターネットプロバイダー協会の
案内では、その目的に付いて以下の通り説明されています。
IPv4 アドレス枯渇期を迎えたことを受け、IPv6 によるサービス提供に問題がないことを確かめ、問題があった場合にはそれを共有し、今後の課題解決に役立てることが目的です。
幾つか懸念がありますが、最も問題の発生しそうな環境は、NTTのフレッツ光サービスからIPv6アドレスを受け取っているサイトです。フレッツ光サービスでは、独自サービスにIPv6を利用していますが、フレッツ網自体はIPv6インターネットへの接続性を提供していないため、IPv6インターネット上のサイトと接続することは出来ません。
例えばマイクロソフトは、この件に関する
包括的な解説を公開しています。
我が家では、フレッツ光の一種であるB-Flet'sをアクセスラインに使用していますが、IPv6アドレスは受け取らないように設定しているため、今回のフレッツ網に纏わるは影響を受けません。また、あるプロバイダ様のご好意により、IPv6 over IPv4の静的なトンネルを試験利用させていただいているため、安定したIPv6での接続が確立できており、こちらも問題は受けません。
その上で、今回World IPv6 Dayの開始に伴い、実験として、フレッツ網からIPv6アドレスを受け取り、それを宅内ネットワークへ配布するようにしてみました。
普段利用しているIPv6のアドレスプレフィックスは2001:240:XXXX::/48です。今回フレッツから取得したアドレスは2001:c90:XXXX:XXXX::/64でした。これをIPv6対応ルータで受信させ、共に/64とした上で宅内ネットワークへ再伝搬(RA)させます。これにより宅内ネットワークには、条件が同等な二つのprefixが流れることになります。但しデフォルト経路は、IPv6インターネットへ接続している2001:240:XXXX::/48側です。
宅内ネットワークには、IPv6対応クライアントとしてMacOS X 10.6.7、Windows7 SP1、FreeBSD 8.2p2、iOS 4.3.3、Android 2.3.2を用意しました。
この環境で、今回実験に参加しているwww.google.comへの接続を試みました。IPv6アドレスは2404:6800:8002::68です。問題なく繋がりました。
次に国内から実験に参加しているwww.yahoo.co.jpへ接続しました。IPv6アドレスは2404:a600:1:1607:1181:5100:25:4055です。こちらも問題なく繋がります。
最後に、もう一箇所、同じく国内で実験に参加しているwww.sony.co.jpへ接続しました。IPv6アドレスは2001:cf8:0:51::18です。しかしこちらは繋がりません。
この理由は今回フレッツから割り当てられたアドレスと、接続先アドレスとの関係にあります。
単一インターフェイスへ複数のIPv6アドレスが割り当てられている場合、どのアドレスをソースアドレスとして利用するかは
RFC3484である「Default Address Selection for Internet Protocol version 6 (IPv6)」で定義されています。
これに従えば「5. Source Address Selection」の「Rule 8: Use longest matching prefix.」に基づき、「2001::cf8」で始まるwww.sony.co.jpの場合にのみ、確実に「2001:c90:XXXX:XXXX::/64」側のアドレスがソースアドレスとして利用されてしまいます。
勿論このアドレスは、フレッツの中でだけ使えるアドレスなので、www.sony.co.jpはこのアドレスに対して戻りパケットを伝達させることが出来ません。この為、結局接続出来なくなってしまいます。同様の理由で接続できないサイトにはwww.nta.go.jp(2001:c80:a001:1::cad9:2cd0)などがあります。
一方、他サイトでの接続に問題が生じなかったのは、ある意味偶然です。ソースアドレス選択アルゴリズムの結果、優先度が一致した場合には、どのアドレスを利用しても自由であり、今回はたまたま先にRAが発行されていた「2001:240:XXXX::/48」側のアドレスが利用されたに過ぎません。実際にRAの順番を変更したところ、接続できなくなりました。
この問題を解決するために、RFC3484ではポリシーテーブルという仕組みが提唱されており、この仕組を用いることでアドレス選択の優先度を変更できるようになっています。この仕組みを用いることで、IPv6インターネットへの接続時にはフレッツ網から割り当てられたIPv6アドレスを利用しないように設定することが可能です。今回使用したクライアントの中ではWindowsやFreeBSDがサポートしています。
Windows系での設定に関しては、IIJの松崎さんが、
「NTT東西のIPv6閉域網向けポリシーテーブル設定」として公開してくださっています(有難うございます)。
FreeBSDでポリシーテーブルを変更するにはip6addrctlコマンドを利用します。松崎さんの設定情報をip6addrctl用の設定ファイル形式へ変更したものを以下に置いておきます。例えば/etc内へip6addrctl.confというファイル名で保存した後、root権限で/etc/rc.d/ip6addrctlなどを実行すれば簡単に設定可能です。
::1/128 50 0
::/0 40 1
2001:c90::/32 40 6
2001:d70::/30 40 6
2001:a000::/21 40 6
2404:1a8::/32 40 6
2408::/22 40 6
2002::/16 30 2
::/96 20 3
::ffff:0:0/96 10 4
Windows、FreeBSDとも、この設定を行うことで、www.sony.co.jpを含むIPv6サイトへ接続できるようになりました。
残る問題はMacOS X、iOS、Andoridです。これらにはポリシーテーブルを変更する手段がありません。
MacOS Xの場合、Web閲覧だけの解法であれば、ブラウザにGoogle Chromeを利用する、という方法があります。最新のGoogle Chromeには、IPv4、IPv6で同時にサイトへの接続を試み、先に応答が返ってきた接続を利用する、という仕組みが実装されています(簡易的なHappy Eyeballs)。この為、IPv4とIPv6の両アドレスが割り当てられているサイトであれば、例えIPv6のソースアドレス選択が誤っている場合でも、IPv4で接続できます。
残念ながらiOSとAndoroidには、このような仕組みは実装されていません。また、IPv6を使わないように設定する方法もありません。これらのOSを利用している場合には、フレッツから割り当てられたIPv6アドレスをRAで配布しないように設定する以外、解決策はなさそうです。
幸い、
NTT東日本、
NTT西日本とも、以前から告知されていた「フレッツ光ネクスト経由によるIPv6インターネットへ接続」が正式サービスとして開始されました。今後は多くのプロバイダがIPv6接続サービスを展開してくることでしょう。
次回World IPv6 Dayが開催される際には、フレッツによるIPv6アドレス割り当て問題が解決され、ISPによるAAAAフィルタリングなどを行うことなく、より多くの人々が問題なく接続できる環境になれば、と願っております。