Raspberry pi4 をファイルサーバーと VPN サーバーにしてみた備忘録と雑感です.
いつもの通りまずは結論からですが,
転送速度がほどほどで良いのなら十分実用的だと思います.
もちろん Synology とか Qnap とかの方が手軽ですし,安定性も高いと思います.しかし,柔軟性とメモリの量は Raspberry pi の方が上なので,オモチャとして面白いのはこっちだと思います.
ファイルサーバー(OpenMediaVault)の導入
Raspberry pi OS のインストールについては色々なサイトで紹介されていますので省略します.
まず,ファイルサーバーとして使うべく,OpenMediaVault ver.5 を導入しました.元サイトは以下のとおりです.
実際の導入手順は以下の通り.
$ wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash
かなり時間がかかります.また,Raspberry pi OS を固定アドレスにしていた場合も OMV5 を導入すると IP アドレスの取得が DHCP に変更されてしまうことに注意が必要です.
DHCP Server のリース情報などを参照して,OMV5 を導入した Raspberry pi のアドレスを調べ,WEB Interface にアクセスしその他のファイルサーバーとしての設定を行いました.なお,WEB Interface の初期 ID とパスワードは,
- admin
- openmediavault
です.
VPN Server (Softether VPN Server) の設定
今回は GitHub に公開されている安定版のソースコードから導入しました.
導入方法の詳細は以下のとおりです.
$ sudo apt install git libssl-dev libreadline-dev -y $ cd /usr/local/src $ sudo git clone https://github.com/SoftEtherVPN/SoftEtherVPN_Stable $ cd SoftEtherVPN_Stable/ $ sudo ./configure $ vi sudo Makefile .... INSTALL_BINDIR=/usr/local/bin/ INSTALL_VPNSERVER_DIR=/usr/local/vpn/vpnserver/ INSTALL_VPNBRIDGE_DIR=/usr/local/vpn/vpnbridge/ INSTALL_VPNCLIENT_DIR=/usr/local/vpn/vpnclient/ INSTALL_VPNCMD_DIR=/usr/local/vpn/vpncmd/ .... $ sudo make $ sudo make install $ sudo vpnserver start $ sudo vpnserver stop
自動起動の設定については以下のとおりです.
$ 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 Server # Description: Start vpnserver daemon SoftEther VPN Server ### END INIT INFO DAEMON=/usr/local/vpn/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 Server" "vpnserver" $DAEMON start >/dev/null 2>&1 touch $LOCK log_end_msg 0 sleep 3 tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'` /sbin/brctl addif br0 tap_se0 ;; 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 tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'` /sbin/brctl addif br0 tap_se0 ;; 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 $ sudo chmod +x /etc/init.d/vpnserver $ sudo update-rc.d vpnserver defaults $ sudo systemctl daemon-reload $ sudo vpnserver stop $ sudo service vpnserver start
ブリッジの利用と固定アドレス化
まず,OMV5 をインストールした Raspberry pi OS の場合も,
$ sudo apt install bridge-utils
の様に bridge-utils パッケージをインストールしておく必要があります.
Softether VPN Server でローカルブリッジをする場合,tap デバイスに対してこれを行い,物理 Ethernet デバイスをブリッジさせないと,VPN クライアント側から Raspberry pi が見えなくなってしまいます.今回,Raspberry pi をファイルサーバーとして使いたいので,これはすごく困る.
もちろん,ローカルブリッジさせる物理 LAN カードとしてローカルブリッジ専用のものを用意するという手もありますが,Raspberry pi で作る簡易的なファイル&VPN Serverなのにわざわざ(USB接続の)新しい物理LANカードを追加するというのも消費電力的にもちょっと無理がある.
しかし,今回は OMV5 をインストールしています.そして,OMV5 の場合,LAN の設定等も含めて WEB インターフェースから行います.従って,OMV5 の設定とケンカにならないように Softether VPN Server をローカルブリッジした tap デバイスと物理 Ethernet デバイスをブリッジさせないといけません.これは可能ではあるのですが,少しやり方に戸惑ってしまいました.というのも,OMV5 は標準でブリッジインターフェースの作成をサポートしているのですが,これがかなり分かり難かったからです.
OMV5 の場合,WEBインターフェースを「ネットワーク → インターフェース → 追加」の順に辿ることで「追加」から各種のネットワークインターフェースを追加できます.そして,この追加できるインターフェースとして,ブリッジデバイスも用意されているのですが,実際にブリッジデバイスを追加しようとしても,以下の様にインターフェースの部分に何もデバイスが表示されません.そしてインターフェースを追加しないとブリッジデバイスを追加することができません.
これは,OMV5 の設定画面には,既に利用されている物理 Ethernet デバイス(eth0)が一覧に表示されないようになっているからです(実際にこの WEB 画面はこの物理 Ethernet デバイス経由で表示されている).
しかし,今回の場合は,この使用済みの eth0 デバイスを使いたい訳です.と言うことで,どうしたものかとかなり困惑したのですが,これは,結果的に,
素直に eth0 デバイスを OMV5 の設定画面で削除し,ブリッジインターフェースを eth0 を選択して作成
することで可能でした.また,このようにして作成したブリッジデバイスの名前はどうも br0 となる様です.
OMV5 の場合,ネットワークの設定は,WEB インターフェース画面で設定した直後に有効になるのではなく,どうも「ネットワーク」以外の設定項目部分を選択したときに実際に有効になるようです.つまり,eth0 デバイスで削除しても実際には設定は有効になりませんので,引き続きブリッジインターフェースの設定を行うことができると言うことの様です.
ブリッジインターフェース(br0)に対する固定アドレスの設定ですが,これは以下の通り,ブリッジインターフェース作成画面にアドレスを設定できる部分が用意されていますので,この部分に必要な設定を行えば良いだけです.
なお,Softether VPN Server で作る tap デバイス(tap_se0)を br0 とブリッジする必要がありますが,これは vpnserver の自動起動スクリプト内で brctl コマンドを用いて行っています.この部分については,前節の自動起動スクリプトの部分をご参照ください.
その他細かな設定について
VPN Server として使いますので,ネットワーク系の監視コマンドである iftop と bmon を以下の通りインストールしました.
$ sudo apt install iftop bmon -y
また,無線LANと Bluetooth については使いませんので,消費電力の削減のため,これらは以下の通り設定し,無効化しました.
$ sudo vi /boot/config.txt #turn wifi and bluetooth off dtoverlay=disable-wifi dtoverlay=disable-bt
いろいろなところで,pi3-disable-wifi, pi3-disable-bt を off と設定するとの記述がありましたが,これらは後方互換性の為の alias として残されているものの様です.この辺りについては,/boot/overlays/README に詳しい説明が載せられています.
サーバーとしての利用ですので,HDMI 出力も必要がありません.若干ですが消費電力の削減ができるようなので,これも無効化しました.
$ sudo vi /etc/rc.local .... # HDMI OFF tvservice --off ....
また,冒頭の写真を見ていただけると分かりますが,正直LEDが眩しすぎます.これをなんとかするために /boot/config.txt に以下の設定を追加しました.
$ sudo vi /etc/rc.local .... # LED OFF echo none | tee /sys/class/leds/led0/trigger echo none | tee /sys/class/leds/led1/trigger echo 0 | tee /sys/class/leds/led1/brightness
使用ハードディスク・速度・負荷・メモリ消費について
ファイルサーバーですので,microSD ではなくもちろん大容量の USB 接続の HDD を保存領域として設定しました.実際に使用したのは,SEAGATE の SSHD HDD ST2000LX001 とELUTENG USB Type-C 2.5 インチケースです.
接続は,USB3.0 で,特に補助電源等用意せず,Raspberry pi から直接電源供給する形としており,当初は,電力供給不足等心配しましたが,いまのところ全く問題なく動いています.ただし,さすがに同じ SSHD HDD を2台 USB3.0 ポートにつなぐとおそらく電力不足のためだと思いますが,起動途中でカタンと言って電源が落ちます.HDD の場合(もちろん 2.5inch)本体からの電源供給だけで使えるのは1台までと考えた方が良さそうです.
また,もちろん Raspberry pi に電源供給するアダプターによってもこの辺りは違ってくると思います.私の場合は UGREEN USB Type-C 30W Wall Charger を利用しています.
ファイルの書き込み速度ですが,大体 45-50MB/s 程度です.書き込み中に CPU の負荷を見るとほぼ 100% 使い切っています(4コアのうちの一つ)ので HDD の転送速度限界ギリギリまでの速度が出るという訳ではなさそうです(もちろんファイルのフォーマット等も関係すると思います).
VPN についても同様で大体 20Mb/s 程度で CPU の負荷がほぼ 100% に張り付きます(4コアのうちの一つ).このあたりも通信の暗号化強度をどの程度にするのかによって違ってくると思います.
逆にメモリについては相当に余裕があります.実際,ファイルサーバーと VPN だけだと,400MByte 程度しかメモリは使用されていません.ファイルサーバーと VPN だけなら,Raspberry pi4 の最もメモリ搭載量の少ない 2GByte のモデルでも十分すぎると思います.
しかし,上記程度の速度が出れば個人で使うファイルサーバー&VPN サーバーとしてならそれほど困ることはないと思いますし,これまでほぼ1ヶ月間運用して特にトラブルもありませんので,最初に書いた通り,個人的に使うレベルであれば十分実用的だとは思います.
以上!