Raspberry PiにSoftEther VPNを入れる

kiuyu

2013/12/21

飽き性

以前にRaspberry PiをL2TP/IPSecなサーバに仕立てて使っていたが、なんかつまらない。安定している。たまには障害の一つでも起こってくれれば面白いのに。

そんなつまらない毎日を過ごしていたところ、SoftEther VPNなるソフトがあるとの話を聞きつけ入れてみることにしました。

準備

とりあえずRaspbianをddして、X Window関連のパッケージ消してaptでパッケージを更新。

ネットワーク設定

普通にeth0をVPNの口にすると、VPNでつないだ時にRaspberry Piへつなげなかった。理由は知らないけどそんなものらしい。

仮想ブリッジ作ってeth0とSoftEtherのtapデバイスをつなげば良いみたいなのでブリッジを作る。

余談。SoftEtherにtap作らせるとSoftEhterのプロセスが上がらなければtapデバイスが作られず、ブリッジへの接続とかめんどい。でも事前にip tuntap add…でtapデバイス作ってSoftEtherのローカルブリッジに指定してみたがうまく動かんかった。作り方のお作法でもあるのだろうか。

閑話休題。まずはbridge-utilsを入れる。

# apt-get install bridge-utils

続いて/etc/network/interfacesを編集。

auto lo br0
iface lo inet loopback
iface br0 inet static
address 192.168.1.20
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1

bridge_ports all

SoftEther VPNのビルド

ダウンロードして展開してmakeするだけ。特にパッケージを追加しなくてもビルドできた。終わるとvpnserverというディレクトリができる。

SoftEther VPNのインストール

ビルドしてできたvpnserverディレクトリをsoftetherという名前に変更し、/usr/local/appに移動する。ついでにアクセス権も変える。

# mkdir /usr/local/app
# mv vpnserver softether
# mv softether /usr/local/app
# cd /usr/local/app/softether
# chmod 600 *
# chmod u+x vpn*

まあ、このへんは好みで。

つづいて、起動時にプロセスを上げるため起動スクリプトを作る。以下内容を/etc/init.d/vpnserverに作る。ロックファイルぐらい作ったほうがいいのかな。。。

#! /bin/sh
### BEGIN INIT INFO
# Provides:          vpnserver
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: SoftEther VPN 2.0
# Description:       Start SoftEther VPN service.
### END INIT INFO

DAEMON=/usr/local/app/softether/vpnserver

[ -x "$DAEMON" ] || exit 0

case "$1" in
  start)
	$DAEMON start
	sleep 10
	tapdev=`/sbin/ip tuntap | awk -F ":" '{print $1}'`
	/sbin/brctl addif br0 $tapdev
	;;
  stop)
	$DAEMON stop
	;;
esac

:

実行権限つけて登録してやる。

# chmod +x /etc/init.d/vpnserver
# update-rc.d vpnserver defaults

ここらで再起動してブリッジが作られることとSoftEtherが自動で上がることを確認する。

SoftEther VPNの設定

SoftEther VPN Server Manager for Windowsを利用して設定します。Windows?無いな。でもWineで動くので問題はない。

とりあえず起動します。起動したら新しい接続設定を押下します。

Screenshot-SoftEther VPN サーバー管理マネージャ

それっぽいことを入力してOKを押下します。管理パスワードは空で大丈夫。

Screenshot-新しい接続設定の作成

追加した接続先へ接続すると管理パスワードを聞いてくるので好きなパスワードを入れる。

Screenshot-192.168.1.20 の管理者パスワードの設定

ウィザードが表示されるので、[リモートアクセスVPNサーバー]を有効に。

Screenshot-SoftEther VPN Server - Bridge 簡易セットアップ

仮想HUB名を指定。

Screenshot-簡易セットアップ - 仮想 HUB 名の決定

DDNSを設定。

Screenshot-ダイナミック DNS 機能

L2TPを有効にし、事前共有キーを指定する。

Screenshot-IPsec - L2TP - EtherIP - L2TPv3 設定

VPN Azureクラウドは使わない。アジュールでクラウドっていうとWindows Azureを連想してしまうが無関係。ってかこの機能、企業の管理者は嫌だろうな。

Screenshot-VPN Azure サービスの設定

ユーザーを追加する。追加の仕方は画面を見りゃわかるので割愛。ローカルブリッジはとりあえずeth0を選ぶ。

Screenshot-簡易セットアップの実行

VPNサーバー管理マネージャが表示されたら、ローカルブリッジ設定を押下してローカルブリッジ設定画面を表示させる。画面が表示されたら既存のローカルブリッジをすべて削除する。

Screenshot-ローカルブリッジ設定1

引き続き、仮想HUBがVPN、新しいtapデバイス名をvpnとしてローカルブリッジを追加する。

Screenshot-ローカルブリッジ設定2

Screenshot-ローカルブリッジ設定3

tapデバイス”tap_vpn”が作られたことを確認し、仮想ブリッジbr0へ追加する。

# ip tuntap
tap_vpn: tap
# brctl addif br0 tap_vpn
# brctl show br0
bridge name	bridge id		STP enabled	interfaces
br0		8000.00ac214c5656	no		eth0
							tap_vpn

動作確認

Android(ISW11K)で接続できることを確認。つなぎ方はマニュアルに記載。

感想

インストールも簡単だし、まあ便利なのかな。単に携帯から繋ぎたいだけならopenswanとxl2tpd使ったほうがパッケージで入るぶん管理・保守が楽かも。

ただSoftEtherは能書きを読むとすごく高機能なソフトみたいなので、その高機能が必要な人にとってはインストールが楽ってのはありがたいのでしょう。