Raspberry Pi をVPNサーバーにする方法 | SoftEther VPN

SoftEther VPN

VPNというと、昔はPPTPがメジャーだったが、セキュリティ脆弱性等の理由から、最近はiPhoneのOS機能から外されてしまった。

最近は、OpenVPN か 、L2TPが実現できる SoftEther VPNがメジャーなようだ。

 

OpenVPNは拡張性が高いが、接続のためにはクライアント側に独自のソフトウェアが必要になる欠点がある。

 

一方で、SoftEther VPNはL2TPによるVPNを実現するので、iPhoneやMac OS Xの標準搭載機能でVPNが実現できるところが素晴らしい。

 

 

SoftEther VPN を Raspberry Piにインストール

(1)bridge-utilsのインストール

まずは、足回りとしてEtherポートをブリッジするためのツールをインストールする。

$ sudo apt-get install bridge-utils

 

(2)ネットワーク設定

ネットワーク設定を変更する

$ sudo vi /etc/network/interfaces

 

# loopback
auto lo
iface lo inet loopback

# Ethernet port
auto eth0
iface eth0 inet manual

# Bridge interface
auto br0
iface br0 inet dhcp
bridge_ports eth0

 

なぜか、再起動しないと反映されないので、一旦再起動。

$ sudo reboot

 

〜起動〜

ネットワーク設定が反映されたか確認。

$ sudo ifconfig

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
 inet 192.168.1.137 netmask 255.255.255.0 broadcast 192.168.1.255
 inet6 xxxx::xxxx:xxxx:xxxx:xxxx prefixlen 64 scopeid 0x20<link>
 ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
 RX packets 74 bytes 9011 (8.7 KiB)
 RX errors 0 dropped 0 overruns 0 frame 0
 TX packets 78 bytes 11544 (11.2 KiB)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
 ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
 RX packets 74 bytes 9011 (8.7 KiB)
 RX errors 0 dropped 0 overruns 0 frame 0
 TX packets 70 bytes 11342 (11.0 KiB)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
 inet 127.0.0.1 netmask 255.0.0.0
 inet6 ::1 prefixlen 128 scopeid 0x10<host>
 loop txqueuelen 1 (Local Loopback)
 RX packets 2 bytes 78 (78.0 B)
 RX errors 0 dropped 0 overruns 0 frame 0
 TX packets 2 bytes 78 (78.0 B)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

 

ちゃんと、br0が追加されている。

 

(3)br0 のMACアドレスを固定(必須ではない)

br0 は仮想デバイスなので、再起動するたびにMACアドレスが変わってしまうので、固定しておいた方が、何かとトラブルが少ない。
(DHCPで払い出すアドレスが毎回変わってしまったり等)

$ sudo vi /etc/network/interfaces

 

# loopback
auto lo
iface lo inet loopback

# Ethernet port
auto eth0
iface eth0 inet manual

# Bridge interface
auto br0
iface br0 inet dhcp
hwaddress ether XX:XX:XX:XX:XX:XX
bridge_ports eth0

 

上記青字を追加する。MACアドレスは何でも良いが、ifconfigで確認したbr0のMACアドレスを設定しておくと良いだろう。

 

(4) SoftEther VPN のダウンロード(wget)

SoftEther VPN ダウンロードセンター

にアクセスし、Raspberry Piだと、以下の条件を選択する。

ソフトウェア:SoftEtherVPN(Freeware)
コンポーネント:SoftEther VPN Server
プラットフォーム:Linux
CPU:ARM EABI(32bit)

 

すると、ダウンロードできるファイルのリストが表示される。

最新のbeta版 を選んでも良いし、安定版(rtm)を選んでも良い。

私は、安定志向なので、安定版(rtm)を選んだ。

ダンロードするリンクをコピーし、wgetする。

$ wget http://jp.softether-download.com/files/softether/v4.22-9634-beta-2016.11.27-tree/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-arm_eabi-32bit.tar.gz
$ tar -zxvf softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-arm_eabi-32bit.tar.gz

 

(5) SoftEther VPN の make

$ sudo mv vpnserver/ /usr/local/bin/
$ cd /usr/local/bin/vpnserver/
$ sudo make

ライセンス云々を読んだか?同意するか?と聞かれるので、「1」「Enter」を3回くらい押すと、makeが始まる。

 

無事makeが完了したら、ディレクトリやファイルの権限を変更する。

$ sudo chmod 600 *
$ sudo chmod 700 vpncmd
$ sudo chmod 700 vpnserver

 

(6) SoftEther VPNの起動スクリプトを作成し登録

起動スクリプトを作成する。

vpnserverというファイルを作成し、以下のスクリプトをコピーして貼り付ける。

$ sudo vi /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 RTM
# Description:              Start vpnserver daemon SoftEther VPN Server
### END INIT INFO

DAEMON=/usr/local/bin/vpnserver/vpnserver
LOCK=/var/lock/vpnserver

# tun/tapモジュールのロード
sudo modprobe tun

. /lib/lsb/init-functions
test -x $DAEMON || exit 0

case "$1" in
start)
sleep 3
log_daemon_msg "Starting SoftEther VPN Server" "vpnserver"
$DAEMON start >/dev/null 2>&1
touch $LOCK
log_end_msg 0
sleep 3

# SoftEther VPNで追加した仮想tapデバイス名を調べる
tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'`
/sbin/brctl addif br0 $tap
;;

stop)
log_daemon_msg "Stopping SoftEther VPN Server" "vpnserver"
$DAEMON stop >/dev/null 2>&1
rm $LOCK
log_end_msg 0
sleep 2
;;

restart)
$DAEMON stop
sleep 2

$DAEMON start
sleep 5
# SoftEther VPNで追加した仮想tapデバイス名を調べる
tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'`
/sbin/brctl addif br0 $tap
;;

status)
    if [ -e $LOCK ]
    then
        echo "vpnserver is running."
    else
        echo "vpnserver is not running."
    fi
;;
*)

echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0

 

起動の際に、tunモジュールをロードする sudo modprobe tun を書いておくと、再起動時にもSoftEther VPNがエラーなく起動できるらしい。先人の知恵だ。

 

$ sudo chmod +x /etc/init.d/vpnserver
$ sudo update-rc.d vpnserver defaults
$ sudo reboot

 

〜再起動〜

ちゃんとプロセスが立ち上がってるか確認

$ ps aux| grep vpnserver
root 558 0.0 0.3 5580 1432 ? S<s 08:01 0:00 /usr/local/bin/vpnserver/vpnserver execsvc
root 559 4.3 3.1 24824 14112 ? S<l 08:01 0:04 /usr/local/bin/vpnserver/vpnserver execsvc

 

vpnserver という人が起動していればOKだ。

 

(7) SoftEther VPN の設定

GUIで設定する方法と、コマンドラインで設定する方法の2とおりある。

最初は、コマンドラインでの設定を試みたが、特にtapデバイスの追加等の手順が結構難しく、途中でつまずいたので、GUIでの設定をおすすめする。

 

SoftEther VPN ダウンロードセンター

にアクセスし、Raspberry Piだと、以下の条件を選択する。

 

コンポーネント等は、自身の環境にあわせて選択する。
(私はMac OS Xを選択した)

 

ダウンロードしたファイルを実行し、SoftEther VPN Server Manager for Mac OS X を起動する。

Host Name に Raspberry Pi のIPアドレスを設定する。

「Connect」を押すと、設定に入れる。

途中、パスワードを聞かれるが、初期はパスワード無しで接続すれば入れる。

(「新しいパスワードを設定して」と言われるので、設定する)

 

「Remote Access VPN Server」を選択する。

 

次に、Raspberry Piを置いている環境が、グローバルIPアドレスを持っていたり、NATを自身で設定できる場合は不要となるが、インターネット接続環境として、ポート開放ができない環境の人は、VPN Azure Cloudを利用することで、NAT超えを実現できるようになる。

 

 

「Enable VPN Azure」を選択する。

 

 

次に、VPNサーバとなったRaspberry PIのNICに対し、リモートからSSH等でアクセスできるように、ローカルブリッジの設定を行う。

まず、既存のローカルブリッジ設定がある場合は、「Delete Local Bridge」にて、全て削除する。

 

その後、vlanという名前のTapデバイスを追加する。

 

「Bridge with New Tap Device」を選択し、Tapデバイス名を指定して、「Create Local Bridge」にてローカルブリッジを設定する。

 

 

 

あとは、再起動すれば完了だ。

$ sudo reboot

 

 

Mac OS XなPCからVPN Azure経由でVPN接続する

VPN Azureを使用して、NAT配下のSoftEter VPN Server(Raspberry Pi)にNAT Traversal で接続する際は、クライアントとVPN Azure間は、Secure Socket Tunneling Protocol (SSTP)というプロトコルを使用して接続する。

 

AzureはMicrosoftなので、Windows端末の場合は、Windowsに標準搭載された機能としてSSTPが利用できるのだが、Mac OS Xな人は、SSTPを利用するには、ハードルがある。

 

これを見事に解決できたので、こちら↓のエントリーで紹介する。

Mac OS XなPCからSSTPでVPN接続をする方法 | iSSTP (via VPN Azure)
Mac OS XなPCからSSTPでVPN接続 VPN Azureは、NAT配下に存在する SoftEter VPN Server(Raspberry Pi)に NAT Traversal で接続する際に、クライアントとVPN Azure間...

コメント