アウトドア好きガジェットオタクの日常

アウトドアで使えるガジェットをメインに紹介します。

RaspberryPi1台でNAS+VPNサーバを構築してみた(OpenMediaVault5+SoftEtherVPN)

RaspberryPiを使った自宅NASを紹介しているブログは結構ありますが、VPN接続できるようにするところまでを紹介しているのは少ないと思ったので
今回はNASVPNサーバを兼用させてRaspberryPiを構築する手順を紹介します。

1.RaspberryPiにOS(Rasbian)をインストール

①インストールツールのダウンロード・インストール

まず、RaspberryPi公式サイト(https://www.raspberrypi.org/software/)にアクセスし、インストールツールを使用しているダウンロード・インストールします。
f:id:Fuu-min:20201121200344p:plain

※「Download for ***」の***部分は使用しているPCのOSで使い分けてください。

②インストールしたアプリを起動します。

「CHOOSE OS」でRaspberryPiにインストールするOSを選択します。(※今回は「RaspberryPi OS(Other)」→「RaspberryPi OS Lite (32bit)」を選択」
「CHOOSE SD CARD」でインストール先のSDカードを選択します。
f:id:Fuu-min:20201121200352p:plain
選択肢終わると「WRITE」からRaspberryPiOSのインストールを始めます。
インストールが完了したらSDカードをRaspberryPiに挿入し起動します。

注意点

以下作業はネットワーク環境が必要になります。RaspberryPiを必ずインターネットに繋がるようにしてください。
また、CUIで行うためSSHでの作業も可能です。必要に応じて設定してください。
RaspberryPi起動後は初期設定を行ってください。(タイムゾーン、パスワード、アップデート等。。。)

2.OpenMediaVaultのインストール

今回のNASを管理するためにOpenMediaVaultを導入します。
以下コマンドを実行してインストールします。(完了まで20分ほどかかります)

wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash

※最初にサイレントでパスワード入力を聞かれる場合があるためEnter等で処理が止まってないか注意してください。

インストールが完了したら、別端末(PC等)からアクセスできるか確認してください。
※URLに「(IPアドレスまたはホスト名)」を入力してアクセス。例ではIPアドレスを192.168.1.99に設定
初期ユーザadmin PW:openmediavault
f:id:Fuu-min:20201121200357p:plain

IPアドレス固定化

OpenMediaVaultの「システム」→「ネットワーク」→「インターフェス」からIPアドレスを固定してください。
例)有線接続の場合
バイス名:eth0
IPv4
 メソッド:スタティック
 アドレス:任意
 ネットマスク:255.255.255.0 ※環境によって異なる
 ゲートウェイ:ルータのIPアドレス
IPv4
 メソッド:DHCP
 

3.SoftEtherVPNSeverをRaspberryPiにインストール

今回VPNサーバは「SoftEtherVPN」を使うことにします。
まず、RaspberryPiに「SoftEtherVPNServer」をインストールするために公式サイト(https://www.softether-download.com/ja.aspx?product=softether)にアクセスしダウンロードURLを取得します。
赤枠の箇所をキャプチャ通りに設定し、緑枠のところからリンク(URL)をコピーしてください。
f:id:Fuu-min:20201121200405p:plain
コピーしたURLをつかってRaspberyPiでwgetをつかってダウンロードします。(※保存場所は任意、後で移動します。)

wget https://jp.softether-download.com/files/softether/v4.34-9745-rtm-2020.04.05-tree/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-arm_eabi-32bit.tar.gz

ダウンロードが完了したらファイルを解答・展開します。

tar zxf softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-arm_eabi-32bit.tar.gz

展開まで完了したら以下のコマンドを順に実行してインストール〜権限設定までを行います。

cd vpnserver 
make 
cd .. 
sudo mv vpnserver /usr/local/ 
cd /usr/local/vpnserver/ 
sudo chmod 600 * 
sudo chmod 700 vpncmd 
sudo chmod 700 vpnserver

4-1.【確認】自宅内でVPN接続できるかテスト準備
いきなり外から繋げる前に最小環境で接続ができるか確認していきます。
まず、RaspberryPiにインストールしたSoftEtherVPNServeの起動スクリプトを作ります。

sudo nano /etc/init.d/vpnserver
#[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 
# Description:    SoftEther VPN Server 
### END INIT INFO 
DAEMON=/usr/local/vpnserver/vpnserver 
LOCK=/var/lock/vpnserver 
vpn_start() { 
    ${DAEMON} start 
} 
vpn_stop() { 
    ${DAEMON} stop 
} 
test -x ${DAEMON} || exit 0 
case "$1" in 
start) 
    vpn_start 
    touch ${LOCK} 
    ;; 
stop) 
    vpn_stop 
    rm ${LOCK} 
    ;; 
restart) 
    vpn_stop 
    sleep 3 
    vpn_start 
    ;; 
*) 
    echo "Usage: $0 {start|stop|restart}" 
    exit 1 
esac 
exit 0

作成したスクリプトの権限を設定します。
あと、RaspberryPi起動時に自動起動するようcron編集画面にて下記のコマンドを追記します。

sudo chmod +x /etc/init.d/vpnserver
sudo crontab -e
#cron編集ファイルに記載する行
@reboot sudo /etc/init.d/vpnserver start

RaspberryPiを再起動します。

4-2.SoftEtherVPNServerManagerをインストール、設定

RaspberryPiにインストールしたSoftEtherVPNServerの設定を行うための管理ツールを別端末(Windows またはMac)にインストールします。
SoftEtherの公式サイトから今度は「SoftEnther VPN Server Manager of ***」を選択してダウンロードします。
※***の部分はOS別で選択
f:id:Fuu-min:20201121200416p:plain

2020/11/21時点でMacOS版をインストールしても起動しませんでした(MacOS Big Sur 11.0.1)。原因不明のため以降Windows版での操作となります。


ダウンロードしたアプリを起動、RaspberryPiのVPNServerアプリにアクセスするための設定を行います。
f:id:Fuu-min:20201121200425p:plain

「新しい接続設定」選択、接続設定名「任意」、ホスト名「RaspberryPiのIPアドレスまたはホスト名」を設定し「OK」で進みます。
f:id:Fuu-min:20201121200431p:plain
設定が完了したら「接続」から設定画面を開きます。

初期設定で管理画面ログイン用のパスワード設定画面が表示されるため設定します。
サーバ機能設定は「L2PT」を選択、IPsec共通設定で任意の鍵を設定してください。
f:id:Fuu-min:20201121200437p:plain

VPN Azureは無効にしてください。
f:id:Fuu-min:20201121200446p:plain

ダイナミックDNSは今後使うため覚えておいてください。※赤枠部分に表示されているもの
(後で管理画面からも参照できます。)
f:id:Fuu-min:20201121200454p:plain

ユーザ名「任意」、認証方法「パスワード認証」を選択し作成します。
f:id:Fuu-min:20201121200320p:plain
「ローカルブリッジの設定」では、使用しているネットワークデバイスを設定します。
※有線の場合は「eth0」

4-3.【確認】自宅内でVPN接続できるかテスト

iPhoneやPCを使って自宅LAN内からVPN接続できるか確認します
例)iPhoneの場合
「設定」→「一般」→「VPN」→「VPN構成を追加...」を選択
以下の設定を行う。
 タイプ:L2TP
 説明:任意(自宅NASなど)
 サーバ:RaspberryPiのIPアドレス
 アカウント:『4-2』で設定したユーザー名
 パスワード:『4-2』で設定したパスワード
 シークレット:IPsec共通設定鍵
 すべての信号を送信:オン
VPN構成の状況をオンにして接続済みとなればOK

5.仮想ブリッジを作成し外部ネットワークからアクセスできるように設定

まず、RaspberryPiに仮想ブリッジの設定ユーティリティソフトをインストールします。

sudo apt-get install -y bridge-utils

次に、OpenMediaVaultでブリッジの追加を行います。
実はここが難所ですした(汗
OpenMediaVaultは独自にネットワーク設定を持っているため通常ブリッジを追加したり固定IPアドレスを設定する際に変更する「interfaces」や「dhcpcd.conf」では設定が行えず
ブラウザから「一般」→「ネットワーク」からブリッジの追加を行っていく必要があります。
以下の手順で行います。

  1. 「eth0」を削除 ※適用はしない
  2. 「追加」→「ブリッジ」を選択
  3. 「ブリッジ」ー「インタフェース」から「eth0」を選択
  4. IPv4」「IPv6」を「etho0」と同じ値で設定
  5. 「適用」を実行

コンソールから「ifconfig」を打ってbr0が表示されていればOKです。

6.tapデバイスを追加

『5』で追加した仮想ブリッジを使用するためのtapデバイスを追加します。
まず、「ローカルブリッジ設定」を選択します。
f:id:Fuu-min:20201121200325p:plain

既に追加されているローカルブリッジを削除します。
f:id:Fuu-min:20201121200330p:plain

新しくローカルブリッジを追加します。
仮想HUBは既存から選択、作成する種類を「新しいtapデバイスとのブリッジ接続」を選択、tapデバイス名を設定してます。
f:id:Fuu-min:20201121200334p:plain
追加したデバイスの状態が「動作中」になっていればOKです。
f:id:Fuu-min:20201121200339p:plain
最後にコンソールから「ifconfig」を打って「tap_(tapデバイス名)」が表示されていればOKです。

7.起動スクリプトをtapデバイス用に修正

『4-1』で作成した起動スクリプトをtapデバイスで接続るように修正します。

sudo nano /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
# Description:    SoftEther VPN Server
### END INIT INFO
 
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/vpnserver
 
vpn_start() {
    ${DAEMON} start
    sleep 2
    tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'` tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'`
    brctl addif br0 ${tap}
}
 
vpn_stop() {
    ${DAEMON} stop
}
 
test -x ${DAEMON} || exit 0
 
case "$1" in
start)
    vpn_start
    touch ${LOCK}
    ;;
stop)
    vpn_stop
    rm ${LOCK}
    ;;
restart)
    vpn_stop
    sleep 3
    vpn_start
    ;;
*)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
esac
 
exit 0

設定を反映するためRaspberryPiを再起動します。

8.ルータ設定からVPN用のポートを開放する

ルータ設定画面から以下のポートを開放するように設定します。
※設定方法はお使いのルータによって異なるため省略します。

ポート番号
プロトコル
ポート概要
500 UDP IKE (Internet Key Exchange)
4500 UDP IPsec NAT-T

9.【確認】自宅外ネットワークからVPN接続を行う。

『4-3』で確認したVPN接続の設定を変更し、自宅外ネットワーク(4Gなど)に繋げた状態でVPN接続が行えるか確かめます。
例)iPhoneの場合のVPN設定項目
 タイプ:L2TP
 説明:任意(自宅NASなど)
 サーバ:ダイナミックDNSアドレス
 アカウント:『4-2』で設定したユーザー名
 パスワード:『4-2』で設定したパスワード
 シークレット:IPsec共通設定鍵
 すべての信号を送信:オン
VPNをオンにし接続済みとなればOK

まとめ

かなり特殊かと思いましたが、個人的にOMV+VPNの両立でだいぶ苦労しためほかにも迷っている方がいてその方の参考になればと思います。
(OpenMediaVaultの設定やVPNサーバの構築方法はもっとちゃんと説明されているサイトが山ほどあるのでそちらを参考にしてもらったほうがいいです。)