グローバル IPv6 Internet と「フレッツv6アプリ」の共存 [Windows XP]

目的
グローバルな IPv6 Internet への接続性を維持しつつ、NTT西日本の「フレッツv6アプリ」の閉域網へのアクセスも可能とする環境を構築する。
何が問題か
グローバルな IPv6 Internet 用のルータと「フレッツv6アプリ」のルータの両方からのRAを受信した端末は、2つのアドレスが付いた上、デフォルトルートが2つ付く。
Fig. ネットワーク図

C:\Documents and Settings\tumochan>ipconfig

Windows IP Configuration


Ethernet adapter ローカル エリア接続:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 192.168.ddd.ddd
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        IP Address. . . . . . . . . . . . : 2001:2a8:2002:0:xxxx:xxxx:xxxx:xxxx
        IP Address. . . . . . . . . . . . : 2001:2a8:2002:0:xxxx:xxxx:xxxx:xxxx
        IP Address. . . . . . . . . . . . : 2001:a0a0:4813:0:yyyy:yyyy:yyyy:yyyy
        IP Address. . . . . . . . . . . . : 2001:a0a0:4813:0:yyyy:yyyy:yyyy:yyyy
        IP Address. . . . . . . . . . . . : fe80::xxxx:xxxx:xxxx:xxxx%4
        Default Gateway . . . . . . . . . : 192.168.xyz.xyz
                                            fe80::xx:xxxx:xxx:xxxx%4
                                            fe80::yyy:yyyy:yyyy:yyyy%4
※一部伏せ字にしています。

この場合、あるIPv6ホストへのアクセスのために、以下の判断を行う必要がある。 デフォルトの状態では適当に選択するようなので、通信出来る場合(たまたま正しいソースアドレスと経路を選択した場合)と出来ない場合が発生する。
ソースアドレスの選択
Default Address Selection (RFC3484) という仕組みがあり、Windows XP にも実装してある。
Default Address Selection についての詳細は「IPv6アドレス選択」を参照。

Windows XP のデフォルトの設定:
C:\Documents and Settings\tumochan>netsh
netsh>interface ipv6
netsh interface ipv6>show prefixpolicy
アクティブ状態を照会しています...

Precedence  Label  Prefix
----------  -----  --------------------------------
         5      5  3ffe:831f::/32
        10      4  ::ffff:0:0/96
        20      3  ::/96
        30      2  2002::/16
        40      1  ::/0
        50      0  ::1/128

Default Address Selection の動作は次の通り。
  1. Destination address を上の表の Precedence の高い(大きい)方から比較していく。
  2. Prefix がマッチしたら、その行の Label と同じラベルが付いたアドレスに含まれるソースアドレスを選択する。
上の例だと、IPv6(::/0) > 6to4(2002::/16) > 互換アドレス(::/96) > IPv4(::ffff:0:0/96) の順でマッチさせている。

NTT西日本のIPv6アドレスブロックへの通信について「フレッツv6アプリ」から付与されたアドレスをソースアドレスとして使うためには、次のような設定を行う。

netsh interface ipv6>set prefixpolicy ::1/128 50 0
OK

netsh interface ipv6>set prefixpolicy ::/0 40 1
OK

netsh interface ipv6>set prefixpolicy 2001:a000::/21 40 5
OK

netsh interface ipv6>set prefixpolicy 2001:d70::/30 40 5
OK

netsh interface ipv6>set prefixpolicy 2002::/16 30 2
OK

netsh interface ipv6>set prefixpolicy ::/96 20 3
OK

netsh interface ipv6>set prefixpolicy ::ffff:0:0/96 10 4
OK

netsh interface ipv6>show prefixpolicy
アクティブ状態を照会しています...

Precedence  Label  Prefix
----------  -----  --------------------------------
        10      4  ::ffff:0:0/96
        20      3  ::/96
        30      2  2002::/16
        40      5  2001:d70::/30
        40      5  2001:a000::/21
        40      1  ::/0
        50      0  ::1/128

netsh interface ipv6>

これにより「フレッツv6アプリ」のサーバにアクセスする場合、
  1. Destination が 2001:d70::/30 の範囲内に入る
  2. 同じ Label 値が付いた prefix (2001:a000::/21 or 2001:d70::/30) のうちのいずれかの範囲内に入るソースアドレスを使用する。
    今回の場合は 2001:a0a0:4813:0:xxxx:xxxx:xxxx:xxxx が 2001:a000::/21 の範囲内に入るため、このソースアドレスが使用される
経路設定
NTT西日本のIPv6アドレスブロックのみ「フレッツv6アプリ」側に振り、それ以外はグローバルな IPv6 Internet へ抜けるような経路設定を行う。
RAにより両方からデフォルトルートが来ているが、手動でスタティック設定するとMetric値により手動設定の方が優先される。
C:\Documents and Settings\tumochan>netsh
netsh>interface ipv6
netsh interface ipv6>set route 2001:a000::/21 "ローカル エリア接続" fe80::xx:xxxx:xxx:xxxx
OK

netsh interface ipv6>set route 2001:d70::/30 "ローカル エリア接続" fe80::xx:xxxx:xxx:xxxx
OK

netsh interface ipv6>set route ::/0 "ローカル エリア接続" fe80::yyy:yyyy:yyyy:yyyy
OK

netsh interface ipv6>show route
アクティブ状態を照会しています...

Publish  Type       Met  Prefix                    Idx  Gateway/Interface Name
-------  --------  ----  ------------------------  ---  ---------------------
no       Manual       0  2001:d70::/30               4  fe80::xx:xxxx:xxx:xxxx
no       Manual       0  2001:a000::/21              4  fe80::xx:xxxx:xxx:xxxx
no       Autoconf     0  ::/0                        4  fe80::yyy:yyyy:yyyy:yyyy
no       Autoconf     8  2001:a0a0:4813::/64         4  ローカル エリア接続
no       Autoconf   256  ::/0                        4  fe80::xx:xxxx:xxx:xxxx
no       Autoconf     8  2001:2a8:2002::/64          4  ローカル エリア接続


netsh interface ipv6>
※一度設定すればレジストリに記録される。
DNS設定
(本題とはあまり関係ありませんが)「フレッツv6アプリ」で使用するホストをローカルのDNSに登録しておくことにする。

fletsnet.com の zone ファイル(抜粋):
mapump.v6stage          IN      AAAA    2001:d70:1019::10
maweb.v6stage           IN      AAAA    2001:d70:1019::20
www.v6stage             IN      AAAA    2001:d70:1019::51
lcns.v6stage            IN      AAAA    2001:d70:1019::53
wms.v6stage             IN      AAAA    2001:d70:1019::55
security                IN      AAAA    2001:d70:101:2::150
update                  IN      AAAA    2001:d70:101:2::151
nc27web00.v2            IN      AAAA    2001:d70:100::80
nc27scc00.v2            IN      AAAA    2001:d70:100::5060
nc27imc00.v2            IN      AAAA    2001:d70:100::5061
nc27imc01.v2            IN      AAAA    2001:d70:100::1:5061
file1.mydisk            IN      AAAA    2001:d70:103:1::10
album1.mydisk           IN      AAAA    2001:d70:103:1::11
ninsyou.uketsuke        IN      AAAA    2001:a020:100:10::1
henkou.uketsuke         IN      AAAA    2001:a020:100:12::2
moushikomi.uketsuke     IN      AAAA    2001:a020:100:12::3
version-up.startuptool  IN      AAAA    2001:d70:104::3
※上記が必要な全てのホストかどうかは確認できていません。
動作確認
netsh での設定を元に戻す
設定を一旦デフォルトに戻したいときは
C:\Documents and Settings\tumochan>netsh
netsh>interface ipv6
netsh interface ipv6>reset
OK
「コミュニケーションツール」の利用

「フレッツv6アプリ」の標準機能である「テレビ電話」に使用する「コミュニケーションツール」では、これまでの設定にかかわらず、使用するIPアドレスを
「設定」→「基本設定」→「ネットワーク」
の中で設定する必要がある。
最初これが分からず、グローバルIPアドレスをソースとしてSIPのレジストにいって失敗してました・・・。
まとめ
Default Address Selection と Static route の組み合わせで、グローバルな IPv6 Internet への接続性を維持しつつ「フレッツv6アプリ」へのアクセスが可能となった。
但し、Static route を併用するということは、ルータの Link-local address が変わった場合に設定を変更する必要がある。

もどる