【ESXi】自分だけのミュージックサーバーを作ろう!【samba+VPN】

2022年10月19日

アザラシです
自分は googlePlayMusic がすごい好きで、かなり使っていましたが、
残念な事にサービスがYoutubeMusicに移行しちゃいました。

YoutubeMusicに移行したときは ふーん ぐらいに思っていて
いざ使ってみるとまぁ~使いづらいこと。流石に頭にきちゃいました。

なので、自分で似たような事が出来ないかな?と思い、調べていたところ
sambaを立てて、それを外部からアクセス出来るようにしちまえばいいじゃねぇか!
と、気づき今回自宅サーバーに samba + VPN と iOS or Android のアプリで実現しました。

今回はそちらをどのようにやったか。こまったポイントなどを含め記事にしたいと思います。
かなり長い記事になるので、腰を据えて読んでいただければと思います。

0.準備

■ 工数
・2人日(1人日8時間としたとき)
 金曜日の夜とかからやろう!

■ サーバー
・ ESXi6.7
 samba用のvmとVPN用のvmを作成しました。OSはCentOS stream
・ NIC × 2
 マザボのNICとUSBNICを使っています。いわゆるLANケーブルさす奴。
 マザーボードにNICが元々2つある場合はUSBNICは必要ありません。
・ RAID 1 構成の外付けRAIDケース
 WD RED × 2

■ ソフトウェア
・ SoftEther
 VPN用のソフトです。サーバーに入れる奴と、SoftEther管理ソフト(windows)を使用。
・ MusicStreamer(有料)
 iOS用のsambaMusicPlayerです
・ AIMP
 Android用のsambaMusicPlayerです

■ 参考リンク
VPNサーバー構築
ESXi上の仮想マシンに SoftEther VPN Server を入れる際の注意点
sambaの環境構築手順
SoftEther公式 トラブルシューティング

1.サーバー側の準備

まずはESXi側の準備です。(あんまり見せたい物ではないのでモザイクなどゴリってます)
VPN用のVMとsambaのVMを作成しました。OSのインストールなどは割愛させていただきます。

sambaのネットワークはこんな感じ。vSwitch0(仮想スイッチ)につながってます。

参考リンク : ESXi上の仮想マシンに SoftEther VPN Server を入れる際の注意点

vpn(VM)用に新しくネットワークを作成して、vpn(仮想スイッチ)を新規作成。そこにvpn(VM)をつなげました。
(同じ名前なのにそれぞれ違う物なのちょっと分かりづらいかもしれませんが)
肝としては、スイッチの設定の 無差別モード偽装転送を許可はい にしておきます。

ESXi側の設定はこれで終わり。

1.1 VPNとsambaのVMを別のNICにする意味

参考リンク : ローカルブリッジ softEther公式

Linux および Solaris オペレーティングシステムでは、仮想 HUB (VPN) の内側からローカルブリッジ先のLANカードから LAN への通信は行うことが出来ますが、ローカルブリッジしている LAN カード自体に対して通信することはできません。これは Linux カーネルの制限事項です。

https://ja.softether.org/4-docs/1-manual/B/11.1

のように、sambaとVPNを同じLANカードで処理させる事が出来ない為、
今回VPNとsamba用にNICを2つ用意した次第です。ちなみにこれに気づくのに大分時間かかりました。
ちなみにESXiではない場合は、こんなことしなくてもすんなり出来るはずです。

1.2 SoftEtherを入れよう

参考リンク : VPNサーバ-構築

まずはSoftEtherを公式サイトからダウンロードしてきます。

ダウンロードするソフトウェアを SoftEther VPN(Freeware)
コンポーネントは SoftEther VPN Server
プラットフォームは今回CentOS上で動かすので Linux
CPU はESXiを動かしているサーバーのCPUの種類を選択する為、 Intel x64 / AMD64 (64bit)

以上の項目は、インストールするサーバに合わせて変更してください。
選択が終わると赤枠部分が表示されるので、クリックしてソフトをダウンロードします。

ダウンロードが終わったら、このファイルをVPNサーバーに転送します。
転送方法はFTPソフトで転送するなり、テラタームにドラッグアンドドロップで
ログインしているユーザーのホームディレクトリにポイするなりしてください。

テラタームにドラッグアンドドロップすると、こんな感じのウィンドウが出て
転送することが出来ます。これ知ったとき はえ~すっごい ってなりました。

無事ホームディレクトリに転送されました。
これをインストールする為にまずは解凍します。

tar zxvf softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-x64-64bit.tar.gz

解凍すると vpnserver というフォルダが出来ました。
こちらの中に cd コマンドで移動し、 make コマンドを実行することで
実行可能ファイルを生成します。

[root@centos vpnserver]# make ← 実行可能ファイル生成
--------------------------------------------------------------------

SoftEther VPN Server (Ver 4.22, Build 9634, Intel x64 / AMD64) for Linux Install Utility
Copyright (c) SoftEther Project at University of Tsukuba, Japan. All Rights Reserved.

--------------------------------------------------------------------


Do you want to read the License Agreement for this software ?

 1. Yes
 2. No

Please choose one of above number:
1 ← 1(Yes)応答
・
・
・
ライセンス事項が表示される
・
・
・
Did you read and understand the License Agreement ?
(If you couldn't read above text, Please read 'ReadMeFirst_License.txt'
 file with any text editor.)

 1. Yes
 2. No

Please choose one of above number:
1 ← 1(Yes)応答

Did you agree the License Agreement ?

1. Agree
2. Do Not Agree

Please choose one of above number:
1 ← 1(Agree)応答

・
・
・
すべてのチェックに合格しました。このシステム上で SoftEther VPN Server / Bridge が正しく動作する可能性が高いと思われます。

[root@centos vpnserver]# cd ← ホームディレクトリへ戻る

[root@centos ~]# mv vpnserver/ /usr/local/ ← SoftEther VPN Server展開先ディレクトリを所定のディレクトリへ移動

[root@centos ~]# cd /usr/local/vpnserver/ ← SoftEther VPN Serverディレクトリへ移動

[root@centos vpnserver]# chmod 600 * ← root以外アクセスできないようにする

[root@centos vpnserver]# chmod 700 vpncmd ← vpncmdに実行権限付加

[root@centos vpnserver]# chmod 700 vpnserver ← vpnserverに実行権限付加

[root@centos vpnserver]# ./vpncmd ← vpncmd実行
vpncmd コマンド - SoftEther VPN コマンドライン管理ユーティリティ
SoftEther VPN コマンドライン管理ユーティリティ (vpncmd コマンド)
Version 4.22 Build 9634   (Japanese)
Compiled 2016/11/27 15:23:56 by yagi at pc30
Copyright (c) SoftEther VPN Project. All Rights Reserved.

vpncmd プログラムを使って以下のことができます。

1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)

1 - 3 を選択: 3 ← 3(VPN Tools コマンドの使用)応答


VPN Tools を起動しました。HELP と入力すると、使用できるコマンド一覧が表示できます。

VPN Tools>check ← check応答

すべてのチェックに合格しました。このシステム上で SoftEther VPN Server / Bridge が正しく動作する可能性が高いと思われます。 ← 確認

VPN Tools>exit ← exit応答

[root@centos vpnserver]# cd ← ホームディレクトリへ戻る

[root@centos ~]# rm -f softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-x64-64bit.tar.gz

えー、参考リンクの物をそのまま持ってきました。謹んでお詫び申し上げます。
(良い物があるんだから使わない手はない。ここのサイトはいろいろ乗ってて便利)

上記の手順通りに進めると、vpnserverが利用できるかのチェックや
実行ファイル生成後にフォルダの位置を /usr/local/ に移動し、権限変更などがすんでいる状態かと思います。
その後は、VPNサーバーを自動起動出来るようにサービスとして登録します。

[root@centos ~]# vi /etc/systemd/system/vpnserver.service ← SoftEther VPN Server起動スクリプト作成
[Unit]
Description=SoftEther VPN Server
After=network.target network-online.target

[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop

[Install]
WantedBy=multi-user.target

[root@centos ~]# systemctl start vpnserver ← SoftEther VPN Server起動
[root@centos ~]# systemctl enable vpnserver ← SoftEther VPN Server自動起動設定

上記のように実行することで、サービス登録と自動起動の設定が出来るかと思います

1.3 SoftEther の設定をしよう

まずは一旦VPNサービスを止めます。

$ sudo systemctl stop vpnserver

SoftEtherは止めていない時に設定ファイルを編集すると、
一部設定が編集しても元に戻ってしまう為、一度停止させる必要があります。

/usr/local/vpnserver/vpn_server.config

vpnserverフォルダ内にある vpn_server.config を編集します。

[root@centos ~]# vi /usr/local/vpnserver/vpn_server.config ← 設定ファイル編集
        declare DDnsClient
        {
                bool Disabled true ← ダイナミックDNS機能無効化(VPNサーバーへ独自ドメイン名(例:centossrv.com)でアクセスする)
        }

        declare ListenerList
        {
                declare Listener0
                {
                        bool DisableDos false
                        bool Enabled false ← ポート443での待ち受けを無効化<strong>※<a href="https://centossrv.com/apache-certbot.shtml" target="_blank" rel="noreferrer noopener">Apache</a>と競合するため</strong>
                        uint Port 443
                }
                declare Listener1
                {
                        bool DisableDos false
                        bool Enabled false ← ポート992での待ち受けを無効化
                        uint Port 992
                }
                declare Listener2
                {
                        bool DisableDos false
                        bool Enabled false ← ポート1194での待ち受けを無効化
                        uint Port 1194
                }
                declare Listener3
                {
                        bool DisableDos false
                        bool Enabled true
                        uint Port 5555
                }
        }

[root@centos ~]# systemctl start vpnserver ← SoftEther VPN Server起動

と言うことで、また参考リンクサイトさんから持ってきました。
上記の設定で、SoftEtherで用意されているDDNSのサービスを利用しない場合は true にします。
自分はそもそもドメインがあるので、 true にしました。

上記の設定にあるように、受付を5555にしました。
firewalldやルーターの設定で、TCPの5555番を開けておきます。
(やり方は調べるなりしてね 参考リンク : firewalldの場合

サーバー側で触るソフトイーサの設定はこれで終わりですが、
使用しているとログファイルがたまっていきます。それを定期的に削除するように
cronに登録します。

[root@centos ~]# vi /etc/cron.daily/vpnserver ← SoftEther VPN Serverログローテーションスクリプト作成
#!/bin/bash
# 30日以前のログを削除
find /usr/local/vpnserver/*_log -name '*.log' -mtime +30 -delete

[root@centos ~]# chmod +x /etc/cron.daily/vpnserver ← SoftEther VPN Serverログローテーションスクリプトへ実行権限付加

ログフォルダは、 packet_log, security_log, server_log の3種類があり
そちらに対応する為、 *_log という指定になっているようです。

1.4 WindowsにSoftEtherの管理ソフトを入れよう

参考リンク : https://centossrv.com/softethervpnserver.shtml

上記の参考リンクとやることは同じですが、こちらでも記載します。
http://www.softether-download.com/ja.aspx?product=softetherc
SoftEtherダウンロードセンターから SoftEther VPN Server Manager for Windows をダウンロード。

サーバー用の物と同様で、幾つかの項目を選択し、出てきたダウンロードリンクの最新の物を
ダウンロード。その後インストールします。
インストールする際は、SoftEther VPN サーバー管理マネージャ(管理ツールのみ)を選択してインストールしてください。

インストール後起動すると、このような画面が出てくるかと思います。
(自分の場合はすでに設定してあるので、接続設定が入っています)
この画面がでたら新しい接続設定を選択し、先ほどSoftEtherをインストールしたサーバーを設定します。

接続設定名 : 任意の名前を入れます。自分はvpn鯖と名前をつけました。
ホスト名 : SoftEtherをインストールしたサーバーのIPアドレスを指定します。同じネットワークではない場合は
ドメインを設定してあるなら、ドメインを指定したりしてね。
ポート番号 : SoftEtherの設定で行ったポート番号を指定します。今回の場合だと5555です。
管理パスワード : 初回は入れません。初回接続をしたときに、パスワードの設定を求められるのでそのときに設定します。

上記の設定を入れたらOKボタンを押し、無事接続されればパスワードの設定を求められるので
設定してください。

無事接続されると管理マネージャーの画面が出ます。
初回はDEFAULTという仮想HUBの名前が入っているかと思いますが、後ほど削除して
新規に追加します。自分は設定済みなのでVPNという物が入っています。

まずは、新規に仮想HUBを作成するので、初期で入っているDEFAULTを選択したの地に、削除をしておいてください。その後、仮想HUBの作成ボタンを押して作成します。

新規作成を押すと、このような画面が出てきたかと思います。
この画面で新しく仮想HUBを作成します。
仮想HUB名 : 任意の名前を入れてください。自分はVPNとしました。
パスワード : VPN接続を行う時に利用するパスワードです。
最大同時セッション数を制限する : 利用人数を制限したい場合はこちらを選択し、設定してください。

以上の設定が終わったら、OKボタンを押して作成を完了します。
作成が完了していれば、サーバー管理マネージャーに仮想HUBが追加されているかと思います。

次に、今回はスマートフォンなどで接続したいので、IPsec/L2TP 設定 を設定して行きます。
画面下部にある IPsec/L2TP 設定 のボタンを押します。

ボタンを押すとこのような画面になりました。
ここではL2TP over IPsecを有効にする設定をしていきます。

L2TPサーバー機能を有効にする(L2TP over IPsec) : 今回の肝なので、こちらを有効にします。
接続時のユーザー名で…接続する仮想HUBの選択 : 先ほど作成した仮想HUBを選択します。
IPsec 事前共有鍵 : L2TP IPsec で接続するときに利用する事前共有鍵です。任意の文字列を入力し、VPN接続するときに利用します。

以上の設定が終わったら、OKボタンを押して設定を終了します。

最後に、サーバー管理マネージャーの画面の下部左側にある ローカルブリッジ設定 を押します。

このような画面が出たかと思います。初回だと特に何も設定がされていないかと思いますが、
ここで新しいローカルブリッジを作成していきます。

仮想HUB : 先ほど作成した仮想HUBを選択します
作成する種類 : 物理的な既存のLANカードとのブリッジ接続
LANカード : VPNサーバーで利用しているLANカードを選択します。

以上を選択したら、ローカルブリッジを追加 を押して、動作中になっている事を確認した後に、
閉じるボタンを押します。

以上でSoftEtherの設定は終わりです。

2.sambaの設定

参考リンク : https://centossrv.com/samba.shtml

ESXiでsamba用のVMを立てている事を前提で話します。
まずは、sambaを利用する為にサーバーに sambaをインストールします。

# yum install samba

インストールが完了したら、samba用に新規ユーザーを作成する場合は useradd で作成してください。
既存のユーザーを使う場合はそのまま次に進みます。
sambaサーバーにアクセス出来るアカウントを登録します。

# pdedit -a ユーザー名

このときにパスワード登録を求められます。このパスワードでsambaにアクセスします。
いったんはこれでOKです。参考リンクの手順ですと、サーバー内にsambaで利用する
ディレクトリを設定していますが、今回自分は接続している外付けHDDにアクセスするので設定しません。
必要な人は、参考リンクを基に設定してください。

2.1 smb.confをいじろう

/etc/samba/に smb.conf があるのでvim等で開きます。

これが設定ファイルです。
global : 共通の設定を入れます
homes : sambaユーザーのホームディレクトリの設定です
azarashi : 任意で設定したセクションです。

globalの設定について説明します
workgroup : windowsでもあるワークグループ名です。他のPCと同一のワークグループ名にするとファイルやプリンターの共有が出来るそうですが、自分は今回していません。任意の文字列が利用出来ます。
security : ユーザー名とパスワードを利用したログインを行いたいので、今回はuserにしました。デフォルト値です
passdb backend : sambaのパスワード管理の形式です。デフォルトのtdbsamで良いかと思います。
printing, printcap name, load printers, cups option : プリンタ共有周りの設定です。自分は利用していないので、この後全部切りました。

任意の追加セクション(azarashi)の説明をします。
sambaで任意のセクションを追加すると、windowsでその名前のネットワークディレクトリが利用出来ます。

こんなのが出ます。これにアクセスすると、セクション内で設定したファイルパスのデータを
windows上で見られるようになります。スマホで音楽を聴く場合は、このような感じで
music というセクションを追加してあげれば、そのディレクトリにアクセスすることで音楽が聴けるようになります。

追加セクションの設定について説明します
comment : ディレクトリの説明欄に表示されるコメントです。どこで見られるのかはよく分かりません。
browseable : 同一ネットワークであれば、ディレクトリの存在が確認出来るかの設定です。Noにしています。
path : 見られるようにしたいファイルパスを指定します。自分は接続している外付けHDDのパスを指定しています。
writable : 書き込みが出来るかの設定です。自分はログインした上でディレクトリの名前が分かっていないと接続出来ないようにしているので、Yesにしています。
valid users : このディレクトリを利用出来るユーザーです。sambaに登録したユーザーで、このユーザーだけを許可したい等のときにご利用ください。
read only : 別に自分用なのでこれは No にしています。

これでsambaの設定は以上です。
次は自動起動などの設定をしていきます。

# systemctl start smb
# systemctl start nmb

上記二つを実行することで、sambaサーバーが利用出来ます。
サーバーが再起動されたときの為に、上記二つを自動起動出来るようにしておきます。

# systemctl enable smb
# systemctl enable nmb

これで自動起動の設定がされました。
では早速、sambaに接続してみましょう。

3. sambaに繋げてみよう

今回このブログで接続方法をお伝えする為用に、azarashiTest という物を用意しました。
この用意した設定にWindowsで接続してみましょう。

windowsのエクスプローラーから、PCを開きます。
開いたところで、右クリックをし、ネットワークの場所を追加するを選択します

先ほどのメニューを選択すると、このような画面が出てくるかと思いますので、次へを押します。

カスタムのネットワークの場所を選択 を押して、次へ

ここでsambaで設定した netbios name を利用します。
\\netbiosName\sambaで設定したセクション名 をアドレスの部分に入力し、次へ。

その後、初めて接続する場合は認証する為にアカウント名とパスワードを求められますので、
アカウント名をsambaのユーザー名、パスワードsamba用に設定したパスワードを入力します。
問題無ければ認証され、次の画面に移ります

問題無く認証されればこのような画面に移り、ディレクトリの名前を決めます。
特に問題無ければ次へを押します。

これで無事sambaで設定したディレクトリをWindows側で利用出来るようになりました!(パチパチパチ
それでは完了ボタンを押して、ディレクトリを見てみましょう。

無事設定されていればこのようにディレクトリが表示されます。
今回の目的としては、ミュージックプレイヤーで利用したいので音楽データを入れていきます。

で、用意した物がこちらになります(3分クッキング)
こんな感じで音楽ファイルを入れました。ファイルの拡張子は大抵再生出来るmp3にしました。
ではいよいよスマートフォンでの操作に移ります。

4.iPhoneでの操作

iPhoneでの操作では、設定したVPNへの接続とアプリのインストール及び使い方の説明をします。
まずはVPNを設定するところからやっていきましょう。

4.1 VPNの設定

ホーム画面から設定を開きます。

設定を開いたら、VPNを開きます

VPNの画面を開いたら、VPN構成を追加… をタップします

このような画面がでてくるかと思います。
まずは、VPNのタイプを変更します。

L2TPを指定したら先ほどの画面に戻ります。

必要な情報を入力していきます。
説明 : 任意のVPN接続名を入れます
サーバ : 接続先のドメインなどを入れます。
アカウント : SoftEtherで設定したユーザー名を入力します
パスワード : SoftEtherで設定したユーザーに紐付くパスワードを入力します
シークレット : SoftEtherで設定したL2TPの事前共有鍵を入力します

以上を設定したら完了を押します。

接続先一覧画面に戻ったら、先ほど作成したVPNの接続先をタップし、状況の右にあるスイッチボタンを
タップします。無事接続されれば、上記の画面のように接続済みになります。

4.2 iOSアプリ MusicStreamer をインストールしよう

こちらのアプリをインストールします。有料アプリで、価格は610円ですので
購入するのに躊躇する場合は別のアプリの利用をお勧めします

起動するとこんな感じ。この画面ですと一覧にアルバム画像が表示されていますが
デフォルトでは何も表示されない状態になっているかとおもいます
この画面の時に、右上の歯車マークを押します。

メニューが出てきましたら、MusicSourceをタップしてください

このような画面が出ましたら、Add Music Source をタップします。

このような画面に飛ぶと思います。
sambaの設定でbrowseable をtrueにしている場合はscan Networkの部分をタップするだけで
検知されるかと思います。

先ほどのアイコンをタップするとこのような画面になります。
今回はマニュアルセットアップをするので、Manual Setupのアイコンをタップします。

このような画面が出てくると思います。
Display Nameの部分に任意の名前を入れて、Network Address にsambaサーバーのプライベートIPアドレスを指定します。(例 : 192.xxx.xxx.xxx)

IPアドレスが問題無ければこのような画面に移り、UserNameとPasswordを求められるので
samba用に作成したUserNameとPasswordを入力してください。
問題無ければ音楽データが読み込まれ、先ほどのアルバム一覧の用に確認出来るかと思います。

ちなみに、音楽データのタイトルや作曲者のタグの部分はShift-JISだと文字化けするので、
ID3Uni等で、Unicodeに変換しておくのをオススメします。

5. Androidでの操作

Androidでの操作では、設定したVPNへの接続とアプリのインストール及び使い方の説明をします。
まずはVPNを設定するところからやっていきましょう。

5.1 VPNの設定

Androidの設定->VPNを探してタップするとだいたいこんな感じの画面が出ると思いますので
VPNの接続先を追加します。

iPhoneの時同様に、接続タイプを設定します。
今回使用するのはL2TP/IPSec PSK です。
設定する内容は代替iPhoneの時と同じなのでiPhoneの設定部分を参考に入力してください

5.2 AIMPの設定

GooglePlayStoreからAIMPをインストールします。

初回起動の場合はこのような画面ではなく設定画面のような画面が出ると思います。
左上のメニューボタンを押します

このようなメニューエリアが出るので、下の方にあるプラスボタンを押します。
押すとマイリスト作成をしますので、追加したいアルバムの名前を入れたり等しておきます。

追加するとこのような画面に行くので、左下のプラスボタンを押すと
追加したいソースを選択するように促されるかと思いますので、
入力します。

今回はsambaを追加するので、Windows 共有フォルダを選択します。

このような画面が出てくるので、sambaにログインする為の情報を入力して
接続します。
その後、接続が出来たらプレイリストに追加したいファイルを追加してください。

6.終わりに

解説めっちゃ疲れた・・・
今回詳細に解説したつもりではありますが、やってみたらうまくいかないなという部分が出てくるかもしれませんので、そのときはエラーを調べて見たりしてください。

後は、iOS用のアプリとAndroid用のアプリの使い勝手がどちらも100%良いとは言えないので
良いアプリがあったら教えてください!
(最悪作れるなら作ってみたい)