IX2015を通してiPhoneでVPNを張る

IX2015を通して、自宅LAN内のPPTPサーバーと、3G回線上のiPhoneとでVPNを張りました。その際、ハマってえらく苦労したので、メモ書きを残しておきます。


1.PPTPサーバーの用意
WindowsでもLinuxでもいいので、PPTPサーバーを用意します。
Linux(CentOS)での環境構築は、ここを参考にさせてもらいました。

CentOS 5.3 で PPTP-VPN サーバーを構築してみる


2.IX2015にポートフォワードを設定
PPPoEを設定しているインターフェースに、NAPTでポート番号1723とGREプロトコルにポートフォワードを設定します。例としてPPTサーバーのIPアドレスを192.168.5.30とすると、インターフェースの設定は以下のようになります。

interface FastEthernet0/1.1
encapsulation pppoe
auto-connect
ppp binding sonet
ip address ipcp
ip napt enable
ip napt static 192.168.5.30 47
ip napt static 192.168.5.30 tcp 1723
no shutdown

3.iPhoneVPNを設定
iPhoneVPNを設定します。僕はここを参考にさせてもらいました。

iPhone 3G回線と自鯖をVPN接続

注意点ですが、ここで「RSA SecurID」をオンにして設定を保存するとアウトですルーター側がRSA SecurIDに対応していなければ接続に失敗するようになるのは当然ですが、「RSA SecurID」をオフに戻して設定を保存しても適用されず、内部的にはオンになったままになるようです。

ここでハマりました。パケットキャプチャを設定してGREパケットのやりとりを観察したところ、設定を元に戻しても、iPhoneが無茶な開始要求をPPTPサーバーに送って、PPTPサーバーに蹴られるようです。改めてiPhone側で新しい接続設定を作ったら、あっさり繋がりました。僕の環境では、必ず再現します(iOSのバージョンは4.2.1)。




追記:12/03/19
注意点:
GREプロトコルVPNサーバーにポートフォワードしてしまうと、このVPNサーバーしか、他所のVPNサーバーへの接続ができなくなってしまうようです。上記の例だと、たとえば192.168.5.X系のマシンが192.168.12.XのVPNサーバーに接続したいといった場合、192.168.5.30のマシンしかVPN接続に成功しません。