Raspberry Piで作るSoftEther VPNの環境

Raspberry Piで作るSoftEther VPNの環境

動作環境

  • Raspberry Pi 3 B+ (VPNサーバー)
    • Raspbian 9.6
  • SoftEther VPN Server
    • OS :Linux
    • CPU :MIPS Little-Endian 32bit
  • プロキシサーバー未設置
  • フレッツ光ネクスト
  • Buffalo BHR-4GRV(ルーター)
  • Windows 10 64bit(作業PC)
  • iPhone X(VPNクライアント)

使用したソフト

はじめに

今回やりたいことは、外出先(PC、スマホ)から自宅内のパソコンやNAS(ファイルサーバー)に接続できるような環境を作ります。

いろいろな方法がありますが、今回はRaspberry PiにSoftEther VPNをインストールしてVPNサーバーを構築してみます。

Raspberry Pi とは

Raspberry Piは教育を目的としたシングルボードコンピュータのひとつです。
簡単に言うとカードサイズのパソコンです。

価格も本体が5,000円程度で、電源など最低限のものをそろえても10,000円程度で揃えることができます。

SoftEther VPN とは

SoftEther VPNはオープンソースかつ無償(Apache License 2.0 -- 2019.2.6 現在)で利用可能なVPNソフトウェアです。

SoftEther VPNの特徴として、高速かつセキュアでありながら比較的簡単に導入が可能です。Windows、Linux、Mac、Android、iPhone、iPad、Windows Mobileをサポートしています。

構築する環境の概要

今回、構築した環境の概要を簡単にまとめておきます。

手順だけだと設定している内容が理解できず、次に繋がらないので理解できている範囲ですが、図で残しておきます。

SoftEther VPNの構成図

注意事項

本記事で紹介しているIPアドレスは使用する環境に合わせて変更してください。

Raspberry PiにOSをインストールする

OSのインストール手順はこちらを参考にしてください。

SoftEther VPN Serverをインストールする

1.公式サイトからVPN Serverのパッケージをダウンロードします。

2.今回ダウンロードしたパッケージは以下のものです。

3.Tera TermでRaspberry piにSSHで接続します。

ホスト名に「Raspberry PiのIPアドレス」または「ホスト名.local」を設定。
「SSH」を選択して[OK]をクリックします。

Tera TermでRaspberry PiにSSH接続

4.ユーザー名とパスワードを入力してSSH接続します

5.ダウンロードしたファイルをteratermにドラッグ&ドロップします。

6.「SCP」を選択して送信先には”/home/pi/Downloads”を設定し、[OK]をクリックします。

7.ここからは「Tera Term」を使って操作していきます。

以下のコマンドはrootユーザーで実行しています。

一般ユーザーで実行する場合は、必要に応じて"sudo"を付けて実行してください。

Tera Term
// 送信元で指定したディレクトリに移動
# cd /home/pi/Downloads
// コピーしたパッケージを解凍(ダウンロードしたファイルを指定)
# tar xf softether-vpnserver-v4.28-9669-beta-2018.09.11-linux-arm_eabi-32bit.tar.gz
// [vpnserver]というフォルダが出来ているか確認します。
# ls softether-vpnserver-v4.28-9669-beta-2018.09.11-linux-arm_eabi-32bit.tar.gz vpnserver
// 解凍して出来たvpnserverディレクトリに移動
# cd vpnserver
// インストール(コンパイル開始)
# make

何度か質問があるので以下を参考に進めてください。
全て”1”で大丈夫です。

Tera Term
--------------------------------------------------------------------

SoftEther VPN Server (Ver 4.28, Build 9669, ARM EABI) 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"と入力

//---------  省略  ---------

// ライセンス規約を確認しましたか?
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"と入力

// ライセンスに同意しますか?
Did you agree the License Agreement ?

1. Agree
2. Do Not Agree

Please choose one of above number:
1     //---------  "1"と入力

8.コンパイルしたフォルダを移動させます。

Tera Term
// 一つ上のフォルダをカレントにする
# cd ..

// 「vpnserver 」フォルダを「/usr/local」へ移動する 
# mv vpnserver /usr/local

// ダウンロードしたファイルを削除しておきます
# rm softether-vpnserver-v4.28-9669-beta-2018.09.11-linux-arm_eabi-32bit.tar.gz

// 削除できたか確認
# ls

// 何もなければ削除完了

9.実行権限を付与

Tera Term
// 移動したフォルダをカレントに
# cd /usr/local/vpnserver/

// フォルダに権限を設定(600:変更権限, 700:フルコントロール)
# chmod 600 *
# chmod 700 vpncmd vpnserver

10.インストールできたか動作確認

vpncmdのcheckコマンドを使って動作チェックします。

Tera Term
// vpncmdを起動します
# /usr/local/vpnserver/vpncmd

いくつか選択が必要なので以下を参考に進めてください。

Tera Term
vpncmd コマンド - SoftEther VPN コマンドライン管理ユーティリティ
SoftEther VPN コマンドライン管理ユーティリティ (vpncmd コマンド)
Version 4.28 Build 9669   (Japanese)
Compiled 2018/09/11 12:23:27 by yagi at pc33
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>check   //--------- “check”と入力
Check コマンド - SoftEther VPN の動作が可能かどうかチェックする
---------------------------------------------------
SoftEther VPN 動作環境チェックツール

Copyright (c) SoftEther VPN Project.
All Rights Reserved.

この動作環境チェックツールを実行したシステムがテストに合格した場合は、SoftEther VPN ソフトウェアが動作する可能性が高いです。チェックにはしばらく時間がかかる場合があります。そのままお待ちください...

'カーネル系' のチェック中...
              [合格] ○
'メモリ操作系' のチェック中...
              [合格] ○
'ANSI / Unicode 文字列処理系' のチェック中...
              [合格] ○
'ファイルシステム' のチェック中...
              [合格] ○
'スレッド処理システム' のチェック中...
              [合格] ○
'ネットワークシステム' のチェック中...
              [合格] ○

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

コマンドは正常に終了しました。

全て[合格]となっていれば正常にインストールできています。

“[ctrl] + c” でvpn toolを終了できます。

スタートアップに登録してSoftEther VPN Serverを自動起動させる

init.d vs systemd なに?

スタートアップの登録方法でinit.dに起動スクリプトを作成する方法やsystemdで登録している記事があったのでまとめておきます。

  • init.d   ・・・起動スクリプトを格納するディレクトリ(/etc/init.d)
  • SysVinit ・・・Linuxで古くから使われているinitシステム
  • Upstart  ・・・initデーモンの代わりとして用意された起動時にタスク実行する方法 (2006年~)
  • Systemd ・・・Fedora15やCentOS7などで採用されたinitシステム(2010年~)

簡単にまとめると、SysVinit→Upstart→Systemdと改良されていったようです。
もしもの為にSysVinitの機能を残しているけど、デフォルトはSystemdとなっているようです。
Systemdで使用する起動スクリプトは/etc/init.d/ではなく、/etc/systemd/system/に配置します。

Raspbian 9.6では、Systemdが使えるので素直に使用します。

スタートアップに登録する手順

1.systemdで使用する起動スクリプトを作成する

作成する場所(ディレクトリ)
 /etc/systemd/system/
ファイル名(サービスは拡張子を”.service”にする)
 vpnserver.service

viを使ってファイルを作成していきます。

Tera Term
# vi /etc/systemd/system/vpnserver.service
vpnserver.service
[Unit]
Description=SoftEther VPN Server
After=network.target network-online.target

[Service]
User=root
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
Type=forking
RestartSec=3s
WorkingDirectory=/usr/local/vpnserver/
ExecStartPre=/sbin/ip link set dev eth0 promisc on

[Install]
WantedBy=multi-user.target

2.作成した起動スクリプトからVPN Serverの起動を確認

Tera Term
// vpnserverのサービスを起動
# systemctl start vpnserver
// サービスの状況を確認
# systemctl status vpnserver.service

Active: active (running) となっていれば起動して動作してくれています。

[ctrl]+cキーを押してコマンドに戻ります。

3.サービスを有効にし自動起動を確認する

サービスをスタートアップに登録してラズパイを再起動していきます。
ラズパイが起動したらサービスの状態を確認します。

Tera Term
// サービスの自動起動を有効化
# systemctl enable vpnserver.service
// ラズパイを再起動
# reboot
// サービスの状況を確認
# systemctl status vpnserver.service

SoftEther VPN Serverの設定

SoftEther VPN Server Managerを使ってVPN Serverの設定をしていきます。

1.公式サイトのSoftEtherServerと同じぺーじからダウンロードできます。

SoftEther VPN Managerを使ってServer設定 No1

2.インストール不要なので今回はこちらをダウンロードして使用します。

SoftEther VPN Managerを使ってServer設定 No2

3.7zipを使ってダウンロードしたファイルを解凍します。

4.解凍して出来た"vpnsmgr.exe"を起動します。

5.[新しい接続設定]をクリックします。

SoftEther VPN Managerを使ってServer設定 No3

6. 「接続設定名」「ホスト名」を設定して[OK]をクリックします。

SoftEther VPN Manager - 接続先の設定を行う

7.SoftEther VPN Serverに接続する

SoftEther VPN Manager - 接続

8.「パスワード」は未設定で[OK]をクリックします。

9.パスワードを設定して[OK]をクリックします。

SoftEther VPN Manager - 接続用パスワードを設定

10.「リモートアクセス VPNサーバー」にチェックを入れ、[閉じる]をクリックします。

「次へ」をクリックすると簡易設定として最低限設定する項目を順序良く設定していきますが、この方法だと仮想Hubを作成します。

今回は仮想NICとして「tapデバイス」を作成したいので、ここで閉じて手動で設定していきます。

11.[はい]をクリックします。

12.「L2TPサーバー機能を有効にする(L2TP over IPsec)」にチェックを入れ、IPSec事前共有鍵を変更して[OK]をクリック

「IPSec 事前共有鍵」は必ず変更しましょう(9文字以下で設定します)

設定が出来たら[OK]をクリックします。

IPSec/L2TP/EtherIP/L2TPv3サーバー機能の設定

13.[仮想HUBの作成]をクリックします。

仮想HUBを作成

14.「仮想HUB名」「パスワード」を設定して[OK]をクリック

仮想HUBの作成

15.作成した仮想HUBを選択し、[仮想HUBの管理]をクリックします。

16.[ユーザーの管理]をクリックします。

17.[新規作成]をクリックします。

18.「ユーザー名」「パスワード」を入力して[OK]をクリックします。

複数のユーザを管理したりする場合は「本名」「説明」には日本語も入力できるので、設定しておくと管理しやすくなります。

19.確認メッセージが表示されるので[OK]をクリックします。

20.リストに作成したユーザーが追加されます。画面を閉じていき管理画面に戻ります。

21.「ローカルブリッジ」設定をクリックします。

22.仮想NICを作成してVPN Serverとブリッジさせる

  • 仮想HUB:最初に作成した仮想HUBを選択("VPN"を選択)
  • 作成する種類:「新しいtapデバイスとブリッジ接続」を選択
  • 新しいtapデバイス名:任意の名前を設定("softether"とします)

各項目を設定したら「ローカルブリッジを追加」をクリックします。

23.リストに追加された事を確認したら、[閉じる]をクリック

状態も「動作中」なっているので正常に作成できています。

これでVPN Serverの設定は完了です。
次はラズパイのネットワーク設定をしていきます。

あともう一息で設定は完了です。

Raspberry Piのネットワーク構成の設定をする

改めてネットワーク設定の概要について書きます。
設定を紹介する記事は多くありますが、設定方法が異なっていたり言葉だけでなかなか理解できなかったので図にまとめておきます。

SoftEtherで作成した仮想ハブと物理NIC(有線LAN)をブリッジしてしまうと、ラズパイ上で展開しているWebサービスやSambaなどに接続できなくなります。

そこで物理NICとは別に仮想NIC(tapデバイス、名前:softether)を作り、これらをブリッジさせて双方向の通信ができるようにします。

Raspberry Piで作ったSoftEther VPN Serverのネットワーク構成図

1.ブリッジ用のパッケージ(bridge-utiles)をインストール

まずは複数のイーサネットデバイスをブリッジを設定するためのパッケージをインストールします。

Tera Term
# apt install bridge-utils

2.ラズパイのネットワークを設定

viで“/etc/network/interfaces”を編集してネットワークの構成を変更します。
追加した内容のみ記述しています。

Tera Term
# vi /etc/network/interfaces
/etc/network/interfaces
# Ethernet port
auto eth0
iface eth0 inet manual

# Bridge interface
auto br0
iface br0 inet static
 address 192.168.12.2
 netmask 255.255.255.0
 gateway 192.168.12.1

bridge_ports eth0 tap_softether
bridge_maxwait 10

# wifi port
auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

[eth0]は有線LAN、[wlan0]は無線LAN、[br0]がブリッジインターフェイスです。
無線LANはVPNの設定には関係ありませんが、とりあえず設定しています。

ルーターからポートフォワードで接続させる為、[br0]に固定IP:192.168.12.2を設定しておきます。

bridge_portsで有線LAN(eth0)とSoftEtherの仮想NIC(tapデバイス)をブリッジします。
tabデバイスにはSoftEtherで作成した名前の前に”tap_”が必要です。

この状態で、同じネットワーク内であればVPN Clientから192.168.12.2へのVPN接続は可能となります。
次は、外からの接続をする為に必要なルーターの設定を行います。

ルーターにポートフォワードの設定をする

使用しているルーターの種類によって設定の仕方が変わってきますが、 やる内容は一緒なので他の機器を使用している方は、ポートフォワードで調べると設定方法が見つかると思います。

開放するポートと転送先IP
 UDPポート:500, 4500
 転送先 :192.168.12.2(br0のアドレス)
(VPNクライアントを使って接続をする場合は、443の開放も必要になります)

Buffalo製ルーターの設定方法

1.ブラウザからルーターの管理画面にログインします。

2.「ゲーム&アプリ」タブを選択

3.「ポート変換」の設定画面を開きます。

4.「ポート変換の新規追加」に必要な設定を入力し、[新規追加]をクリックします。

  • Internet側IPアドレス:ブロードステーションのInternet側IPアドレス
  • プロコル:TCP/UDP
    • "任意のUDPポート"を選択
    • 任意のTCP/UDPポート:500,4500(それぞれ作成)
  • LAN側IPアドレス:[Raspberry Piの"br0"のIPアドレス]
  • LAN側ポート:500, 4500(それぞれ作成)

iPhone(iOS12)からVPN接続の設定をする

多少、バージョンによってVPNの設定画面の開き方が違うかもしれませんが、設定する内容は変わりませんので、参考にしてみてください。

SoftEther VPN Managerからサーバーの情報をメモ

クライアント側の設定に必要なので、以下の内容をSoftEther VPN Managerからメモしておきます。

  • DDNS(Dynamic Domain Name System、ダイナミックDNS)
  • ユーザー名
  • 事前共有鍵

1.SoftEther VPN Managerを起動

2.DDNSを確認

「ダイナミックDNS 設定」→「割りあてられているダイナミックDNS ホスト名」

3.事前共有鍵を確認

「IPsec / L2TP 設定」→「IPsec 事前共有鍵」

4.ユーザー名を確認

「仮想 HUB の管理」→「ユーザーの管理」

iPhone(iOS)にVPNの設定を行う

1.ホーム画面から「設定」をタップします。

2.「一般」を選択

3.「VPN」を選択

4.「VPN構成を追加」をタップします。

5.各項目を設定し、「完了」をタップ

6. 「VPN構成」の「状況」をタップしてONにします。「接続」となれば成功です。

失敗した場合は、設定を確認してみましょう。
タイピングミスが原因となることが多いです。合っているだろうではなく、間違っていないか確認しましょう

  • Wifiには接続しない(インターネットから接続しましょう)
  • DDNSホスト名が間違っていないか
  • ユーザー名が間違っていないか
  • パスワードが間違っていないか
  • 事前共有鍵が間違っていないか

comment

  1. 【最終章】日本のテレビを半永久的に海外で観る方法 | バンコク雑記 Information of Bangkok 2021/04/03(土) 19:26

    […] Raspberry Piで作るSoftEther VPNの環境。こちらのサイトが参考になります。 […]

  2. Raspberry pi 3 model B+ を VPN サーバにしたい – Code Fix 2021/04/21(水) 10:52

    […] https://chibashi.me/development/softether-vpn-server-201902/ 仕方なく strongswan xl2tpd で VPN […]

Commentsこの記事のコメント

メールアドレスが公開されることはありません。お気軽にコメントどうぞ。

人気記事