
ミニPCで作った自作ファイルサーバー「NAMAS」にVPNサーバーをインストールして、外出先からもファイルサーバー内のファイルにアクセスできる環境を整えました。
数あるVPNサービスの中から、今回は無料で使えるうえに、国産サービスゆえインターフェースも日本語に対応しているSoftEtherを選択しました。SoftEtherはある程度「わかっている」人向けのツールといった感じで、最初は取っつきづらかったのですが、結果的にこのツールには僕の環境に適した機能が搭載されていたので、選んで正解でした。
今回の記事では主に、SoftEther VPNサーバーの構築と、スマホやLinuxで使用可能な各種VPNクライアントによるVPNサーバーへのアクセス方法を解説しています。さらに、その過程で発生した「賃貸物件なのでポート開放ができない」「ファイルサーバーへのVPN接続に成功したのに、SMB共有フォルダにアクセスできない」といった問題への対処方法も解説しています。
- 前回のおさらい
- SoftEther VPNサーバー初期設定
- SoftEther VPNサーバー仮想HUB設定
- VPNクライアントの設定
- 外部からファイルサーバーにアクセスするためのひと手間
- ファイルへのアクセス
- あとがき
前回のおさらい
スマホのストレージを埋める大量のファイル(主に写真)の整理と、デバイス間でのファイル(主に写真)の共有のために、ジャンクのミニPCにUbuntuをインストールし、疑似的なファイルサーバーに仕上げました。UbuntuにポータブルSSDをマウントし、その中に作成したディレクトリをSambaでSMB共有フォルダに設定することで、同一ネットワーク内の別端末からアクセス可能となります。
ただ、スマホの画像を全部ファイルサーバーに仕舞ったら、いざ出先で、昔撮った写真が必要な時(主にSNS投稿時ですが)にアクセスできないという問題があります。なので、VPN経由でファイルサーバーにアクセスし、いつでも必要な写真を取得できるようにしたいです。そのためにはファイルサーバー側にVPNサーバーを、普段使いの端末(スマホ、PC、タブレット)側にVPNクライアントを入れる必要があります。
使用端末のOSは以下の通りです。
ファイルサーバー、タブレット:Ubuntu24.04
スマホ:Android14
PC:Windows11 Home
SoftEther VPNサーバー初期設定

まずはファイルサーバー(Ubuntu)に公式サイトからSoftEther VPNサーバーをダウンロードします。今回はLinux版(Intel x64/AMD64)をインストールしました。
インストールまでの手順は「ドキュメント>SoftEther VPN マニュアル>7. VPN Server の導入>7.3 Linuxへのインストールと初期設定」の記載内容に倣えばOKです。リンク先に書かれている手順をかいつまんで箇条書きにすると、以下の通りとなっています。
・ダウンロードしたtar.gzを解凍
・ホームディレクトリに生成されたフォルダ~/vpnserverに入り、makeでコンパイル
・コンパイル完了後、sudo mv ~/vpnserver /usr/local
・/usr/local/vpnserverに入り、chmod 600 *、chmod 700 vpncmd、chmod 700 vpnserver
・vpnserverがLinux起動時にバックグラウンドで起動するようにスタートアップスクリプト(/opt/vpnserver.sh)を作成
・/opt/vpnserver.shをsystemdに登録
SoftEther VPNサーバー仮想HUB設定
前項はSoftEtherVPNサーバーそのものをファイルサーバー起動と同時に自動実行するための設定です。ここからは、起動しているファイルサーバー内に接続設定と仮想HUBを作成し、VPNクライアントからアクセスできる環境を整えていきます。
Linuxから設定しようとすると、コマンド(vpncmd)を叩かなければならないのですが、ここで朗報です。前項の初期設定が終わっていれば、同一ネットワーク上の別PCからファイルサーバーにアクセスし、SoftEtherVPNサーバー接続設定の管理ができます。

なので、ここからの作業はメインPCのWindows11で行います。前述のSoftEther公式サイトより、SoftEtherVPNサーバー管理マネージャをインストールします。Windowsからなら、GUIアプリで操作可能です。

「新しい接続設定」から、接続設定名、ホスト名(ファイルサーバーのローカルIP)を入力します。それ以外は初期設定でOKです。
初回接続のタイミングで、ファイルサーバーの管理者パスワードを設定します。

VPNサーバーに、VPN接続のための仮想HUBを作成します。仮想HUB名と、管理用パスワードを設定します。


そして、VPNクライアントが仮想HUBに接続するためのユーザーを作成します。
今回はパスワード認証でユーザーを作成しました。ユーザー名と、認証用のパスワードを設定します。

ダイナミックDNS設定からホスト名を設定します。ホスト名は初期値だと「vpn〇〇〇〇.softether.net」のような形なので、覚えていられる任意の文字列を設定しましょう。


VPNクライアントからの接続のために、OpenVPN/MS-SSTP設定からMS-SSTPサーバー機能を、VPN Azure設定からVPN Azureを有効にします。

なお、VPNクライアントがVPNサーバーに接続するためには、ここからさらに、VPNサーバーのLANカードを対象にローカルブリッジを作る必要もあるのですが、それについては後述します。
VPNクライアントの設定
Windows

SoftEtherの公式サイトから、クライアントをインストールすればOKです。GUI操作できます。
ホスト名(DDNSホスト名もしくはVPN Azureホスト名)を入力し、対象となるポートを指定の上、ユーザー認証のところに前項で仮想HUBに設定したユーザー名とパスワードを入力すると、VPNサーバーに接続できます。
Android
SoftEther公式サイトには「Androidに標準搭載されているL2TPでVPN接続してちょんまげ(意訳)」と書いてあるのですが、その機能はAndroid12で廃止されています。それを踏まえて「AndroidのL2TP廃止されちゃったから、代わりにOpenVPNで対応してちょ(意訳)」とも書いてあるのですが…。
OpenSSTPクライアントアプリ経由で普通に接続可能です。

ホスト名(DDNSホスト名もしくはVPN Azureホスト名)、仮想HUBに設定したユーザー名、パスワードを入力のうえ、接続を試行します。接続に成功すると、画面右上のステータスバーに鍵マークが表示されます。
Ubuntu
SoftEtherクライアントはLinux版もあるのですが、操作はCUIです。試してみましたが最後まで使いこなすことができなかったので、代わりにGNOMEのSSTPクライアントを使用することにします。そちらはGUI操作が可能です。


network-manager-sstp-gnomeをインストールのうえ、設定>ネットワーク>VPNからSSTPを選択し、接続設定名、ホスト名、仮想HUBのユーザー名、パスワードを入力します。

右上のメニューの「VPN」をクリックするとVPN接続が始まります。VPN接続に成功すると、右上のステータスバーにVPNマークが表示されます。
外部からファイルサーバーにアクセスするためのひと手間
ローカルネットワーク接続時と同様に、VPN接続状態でファイルサーバーのローカルIPアドレスを指定すれば、ファイルサーバー内のSMB共有フォルダにアクセス可能なのですが、そのためにはちょっとしたひと手間が必要です。
VPNサーバーの設定
VPNサーバーを自宅に設置する場合、本来なら、任意のポートをVPN用に開放し、そこを貫くようにVPNクライアントからアクセスする必要があります。通常なら、ルーターのポートフォワーディング設定で、VPNサーバーにアクセスするためのポートを指定し開放すれば良いです。
しかしながら、僕の住んでいる賃貸物件はインターネット回線が備え付けで、ポート開放が有料です。開放のためにも様々な手続きが必要で、煩わしいです。

そのせいで一度はVPNサーバーの導入をあきらめかけていたのですが、ありがたいことに、そういう環境(ファイアウォールなどの関係でポート開放ができない環境)もSoftEther側は想定済みでした。
それこそが前項で設定した「VPN Azure」です。VPN AzureはマイクロソフトのAzureクラウドを経由したVPNです。理屈としては、クライアント側からもサーバー側からもAzureクラウドにアクセスする方向の通信がされるようで、サーバー側からAzureクラウドにアクセスする分にはポート閉鎖やファイアウォールに妨げられない、ということらしいです。
なお、VPN Azureを利用する場合、ホスト名は「vpn〇〇〇〇.softether.net」の「softether」の部分を「vpnazure」に置き換えた「vpn〇〇〇〇.vpnazure.net」、ポートは443/TCPとなります。
SMB共有フォルダにアクセスするための物理的な対策(ローカルブリッジ)
ファイルサーバー自体にVPN接続できたとしても、ファイルサーバーがマウントしているSMB共有フォルダにはアクセスすることができません。
これに関しては、ローカルブリッジを作成すると解決できます。

まずは、物理的にLANカードをもう一つ準備します。USB接続のLANアダプタでOKです。
ファイルサーバーのミニPCにもともとあるLANポートと、USB接続したLANカードのLANポートの両方に、ルーターからのLANケーブルを挿します。


ローカルブリッジは、平たく言うと、VPNクライアントがローカルネットワークに参加するための接続先のようなものです。
片方のLANカードはローカルブリッジ用に、もう片方のLANカードはファイルサーバー自体がネット接続するために使用します。
auto enxf8e43bc9dc2a #USB接続のLANカード
iface enxf8e43bc9dc2a inet static
address 0.0.0.0
片方のLANカードをローカルブリッジ用にするために、/etc/network/interfacesに上記の内容を記入し、IPアドレス0.0.0.0を割り当てます。

SoftEther VPN サーバー管理マネージャのローカルブリッジ設定より、物理的な既存のLANカードとのブリッジ接続を作成します。先ほどIPアドレス0.0.0.0を割り当てたLANカードをブリッジ先として選択します。
なお、物理的にもう一つのLANカードを用意せずとも、TAPデバイスを作成すれば代替できるようなのですが、説明を読んでも最後まで理解することができなかったので、結局USB接続のLANカードを買って対応しました(笑)
ファイルへのアクセス
以上の工程が終了すると、ようやくVPN経由でファイルサーバー内のSMB共有フォルダにアクセス可能になります。
VPN接続すれば、ローカルネットワーク接続時と同様に、ファイルマネージャーからSMB共有フォルダにアクセスできます。


今回、自宅に整えたVPNサーバーの通信速度は決して早くありません。試しに、VPN接続時とローカルネットワーク接続時の双方でスマホの写真をファイルサーバーに移動し、そのスピードを比較してみました。
VPN経由だと早くても300KB/s程度なのですが、これがローカルネットワーク(自宅Wi-Fi)下だと17MB/sと、差は歴然でした。


続いて、スピードテストを試してみました。VPN接続時は10Mbpsなのに対し、自宅Wi-Fi接続時は83Mbps、5G通信時は170Mbpsとなりました。
今回のVPN接続はあくまで「ファイルサーバー上の欲しい画像をスマホに数枚取り込む」程度の用途で使うのがよさそうです。
あとがき
これでどこからでもアクセス可能な、自分専用の大容量ストレージが概ね満足できる形で仕上がりました。そして、これで自宅以外でも、自宅と同じ水準でブログ記事を書けるようになりました。
構想は3ヶ月以上前からしていたのですが、完成までこぎつけられたのはごく最近です。ポート開放と、AndroidスマホへのVPNクライアント導入の2つのステップで詰まっていたんですよね!VPN Azureに、AndroidのVPNクライアント(OpenSSTP)からでもアクセスできた、というのが重要なポイントでした。SoftEther公式サイトの記述がちょっと古かったのが罠でした。
おそらく、もっとしっかりVPNとして使いたいのなら、そういう用途を考慮した太い回線のほうが良いでしょう。


低速のVPN環境で迅速に目的の画像を見つけられるように、ローカルネットワーク下において、Androidスマホのファイルマネージャーであらかじめ画像のサムネを読み込んでおくと楽です。