いつの頃からか自宅の無線LANに接続したAndroid端末がメールやハングアウトの着信通知を受け取れなくなっていたので原因を探ってみました。
「Push Notification Tester」を使って送受信の状況を確認してみると、やはり無線LAN接続中は「Notification arrived」で処理が止まってしまいます。Android端末がプッシュ通知を受け取るために接続するGCMサーバとの通信が上手くいっていないようだ…というところまでは絞り込めたのですが原因がはっきりしません。しかし、ネットを見ていて同じ事例の報告が日本人ばかり…ということに気が付いてピンと来ました。
結論から言うと原因はフレッツ。NTTのフレッツ光ネクストなどを利用しているとフレッツ網(NGN網)の中だけで有効なIPv6アドレス(Googleが言うところの「壊れたIPv6」)が付与されるのですが、Android端末はそれがインターネットに接続可能なものかどうかに関わらずIPv6のアドレスが振られていればそちらを優先して使用するためこうした状況に落ちいってしまうようなのです。
こうした日本独自の「壊れたIPv6」問題は以前から知ってはいたものの、これまでIPv6を意識して使うことがなかったのでまったく気づけませんでした…。
しかし、うちで利用している「IIJmioひかり」はフレッツ網を利用した光コラボレーション回線ながらHGWからのIPv6 PPPoE接続に対応しているので本来こうした問題は起きないはず…と思っていたら現状HGWからのIPv6 PPPoE接続に対応しているのは東日本のみで西日本エリアは非対応とのこと。マジかっ!!
そこでHGWのDNS設定で「AAAAフィルター」を有効にして再起動をかけたところ無線LAN接続中もプッシュ通信は完璧に動作するようになりました。やれやれ…。
まとめ
フレッツ(光コラボ含む)回線を利用中で別途IPv6接続(PPPoE/IPoE)手段が確保されていない状況下で、無線LAN接続したAndroid端末にプッシュ通知が到達しないというケースではHGWのDNS設定で「AAAAフィルター」を有効にしておきましょう。