何故か自宅の無線LAN環境でだけメールやLINEの通知が来ないことはありませんか?もしかしたら、ルータの設定に問題があるかもしれません。 設定を見なおしてみましょう。

準備 ― PUSHの仕組み ―

メールやSNSの通知はリアルタイムで来ることが当たり前になっていますが、どのような仕組みになっているのでしょうか。もし各端末が5秒おきとかに通知の有無をサーバに問い合わせたりしたら、サーバの負荷もネットワーク負荷も大変そうです。

PUSH通信では、Googleのサーバと通信状態を保持しておき、何か通知事項があったらすぐに端末へパケットを投げられる状態を保っておく工夫をしています。30分に1回だけGoogleのサーバにKeepAlive信号を送信し、わざわざ端末から伺いを立てなくても良いようになっているのです。例えば以下のログは、同一のAndroid端末が30分おきに特定のIPアドレスへ通信をしていることが分かります。

Aug  7 14:30:58 IPTABLES:IN=eth1 OUT=eth0 SRC=192.168.12.111 DST=64.233.187.188 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=43981 DF PROTO=TCP SPT=56899 DPT=5228 WINDOW=65535 RES=0x00 SYN URGP=0
Aug  7 15:01:11 IPTABLES:IN=eth1 OUT=eth0 SRC=192.168.12.111 DST=74.125.204.188 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=22546 DF PROTO=TCP SPT=34188 DPT=5228 WINDOW=65535 RES=0x00 SYN URGP=0
Aug  7 15:31:41 IPTABLES:IN=eth1 OUT=eth0 SRC=192.168.12.111 DST=64.233.187.188 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=27676 DF PROTO=TCP SPT=44014 DPT=5228 WINDOW=65535 RES=0x00 SYN URGP=0
Aug  7 16:02:09 IPTABLES:IN=eth1 OUT=eth0 SRC=192.168.12.111 DST=64.233.187.188 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=63798 DF PROTO=TCP SPT=49070 DPT=5228 WINDOW=65535 RES=0x00 SYN URGP=0
Aug  7 16:29:39 IPTABLES:IN=eth1 OUT=eth0 SRC=192.168.12.111 DST=64.233.187.188 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=12610 DF PROTO=TCP SPT=46566 DPT=5228 WINDOW=65535 RES=0x00 SYN URGP=0

逆にこのKeepAlive通知がうまく伝わっていないと、GoogleからKeepAliveを通知することができません。Wifi環境でPUSH通知が受信できない場合、この仕組みを阻害してしまう設定がされているかもしれません。

設定を見直そう ― PR-400NEの場合 ―

多くの家庭では、1つのネットワーク契約で複数の端末が同時に利用できるようにしているはずです。これをやってくれるルータは、各端末がどんな通信をしているか把握しながら、外部からの通信を各端末に配信しています。

もし、誰がどこと通信しているか記憶しておく時間の長さの設定が30分よりも短いと、PUSH通信がうまく行きません。SPI(Stateful Packet Inspection)設定を変更し、30分(1800秒)よりも長く通信が保持できるようにしましょう。

  • まずは設定画面にアクセスです。http://192.168.0.1 などにアクセスしましょう。
  • SPI設定を探します。
  • TCP、UDP、ICMPごとの時間設定があります。~~とりあえず3600秒に全部変えてしまいましょう。

~~
[追記]TCP:2100, UDP,ICMP:300などに設定しましょう。こちらの投稿を参考にどうぞ。

以上です。これでPUSH通知が来るはずです。でも、時間設定が長いとセキュリティ的にはあまり良くないので気をつけましょう。