iPhoneでVPNで自宅のネットワークに接続するためにDD-WRTでSoftEther VPNを有効化してL2TPで接続してみた。最近の市販ルータはPPTPぐらいには対応してるのが多いけど、せっかくDD-WRTなのでSoftEatherを使ってみた。
使用しているルータはDD-WRT化したWZR-1166DHP。NANDの容量が多いこともあって、公開されているROMでもいろんな機能が付加されている。
ServiceのVPNにはなんとOpenVPNはもちろん、SoftEther VPNの項目まであった。
ただこの項目からSoftEather VPNを有効にしても設定ファイルをコピペしたりしてもうまく動かない…
ということでSSHから手動で設定することに。
まずはSoftEatherの設定を保存するためにAdministration→ManagementでJFFS2を有効化する。
このルーターの場合は結構な容量がつかえるっぽい。
SSHからコマンドを実行したいのでServicesでSecure Shellを有効にしておいた。
SSHでルーターに接続したらとりあえずSoftEather VPNを起動してみる。
vpnserver start
でSoftEather VPNが起動する。
SoftEatherのダウンロードセンターからSoftEher VPN Server Managerをダウンロードしてきて実行する。このツールでサーバーの詳細設定をすることができる。
今回はGUIのvpnsmgr.exeを使用した。
新しい接続設定からルーターのIPアドレスを設定して、接続するとパスワードを設定するように促されるので、設定パスワードを設定し、そのままウイザード形式でVPNの設定を済ませる。このへんは普通のSoftEther VPNの設定と同様に設定できる。
とりあえず今回はL2TPを有効化しておいた。
ウイザードによる設定が完了したら、ローカルブリッジ設定を開く。
ここでは物理的な既存のLANカードとブリッジするのではなくて、新しいtapデバイスを作成した。先程L2TPを設定した仮想ハブにvpnという名前のtapデバイスを作成してローカルブリッジを設定した。
新しいtapデバイス作成時にエラーが発生する場合はシェルからmodprobe tunをすると良いかも。
ローカルブリッジを設定したら、サーバーマネージャーを終了してSSHのターミナルに戻るって下記コマンドを実行する。
mkdir /jffs/etc (もしフォルダが存在する場合は不要)
cp /tmp/var/lib/vpn_server.config /jffs/etc
これでSoftEatherの設定ファイルがjffsにコピーされて再起動しても消えなくなる。
後はWebの設定画面からAdministrationのCommandsを開いて、下記のスクリプトをスタートアップに登録する。
#!/bin/sh
modprobe tun
ln -s /jffs/etc/vpn_server.config /tmp/var/lib/vpn_server.config
/usr/libexec/softethervpn/vpnserver start
sleep 5
brctl addif br0 tap_vpn
これをCommandsのところに入力してSave Startupをクリックすればスタートアップスクリプトとして登録される。
あとはルーターを再起動すれば自動的にSoftEther VPNが起動して設定が読み込まれるはず。
最後に外部から接続できるようにNAT/QoSのPort ForwardingからL2TP用に500と4500番(UDP)を開けて完了。
ちなみにiPhoneからの場合は「L2TP-VPNサーバーが応答しませんでした。」というエラーはIPアドレスがちゃんと取得されてない場合も表示されるみたいなのでこのエラーが出た場合はポートがちゃんと開いてるかどうか以外にもブリッジ設定などによってちゃんとIPが取得できる状態になっているかどうかも確認する必要があるみたい…
(自分はこのエラーがでてポートが空いてないと思いこんでいろいろやっていたので)
とりあえずこれでDD-WRT上でL2TPが使えるようになった。L2TP以外の手段でSoftEther VPNに接続する場合はポートを開けておくのも忘れずに。