3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(Android)NTT光でAndroidのプッシュ通知が来ない

しばらく前から自宅のWiFiに接続するとスマホ(Xperia Z3 / Android 5.1)のプッシュ通知が来なくなりました。
バックグラウンドアプリの通知が来ないのでメールやらLINEやらの通知が来ず非常に不便です。
タブレット(Xperia Z2 Tablet / Android 5.1)でも同様の現象が起こっています。

「プッシュ通知チェック」というアプリで状態を確認すると、自宅WiFiではダメ、LTE(MVNO-IIJmio)はOK、知人宅のWiFiはOKでした。
自宅はNTT光プレミアムで、知人宅は電力会社の回線&プロバイダです。
NTTひかりをプレミアム→ネクストに変更しても状況は変わらずでした。
なお、自宅は有害サイトブロックのためにホームゲートウェイで、DNSサーバをプロバイダではなくノートンパブリックDNSを使用しています。
一旦プロバイダ(wakwak)のDNSに変更してもNGでした。

Wifi環境でPUSH通知が届かないにあるように、ホームゲートウェイ(PR-500KI)のSPI(TCP)のタイムアウト時間をAndroidのKeepAlive時間である1800(30分)より長い値にしましたが、それでもNGです。

途方に暮れていると、WI-FI接続時、android端末にプッシュ通知が来ない : 日々のつぶやきという記事を発見。
ここに書いているように、HGWの [詳細設定] - [DNS設定] の [AAAA送信抑制エラー応答機能] にチェックをつけるとプッシュ通知が来るようになりました。

原因は、プロバイダがIPv6に対応しておらずIPv4でインターネットに接続しているのにかかわらず、DNSサーバはIPv6IPv4のアドレスを返しため、IPv6に対応しているAndroidIPv6でアクセスしようとし、タイムアウトしているものと思われます。普通、IPv6で接続し、NGならIPv4に切り替わって接続に行くと思うのですが、どうやらプッシュ通知はそれを行わないような感じです。(フレッツ網は、専用のIPv6を端末に割り振るので、端末はIPv6でインターネットも接続してしまおうとします)
通常の通信も、一旦IPv6でトライしタイムアウト後にIPv4で接続するため時間がかかってしまうようで、これはIPv6-IPv4フェールバック問題と呼ばれます。(あまり意識したことありませんでしたが、ネットワーク一般常識的な問題のようです。。)

AAAA送信抑制エラー応答を有効にすることで、クライアントにはIPv6のアドレス(AAAA)レコードは送らず、IPv4のAレコードだけ返すので、クライアントもIPv4で接続するようです。

IPv6絡むとややこしいですね。。。

フレッツひかりを使っていて、プロバイダがIPv6でなく、使っているDNSがAAAAレコードを返すようにしている環境の方は要注意です。

参考: WiFi接続時にプッシュ通知が届かない?それはIPv6が原因かも
ネット接続が遅い→いきなり回復? フレッツ光+PR-200NE | thunderbolt! - 楽天ブログ
スリープから復帰した直後、Wifi接続が遅くなる現象の犯人について、あ、OSXの話ね。 - ブログ鯖人
フレッツ光接続で非常に遅いページがあるのはNTTがIPv6使って身勝手なサービスしてるせい - モーグルとカバとパウダーの日記 ITPro:AAAAフィルターとは