Ubuntu(Linux)でSoftEther VPNサーバー構築 詳細メモ

スポンサーリンク

VPN(Virtual Private Network)は、仮想的な通信トンネルを構成したプライベートネットワークのこと。

通信内容を暗号化しつつ、仮想的にネットワークを接続できる技術です。VPNを使って通信の安全性を高めたり、自宅にVPNサーバーを設置することで、外にいるのに家のネットワークにつながることができたりします。

これは結構便利でして、家においてあるファイルサーバー(NAS)に外からアクセスしたりするのに私は活用しています。

宅内にVPNサーバを構築するために、本記事ではLinuxディストリビューションのUbuntuに、国産高機能オープンソースVPNサーバソフト「SoftEther VPN Server」をインストールする流れを自身のメモを兼ねて記載します。

スポンサーリンク

SoftEther VPNとは

SoftEther VPNは、独自のSoftEtherプロトコルを用いたVPN接続に加えて、OpenVPN、MS-SSTP VPN、L2TP/IPSec、などなど、大体のVPN接続ができる最強のVPNソフトです。登 大遊さんという、超天才エンジニアが筑波大学在学中(!)に開発したソフトで、現在筑波大学のプロジェクトの一環として運営され、オープンソースで配布されています。商用版フォークのPacketiX VPNもありますが、機能は殆ど一緒です。

SoftEther VPN公式サイトより引用
SoftEther VPN プロジェクト - SoftEther VPN プロジェクト

Ubuntuの準備

本記事で使用するバージョンはUbuntu Server 20.04.3 LTS (Focal Fossa)です。

イメージのダウンロードはこちら(Ubuntu公式サイト)。
Ubuntu 20.04.3 LTS (Focal Fossa)のアーカイブです。

Index of /20.04.3
CD images for Ubuntu 20.04.3 LTS (Focal Fossa)

私はUbuntu Serverにしました。Ubuntu Serverのインストールなどは省略します。

aptパッケージの更新

最初に、パッケージリポジトリを最新に更新しておきます。

sudo apt update

アップデート可能なパッケージを更新します

sudo apt upgrade

それでは、最強のVPNソフトウェア「Softether VPN」を導入しましょう。

その前に、必要な作業が色々あります。

仮想ネットワーク設定

Linuxにはネットワーク仕様の問題(欠陥)があることが知られています。

Linux オペレーティングシステム内部での制限事項により、VPN 側 (仮想 HUB 側) からローカルブリッジしている LAN カードに割り当てられる IP アドレスに対して通信を行うことはできません。この制限は PacketiX VPN が原因ではなく、Linux の内部構造に原因があります。もし VPN 側 (仮想 HUB 側) から Linux でローカルブリッジに使用しているコンピュータ本体と、何らかの通信を行いたい場合 (たとえば VPN Server / VPN Bridge サービスと HTTP サーバーサービスを両方動作させており、VPN 側からもサーバーサービスにアクセスさせたい場合) は、ローカルブリッジ用の LAN カードを用意して接続し、その LAN カードと既存の LAN カードの両方を物理的に同じセグメントに接続してください

http://www2.softether.jp/jp/vpn3/manual/web/3-6.aspx#vpn_3_6_11

要約すると、

Linux で Softether を使う場合、VPNサーバーとして待ち受けているNICにVPNクライアントから接続することが出来なくなってしまうので、専用の物理NICを用意するか、仮想のNICをかませる必要がある。

ということです。このあたりについては複数のWeb記事で触れられているのでいくつか参考としてリンクを貼ります。

https://www.lsmodena.com/wordpress/?p=15

https://zenn.dev/kumatani/articles/vpn-7-installingsoftethervpn

https://blog.treedown.net/entry/2016/09/10/010000

https://www.gadgets-today.net/?p=5691

つまり、最終的に出来上がる、VPN用の仮想HUBと、実際にLANケーブルが刺さっている物理NIC間のネットワークの経路はこのようになります。カッコ内は私の環境でのデバイス名です。

ざっくりした構成図

[物理NIC(enp4s0)]⇔[仮想ブリッジ(br0)]⇔[仮想TAP(tap_vpn)][仮想HUB(VPN)]

このうち、仮想HUBと、仮想TAPは、SoftEther側で作成します。仮想TAPと仮想ブリッジの接続は、以前は、brctlなどのツールを使う(brctl addif br0 tap_vpn)、という手段を取っていましたが、後述のとおり、Netplanだけで全部賄えるようになったようです。

ブリッジ用のパッケージをインストールしておきます

sudo apt install -y bridge-utils

netplanによるネットワーク構成

sudo su -

で、一旦rootになります。sudoでも問題ないと思います。

以前のUbuntuでは、ネットワークインターフェイスの設定には /etc/network/interfaces に設定を書く方式でしたが、Ubuntu 18.04 以降、Netplanという仕組みが新たに導入され、Ubuntu 20.04以降、 /etc/network/interfaces は使われなくなり、/etc/netplan/ 以下に設定ファイルをyaml形式で書く必要があります。こんな感じのファイルです↓(/etc/netplan/99-config.yaml)

network:
  ethernets:
    enp0s25:
      dhcp4: false
      addresses:
        - 192.168.0.11/24
      gateway4: 192.168.0.1
      nameservers:
        addresses: [192.168.0.1,8.8.8.8]
  version: 2
  renderer: networkd

Netplanについてはこの記事が詳しかったです。

Linuxメモ: Netplan で Ubuntu のネットワーク設定を行う
Netplan とは Netplan は Linux のネットワーク設定を簡潔な YAML ファイルで行う仕組みで、Ubuntu 18.04 以降(正確には 17 以降)で採用されています。 昔の Ubuntu/Debian で使用されてい...

実際のネットワーク管理は、バックエンドで動作する NetworkManager や systemd-networkd といったネットワークデーモンが行うのですが、Netplan は YAML 設定ファイルの内容を適切な形に変換して、これらのネットワークデーモンに渡してくれます。 つまり、バックエンドでどのようなネットワークデーモンが動いているかを意識せずに、統一されたわかりやすい YAML ファイルでネットワーク設定を行うことができます。

https://maku.blog/p/7q3dnx8/

このnetplan設定ファイルは、アルファベット順で読み込まれ、後に読み込まれた設定値が上書きされるようです。

Netplan はすべての /etc/netplan/*.yaml ファイルを読み込みます。 複数のファイルが存在する場合は、ファイル名のアルファベット順に読み込まれ、後に読み込まれたファイルの設定値が優先的に使用されます。 例えば、

  • /etc/netplan/50-cloud-init.yaml
  • /etc/netplan/99-custom.yaml

というファイルがある場合、50-cloud-init.yaml で設定された値は 99-custom.yaml の設定値によって上書きされます。

https://maku.blog/p/7q3dnx8/

ここで引っかかったのですが、あくまで値が「上書きされる」だけであって、設定値自体は残っちゃうんですよね。なので、既存のnetplan設定のyamlファイルは、「00-installer-config.yaml-bak」のように拡張子を変更して、設定値が読み込まれないようにした上で、新たに99-config.yamlを作成しましょう。

作成した/etc/netplan/99-config.yamlを編集します。

vi /etc/netplan/99-config.yaml

私の例を下に記入します。インターフェイス(eno2, enp4s0)の名前や数、IPアドレスなどはご自分の設定にしてください。私の環境の前提は以下です。

  • LANケーブルが刺さっている物理NICは「enp4s0」
  • このサーバのIPアドレスは「192.168.100.10」
  • デフォルトゲートウェイは「192.168.100.1」
  • DNSサーバは「192.168.100.1」と「8.8.8.8」
network:
  version: 2
  renderer: networkd
  ethernets:
    eno2:
      optional: true
    enp4s0:
      optional: true
      dhcp4: false
      dhcp6: false
    tap_vpn:
      dhcp4: false
      dhcp6: false

  bridges:
    br0:
      dhcp4: false
      dhcp6: true
      interfaces:
      - enp4s0
      - tap_vpn
      addresses:
      - 192.168.100.10/24
      routes:
      - to: default
        via: 192.168.100.1
      nameservers:
        addresses:
        - 192.168.100.1
        - 8.8.8.8
        search: []

上記のうち、ポイントになりそうなところをまとめます

  • 「bridges:」の「br0:」の「routes:」の設定は、デフォルトゲートウェイの設定です。以前のバージョンでは「gateway4:」という設定だったものです。ウェブ上のサイトにはgateway4の書き方されているのが多いですが、Ubuntu22から、routesの書き方にしないといけないのでこちらに変更しています。
  • 「ethernets:」の「enp4s0:」は、dhcp4: falseを設定することで、IPアドレスを持たさないようにしています。
  • そのかわり、「bridges:」の「br0:」で、IPアドレスの設定をした上で、「interfaces:」でenp4s0と、tap_vpnの2つのネットワークデバイスとブリッジするようにしています。
  • この段階では「tap_vpn」はまだ存在してません。SoftEther VPNサーバ側の操作で作成します。(後述)

編集後は、以下のコマンドで適用します。設定をミスった場合、最悪ネットワークが切れるので、そうなってもいいように操作手段を確保しておいてください。

sudo netplan apply

いきなり適用するのが怖い場合は、tryオプションというのがあるらしいです。遠隔地のネットワーク設定を変えたりする場合にいいですね。

sudo netplan try --timeout 10

念のためRebootします。(多分しなくてもいい)

shutdown -r now

余談 ブロードキャストストームは怖いね

余談ですが、こういった仮想ネットワークは、コード一行で接続が作れてしまうため、適当にやるのはホントに恐ろしい事態につながります・・・
私は以前、外出先から遠隔でこのあたりの設定をいじっていて、深く考えずにコマンドを打っていたところ、brとtapと仮想HUBで、三角形型のループ構造を作ってしまいました。あ、やば、と思った瞬間、「ブロードキャストストーム」が起きてネットワークが落ち、一切手出し不可能になってしまいました。なんだかわかりませんが、どうやらプロバイダ側からもストームを検知したっぽく、マシンを物理的に止めた後もインターネットが復旧せず、プロバイダ側でも制限がかかっていたみたいです。プロバイダに電話してやっと、制限が解除されたというとても大変な一日を過ごして以来、適当なネットワークコマンド操作は恐怖です。

ファイヤーウォール設定の変更

僕はこの部分でずっと詰まってました。Ubuntuにはiptablesというファイヤーウォールが標準で動作してますが、「br0~br0間の通信」がDROPされていたため、ずっとうまくいってませんでした。FORWARD チェーンのデフォルトポリシーが DROP に設定されているためです。

参考 iptablesの設定確認方法

iptables -L -v -n --line-numbers

で、現在のiptablesの設定を確認できます。
(ちなみに、下記のログでは、docker関連の設定が入ってます)

sudo iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy DROP 946 packets, 163K bytes)
 pkts bytes target     prot opt in     out     source               destination
  946  163K DOCKER-USER  all  --  *      *       0.0.0.0/0            0.0.0.0/0
  946  163K DOCKER-ISOLATION-STAGE-1  all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    0     0 DOCKER     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  docker0 docker0  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain DOCKER (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DOCKER-ISOLATION-STAGE-2  all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0
  946  163K RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      docker0  0.0.0.0/0            0.0.0.0/0
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain DOCKER-USER (1 references)
 pkts bytes target     prot opt in     out     source               destination
  946  163K RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

上記の「Chain FORWARD (policy DROP 946 packets, 163K bytes)」とある部分が問題です。

参考 iptablesがブロックしたトラフィックを確認する

iptablesでトラフィックをブロックした際の詳細を把握するためには、ログを取得する設定を行う必要があります。以下は、iptablesでブロックされたトラフィックをログに記録する方法を示しています。

ログルールを追加:
通常、特定のトラフィックをブロックする前に、そのトラフィックをログに記録するルールを追加します。

iptables -A FORWARD -j LOG --log-prefix "IPTables-Dropped: "

このコマンドは、FORWARDチェーンの最後に新しいルールを追加し、マッチしたトラフィックをシステムのログファイルに記録します。–log-prefixオプションを使用して、ログエントリの先頭に特定のプレフィックスを付けることができます。

ログの場所:
ログは通常、/var/log/kern.log または /var/log/messages に記録されますが、これはシステムの設定に依存します。ログエントリを調べるためのコマンドは以下の通りです:

tail -f /var/log/kern.log | grep "IPTables-Dropped" 

ログレート制限:
大量のトラフィックがマッチする場合、ログファイルが迅速に埋まってしまう可能性があります。そのため、ログの生成頻度を制限するために–limitオプションを使用することが推奨されます。

iptables -A FORWARD -j LOG --limit 3/min --log-prefix "IPTables-Dropped: "

この例では、1分あたり最大3エントリをログに記録します。

br0-br0間通信を許可

そこで、br0~br0間の通信を許可します。

iptables -A FORWARD -i br0 -o br0 -j ACCEPT

雑に全部通したいなら、以下のコマンドで FORWARD チェーンのポリシーを ACCEPT に変更することで可能です(セキュリティ上好ましくないかもしれません)

iptables -P FORWARD ACCEPT

上記はあくまで一時的な設定なので、再起動したら消えてしまいます。そのため何らかの手段をつかって永続化する必要があります。「iptables-persistent」というツールを使うなどが必要らしいですが、systemctlでvpnserverを起動するときに、無理やり上記のルールを加えてしまう形にすることにしました(後述)

参考サイト
https://blog.ymyzk.com/2018/05/raspbian-9-stretch-bridge-interface/
https://qiita.com/manabuishiirb/items/6fb8ff796d8e016f40c6
https://www.feelsogood.life/raspberrypi/raspberry-pi%E3%81%A7vpn%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%EF%BC%88%E3%81%9D%E3%81%AE%EF%BC%91-bridge%E4%BD%9C%E6%88%90%EF%BC%89
http://xn--u9j0md1592aqmt715c.net/raspberry-pi2-vpnserver-part1/
https://maku.blog/p/7q3dnx8/
https://www.lsmodena.com/wordpress/?p=15

SoftEther VPNの導入

SoftEther VPNのダウンロードとコンパイル

まず先に、コンパイル用のパッケージを入れておきます。

apt install -y make gcc

次に、Softether VPNのダウンロードページに移動し、

  • ダウンロードするソフトウェアを選択→SoftEther VPN (Freeware)
  • コンポーネントを選択→SoftEther VPN Server
  • プラットフォームを選択→Linux
  • CPUを選択→Intel x64 / AMD64 (64bit)


の順で選択していき、パッケージをダウンロードします
※CPUは、一般的な”パソコン”ならAMD64ですが、お使いのマシンに合わせてください。ちなみに「ラズベリーパイ」はARMです。

SoftEther ダウンロード センター

ちなみに、執筆当時最新版のリリース日: 2023-06-30 SoftEther VPN Server (Ver 4.42, Build 9798, rtm)のリンクをここに貼っておきます。

https://jp.softether-download.com/files/softether/v4.42-9798-rtm-2023.06.30-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.42-9798-rtm-2023.06.30-linux-x64-64bit.tar.gz

もしくは、リンクURLからwgetで直接ダウンロードしましょう。

ここから、Ubuntu側の操作になります。インストール作業は、sudoで行うのではなく、rootユーザーにて作業したほうがいいらしいです。(作者が推奨しています)

インストール作業は、公式サイトのマニュアルに沿います。

7.3 Linux へのインストールと初期設定 - SoftEther VPN プロジェクト
sudo su -

/rootに移動します。

cd /root

パッケージを直接ダウンロードして、解凍します。

wget https://jp.softether-download.com/files/softether/v4.42-9798-rtm-2023.06.30-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.42-9798-rtm-2023.06.30-linux-x64-64bit.tar.gz

tar xzvf softether-vpnserver-*.tar.gz

ビルドします。

cd vpnserver && make

利用条件に同意するか?といったことを聞かれるので、すべて1で答えていくと、makeが始まります。

Do you want to read the License Agreement for this software ?
1
Did you read and understand the License Agreement ?
1
Did you agree the License Agreement ?
1
~makeが始まる~

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

出来上がったバイナリを/usr/localに移し、パーミッションを設定します。

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

※ここから、Softether公式のマニュアルでは、chkconfigという自動起動システムをインストールし、init.dに initスクリプトを仕込む方法になっていますが、現在では、init.dは古いやり方です。これからの時代は、systemdを使ったサービスとして自動起動させるのが筋です。

参考サイト
https://seasky.blue/weblog/index.php?e=2268
https://qiita.com/t-ken/items/c43865973dc3dd5d047c
https://qiita.com/kumasun/items/6fd9ddafc8ea6278f088
https://cpoint-lab.co.jp/article/201809/5207/
https://rin-ka.net/softether-install/
https://knowhow.hirohiro716.com/?p=922

番外編 フリー版制限・リージョンロック解除(必須性なし)

SoftEther VPN Serverはオープンソースでフリーではあるものの、大人の事情により、一部の機能が制限されています。

The following ‘enterprise functions’ are implemented on SoftEther VPN Server since March 19, 2014. However, these functions are disabled on SoftEther VPN Servers which run in Japan and China.

  • RADIUS / NT Domain user authentication
  • RSA certificate authentication
  • Deep-inspect packet logging
  • Source IP address control list
  • syslog transfer

The SoftEther VPN Project intentionally disables these functions for users in Japan and China. The reason is: Daiyuu Nobori, the chief author of SoftEther VPN, has been liable to observe the existing agreements and restrictions between him and some companies. The agreements have regulated the region-limited restriction to implement and distribute the above enterprise functions on the SoftEther VPN open-source program.

Therefore, the SoftEther VPN Project distributes the binary program and the source code with the “SiIsEnterpriseFunctionsRestrictedOnOpenSource” function. This function identifies whether the SoftEther VPN Server program is running in either Japan or China. If the restricted region is detected, then the above enterprise functions will be disabled.

Please note that the above restriction has been imposed only on the original binaries and source codes from the SoftEther VPN Project. Anyone, except Daiyuu Nobori, who understands and writes the C language program can remove this restriction at his own risk.

【日本語訳】

SoftEther VPN Serverでは、2014年3月19日から以下の「エンタープライズ機能」が実装されました。ただし、日本および中国で動作するSoftEther VPN Serverでは、これらの機能は無効になっています。

  • RADIUS / NTドメインのユーザー認証
  • RSA証明書認証
  • パケットログの詳細な検査
  • 送信元IPアドレス管理リスト
  • syslog転送

SoftEther VPNプロジェクトでは、日本と中国のユーザーに対してこれらの機能を意図的に無効にしています。 その理由は、SoftEther VPNの主作者である登大遊氏が、一部の企業との間で締結されている既存の合意や制限を遵守する責任があるためです。 この契約では、SoftEther VPNオープンソースプログラムで上記のエンタープライズ機能を実装および配布するための地域限定の制限が規定されています。

そこで、SoftEther VPNプロジェクトでは、「SiIsEnterpriseFunctionsRestrictedOnOpenSource」機能を利用したバイナリプログラムとソースコードを配布します。 この機能は、SoftEther VPN Serverプログラムが日本と中国のどちらで実行されているかを識別します。 制限領域が検出された場合、上記のエンタープライズ機能は無効になります。

上記の制限は、SoftEther VPNプロジェクトの元のバイナリおよびソースコードにのみ課されていることに注意してください。 C言語プログラムを理解して作成できる登大遊を除く誰でも、自己の責任でこの制限を解除できます。

https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/blob/master/src/Cedar/Server.c

要するに、制限を加えているが、自分の責任でソースコードを改造するぶんにはなんの問題もありません。(というか、登さん、暗に誘導してます。)というわけでここでは、ソースコード改造する場合の手順をメモします。

ダウンロードセンター、もしくはGitHub上に、ソースコードがありますので、自身がダウンロードしたものと同じバージョンのソースコードをダウンロードしましょう。

SoftEther ダウンロード センター
https://jp.softether-download.com/files/softether/v4.42-9798-rtm-2023.06.30-tree/Source_Code/softether-src-v4.42-9798-rtm.tar.gz
cd /root
wget wget https://jp.softether-download.com/files/softether/v4.42-9798-rtm-2023.06.30-tree/Source_Code/softether-src-v4.42-9798-rtm.tar.gz
tar xzvf softether-src-*.tar.gz
cd v4.42-9798/

src/Cedar/Server.c中の下記コード(10906行目付近)

bool SiIsEnterpriseFunctionsRestrictedOnOpenSource(CEDAR *c)
{
        char region[128];
        bool ret = false;
        // Validate arguments
        if (c == NULL)
        {
                return false;
        }


        SiGetCurrentRegion(c, region, sizeof(region));

        if (StrCmpi(region, "JP") == 0 || StrCmpi(region, "CN") == 0)
        {
                ret = true;
        }

        return ret;
}

が、地域を判定している部分です。ret = true;になっている部分を常にfalseにすればいいので、

bool SiIsEnterpriseFunctionsRestrictedOnOpenSource(CEDAR *c)
{
        char region[128];
        bool ret = false;
        // Validate arguments
        if (c == NULL)
        {
                return false;
        }


        SiGetCurrentRegion(c, region, sizeof(region));

        //if (StrCmpi(region, "JP") == 0 || StrCmpi(region, "CN") == 0)
        //{
        //      ret = true;
        //}

        return ret;
}

このように判定部分をコメントアウトします。

次に、ビルドに必要なパッケージのインストールをします。

apt install build-essential
apt install libreadline-dev libssl-dev libncurses-dev libz-dev

ビルドします

./configure
make

機能制限版と差し替えを行います。参考になった記事によると、バイナリをそのまま差し替えても可とのことですが、依存ライブラリも差し替えたほうが気持ちいいとのことで、そっちの方法にしました。

上で記載した機能制限版の手順では、vpnserverディレクトリごと/usr/localに持って行っちゃったので、そこのMakefileをバックアップしたうえで改造します。

cp /usr/local/vpnserver/Makefile /usr/local/vpnserver/Makefile.orig
vi /usr/local/vpnserver/Makefile

コンパイルオプションを修正して、外部ライブラリファイルを参照しないようにします。

# diff -up /usr/local/vpnserver/Makefile.orig /usr/local/vpnserver/Makefile
--- /usr/local/vpnserver/Makefile.orig  2023-08-20 10:13:20.014115431 +0000
+++ /usr/local/vpnserver/Makefile       2023-08-20 10:25:34.835272979 +0000
@@ -7,7 +7,7 @@
 CC=gcc


-OPTIONS=-fPIE -O2 -fsigned-char -pthread -m64 -lm -lrt -lpthread -L./ lib/libssl.a lib/libcrypto.a lib/libiconv.a lib/libcharset.a lib/libedit.a lib/libncurses.a lib/libz.a lib/libintelaes.a -ldl
+OPTIONS=-fPIE -O2 -fsigned-char -pthread -m64 -lm -lrt -lpthread -lssl -lcrypto -lreadline -lncurses -lz -ldl

 default:
        @./.install.sh
@@ -18,14 +18,6 @@ default:

 main:
        @echo "Preparing SoftEther VPN Server..."
-       -ranlib lib/libcharset.a
-       -ranlib lib/libcrypto.a
-       -ranlib lib/libedit.a
-       -ranlib lib/libiconv.a
-       -ranlib lib/libintelaes.a
-       -ranlib lib/libncurses.a
-       -ranlib lib/libssl.a
-       -ranlib lib/libz.a
        -ranlib code/vpnserver.a
        $(CC) code/vpnserver.a $(OPTIONS) -o vpnserver
        -ranlib code/vpncmd.a

aファイルなどを移動します。
もしその前に、すでにVPNサーバーを起動していた場合は止めます。

systemctl stop vpnserver.service
cp -rp tmp/as/vpnserver.a /usr/local/vpnserver/code
cp -rp tmp/as/vpncmd.a /usr/local/vpnserver/code
cp -rp bin/vpncmd/hamcore.se2 /usr/local/vpnserver/
cd /usr/local/vpnserver/
make

無事成功すると、以下のような感じでチェックが完了します。

~~中略~~
VPN Tools>Check
Check command - Check whether SoftEther VPN Operation is Possible
---------------------------------------------------
SoftEther VPN Operation Environment Check Tool

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

If this operation environment check tool is run on a system and that system passes, it is most likely that SoftEther VPN software can operate on that system. This check may take a while. Please wait...

Checking 'Kernel System'...
              Pass
Checking 'Memory Operation System'...
              Pass
Checking 'ANSI / Unicode string processing system'...
              Pass
Checking 'File system'...
              Pass
Checking 'Thread processing system'...
              Pass
Checking 'Network system'...
              Pass

All checks passed. It is most likely that SoftEther VPN Server / Bridge can operate normally on this system.

The command completed successfully.


--------------------------------------------------------------------
The preparation of SoftEther VPN Server is completed !
~~中略~~

すでにsystemdの自動起動をしている場合(後述のステップ)は、起動します。

systemctl start vpnserver.service

参考サイト
https://qiita.com/rimksky/items/ea62876bc154b9bfca76
https://qiita.com/shukichi0278/items/e731286ec212cae31c0e

自動起動設定(systemd)

自動起動用のスタートアップスクリプトを作成します。下記のような「スタートアップスクリプト」を /etc/systemd/system/vpnserver.service という名前で作成してください。

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

[Service]
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
WorkingDirectory=/usr/local/vpnserver/
ExecStartPre=/sbin/iptables -A FORWARD -i br0 -o br0 -j ACCEPT
Type=forking
RestartSec=3s

[Install]
WantedBy=multi-user.target

ここで、「ExecStartPre=/sbin/iptables -A FORWARD -i br0 -o br0 -j ACCEPT」を加えています。ファイヤーウォール設定の項で述べましたが、br0-br0間通信を許可しないといけないため、このコマンドを起動前に実行するようにしています。少々強引なので、ちゃんとiptablesの永続化ツールなどでなんとかしたほうがいいとは思います。

その後、 /etc/systemd/system/vpnserver.service のパーミッションを変更します。

chmod 755 /etc/systemd/system/vpnserver.service

作成したサービスを読み込みます。

systemctl daemon-reload

最後に、上記のスタートアップスクリプトが Linux カーネル起動時に、自動的にバックグラウンドで起動するようにします。

systemctl enable vpnserver.service

VPNサーバを起動します

systemctl start vpnserver.service

これでデーモンとしてvpnserverが起動することになります。

デーモンの状況を見るには

systemctl status vpnserver.service

のコマンドを入力すればOKです。

3.2 動作モード - SoftEther VPN プロジェクト

初期設定

次に、vpncmdを使って初期設定をします。Windows版のGUIソフトもあるので、日常的にはそっちを使ったほうがわかりやすくて良いです。

SoftEther ダウンロード センター

上記ページから、「SoftEther VPN Server Manager for Windows」をダウンロードしましょう。

今回は、初期設定だけ、CUIのvpncmdを使うことにしましょう。vpncmdの操作は難しいので、困ったらマニュアルを観ましょう

6. コマンドライン管理ユーティリティマニュアル - SoftEther VPN プロジェクト
./vpncmd

1 - 3 を選択:1
接続先のホスト名または IP アドレス:(何も入力せずEnter)
接続先の仮想 HUB 名を入力:(何も入力せずEnter)
VPN Server>

VPN Server> のプロンプトが出たら、コマンド入力ができるようになります。「help」を入力すると、コマンド一覧を見ることができます。

VPN Server には、初期状態で “DEFAULT” という名前の「仮想 HUB」が 1 つだけ登録されています。この “DEFAULT” という名前の仮想 HUB を、そのまま使用することもできます。また、この仮想 HUB を削除して別の名前の仮想 HUB を作成し、それを使用することもできます。

とのことですが、新たに仮想HUB「VPN」を作成します。

VPN Server>HubCreate
作成する仮想 HUB の名前: VPN(何でも良いです)
パスワード: (何も入力せずEnter)
確認入力  : (何も入力せずEnter)

次に、仮想TAP「tap_vpn」を作成し、仮想HUB「VPN」とローカルブリッジさせる設定を行います。

3.6 ローカルブリッジ - SoftEther VPN プロジェクト
VPN Server>BridgeCreate VPN /DEVICE:vpn /TAP:yes
(「VPN」は先程作成した仮想HUBの名前、DEVICEの「vpn」は、仮想TAPの名前です)

※上記では、「DEVICE:vpn」としていますが、こうすることで、「tap_vpn」が作成されます。「DEVICE:tap_vpn」としてしまうと、「tap_tap_vpn」というTAP名になってしまいます。

デフォルトの仮想HUB DEFAULTを削除します。

VPN Server>HubDelete DEFAULT

vpncmdはCtrl+Cで終了させてください。

さて!VPNサーバーの準備ができました。とりあえずUbuntuを再起動しましょう。

shutdown -r now

参考サイト
techblog.clara.jp/2016/04/raspberry-pi-3-model-b_install_and_ssh_connect/
usicolog.nomaki.jp/engineering/raspberryPi/raspberryPi_SSH.html
qiita.com/Cinosura/items/6ab435331ea2b3671a1d
xn--u9j0md1592aqmt715c.net/raspberry-pi2-vpnserver-part1/
www.majishini.net/wp/?p=833
usicolog.nomaki.jp/engineering/raspberryPi/raspberryPi3.htmlhttps://peraichi.com/landing_pages/view/xo6jf
https://blog.ymyzk.com/2018/05/raspbian-9-stretch-bridge-interface/
http://workspacememory.hatenablog.com/entry/2017/11/14/221909
http://nibral.github.io/posts/2016-04-11-vpnserver_on_raspi2/

どういう構成になっているか

上記までで、VPNサーバを作るまでに必要な設定は終わりました。

[仮想HUB(VPN)]⇔[仮想TAP(tap_vpn)]⇔[仮想ブリッジ(br0)]⇔[物理NIC(enp4s0)]

上記のようなネットワーク構成になっているはずです。

SoftEther VPN の設定(Windowsから)

Windowsから管理する

今後はWindowsから管理マネージャーを通して管理することになります。

SoftEther ダウンロード センター

Softether VPNのダウンロードページに移動し、
ダウンロードするソフトウェアを選択→SoftEther VPN (Freeware)
コンポーネントを選択→SoftEther VPN Server Manager for Windows
プラットフォームを選択→Windows
CPUを選択→Intel (x86 and x64)
のようにして管理マネージャをダウンロードして、起動してください。
最新のURLリンクを張っておきます。

Bad Request

「SoftEther VPN サーバー管理マネージャ(管理ツールのみ)を選択して、管理ツールをインストールします。

インストールが終われば、管理ツールを起動し、「新しい接続設定」からVPNサーバへの接続設定(IPアドレス)を作成し、「接続」をクリックしてください。

管理者パスワードを変更させられるので、適切に設定します。

あとは、お好きなようにVPN設定をしましょう!

コメント

タイトルとURLをコピーしました