うしこlog
公開: 2014/10/16

VPNでiPhoneからラズパイに接続する

今回の内容

 家にいなくてもiPhone等からラズベリーパイに接続するために、今回はVPNを使った方法を説明します。VPNソフトウェアとしてオープンソースであるSoftEther VPNを使用します。

前回までの内容は?

 前回までで、ラズパイを使うための設定(OSのインストール,SSH等)をして、エアコンの操作や、音声認識、サーバの構築をラズパイ上で行ってきました。
前回までの内容が気になる方や、ラズベリーパイをもっと活用したい方 は、ぜひ以下の記事をご確認ください。

ネットワークの設定

 ラズパイにbridge-utilsをインストールしていない場合はインストールをしてください。

sudo apt-get install bridge-utils

 次にvi等のエディタで/etc/network/interfaces を編集します。仮想ブリッジbr0にネットワークアダプタeth0をブリッジさせます。

----------/etc/network/interfacesの内容--------- 
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual

# SoftEther VPN
auto br0
iface br0 inet static
address 192.168.〇.〇 #ラズパイのIPアドレス
netmask 255.255.255.0
gateway 192.168.〇.〇 #ゲートウェイ

#eth0をブリッジする
bridge_ports eth0

#その他
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

SoftEther VPN Serverのインストール

 SoftEther VPN Serverをインストールします。 SoftEtherのダウンロードページで最新版のurlを確認してからwgetによりパッケージをダウンロードします。
ダウンロードページで指定するソフトウェアはSoftEther VPN(Freeware)、コンポーネントはSoftEther VPN Server、プラットフォームはLinux、CPUはARM EABI(32bit)とします。図1のように指定すればページ下に使用できるバージョンが表示されます。
urlを指定して、wgetでダウンロードします。筆者はv4.08をダウンロードしました。

wget http://jp.softether-download.com/files/softether/v4.08-9449-rtm-2014.06.08-tree/Linux/SoftEther%20VPN%20Server/32bit%20-%20ARM%20EABI/softether-vpnserver-v4.08-9449-rtm-2014.06.08-linux-arm_eabi-32bit.tar.gz
SoftEtherダウンロードページ
SoftEtherダウンロードページ

 ダウンロードしたファイルを解凍します。

tar zxvf softether-vpnserver-v4.08-9449-rtm-2014.06.08-linux-arm_eabi-32bit.tar.gz

 解凍してできたディレクトリvpnserverへ移動し、makeを実行します。
途中で、図2のようにライセンス許諾書について同意しますか等をきかれるので1を選択します。
図3のようにSoftEtherが正しく動作するかのチェックも行われます。
makeの最後に、図4のようにSoftEtherサーバの使い方が表示されます。

cd vpnserver 
make
ライセンス許諾
ライセンス許諾
適合チェック
適合チェック
SoftEtherServerの使い方の説明
SoftEtherServerの使い方の説明

 vpnserverディレクトリを/usr/local/に移動させます。

cd ..
sudo mv vpnserver /usr/local/

 /usr/local/vpnserverに移動し、パーミッションを変更します。

cd /usr/local/vpnserver
chmod 600 *
chmod 700 vpncmd
chmod 700 vpnserver

起動スクリプト作成

 ラズパイ起動時にSoftEther VPNが起動するようにスクリプトを作成します。

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 4.08 RTM
# Description:              Start vpnserver daemon SoftEther VPN 4.08 Server
### END INIT INFO
  
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/vpnserver
  
. /lib/lsb/init-functions
test -x $DAEMON || exit 0
  
case "$1" in
start)
sleep 3
log_daemon_msg "Starting SoftEther VPN 4.08 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 4.08 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

 起動スクリプトに実行権限を与え、自動起動登録します。最近のdebianでは、"update-rc.d"を実行するとメッセージが出てきます(非推奨らしい)。なので、"insserv"を使用して自動起動登録します。
その後、ラズベリーパイを再起動します。

sudo chmod +x /etc/init.d/vpnserver
sudo insserv vpnserver
sudo reboot

SoftEther VPN Serverの設定

基本設定

 SoftEther VPN Serverの設定は、SoftEther VPN Server Managerを使って設定をします。
SoftEtherのダウンロードページにSoftEther VPN Server Manager for Windowsがあるので、そちらをWindowsパソコンにダウンロード、インストールします。
ダウンロードページで指定するソフトウェアはSoftEther VPN(Freeware)、コンポーネントはSoftEther VPN Server Manager for Windows、プラットフォームはWindows、CPUはIntel(x86 and x64)とします。 図5のようにすればよいと思います。

SoftEther VPN Server Manager for Windowsのダウンロード
SoftEther VPN Server Manager for Windowsのダウンロード

 セットアップウィザードのインストールするソフトウェアの選択では、SoftEther VPN サーバー管理マネージャ(管理ツールのみ)を選択してください。後はセットアップ画面に従ってインストールすれば問題ないと思います。

SoftEther VPN Server Managerのセットアップウィザード
SoftEther VPN Server Managerのセットアップウィザード

 インストール後、SoftEther VPN Server Managerを立ち上げ、「新しい接続設定」をクリックします。

SoftEther VPN Server Managerのホーム画面
SoftEther VPN Server Managerのホーム画面

 接続設定名(任意の名前)、VPNServerのホスト名(ラズパイのIPアドレス)、ポート番号(443)を入力し、OKをクリックします。

新しい接続の設定
新しい接続の設定

 上記で作成した接続先(ここではraspberryPi)に接続します。接続したら以下の図のような画面が表示されるので管理者用のパスワードを設定します。新しいパスワードを入力してOKをクリックします。

パスワード入力画面
パスワード入力画面

 SoftEther VPN Server/Bridge簡易セットアップを行います。リモートアクセスVPNサーバーにチェックを入れて、次へをクリックします。

リモートアクセスVPNサーバーにチェック
リモートアクセスVPNサーバーにチェック

 簡易セットアップ-パブ名の決定では、仮想HUB名を「VPN」にします。

仮想HUB名の決定
リモートアクセスVPNサーバーにチェック

 ダイナミックDNSを設定します。この機能により、固定グローバルIPアドレスがなくても、世界中のどの場所からでも無線環境があれば、ラズベリーパイにアクセスすることが可能となります。嬉しいですね。
右側の「ダイナミックDNSホスト名の変更」のところに、任意の名前を入力し、「上記のDNSホスト名に変更する」をクリックします。
変更しました、というメッセージがでるのでOKを押します。
その後、左側の「現在の状態」を確認して、閉じるをクリックします。

ダイナミックDNSの設定
ダイナミックDNSの設定
ダイナミックDNS秘密鍵について
ダイナミックDNS秘密鍵について

 IPsec/L2TPサーバ機能の設定で、「L2TPサーバー機能を有効にする」にチェックをいれます。
そして、IPsec共通設定で、「IPsec事前共有鍵」に任意の文字列を8文字程度で入力した後、OKをクリックします
これで、iPhoneやiPad、Android等のスマートフォンやタブレットからもアクセス可能になります。これらのデバイスからVPNServerにアクセスするためには、ここで入力した事前共有鍵が必要となりますので覚えておきましょう。

IPsec/L2TPの設定
IPsec/L2TPの設定

 VPN Azureサービスは使わないので、VPN Azure設定で「VPN Azureを無効にする」にチェックを入れて、OKをクリックします。

VPN Azureの無効化
VPN Azureの無効化

ユーザの作成

 SoftEther VPN Serverに接続できるユーザを作成します。「ユーザを作成する」をクリックします。

VPN ユーザの作成
ユーザの作成

 ユーザの新規作成画面でユーザ名、本名、説明(任意)の入力と、パスワード認証のパスワード(任意)を入力し、OKをクリックします。

VPN ユーザの新規作成画面
ユーザの新規作成画面

 ユーザ 〇〇 を作成しましたと表示されるので、OKをクリックします。

 ユーザの管理画面では、先ほど作成したユーザがいることを確認してください。 続けてユーザの登録をする場合は、「新規作成」をクリックしてください。 終わったら、閉じるをクリックします。

VPN ユーザの管理画面
ユーザの管理画面

 ユーザ作成画面で閉じるをクリックします。

VPN ユーザ作成画面を閉じる
ユーザ作成画面を閉じる

ローカルブリッジの設定

 管理マネージャ画面から、「ローカルブリッジ設定」をクリックします。

管理マネージャ画面
管理マネージャ画面

 ローカルブリッジ設定画面で、「ローカルブリッジの削除」ボタンをクリックします。
そして新しいローカルブリッジの定義から「仮想HUB」でVPNを選択(入力)し、作成する種類から「新しいtapデバイスとのブリッジ接続」にチェックを入れ、新しいtapデバイス名に「vlan」と入力します。
その後、「ローカルブリッジを追加」をクリックしてから、閉じるをクリックします。

 物理的な依存のLANカードとしてeth0を選択することも可能ですが、これを選択すると、SoftEther VPN Serverをインストールしたラズパイ自身にアクセスすることはできません(Linuxの制限)。
そのため、外部からラズパイの自作サーバ(Apatchやnode.js等で作成した)にアクセスする目的であれば、tapデバイスとのブリッジ接続をおすすめします。

ローカルブリッジの設定
ローカルブリッジの設定

 最後にラズパイのターミナルから、以下のコマンドを実行し、interfacesにeth0とtap_vlanがあることを確認してください。

brctl show br0

ルータの設定

 ルータのポート開放を行います。バッファローのルータを使っている方は、ブラウザから「192.168.11.1」にアクセスしてルータの設定を行います。
「ゲーム&アプリ」タブをクリックし、「ポート変換」を選びます。
ポート開放するのは以下のポートです。

  • TCPポート: 443
  • TCPポート: 992
  • UDPポート: 500
  • UDPポート: 4500

L2TP over IPsec機能を使用するため、ポート番号500,4500を開放しています。

LAN側IPアドレスにはラズパイのIPアドレスを指定してください。 LAN側ポートは空白のままで良いです。

iPhoneの設定

 ホーム画面から「設定」→「一般」→「VPN」→「VPN構成を追加」と辿ってiPhoneでVPN接続できるようにします。

  • 説明: 適当に付けてください
  • サーバ: ダイナミックDNSで設定したサーバ名(---.softether.net)
  • アカウント: ユーザ作成画面で作成したユーザとハブ名(ユーザ名@ハブ名)
  • RSA SecurID : オフ
  • パスワード: ユーザ作成画面で設定したパスワード
  • シークレット: ダイナミックDNSで設定したIPsec事前共有鍵
  • 全ての信号を送信: オン

 これで、iPhoneから携帯回線(3G,LTE等)を使ってラズベリーパイにVPN接続ができるようになりました。

<< Node.jsでラズパイをWebサーバに MPDでラズパイ2を音楽プレーヤサーバにするへ >>