続・IPv6の罠。

前回の記事:IPv6の罠。: 約定期blog GS

今回、ルータを新調していろいろテストしてて、またIPv6問題が出たので詳しく調べてみた。

やっぱり、SHV32自体がIPv6無効化されてるので間違いないっぽい(公式に確認取ってないけど)。

■IPアドレス割り当て状況
MyIP(https://play.google.com/store/apps/details?id=radonsoft.net.myip)で確認してみる

KYL21(DIGNO S)
myip_kyl21.png
SHV32(AQUOS SERIE)
myip_shv32.png
TBi11M(XOOM)
myip_xoom.png

SHV32だけ、何故かリンクローカルアドレス(fe80::/64)になってる。
IPv4でいうところの169.254.0.0/16といえば「あ~...」ってなる人もいるはず。よくトラブルでDHCP割り当てが失敗したときに見かけるアドレス。

では、本当にグローバルアドレスが振られていないのかというと、Wi-Fiの詳細設定から確認すると確かに振られてるし、PCからpingを打つと届く。

wifi_shv32.png

■原因の推測
どうやら、OSレベルで手が入れられて、IPv6が部分的に殺されてるっぽい。

総務省|IPv6によるインターネット利用高度化に関する研究会|IPv6によるインターネットの利用高度化に関する研究会第25回会合議事概要

上記議事概要を「Android」で検索すると、国内キャリアから発売される端末でIPv6が無効化されてるような記述を発見。
おそらくフレッツ等のISP閉域網対策だと思うけど、そのせいで逆にグローバルIPv6環境だとトラブルが起きてる。

それでも、通常は
グローバル網のDNSで名前解決(AAAA、Aレコード取得)→端末がIPv6で通信しようとする→端末でブロック→すぐにIPv4にフォールバック→遅延が起きない→OK!

ってなるはずだけど、ConnectBotやIPSTの場合、最初の時点でAAAAレコードのみ取得してしまい、フォールバックできずにエラーになってるんだと思う。

Chromeも、ipv6.google.comなどのIPv6専用ホストだとエラーになるけど。www.kame.netとかv6pc.jpとかmcrn.jpとかのIPv6/IPv4両対応ホストだとv4のほうで接続できるし。

そもそも、閉域網対策でv6が殺されてなくても、何らかの理由でv6が繋がらない状況だと、上記のようなフォールバックに失敗するアプリはエラーになってしまうはず。

■結論
・SHV32固有というか、国内端末の問題(海外メーカーでも国内販売のはひっかかるかも)
・IPv6アドレス割り当て+IPv6有効ホストへの接続で発生
・アプリ側が適切にフォールバックしてないのが悪い