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へ。