ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

またYet Anotherの時間がやって参りました。

SBSettings用のVPN Toggleを作ってみました。
Ryan PetrichのVPN Toggleが出来てしまいましたので、YAVPN Toggleと名乗ることにします。
Safari起動中にVPNをワンタッチでON/OFFできるので便利です。(続きは[MORE]から)

ただし、いろいろな制限があります。
VPN Toggleと聞いて期待するのは、あたかも「設定」内のVPNのスイッチを操作したかのような働きでしょうが、このYAVPN Toggleはそうなってはいません。

YAVPN Toggleは、pppdを直接起動するという方法でVPN接続を、またpppdをkillallすることでVPNの切断を実現しています。

なぜこんなことをするかといえば、システム標準のVPN接続/切断の仕組みが分からないからです。
それを解析したスーパーハッカーRyan Petrichは、システムと同期するものを作り上げましたが、僕には到底無理だったというわけです(古いブログからの転載で時系列が変な感じですが、僕の作ったVPNToggleの方が大分先に世に出たのです)。

制限

システムの標準的な方法とは独立した方法を取っているので、「設定」内のVPNスイッチとは連動していません。
(一応、システム標準の手段で接続したVPNを切断することだけはできますが)

ステータスバーのアイコンが表示されません。

対応しているのはPPTPのみです。L2TP、IPSecには対応していません。
また、プロキシの設定もできません。

L2TP、IPSecは使っていないので、僕のところでテストできません。
IPSecなどは、pppdを使っていないようです。

ステータスバーのアイコンは、別途daemonを作れば表示できますが、そのために余分にメモリを使ってまでして表示すべきものか。

動作環境

  • iPhone OS 3.0
  • iPhone OS 3.0.1
  • iPhone OS 3.1
  • iPhone OS 3.1.2
  • iPhone OS 3.1.3
  • iPhone OS 3.2
  • iPhone OS 3.2.1(多分)
  • iPhone OS 4.0
  • iPhone OS 4.0.1

履歴

  • 0.1-2 2010.08.04 iPhone OS 3.2.1対応パッケージ修正
  • 0.1-1 2010.07.19 VPNToggleからYAVPN Toggleに名前変更。パッケージ修正

設定とテスト

システム標準のVPNとは独立しているので、既にVPNの設定をしていても、YAVPN Toggleのために、別途設定が必要です。

YAVPN Toggleをインストール後、以下のファイルをテキストエディタなどで編集してください(要root権限)。

/var/mobile/Library/SBSettings/Commands/com.hitoriblog.vpn.enablevpn

以下が実際の内容です。

#!/bin/sh

#--------------------------------------
# User Defined
#--------------------------------------

SERVER=vpnserver.address.com
ROUTER=router.address.com
USER=yourusername
PASSWORD=yourpassword

#--------------------------------------
# Main
#--------------------------------------

C=pppd
C="${C} serviceid 2"
C="${C} plugin /System/Library/SystemConfiguration/PPPController.bundle/PlugIns/PPPDialogs.ppp"
C="${C} plugin PPTP.ppp"
C="${C} logfile /tmp/ppp.log"
C="${C} remoteaddress ${SERVER}"
C="${C} redialcount 1"
C="${C} redialtimer 5"
C="${C} idle 600"
C="${C} mru 1500"
C="${C} mtu 1448"
C="${C} receive-all"
C="${C} ipparam ${ROUTER}"
C="${C} defaultroute"
C="${C} novj"
C="${C} 0:0"
C="${C} noipdefault"
C="${C} ipcp-accept-local"
C="${C} ipcp-accept-remote"
C="${C} usepeerdns"
C="${C} noauth"
C="${C} user ${USER}"
C="${C} password ${PASSWORD}"
C="${C} mppe-stateless"
C="${C} mppe-128"
C="${C} mppe-40"
C="${C} refuse-pap"
C="${C} refuse-chap-md5"
C="${C} looplocal"
C="${C} noaskpassword"

${C}

「User Defined」の部分だけを書き換えればつながった、という動作報告が数例あります。特殊な設定にしていなければ、この部分だけを書き換えればつながるのでしょう。
繰り返しますが、サーバがL2TP、IPSecは非対応です。PPTPのみ対応しています。

#--------------------------------------
# User Defined
#--------------------------------------

SERVER=vpnserver.address.com
ROUTER=router.address.com
USER=yourusername
PASSWORD=yourpassword

「SERVER」にはPPTPサーバのアドレスを。
「ROUTER」にはルータのアドレスを。心当たりが無ければ、PPTPサーバといっしょにしてみてください。
「USER」にはユーザ名を。
「PASSWORD」にはパスワードを入力してください。

YAVPN Toggleからは動作状況が分からないので、書き換えが終わったら、ターミナルでテスト実行してみます。
実行にはroot権限が必要です。

$ cd /var/mobile/Library/SBSettings/Commands
$ su
# ./com.hitoriblog.vpn.enablevpn

特に何もエラーメッセージが出なければ、成功っぽいです。
10秒ぐらい待ってみて、pppdが起動し、ネットワークインターフェースとしてppp0が出来ていればOKです。

$ ps ax
$ ifconfig

psは標準では入っていないので、明示的にインストールする必要があります。

com.hitoriblog.vpn.enablevpnをテスト実行するときにroot権限がないと「pppd: Can’t open options file /etc/ppp/options: No such file or directory」と出ますが、これは想定内の動作です。

ppp0が出来ているなら、SafariからVPN越しでないと見られないサイトを見るなどで動作を確認してみてください。

本番

com.hitoriblog.vpn.enablevpnをテスト実行して接続が確認できたら、YAVPN Toggleから接続してみます。

YAVPN Toggleは、VPN接続中の場合緑になり、切断中は赤くなります。
「/var/run/ppp0.pid」の存在を判定して状態を決めています。
赤い状態のアイコンをタップすると、VPNを接続しにいきます。
具体的にはcom.hitoriblog.vpn.enablevpnを実行します。

しばらく待ってSBSettingsを起動してみて、アイコンが緑になってればOKです。
接続が確立するまで少し時間がかかるので、様子を見てみてください。

どうもcom.hitoriblog.vpn.enablevpnが実行されていないような感じのときは、以下をターミナルないしはSSHから実行するか、一度リブートをしてみてください。これには、sbsettingsdに、/var/mobile/Library/SBSettings/Commandsにあるファイルをスキャンし直させる意味があります。

$ su
# killall sbsettingsd

「sbsetting」+「s」+「d」なので注意してください。

事例報告をお願いします

debian lennyのPPTPd、Mac OS X用のVPNサーバiVPNなどでは、上記の4項目の設定だけでつながったそうです。

4項目の設定だけでつながった、あるいはパラメータの設定が必要だった、など、事例があると助かる人は多いと思いますので、コメントに情報をお寄せください。

4項目の設定だけでつながるケースが多いようなら、GUIでの設定を検討します。

L2TP、IPSecでの接続方法などの情報もお待ちしております。

旧ブログのコメント欄にいくつか事例が紹介されています。

[iPhone][Jailbreak]SBSettings用Toggle VPNToggle

インストール

インストールは、いつものNew野良リポジトリから「YAVPN Toggle」で検索してください。

例によって安定性等は保証するところではないし、無保証、無サポートです。

なお、パッケージをアップデートするとスクリプトを初期化してしまいます。
すいませんが再設定をお願いします。

VPNToggleと競合、置換を設定してあるので、YAVPN ToggleをインストールするとVPNToggleは自動的にアンインストールされます。

 - iPad, iPhone, Jailbreak, ガジェット