トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

Win32/SoftEther5/Build

INDEX

その他:5.1.0.9674, 5.2.0.5180, 5.2.0.5180, 5.2.0.5184, 5.2.0.5187。OpenBSD 環境でのビルド・設定 OpenBSD/SoftEtherVPN も参照。


SoftEther VPN を Windows 環境でビルドする。

SoftEther5 自前ビルド

GitHub にあるドキュメント How to build SoftEther VPN for Windows が、2022-04-30 に更新されている。vcpkg が必要な旨が追加され、VS で CMake の設定が記載される CMakeSettings.json も追加された。

ということで、試したのは、GitHub で公開されている、SoftEther VPN 5 で、 Commits on Apr 19, 2024 時点(Ver.5.2.0.5184)。

あと、21年5月くらいに WireGuard の実装が追加された模様。

  必要な環境

  • Visual Studio 2019
    • Community Edition で問題なし。手元にあった Enterprise 版を利用。Ver.19.10.2
    • インストール時に下記を選択
      • C++ によるデスクトップ開発
      • Windows 用 C++ CMake ツール
      • Windows 用 C++ Clang コンパイラ
      • Git for Windws
      • 「言語パック」の「英語」
  • vcpkg
    • https://github.com/microsoft/vcpkg
    • パッケージ ツール。VS2015以降と英語の言語パックが必要
    • これを利用して、必要となるライブラリ zlib, openssl, libsodium を利用できるようにする。
    • 「C:\vcpkg」にインストールするように書かれているが、パスが通っていればよい。あと、古いとエラーになるので、既に入れている場合は、git fetch して更新する。
  • SoftEther VPN 5

※追加された CMakeSettings.json が clang-cl.exe を使うようになっている

環境構築

必要となるのは、VC++, CMake コマンド、git コマンド、vcpkg コマンド および VSの英語言語パック。

  Visual Studio のインストール

Visual Studio のインストーラーを起動して、必要なコンポーネントをインストールする。

  • 選択するコンポーネント
    • ワークロード
      • デスクトップとモバイル にある「C++ によるデスクトップ開発」
    • 個別のコンポーネント
      • コンパイラ、ビルドツール、およびランタイム の「Windows 用 C++ Clang コンパイラ」「Windows 用 C++ CMake ツール」
      • コードツール の「Git for Windws」
    • 言語パック
      • 「英語」

  vcpkg コマンドのインストール

GitHub からリポジトリを取得して、bootstrap と vcpkg integrate install を実行し利用可能な状態にする。

C:\> git clone https://github.com/microsoft/vcpkg
C:\> cd vcpkg
C:\vcpkg> .\bootstrap-vcpkg.bat
C:\vcpkg> .\vcpkg integrate install

この時、VSの英語言語パックがないと下記のようなメッセージが出る。

Please install the English language pack.
No suitable Visual Studio instances were found

また、アップデートしておく。

C:\vcpkg> git pull
C:\vcpkg>.\bootstrap-vcpkg.bat

必要なライブラリは、 CMake で、パッケージ(ビルドのディレクトリ)内に取得される。

ソース取得

  SoftEtherVPN のソース取得

GitHub からリポジトリを取得する

C:\> git clone https://github.com/SoftEtherVPN/SoftEtherVPN/
Cloning into 'SoftEtherVPN'...
remote: Enumerating objects: 27396, done.
remote: Counting objects: 100% (3412/3412), done.
remote: Compressing objects: 100% (425/425), done.
remote: Total 27396 (delta 3159), reused 3022 (delta 2987), pack-reused 23984
Receiving objects: 100% (27396/27396), 528.37 MiB | 11.01 MiB/s, done.

Resolving deltas: 100% (23185/23185), done.
Updating files: 100% (1764/1764), done.

C:\> cd SoftEtherVPN
C:\SoftEtherVPN> git pull
Already up to date.

  サブモジュールの更新

"git submodule update --init --recursive" でサブモジュールの更新を行う

C:\> cd SoftEtherVPN
C:\SoftEtherVPN> git submodule update --init --recursive
Submodule '3rdparty/BLAKE2' (https://github.com/BLAKE2/BLAKE2.git) registered for path '3rdparty/BLAKE2'
Submodule '3rdparty/tinydir' (https://github.com/cxong/tinydir.git) registered for path '3rdparty/tinydir'
Submodule 'src/Mayaqua/3rdparty/cpu_features' (https://github.com/google/cpu_features.git) registered for path 'src/Mayaqua/3rdparty/cpu_features'
Submodule 'src/libhamcore' (https://github.com/SoftEtherVPN/libhamcore.git) registered for path 'src/libhamcore'
Cloning into 'C:/SoftEtherVPN/3rdparty/BLAKE2'...
Cloning into 'C:/SoftEtherVPN/3rdparty/tinydir'...
Cloning into 'C:/SoftEtherVPN/src/Mayaqua/3rdparty/cpu_features'...
Cloning into 'C:/SoftEtherVPN/src/libhamcore'...
Submodule path '3rdparty/BLAKE2': checked out 'b52178a376ca85a8ffe50492263c2a5bc0fa4f46'
Submodule path '3rdparty/tinydir': checked out 'ec6bff2043eaac3ad25423705e63a781762a0dfd'
Submodule path 'src/Mayaqua/3rdparty/cpu_features': checked out '26133d3b620c2c27f31d571efd27371100f891e9'
Submodule path 'src/libhamcore': checked out '2951ae5b61b16c1f4e03ceee88d6db7e1e45362b'

ビルド

  Visual Studio で CMake ターゲットを開く

Visual Studio を起動し、開始するから「コードなしで続行」を選び、空の状態で起動する。起動したら、「ファイル」-「開く」-「CMake」を選択し、SoftEtherVPN フォルダの「CMakeLists.txt」を開く。

CMake ファイルが読まれれば、ビルドターゲットやライブラリのチェックがされ、CMake キャッシュが作成されて、ビルドできるようになる。

構成に「x64-native」などが出てくるので、対象の構成を選択してビルドする。

  Windows Service

出来上がった vpnserver.exe をサービスに登録するために、「vpnserver.exe /install」を実行すると、「サービス系の操作コマンドは Windows 98 / Me では動作しません。」とダイアログがでて何もできない(Windows 10 だし、管理者で実行したコマンドプロンプトで実行している)。

vpnsetup.exe を使って、VPNServer を入れる(サービス登録する)場合は、エラーにならずセットアップ出来る。

NT系OSであることを正しく判定させる

起動時に呼ばれる src/Mayaqua/Microsoft.c の MsService を追っていくと、起動引数から動作モードを決めた後、動作モードがサービス関連のコマンドの時に実行環境が NT であるかを判定して、上記のメッセージを表示している。

この時のOSがNTであるかを 「(ms->IsNt == false)」としているが、この ms の構造体を初期化している MsInit で、IsNt に対して値がセットされていない。

なので、MsInit 内で、「ms->IsNt = IsNt();」を追加して、IsNt に値をセットするようにする。

ちなみに、なぜかこの起動引数の判定のところのみ ms->IsNt を参照しており、他では IsNt() を直接参照している。なので、MsService の方も IsNt() を参照するようにしてもいいとは思う(別で ms->IsNt が参照されたときにはダメだが)。※IsNt() は src/Mayaqua/Mayaqua.c にある。

  エンタープライズ機能

以下のエンタープライズ機能は、製品版 PacketiX VPN では搭載されているが、オープンソース版 SoftEther VPN ではサポートされていない(権利上の問題で機能を意図的に無効にしている)。

  • RADIUS / NT ドメインでのユーザー認証
  • RSA 証明書認証
  • 詳細なパケットログ機能
  • 接続元 IP アクセス制御リスト機能
  • syslog 転送機能

これは、ソースの src/Cedar/Server.c の 10750行付近 SiIsEnterpriseFunctionsRestrictedOnOpenSource 関数のところにもコメントで記載されている。

エンタープライズ機能の無効化の無効

// 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.

ソースのコメントの通り、この制限は元のバイナリとソースに課せられるもので。自己責任で、C言語を理解して取り除くことができる。

SiIsEnterpriseFunctionsRestrictedOnOpenSource 関数で、制限が課せられる地域であるかを判断している。なので、ここでの判定を変更すればエンタープライズ機能が利用できるようになる。

最終更新時間:2025年11月05日 21時34分17秒 指摘や意見などあればSandBoxのBBSへ。