世の中のごく一部、私のように悩んでいる人がいると思うので、備忘録として。
ズバリ、Google Pixel3(ほかのAndroid機では試してないのでワカランですが)のL2TPは、RFC2661に準拠したKeep Aliveをサポートしないようです。
なので、VPNサーバ側でKeep Aliveを有効にしていると、Android側が全く返事しないので、VPNサーバ側は接続が切れたと思ってトンネルを破棄してしまいます。
この現象を回避するには、VPNサーバ側でL2TPのKeep Alive(Hello)を無効にする必要があります。
手元にある某社ルータで試したところ、こんな感じのデバッグメッセージでした。
----------------------------------------------------------------------------------------------------------------------------------
L2TP.033: Added Hello to send wait queue on Tunnel0.0
L2TP.052: Set Message Type AVP (Hello)
L2TP.022: Send Hello to XXX.XXX.XXX.XXX on Tunnel0.0, len 20, tid 3233, sid 0, Ns 2, Nr 4
L2TP.031: Retransmission timeout on Tunnel0.0, count 1, CWND 1, SSTHRESH 1
L2TP.031: Retransmission timeout on Tunnel0.0, count 2, CWND 1, SSTHRESH 1
(中略)
L2TP.030: Retransmissions exceeded on Tunnel0.0
----------------------------------------------------------------------------------------------------------------------------------
Keep Aliveを無効化することで切断されなくなりましたが、これだとVPNサーバ側はずっと繋がっていると勘違いするので、VPNサーバに用意されたほかの手段で切断するようにしましょう。
※手元の某社ルータでは、idle timeoutがあったので、それで対応しました。
■参考にさせて頂いたサイト
コメント