iOS で L2TP-VPN への再接続に失敗する
SERVER
iPhone や iPad で L2TP-VPN サーバーへの再接続に失敗する
iPhone や iPad などに搭載されている iOS から、CentOS 6.0 で CentOS 6.0 で L2TP-VPN サーバを構築する で用意した L2TP-VPN サーバーに接続した際に、最初の接続はできるものの、いったん接続を切ってしまうと、2 度目以降の接続ができなくなることがありました。
このとき、xl2tpd のログには次のメッセージが残されていました。
Nov 27 19:18:00 server xl2tpd[10964]: Maximum retries exceeded for tunnel 20966. Closing.
これは iOS が L2TP-VPN から切断する際に、終了処理を適切に行わないため、接続したままになってしまっているのが原因らしいです。
これを回避するためには、残ってしまった接続を L2TP-VPN サーバー側で削除するようにします。
今回の環境では "/etc/ipsec.d/l2tp-psk.conf" ファイル("authby=secret" や "type=transport" といった記載をするファイル)内に、以下の行を追加しました。
dpddelay=5
dpdtimeout=20
dpdaction=clear
このようにして、どの程度の時間(秒)が経過したら正しく終了されずに残っている通信とみなすかを設定します。
- ここの "dpddelay" では、どの程度の間隔で通信の生存確認を行うかを秒数で指定します。既定では 30 秒となるようです。
- そして "dpdtimeout" では、この時間(秒)応答がなかった場合には、通信が切られたものとみなします。既定では 120 秒となっているようです。
どのくらいの時間が適切かどうかは分からないですが、今回は、少し待てばまたすぐに利用できそうな時間を設定してみました。
あまり短いと通信状態が悪い時に切断されてしまうこともあるでしょうから、それほど L2TP-VPN を頻繁に使用しないのであれば、長めに設定しておくのも安心かもしれません。インターネット上には "dpddelay=40", "dpdtimeout=130" といった記載もありました。
この設定を調整したら、次のようにして Openswan を再起動することで、有効になります。
service ipsec restart
これで設定した時間を待てば、iOS からでも再接続ができるようになりました。